Table of Contents |
---|
test page for Grails projects
...
...
gdrv//_work/jim-acer/blearn/grails/peblock/grails-app/controllers/peblock/UrlMappings.groovy
Project References
Key Concepts
Grails Training
grails v4x books - authors 4 days
http://docs.grails.org/latest/
grails mvc app using spring services - mode coding
https://www.baeldung.com/grails-mvc-application
https://www.google.com/search?client=firefox-b-1-d&q=grails+version+4+tutorials
Grails and Okta
https://developer.okta.com/blog/2018/04/19/okta-with-grails
Grails CRUD app with Okta
https://developer.okta.com/blog/2018/06/04/okta-with-grails-part2
Grails with Spring Security - default
https://www.slideshare.net/JesusPerezFranco/spring-security-5?from_action=save
Grails download & install
http://grails.org/download.html
Grails Application Forge
Manual Grails install
http://docs.grails.org/latest/guide/gettingStarted.html#downloadingAndInstalling
Set the GRAILS_HOME environment variable to the location where you extracted the zip
On Unix/Linux based systems this is typically a matter of adding something like the following
export GRAILS_HOME=/path/to/grails
to your profile
Then add the bin
directory to your PATH
variable:
On Unix/Linux based systems this can be done by adding
export PATH="$PATH:$GRAILS_HOME/bin"
to your profile
Run version check
- grails version
Create shell script to set Grails version
setGrails41.sh
export GRAILS_HOME=`/Library/Grails/grails-4.1.0.M1`
export PATH=$GRAILS_HOME/bin:$PATH
groovy -version
Grails beta versions
Check for Grails versions released in Github here ( including milestones ) - https://github.com/grails/grails-core/releases
For a given release / milestone - check the Github issues to see what's important that's still open - https://github.com/grails/grails-core/issues
https://github.com/grails/grails-core/releases/tag/v4.1.0.M1
http://docs.grails.org/4.1.0.M1/guide/introduction.html#whatsNew
install from Zip file
ensure GRAILS_HOME, GROOVY_HOME, JAVA_HOME are set
ensure any CLASSPATH and path updates are correct
to validate, run:
grails -version
Grails docs on skwebteam
grails4-update-Slide_Deck_Introducing_Grails_4_Webinar.pdf
grails-181115-tutorial-guestbook-java-web-app-vogella.com-.pdf
gorm-basics-tutorial-relations-maps.pptx
grails-best-practices-web-profile-2016-MarProg_Grails_WP_Web.pdf
grails-web-mvc-tutorial-v4-mongodb-2019-vgood.pdf
grails-plugins.github.io-DB Reverse Engineering Plugin - Reference Documentation.pdf
Grails v4.0 Features
https://objectcomputing.com/products/grails/grails-roadmap
- Groovy 2.5
- GORM 7.0 (Hibernate 5.2 minimum, Java 8 baseline)
- Java 8 Baseline
- Java 11 Support
- Spring 5.1
- Spring Boot 2.1
- Micronaut Integration
Grails JAX-RS plugin documentation ( for Grails v3x )
http://budjb.github.io/grails-jaxrs/3.x/latest/guide/introduction.html
The jaxrs project is a set of Grails plugins that supports the development of RESTful web services based on the Java API for RESTful Web Services (JSR 311: JAX-RS).
It is targeted at developers who want to structure the web service layer of an application in a JSR 311 compatible way but still want to continue to use Grails' powerful features such as GORM, automated XML and JSON marshalling, Grails services, Grails filters and so on. This plugin is an alternative to Grails' built-in mechanism for implementing RESTful web services.
Features
- Makes the JSR 311 (JAX-RS) available to Grails applications for developing RESTful web services.
- New Grails artefact types, Resource and Provider, for JAX-RS classes.
- JAX-RS Resource classes under
grails-app/resources
are auto-detected and can be modified at runtime. - JAX-RS Provider classes under
grails-app/providers
are auto-detected and can be modified at runtime. - Extended Grails command line interface
- Create new resources and unit test templates via
grails create-resource <resource name>
. - Generate ready-to-use resources from domain objects via
grails generate-resources <domain class name>
. - Scaffolding
- Generate RESTful service interfaces for Grails domain objects.
- Content negotiation support for XML and JSON representations.
- Ability to use any Grails feature within JAX-RS resources and providers such as:
- GORM can be used for interacting with persistent domain objects.
- Grails filters for intercepting requests to JAX-RS resources. ( Deprecated )
- Grails services which can be auto-injected by name.
- Entity providers
- Domain object providers that convert between Grails domain objects and XML or JSON representations.
- Support classes for developing custom entity providers.
- Support for content negotiation based on the
Accept
request header. - Easy integration testing of JAX-RS resources and providers.
- Plugin users may choose between Jersey and Restlet as JAX-RS implementations by means of configuration.
- jaxrs applications can be deployed to Google App Engine (GAE).
Tutorial Migrate React Node.js app to Grails backend
https://guides.grails.org/grails-vs-nodejs/guide/index.html
To complete this guide, you will need the following:
Some time on your hands
A decent text editor or IDE
JDK 1.7 or greater installed with
JAVA_HOME
configured appropriately
To get started do the following:
Download and unzip the source
or
Clone the Git repository:
git clone https://github.com/grails-guides/grails-vs-nodejs.git
The Grails guides repositories contain two folders:
initial
Initial project. Often a simple Grails app with some additional code to give you a head-start.complete
A completed example. It is the result of working through the steps presented by the guide and applying those changes to theinitial
folder.
To complete the guide, go to the initial
folder
cd
intograils-guides/grails-vs-nodejs/initial
and follow the instructions in the next sections.
You can go right to the completed example if you cd
into grails-guides/grails-vs-nodejs/complete
The completed sample project for this article can be found at:
https://github.com/grails-guides/grails-vs-nodejs/tree/master/complete
create react profile app
Every Grails project begins with a single create-app
command. For the purposes of following along with this guide, you may choose to install Grails via the official website, or using sdkman (recommended). However, there is no need to install the framework on your machine to create your Grails app - instead, let’s browse to http://start.grails.org and create our application using the Grails Application Forge.
Choose the latest version of Grails (3.3.0 as of the time of writing) and select the react
profile.
...
With the use of application profiles, Grails allows you to build modern web applications. There are profiles to facilitate the construction of REST APIs or Web applications with a Javascript front-end
start client and server apps
Once you’ve downloaded your application, expand it into a directory of your choice, cd
into the project, and run the following two commands (in two separate terminal sessions):
~ ./gradlew server:bootRun //Windows users use "gradlew.bat"
//in a second terminal session
~ ./gradlew client:bootRun
gradle wrapper can eliminate need to install Grails locally
The gradlew
command launches the Gradle "wrapper”, which is provided by the Gradle build tool that is used in all Grails projects since Grails 3.0. The wrapper is a special script that actually download and install the Gradle build tool (if necessary) before running your commands. Gradle will then download all needed dependencies (including Grails) and install them in your project (caching them for future use as well). This is why you don’t need to install Grails on your machine: if your project includes the Gradle wrapper, it will handle that for you.
gradle is similar to npm for build management
It doesn’t provide the CLI that npm offers but it fulfills a similar purpose in dependency management and build-processing. When a Gradle command (or "task") is run, Gradle will first download all dependencies listed in the project’s build.gradle
file, similar to running npm install
.
What about the server
and client
portion of those two commands? Because we’re using the react
profile, Grails has actually created two separate “apps” for us - the backend Grails application, and the React application (which in turn is generated via create-react-app
). Gradle treats these two apps as independent subprojects, with the above names. This is called a multi-project build.
When running a Gradle “task” from the project root directory, anything after ./gradlew [project_name]:
will match a task specific to that subproject. The bootRun
task is configured in both projects to start the respective app.
Where does bootRun
come from? This Gradle task is inherited from the Spring Boot framework, upon which Grails is based. Of course create-react-app
projects don’t have such a task by default. The React profile provides the client:bootRun
task as a wrapper around the npm/yarn start
script. This allows you to use advanced Gradle features like running both server
and client
in parallel mode with one command. For developers, running ../gradlew client:bootRun
is the same as running npm start
(or yarn start
) in a stock create-react-app
project, and in fact you can run the client
app exactly that way if you have npm
/yarn
installed on your machine.
Once the gradlew
commands have completed downloading dependencies and launching their respective apps, you should be able to browse to http://localhost:8080
to see the Grails backend application, and http://localhost:3000
to view the React app.
Data source setup - postgresql
GORM - Grails Object Relational Management
http://gorm.grails.org/6.1.x/hibernate/manual/#quickStartGuide
A domain class can be created with the create-domain-class
command if you are using Grails, or if you are not using Grails you can just create the .groovy
file manually:
grails create-domain-class helloworld.Person
This will create a class at the location grails-app/domain/helloworld/Person.groovy
such as the one below:
package helloworld
class Person {
}
...
You can customize the class by adding properties:
class Person {
String name
Integer age
Date lastVisit
}
Once you have a domain class try and manipulate it with console
command in Grails by typing:
grails console
This loads an interactive GUI where you can run Groovy commands with access to the Spring ApplicationContext, GORM, etc.
Or if you are not using Grails here is a unit test template (using Spock) that can be run to test out the examples:
...
Grails Install
Grails Setup
cat ./setGrails4.sh
#!/bin/bash
#
echo "----------- "
echo " setGrails4.sh - adds Grails4 home to path"
echo " "
#
# $GRAILS_HOME set
export MYSQL_JDBC=/Users/jimmason/_dev/lib/mysql-connector-java-5.1.34.jar
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
export GRAILS_HOME=/Users/jimmason/_dev/grails4
export PATH=$PATH:$GRAILS_HOME:$GRAILS_HOME/bin
export CLASSPATH=$MYSQL_JDBC:$CLASSPATH
echo $PATH
Grails 3x requires JDK8 not JDK11
verify JDK is JDK8 NOT JDK11 ( the default system JDK I set )
grails --version && groovy --version
Project References
Key Concepts
Grails Training
grails v4x books - authors 4 days
http://docs.grails.org/latest/
grails mvc app using spring services - mode coding
https://www.baeldung.com/grails-mvc-application
https://www.google.com/search?client=firefox-b-1-d&q=grails+version+4+tutorials
Grails and Okta
https://developer.okta.com/blog/2018/04/19/okta-with-grails
Grails CRUD app with Okta
https://developer.okta.com/blog/2018/06/04/okta-with-grails-part2
Grails with Spring Security - default
https://www.slideshare.net/JesusPerezFranco/spring-security-5?from_action=save
Grails download & install
http://grails.org/download.html
Grails Application Forge
Manual Grails install
http://docs.grails.org/latest/guide/gettingStarted.html#downloadingAndInstalling
Set the GRAILS_HOME environment variable to the location where you extracted the zip
On Unix/Linux based systems this is typically a matter of adding something like the following
export GRAILS_HOME=/path/to/grails
to your profile
Then add the bin
directory to your PATH
variable:
On Unix/Linux based systems this can be done by adding
export PATH="$PATH:$GRAILS_HOME/bin"
to your profile
Run version check
- grails version
Create shell script to set Grails version
setGrails41.sh
export GRAILS_HOME=`/Library/Grails/grails-4.1.0.M1`
export PATH=$GRAILS_HOME/bin:$PATH
groovy -version
Grails beta versions
Check for Grails versions released in Github here ( including milestones ) - https://github.com/grails/grails-core/releases
For a given release / milestone - check the Github issues to see what's important that's still open - https://github.com/grails/grails-core/issues
https://github.com/grails/grails-core/releases/tag/v4.1.0.M1
http://docs.grails.org/4.1.0.M1/guide/introduction.html#whatsNew
install from Zip file
ensure GRAILS_HOME, GROOVY_HOME, JAVA_HOME are set
ensure any CLASSPATH and path updates are correct
to validate, run:
grails -version
Grails docs on skwebteam
grails4-update-Slide_Deck_Introducing_Grails_4_Webinar.pdf
grails-181115-tutorial-guestbook-java-web-app-vogella.com-.pdf
gorm-basics-tutorial-relations-maps.pptx
grails-best-practices-web-profile-2016-MarProg_Grails_WP_Web.pdf
grails-web-mvc-tutorial-v4-mongodb-2019-vgood.pdf
grails-plugins.github.io-DB Reverse Engineering Plugin - Reference Documentation.pdf
Grails v4.0 Features
https://objectcomputing.com/products/grails/grails-roadmap
- Groovy 2.5
- GORM 7.0 (Hibernate 5.2 minimum, Java 8 baseline)
- Java 8 Baseline
- Java 11 Support
- Spring 5.1
- Spring Boot 2.1
- Micronaut Integration
Grails JAX-RS plugin documentation ( for Grails v3x )
http://budjb.github.io/grails-jaxrs/3.x/latest/guide/introduction.html
The jaxrs project is a set of Grails plugins that supports the development of RESTful web services based on the Java API for RESTful Web Services (JSR 311: JAX-RS).
It is targeted at developers who want to structure the web service layer of an application in a JSR 311 compatible way but still want to continue to use Grails' powerful features such as GORM, automated XML and JSON marshalling, Grails services, Grails filters and so on. This plugin is an alternative to Grails' built-in mechanism for implementing RESTful web services.
Features
- Makes the JSR 311 (JAX-RS) available to Grails applications for developing RESTful web services.
- New Grails artefact types, Resource and Provider, for JAX-RS classes.
- JAX-RS Resource classes under
grails-app/resources
are auto-detected and can be modified at runtime. - JAX-RS Provider classes under
grails-app/providers
are auto-detected and can be modified at runtime. - Extended Grails command line interface
- Create new resources and unit test templates via
grails create-resource <resource name>
. - Generate ready-to-use resources from domain objects via
grails generate-resources <domain class name>
. - Scaffolding
- Generate RESTful service interfaces for Grails domain objects.
- Content negotiation support for XML and JSON representations.
- Ability to use any Grails feature within JAX-RS resources and providers such as:
- GORM can be used for interacting with persistent domain objects.
- Grails filters for intercepting requests to JAX-RS resources. ( Deprecated )
- Grails services which can be auto-injected by name.
- Entity providers
- Domain object providers that convert between Grails domain objects and XML or JSON representations.
- Support classes for developing custom entity providers.
- Support for content negotiation based on the
Accept
request header. - Easy integration testing of JAX-RS resources and providers.
- Plugin users may choose between Jersey and Restlet as JAX-RS implementations by means of configuration.
- jaxrs applications can be deployed to Google App Engine (GAE).
Tutorial Migrate React Node.js app to Grails backend
https://guides.grails.org/grails-vs-nodejs/guide/index.html
To complete this guide, you will need the following:
Some time on your hands
A decent text editor or IDE
JDK 1.7 or greater installed with
JAVA_HOME
configured appropriately
To get started do the following:
Download and unzip the source
or
Clone the Git repository:
git clone https://github.com/grails-guides/grails-vs-nodejs.git
The Grails guides repositories contain two folders:
initial
Initial project. Often a simple Grails app with some additional code to give you a head-start.complete
A completed example. It is the result of working through the steps presented by the guide and applying those changes to theinitial
folder.
To complete the guide, go to the initial
folder
cd
intograils-guides/grails-vs-nodejs/initial
and follow the instructions in the next sections.
You can go right to the completed example if you The completed sample project for this article can be found at: https://github.com/grails-guides/grails-vs-nodejs/tree/master/complete create react profile appEvery Grails project begins with a single Choose the latest version of Grails (3.3.0 as of the time of writing) and select the
start client and server appsOnce you’ve downloaded your application, expand it into a directory of your choice,
gradle wrapper can eliminate need to install Grails locallyThe gradle is similar to npm for build management It doesn’t provide the CLI that npm offers but it fulfills a similar purpose in dependency management and build-processing. When a Gradle command (or "task") is run, Gradle will first download all dependencies listed in the project’s What about the When running a Gradle “task” from the project root directory, anything after |
Where does bootRun
come from? This Gradle task is inherited from the Spring Boot framework, upon which Grails is based. Of course create-react-app
projects don’t have such a task by default. The React profile provides the client:bootRun
task as a wrapper around the npm/yarn start
script. This allows you to use advanced Gradle features like running both server
and client
in parallel mode with one command. For developers, running ../gradlew client:bootRun
is the same as running npm start
(or yarn start
) in a stock create-react-app
project, and in fact you can run the client
app exactly that way if you have npm
/yarn
installed on your machine.
Once the gradlew
commands have completed downloading dependencies and launching their respective apps, you should be able to browse to http://localhost:8080
to see the Grails backend application, and http://localhost:3000
to view the React app.
Data source setup - postgresql
GORM - Grails Object Relational Management
http://gorm.grails.org/6.1.x/hibernate/manual/#quickStartGuide
A domain class can be created with the create-domain-class
command if you are using Grails, or if you are not using Grails you can just create the .groovy
file manually:
grails create-domain-class helloworld.Person
This will create a class at the location grails-app/domain/helloworld/Person.groovy
such as the one below:
package helloworld
class Person {
}
If you have the configured the dataSource.dbCreate property and set it to "update", "create" or "create-drop", GORM will automatically generate/modify the database tables for you. |
You can customize the class by adding properties:
class Person {
String name
Integer age
Date lastVisit
}
Once you have a domain class try and manipulate it with console
command in Grails by typing:
grails console
This loads an interactive GUI where you can run Groovy commands with access to the Spring ApplicationContext, GORM, etc.
Or if you are not using Grails here is a unit test template (using Spock) that can be run to test out the examples:
import spock.lang.*
import grails.gorm.annotation.Entity
import grails.transaction.Rollback
import org.grails.orm.hibernate.HibernateDatastore
import org.springframework.transaction.PlatformTransactionManager
class ExampleSpec extends Specification {
@Shared @AutoCleanup HibernateDatastore hibernateDatastore
@Shared PlatformTransactionManager transactionManager
void setupSpec() {
hibernateDatastore = new HibernateDatastore(Person)
transactionManager = hibernateDatastore.getTransactionManager()
}
@Rollback
void "test execute GORM standalone in a unit test"() {
// your logic here
}
}
@Entity
class Person {
...
}
3.1. Basic CRUD
Try performing some basic CRUD (Create/Read/Update/Delete) operations.
3.1.1. Create
To create a domain class use Map constructor to set its properties and call the save()
method:
def p = new Person(name: "Fred", age: 40, lastVisit: new Date())
p.save()
The save() method will persist your class to the database using the underlying Hibernate ORM layer.
The save()
method is defined by the GormEntity trait.
3.1.2. Read
GORM transparently adds an implicit id
property to your domain class which you can use for retrieval:
def p = Person.get(1)
assert 1 == p.id
This uses the static get(id) method that expects a database identifier to read the Person
object back from the database.
You can also load an object in a read-only state by using the read(id)
method:
def p = Person.read(1)
In this case the underlying Hibernate engine will not do any dirty checking and the object will not be persisted. Note that if you explicitly call the save()
method then the object is placed back into a read-write state.
In addition, you can also load a proxy for an instance by using the load(id)
method:
def p = Person.load(1)
This incurs no database access until a method other than getId() is called. Hibernate then initializes the proxied instance, or throws an exception if no record is found for the specified id.
3.1.3. Update
To update an instance, change some properties and then call save()
again:
def p = Person.get(1)
p.name = "Bob"
p.save()
...
option 1> specify the file name on the cli cmd to open grails console
specify the file to open on the grails console command using relative url
grails console -f ./zfiles/gtest-2a1.groovy
<< no file shown
option 2> manually copy file contents to console window
open grails console
open the file from the File menu ( nothing shows )
open the same groovy file in another text editor
copy and paste the entire contents to the console window
add a comment line
File > save
check the saved file in the text editor to see the comment line exists
...
/gtest-2a1.groovy
<< no file shown
option 2> manually copy file contents to console window
open grails console
open the file from the File menu ( nothing shows )
open the same groovy file in another text editor
copy and paste the entire contents to the console window
add a comment line
File > save
check the saved file in the text editor to see the comment line exists
Grails 4.1 M++ – Groovy 3 and JDK11
Candidate Solutions
Simple Grails CRUD app on Grails 2x
User
EBC
Account
Device
Location
Energy
Steps after Grails setup - gtcrud1
grails help
grails <env> cmd
to persist data user env = test or prod ( vs dev )
configuration resources
//Google Drive/_work/learn/blearn-pc/grails/gtcrud1/web-app
cd /Users/jimmason/aswt/g2/gtcrud1
source ~/setGroovy.sh
environment setup
setGroovy.sh
#
echo "----------- "
echo " setGroovy.sh - adds Groovy home to path"
echo " "
#
# $GROOVY_HOME set
export MYSQL_JDBC=/Users/jimmason/_dev/lib/mysql-connector-java-5.1.34.jar
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
export GROOVY_HOME=/Users/jimmason/_dev/groovy24/;
export GRAILS_HOME=/Users/jimmason/_dev/grails244/;
export PATH=$PATH:$GROOVY_HOME:$GROOVY_HOME/bin:$GRAILS_HOME:$GRAILS_HOME/bin
export CLASSPATH=$MYSQL_JDBC:$CLASSPATH
echo $PATH
Application build steps
grails createApp gtcrud1
cd gtcrud1
grails console
- add the application folder to the grails path in the console
Step-by-step guide for Example
...