Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

test page for Grails projects

...

Reference_description_with_linked_URLs_________________________Notes________________________________________________________________


https://grails.orgGrails

https://github.com/grails/grails-core/releases/tag/v4.1.0.M2

http://docs.grails.org/4.1.0.M1/guide/introduction.html#whatsNew

grails experimental downloads for 4.2, Groovy 3
https://grails.org/blog/index.htmlutm_campaign=2GM%20Community%
20Engagement&utm_medium=email&_hsmi=95220434&_hsenc=p2ANqtz--Gie_w6ROGkVF89tuvgvf0TvA5zGNNJOLiSLxRPsYRscSTXn6f_b5b9sjFqnW-HpRXh-Y5pJ7MiE3jgwUVf2JwyXRBrQ&utm_content=95220434&utm_source=hs_email
Grails blog
https://grails.org/blog/2020-09-10-grails-state-of-union.htmlGrails 2020 update
https://github.com/grails/grails-core/releasesGrails releases repo including Milestones *


http://docs.grails.org/latest/guide/introduction.htmlGrails 4.0 online doc

http://docs.grails.org/latest/guide/single.pdf

https://drive.google.com/open?id=1mMT9PXJMt1LhKMlNIXYdvK17w9_sfSYk

Grails 4.0 single pdf
https://objectcomputing.com/products/grails/grails-roadmapGrails roadmap to v4.0


https://grailsthreebook.com/assets/pdf/grails3book-sample-preview.pdf

https://drive.google.com/open?id=16CCCp9JIztLSy2dDVJl153aogU9klgDX

Grails 3 book - sample - rest api profile

https://www.slideshare.net/paulbowler/grails-patterns-and-practices

https://drive.google.com/open?id=1GluRzUKpndHmqx4C3a87H8o0nOTln50W

Grails Patterns and Practices slide deck

https://www.sapient.com/content/dam/sapient/sapientglobalmarkets/pdf/thought-leadership/MarProg_Grails_WP_Web.pdf

https://drive.google.com/open?id=165wtwVmVXBQU2JX5uQ2QyS6NXlceS8BU

Grails Overview and Best Practices Guide - v2.0
https://opensourceconnections.com/blog/uploads/2010/01/
Introduction_to_Groovy_and_Grails.pdf
Grails and Groovy Details - 2011

https://drive.google.com/open?id=0BxqKQGV-b4WQVHptM01wVHZQOE0

https://drive.google.com/open?id=0BxqKQGV-b4WQRE52M2ozU2RTR1k

Jim Mason - 2009 - Books and Authors Web App in Grails in 1 hour

Lab loading instructions doc


Grails CRUD Scaffolding apps
https://drive.google.com/open?id=1CcNKF5Mab8po1R9G_BSrYQ-uYjf2qDM5Vogella - 2010 - Grails Web Blog app - decent example on v2.0
https://drive.google.com/file/d/1fL5Q9LH5WB8XsQw71JP_8GoCgjeQt7us/viewGrails Angular CRUD app example - manage customers - older



Grails REST api example - see docs
https://github.com/budjb/grails-jaxrsGrails REST Jax-RS generator plugin
http://budjb.github.io/grails-jaxrs/3.x/latest/Grails REST Jax-RS generator plugin documentation
https://grails.org/plugins/tag/jax-rsGrails REST Jax-RS plugin list


https://guides.grails.org/grails-vs-nodejs/guide/index.htmlTutorial Migrate React Node.js app to Grails backend


https://groups.google.com/forum/#!topic/grails-dev-discuss/CNmd8BRuf28

https://plugins.grails.org/plugin/grails/db-reverse-engineer

https://github.com/grails-plugins/grails-db-reverse-engineer/issues

https://grails-plugins.github.io/grails-db-reverse-engineer/

Grails DB reverse engineering plugin does not work after Grails 3.1 - 2017

NO LONGER SUPPORTED




GORM
https://docs.grails.org/latest/guide/GORM.htmlGrails GORM overview

http://gorm.grails.org/6.1.x/hibernate/manual/

GORM documentation


https://github.com/smallnest/gen

Generates Go lang structs from many SQL databases

could create converter to generate simple domain classes for GORM










Test References

...


Find grails scripts, files and apps 

from ~/ 

Groovy, Grails scripts

find ./   -iregex '".*grailssetGr.*' 2>/dev/null -exec ls -l {} \; | morefind 


Groovy work folders & files

find ./   -iregex '".*resources.groovy.*' " 2>/dev/null   -exec ls -l {} \;  | more

from ~/ 

Groovy, Grails scripts

find ./ find ./  -ctime -150d   -iregex ".*setGr.*groovy"   2>/dev/null   -exec ls -l {} \;Grails apps list  | more


gdrv/_work/

use_case_template1.groovy

find ./  -ctime -120d   -iregex ".*spring\/resources.groovy.*"   2>/dev/null   -exec ls -l {} \; > ./temp/_grails_apps_list1.txt

...

languagetext
titlegrails app list
collapsetrue

  | more

-rw-r--r--

...

@ 1 jimmason  staff  372220 Jul 22 09:09 .//

...

learn/blearn-pc/gtest6.groovy

-rw-r--r--

...

  1 jimmason  staff  1807 Dec  9 19:06 .//

...

sfw/

...

gdsl_base.groovy

-rw-r--r--

...

  1 jimmason  staff  1944 Dec 13 18:52 .//sfw/use_case_template1.groovy


Grails apps list

find ./ -iregex ".*spring\/resources.groovy.*"  2>/dev/null -exec ls -l {} \; > ./temp/_grails_apps_list1.txt


Code Block
languagetext
titlegrails app list
collapsetrue
-rw-r--r--  1 jimmason  staff  47 Jul 30  2014 .//_dev/qt1/grails-app/test1/.gvm/grails/2.4.4/src/grails/grails-app/conf/spring/resources.groovy
-rw-r--r--  1 jimmason  staff  47 Jul 30  2014 .//_dev/qt1_gdev/bookstore/grails-app/conf/spring/resources.groovy
-rw-r--r--  1 jimmason  staff  47 MayJul 30 7  20162014 .//.grails/wrapper/2.4.4/grails-2.4.4/src/grails/grails-app/_dev/_gdev/test2/grails-app/conf/spring/resources.groovy
-rw-r--r--  1 jimmason  staff  47 Jul 30  2014 .//_gd/_ptp/work/grailsdev/_gdev/bookstoregtest1/grails-app/conf/spring/resources.groovy
-rw-r--r--  1 jimmason  staff  47 Jul 30  2014 .//_gd/_ptp/workdev/qt1/grails-app/_gdevtest1/gtest1/grails-app/conf/spring/resources.groovy
====================
-rw-r--r--  1 jimmason  staff  8447 FebJul 2130  20202014 .//Google Drive/_work/learn/blearn-pcdev/qt1/grails/peblock/grails-app/conf/spring/resources.groovy.gz
-rw-r--r--  1 jimmason  staff  8447 FebMay 21 7 2020 2016 .//Google Drive/_work/learn/blearn-pc/grails/peblock/build/resources/main.grails/wrapper/2.4.4/grails-2.4.4/src/grails/grails-app/conf/spring/resources.groovy.gz
====================
-rw-r--r--  1 jimmason  staff  8447 SepJul 30 3 2014 2018 .//Google Drive_gd/_ptp/work/learn/blearn-pc/gtwf1grails/_gdev/bookstore/grails-app/conf/spring/resources.groovy.gz
-rw-r--r--  1 jimmason  staff  8447 SepJul 30 3 2014 2018 ..//Google Drive_gd/_ptp/work/learn/blearn-pc/gtwf1/build/resources/maingrails/_gdev/gtest1/grails-app/conf/spring/resources.groovy.gz
====================
-rw-r-rw-r--  1 jimmason  staff  4784 Feb 21  2020 .//Google Drive/_work/jim-acerlearn/blearn-pc/grails/peblock/grails-app/conf/spring/resources.groovy.gz
-rw-rwr--r--  1 jimmason  staff  4784 Feb 21  2020 .//Google Drive/_work/jim-acerlearn/blearn-pc/grails/peblock/build/resources/main/spring/resources.groovy.gz
====================
-rw-r-rw-r--  1 jimmason  staff  4784 Sep  3  2018 .//Google Drive/_work/jim-acerlearn/blearn-pc/gtwf1/grails-app/conf/spring/resources.groovy.gz
-rw-rwr--r--  1 jimmason  staff  4784 Sep  3  2018 .//Google Drive/_work/jim-acerlearn/blearn-pc/gtwf1/build/resources/main/spring/resources.groovy.gz
====================
-rw-r-rw-r--  1 jimmason  staff  47 JulFeb 3021  20142020 .//Google Drive/_ptp/workwork/jim-acer/blearn/grails/_gdev/bookstorepeblock/grails-app/conf/spring/resources.groovy
-rw-rrw--r--  1 jimmason  staff  47 JulFeb 3021  20142020 .//Google Drive/_ptp/workwork/jim-acer/blearn/grails/_gdevpeblock/gtest1build/grails-appresources/confmain/spring/resources.groovy
-rw-rrw--r--  1 jimmason  staff  47 Sep Feb 213  20152018 .//DocumentsGoogle Drive/_ptpdevwork/eclw2jim-acer/qwpmblearn/targetgtwf1/testgrails-classesapp/conf/spring/resources.groovy
-rw-rrw--r--  1 jimmason  staff  47 Sep Jul 303  20142018 .//DocumentsGoogle Drive/_ptpdev/eclw2/qwpm/grails-app/confwork/jim-acer/blearn/gtwf1/build/resources/main/spring/resources.groovy
-rw-r--r--  1 jimmason  staff  47 Jul 30  2014 .//DocumentsGoogle Drive/_ptpdev/eclw2/zdbmgtptp/work/grails/_gdev/bookstore/grails-app/conf/spring/resources.groovy
-rw-r--r--  1 jimmason  staff  47 Jul 30  2014 .//DocumentsGoogle Drive/_ptpdev/eclw1/gttask1ptp/work/grails/_gdev/gtest1/grails-app/conf/spring/resources.groovy
-rw-r--r--  1 jimmason  staff  47 JulFeb 3021  20142015 .//Documents/_ptpdev/eclw2/eclw1qwpm/issdmg1target/grailstest-app/confclasses/spring/resources.groovy

gdrv files

gtwf1

gdrv//_work/learn/blearn-pc/gtwf1/grails-app/views/layouts/main.gsp.gz

...

-rw-r--r--  1 jimmason  staff  47 Jul 30  2014 .//Documents/_ptpdev/eclw2/qwpm/grails-app/

...

conf/

...

spring/

...

resources.groovy

...

MAC files

grails4

jim-macbook:_dev jimmason$ ls -l ~/_dev/grails4

total 32

ptp test scripts

jim-macbook:~ jimmason$ ls -l _dev/_gdev 

total 576

-rw-r--r--   1 jimmason  staff    2295 Aug 24  2015 JdbcTester1.groovy


-rw-r--r--  1 jimmason  staff  47 Jul 30  2014 .//Documents/_ptpdev/eclw2/zdbmgt/grails-app/conf/spring/resources.groovy
-rw-r--r--

...

drwxr-xr-x  16 jimmason  staff     512 Feb 19  2015 bookstore

drwxr-xr-x   3 jimmason  staff      96 Aug 28  2015 com

drwxr-xr-x  15 jimmason  staff     480 Feb 19  2015 gtest1

-rw-r--r--   1 jimmason  staff  282970 Jun 30  2016 gtest1a.groovy

drwxr-xr-x  15 jimmason  staff     480 May  7  2016 test2

...

  1 jimmason  staff  47 Jul 30  2014 .//Documents/_ptpdev/eclw1/gttask1/grails-app/conf/spring/resources.groovy
-rw-r--r--  1 jimmason  staff  47 Jul 30  2014 .//Documents/_ptpdev/eclw1/issdmg1/grails-app/conf/spring/resources.groovy


gdrv files


gtwf1

gdrv//_work/jim-acerlearn/blearn-pc/grailsgtwf1/peblock/grails-app/controllersviews/peblocklayouts/UrlMappingsmain.gsp.groovy

Project References

Key Concepts

Grails Training

grails v4x books - authors 4 days
http://docs.grails.org/latest/

https://www.djamware.com/post/5d385e00fd741853d22abf5c/building-crud-web-application-using-grails-4-and-mongodb-easily

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

https://start.grails.org/

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:
  • 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:

or

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 the initial folder.

To complete the guide, go to the initial folder

  • cd into grails-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:

...

gz


gdrv//_work/jim-acer/blearn/gtwf1/grails-app/init/gtwf1/BootStrap.groovy


MAC files


grails4

jim-macbook:_dev jimmason$ ls -l ~/_dev/grails4

total 32


ptp test scripts

jim-macbook:~ jimmason$ ls -l _dev/_gdev   

total 576

-rw-r--r--   1 jimmason  staff    2295 Aug 24  2015 JdbcTester1.groovy

-rw-r--r--   1 jimmason  staff    3727 Aug 31  2015 RunJdbcTester1.groovy

drwxr-xr-x  16 jimmason  staff     512 Feb 19  2015 bookstore

drwxr-xr-x   3 jimmason  staff      96 Aug 28  2015 com

drwxr-xr-x  15 jimmason  staff     480 Feb 19  2015 gtest1

-rw-r--r--   1 jimmason  staff  282970 Jun 30  2016 gtest1a.groovy

drwxr-xr-x  15 jimmason  staff     480 May  7  2016 test2


udemy grails course test 

gdrv//_work/jim-acer/blearn/grails/peblock/grails-app/controllers/peblock/UrlMappings.groovy


Grails Install 



Grails Setup 


cat ./setGrails4.sh

#!/bin/bash

#

echo "----------- "

echo " setGrails4.sh - adds Grails4  home  to path"

echo " "

#

#  $GRAILS_HOME set

export PATH=/opt/local/bin:/opt/local/sbin:/Users/jimmason/:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands:/usr/local/mysql:/usr/local/bin:usr/local/sbi:n

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/

https://www.djamware.com/post/5d385e00fd741853d22abf5c/building-crud-web-application-using-grails-4-and-mongodb-easily

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

https://start.grails.org/


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:
  • 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:

or

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 the initial folder.

To complete the guide, go to the initial folder

  • cd into grails-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 {
}



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()

3.1.4. Delete

To delete an instance use the delete() method:

def p = Person.get(1)
p.delete()

...

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

...