summaryrefslogtreecommitdiffstats
path: root/documentation
diff options
context:
space:
mode:
authorErik Lumme <erik@vaadin.com>2017-09-12 10:13:42 +0300
committerErik Lumme <erik@vaadin.com>2017-09-12 10:13:42 +0300
commitae3c4be67668c2fb69f1746d29fad97fbd35903e (patch)
treef7848b831ca97ed9d53fb8d785e26bd93c9ee329 /documentation
parente16ec959bf6f3c1d76cc7d3ba7a05fb9a0537aa6 (diff)
downloadvaadin-framework-ae3c4be67668c2fb69f1746d29fad97fbd35903e.tar.gz
vaadin-framework-ae3c4be67668c2fb69f1746d29fad97fbd35903e.zip
Migrate VaadinOnGrailsDatabaseAccess
Diffstat (limited to 'documentation')
-rw-r--r--documentation/articles/VaadinOnGrailsDatabaseAccess.asciidoc153
-rw-r--r--documentation/articles/contents.asciidoc1
2 files changed, 154 insertions, 0 deletions
diff --git a/documentation/articles/VaadinOnGrailsDatabaseAccess.asciidoc b/documentation/articles/VaadinOnGrailsDatabaseAccess.asciidoc
new file mode 100644
index 0000000000..db3c5ca9bb
--- /dev/null
+++ b/documentation/articles/VaadinOnGrailsDatabaseAccess.asciidoc
@@ -0,0 +1,153 @@
+[[vaadin-on-grails-database-access]]
+Vaadin on grails - Database access
+----------------------------------
+
+_Versions used in this tutorial: Grails 2.3.x, Vaadin 7.1.x. News and
+updates about Vaadin on Grails are available on
+https://twitter.com/VaadinOnGrails[VaadinOnGrails]. This is continuation
+of link:VaadinOnGrailsCreateProjectInIntelliJIDEA.asciidoc[Vaadin
+on Grails - Create project in IntelliJ IDEA]_
+
+We are going to create persistence a domain class that is automatically
+mapped into a database through Hibernate. GORM from Grails framework
+will do most of the automatic stuff there.
+
+[[create-persistent-layer]]
+Create persistent layer
++++++++++++++++++++++++
+
+1. Right click on the domain folder and select Create Domain
+image:http://vaadinongrails.com/img/idea-new-domain.png[IDEA create domain class]
+2. Fill in the full class name. If we put there only `Author` then the
+package name will be automatically added based on the name of the
+project.
+image:http://vaadinongrails.com/img/idea-domain-name.png[IDEA domain name]
+3. Add some fields to the Author domain class. Without fields, it is
+not considered as a domain object and therefore it is not mapped to the
+database. Each field represents a database table column.
+
+....
+package com.app
+
+class Author {
+ String name
+ static constraints = {}
+}
+....
+
+[[service-layer]]
+Service layer
++++++++++++++
+
+1. Create a new service in the same way as the domain object.
+image:http://vaadinongrails.com/img/idea-service-new.png[IDEA new Grails Service]
+2. Create `getAuthors` method that returns list of authors from the
+database.
+
+....
+package com.app
+import grails.transaction.Transactional
+
+@Transactional
+class AuthorService {
+ List<Author> getAuthors() {
+ return Author.list()
+ }
+}
+....
+
+[[data-for-development-in-application-bootstrap]]
+Data for development in application bootstrap
++++++++++++++++++++++++++++++++++++++++++++++
+
+When the application starts, we want to create few authors in the
+database. So we get some initial data for easy development. Open
+`BootStrap.groovy` and save few authors into the database.
+
+The code will be executed only in development environment. That means no
+database records will be created when running application on test,
+production or any other environment.
+
+....
+import com.app.Author
+import grails.util.Environment
+
+class BootStrap {
+
+ def init = {
+ servletContext -> if (Environment.current ==
+ Environment.DEVELOPMENT) {
+ Author raymond = new Author(name: 'Raymond')
+ raymond.save(failOnError: true)
+
+ Author pug = new Author(name: 'Pug')
+ pug.save(failOnError: true)
+ }
+ }
+
+ def destroy = { }
+}
+....
+
+[[using-service-in-vaadin-code]]
+Using service in Vaadin code
+++++++++++++++++++++++++++++
+
+Now we are ready to get bean of `AuthorService` in Vaadin code and get
+the list of authors from the database. Open `MyUI.groovy` and put there
+the following code.
+
+....
+package app
+
+import com.app.Author
+import com.app.AuthorService
+import com.vaadin.ui.UI
+import com.vaadin.ui.VerticalLayout
+import com.vaadin.server.VaadinRequest
+import com.vaadin.ui.Label
+import com.vaadin.grails.Grails
+
+class MyUI extends UI {
+ @Override
+ protected void init(VaadinRequest request) {
+ VerticalLayout layout = new VerticalLayout()
+ layout.setMargin(true)
+ AuthorService authorService = Grails.get(AuthorService)
+
+ List<Author> authors = authorService.getAuthors()
+
+ for (Author author : authors) {
+ Label label = new Label(author.name)
+ layout.addComponent(label)
+ }
+
+ setContent(layout)
+ }
+}
+....
+
+Run the application and see the results fetched from the database. We
+have created domain object `Author` which is mapped to automatically
+created database table. Then we have created `AuthorService` that we
+have got from Spring application context. We have loaded authors from
+the database and displayed them in Vaadin application as labels.
+image:http://vaadinongrails.com/img/data-from-service.png[Data from service]
+
+[[database-connection]]
+Database connection
++++++++++++++++++++
+
+As we have covered big part of normal work when developing an
+application, created the persistance layer, maybe next questions are
+coming. Where are the data stored? What database is used and how to
+change it?
+
+Grails is using H2 in memory database by default and you can change it
+to any other database that is supported by Hibernate. In order to update
+database connection setup, open `DataSource.groovy`. Just add there the
+proper parameters and add the dependency to, for example, MySql driver
+in `BuildConfig.groovy`.
+image:http://vaadinongrails.com/img/idea-datasource.png[IDEA data source]
+
+You can continue with link:VaadinOnGrailsMultipleUIs.asciidoc[Vaadin on Grails - Multiple UIs]
diff --git a/documentation/articles/contents.asciidoc b/documentation/articles/contents.asciidoc
index 7fb53da2dc..11c965dcee 100644
--- a/documentation/articles/contents.asciidoc
+++ b/documentation/articles/contents.asciidoc
@@ -42,3 +42,4 @@ are great, too.
- link:IntegratingAnExistingGWTWidget.asciidoc[Integrating an existing GWT widget]
- link:IntegrationExperiences.asciidoc[Integration experiences]
- link:VaadinOnGrailsCreateProjectInIntelliJIDEA.asciidoc[Vaadin on grails - Create project in IntelliJ IDEA]
+- link:VaadinOnGrailsDatabaseAccess.asciidoc[Vaadin on grails - Database access]