Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
1
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
2
About Puneet
Puneet Behl is the Grails Development Lead at Object
Computing, Inc.
He is very enthusiastic about the Grails and Micronaut
frameworks, Groovy, Docker, and open source
technologies.
If you’d like to get in touch, feel free to say hello on
twitter.com/puneetbhl
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
3
AGENDA
● Introducing Grails Framework 5
● Upgrading
● Build and Infrastructure
● What Does Micronaut Integration Mean for You?
● Recent Updates
● The Road Ahead
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
4
Introducing
Grails
Framework 5
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
5
Dependent Libraries
● Apache Groovy 3
● Gradle 7.2
● Micronaut 3
● Spring framework 5.3
● Spring Boot 2.6
● Spock 2.0-groovy-3.0
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
6
Deprecations
The dot-based configuration access (i.e., grailsApplication.config.a.b.c) is
deprecated.
We recommend you use grailsApplication.config.getProperty(key, type).
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
7
JUnit5
● Running JUnit4 tests on JUnit Platform
● Annotation in org.junit.jupiter.api
● Assertions in org.junit.jupiter.api.Assertions
● @BeforeEach and @AfterEach
● @BeforeAll and @AfterAll
● junit-vintage-engine in runtime classpath
● Migrate from JUnit4
(https://junit.org/junit5/docs/current/user-guide/#migrating-from-junit4 )
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
8
Grails Gradle Plugin
The Grails Gradle Plugin was originally part of Grails Core; it has now been moved to a
separate repository.
The Grails Gradle plugin might not advance with the same speed as Grails Core. So, we
have added a separate Gradle property, grailsGradlePluginVersion
, to decouple it
from Grails Core version.
apply plugin:"org.grails.grails-web"
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
9
Semantic Versioning 2.0
Starting with version 4.0.0, the Grails framework follows semantic versioning 2.0.0 to make
the release process more predictable and simple.
https://semver.org/
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
10
Grails Plugins
● Most Grails plugins that work with Grails framework 4 should work with Grails
framework 5 as well.
● Building configuration instead of plugins.
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
11
JCenter and Bintray Shutdown
https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
12
Publishing Plugins
● The Grails Gradle Publish plugin is removed
● The Grails Profile Publish plugin is removed
● Instead use Gradle maven-publish plugin
● Include/update plugin in the Grails Plugin Portal
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
13
The Grails Wrapper Update
In June, the Grails Framework Artifactory instance was updated. As a result, the old Grails
wrapper now fails under certain conditions because the URL it uses to retrieve information is
no longer supported.
https://grails.org/blog/2021-06-10-grails-wrapper-update.html
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
14
Upgrading
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
15
Upgrading
● Grails framework 3 is EOL (end of life), so it's a good time to update your applications
and plugins
● Migrate tests from JUnit4 to JUnit5
● Change grailsVersion=5.1.0
● Remove any reference to jcenter()
● Update to Gradle 7.2
○ Run gradle help --scan
○ Execute gradle wrapper --gradle-version 7.2
● Gradle scope changes
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
16
Apache Groovy 3
● No more JDK warning with JDK 11 or higher
● Java 16 support
● New Parrot parser
● GDK additions: Several new extension methods
● Release Notes (https://groovy-lang.org/releasenotes/groovy-3.0.html#releasenotes)
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
17
GORM 7.1
● Apache Groovy 3
● Spring 5.3
● Spring 2.5.5
● Hibernate 5.5.7 (https://hibernate.org/orm/releases/5.5/ )
● MongoDB Driver Sync 4
(https://mongodb.github.io/mongo-java-driver/4.0/upgrading/)
● Neo4J Driver 4
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
18
Upgrading - Spring Boot Changes
● Hibernate Validator 6.2
(https://in.relation.to/2021/01/06/hibernate-validator-700-62-final-released/ )
● Environment Variable Prefix
● Metrics and endpoints
● Java 16
● Jetty 10 Support
● Configuration Changes
(https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.5-Configuration-C
hangelog)
● Spring Boot 2.5 Release Notes
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.5-Release-Notes
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
19
Upgrading - Spring Changes
● Official support for Apache Groovy 3
● What's New in Spring Framework 5.x
https://github.com/spring-projects/spring-framework/wiki/What%27s-New-in-Spring-Fr
amework-5.x
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
20
Gradle 7.2
● Use mavenCentral()
or maven { url "https://repo.grails.org/grails/core" }
● The scope “provided” is removed.
● Apache Groovy 3
● Removal of Compile and Runtime Configurations
● Use maven-publish instead of maven
● Duplicate Strategy
● Upgrading from Gradle 5.x
https://docs.gradle.org/7.2/userguide/upgrading_version_5.html
● Gradle 7.2 Release Notes https://docs.gradle.org/7.2/release-notes.html
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
21
Gradle Scope Changes
compile api/implementation
compileOnly compileOnly
runtime runtimeOnly
testCompile testImplementation
testRuntime testRuntimeOnly
provided compileOnly/api
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
22
Micronaut 3
● The javax.inject annotations are no longer a transitive dependency. Micronaut now
ships with the Jakarta inject annotations. Either replace all javax.inject imports with
jakarta.inject, or add a dependency on javax-inject to continue using the older
annotations:
implementation("javax.inject:javax.inject:1")
● https://micronaut.io/2021/08/18/micronaut-framework-3-released/
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
23
Build and
Infrastructure
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
24
Build and Infrastructure
● Configured Gradle Enterprise (https://ge.grails.org) to improve Gradle build
● Moved from Travis to Github Workflows
● The artifacts are published to Maven Central
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
25
What Does
Micronaut
Integration
Mean For
You?
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
26
The Powerful Micronaut Declarative HTTP Client
● implementation("io.micronaut:micronaut-http-client")
@Client("https://start.grails.org")
interface GrailsAppForgeClient {
@Get("/{version}/profiles")
List<Map> profiles(String version)
}
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
27
Testing Security in the Application
when: 'login'
UserCredentials credentials = new UserCredentials(username: 'sherlock', password:
'elementary')
HttpRequest request = HttpRequest.POST('/api/login', credentials)
HttpResponse<BearerToken> resp = client.toBlocking().exchange(request, BearerToken)
resp = client.toBlocking().exchange(HttpRequest.GET('/api/announcements')
.header('Authorization', "Bearer ${resp.body().accessToken}"),
Argument.of(List, AnnouncementView))
then: 'announcement list'
rsp.status.code == 200
rsp.body() != null
((List)rsp.body()).size() == 1
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
28
Grails and Micronaut Kafka
import io.micronaut.configuration.kafka.annotation.KafkaClient
import io.micronaut.configuration.kafka.annotation.Topic
@KafkaClient
interface AnalyticsClient {
@Topic('analytics')
Map updateAnalytics(Map book)
}
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
29
Micronaut Features That Do Not Work With Grails
● Tracing
● Metrics
● Security
● CORS
● Open API
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
30
Recent
Releases
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
31
Grails Database Migration Plugin 4.0.0-RC2 Released
● Support Liquibase 4.6
● Liquibase Extension Upgrade Guide
(https://docs.liquibase.com/tools-integrations/extensions/extension-upgrade-guides/h
ome.html)
● Release Notes (https://github.com/liquibase/liquibase/releases/)
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
32
Grails 5.0.3 Released
● Bug-fixes and Improvements
● Make Grails 5 compatible with Gradle 7.2
● Fixed some bug around grails.factories file
● Release Notes (https://github.com/grails/grails-core/releases/tag/v5.0.3)
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
33
Log4J2 - CVE-202144228
● Grails®
framework blog post (https://grails.org/blog/2021-12-14-log4j2-cve.html)
● CVE-202144228 (https://nvd.nist.gov/vuln/detail/CVE-2021-44228)
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
34
The Road
Ahead
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
35
Grails Framework 5.1
● Spring Boot 2.6.1
● Micronaut 3.2
● Hibernate 5.6
● MongoDB Driver 4.4
● Better support with Gradle 7.2
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
36
● Improvements to the Grails CLI
● Spring Security Core Grails Plugin
Upcoming Changes
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
37
2GM Quarterly Town Hall Meeting
Each Town Hall Meeting is led by a panel of 2GM users, developers, and advocates.
Everyone in the 2GM communities is welcome and encouraged to participate.
https://objectcomputing.com/resources/events/2gm-town-hall
Next Meeting - Friday, January 7, 2022
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
38
Grails Foundation™
● A not-for-profit organization that supports and collectively leads the open source Grails
project.
● Supported by a Technology Advisory Board that ensures the Framework continues to
reflect and serve its diverse and growing user community.
● The Board meets quarterly to discuss and make recommendations regarding the Grails
framework roadmap and technical direction.
● For more information, check out https://grails.org/foundation/index.html.
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
39
Thank You
Community involvement is vital for the success of Grails framework. We appreciate the
Grails community for the support and feedback throughout this journey.
We are excited about this latest release. Please, upgrade your applications to Grails
framework 5. We would love to hear about your experience, and if you need any help with
your upgrade, we are here to support(https://grails.org/support.html) you.
Ⓒ
2021 Grails Foundation. All rights reserved. grails.org
40
Merry
Christmas!

What’s new in grails framework 5?

  • 1.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 1
  • 2.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 2 About Puneet Puneet Behl is the Grails Development Lead at Object Computing, Inc. He is very enthusiastic about the Grails and Micronaut frameworks, Groovy, Docker, and open source technologies. If you’d like to get in touch, feel free to say hello on twitter.com/puneetbhl
  • 3.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 3 AGENDA ● Introducing Grails Framework 5 ● Upgrading ● Build and Infrastructure ● What Does Micronaut Integration Mean for You? ● Recent Updates ● The Road Ahead
  • 4.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 4 Introducing Grails Framework 5
  • 5.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 5 Dependent Libraries ● Apache Groovy 3 ● Gradle 7.2 ● Micronaut 3 ● Spring framework 5.3 ● Spring Boot 2.6 ● Spock 2.0-groovy-3.0
  • 6.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 6 Deprecations The dot-based configuration access (i.e., grailsApplication.config.a.b.c) is deprecated. We recommend you use grailsApplication.config.getProperty(key, type).
  • 7.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 7 JUnit5 ● Running JUnit4 tests on JUnit Platform ● Annotation in org.junit.jupiter.api ● Assertions in org.junit.jupiter.api.Assertions ● @BeforeEach and @AfterEach ● @BeforeAll and @AfterAll ● junit-vintage-engine in runtime classpath ● Migrate from JUnit4 (https://junit.org/junit5/docs/current/user-guide/#migrating-from-junit4 )
  • 8.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 8 Grails Gradle Plugin The Grails Gradle Plugin was originally part of Grails Core; it has now been moved to a separate repository. The Grails Gradle plugin might not advance with the same speed as Grails Core. So, we have added a separate Gradle property, grailsGradlePluginVersion , to decouple it from Grails Core version. apply plugin:"org.grails.grails-web"
  • 9.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 9 Semantic Versioning 2.0 Starting with version 4.0.0, the Grails framework follows semantic versioning 2.0.0 to make the release process more predictable and simple. https://semver.org/
  • 10.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 10 Grails Plugins ● Most Grails plugins that work with Grails framework 4 should work with Grails framework 5 as well. ● Building configuration instead of plugins.
  • 11.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 11 JCenter and Bintray Shutdown https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/
  • 12.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 12 Publishing Plugins ● The Grails Gradle Publish plugin is removed ● The Grails Profile Publish plugin is removed ● Instead use Gradle maven-publish plugin ● Include/update plugin in the Grails Plugin Portal
  • 13.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 13 The Grails Wrapper Update In June, the Grails Framework Artifactory instance was updated. As a result, the old Grails wrapper now fails under certain conditions because the URL it uses to retrieve information is no longer supported. https://grails.org/blog/2021-06-10-grails-wrapper-update.html
  • 14.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 14 Upgrading
  • 15.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 15 Upgrading ● Grails framework 3 is EOL (end of life), so it's a good time to update your applications and plugins ● Migrate tests from JUnit4 to JUnit5 ● Change grailsVersion=5.1.0 ● Remove any reference to jcenter() ● Update to Gradle 7.2 ○ Run gradle help --scan ○ Execute gradle wrapper --gradle-version 7.2 ● Gradle scope changes
  • 16.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 16 Apache Groovy 3 ● No more JDK warning with JDK 11 or higher ● Java 16 support ● New Parrot parser ● GDK additions: Several new extension methods ● Release Notes (https://groovy-lang.org/releasenotes/groovy-3.0.html#releasenotes)
  • 17.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 17 GORM 7.1 ● Apache Groovy 3 ● Spring 5.3 ● Spring 2.5.5 ● Hibernate 5.5.7 (https://hibernate.org/orm/releases/5.5/ ) ● MongoDB Driver Sync 4 (https://mongodb.github.io/mongo-java-driver/4.0/upgrading/) ● Neo4J Driver 4
  • 18.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 18 Upgrading - Spring Boot Changes ● Hibernate Validator 6.2 (https://in.relation.to/2021/01/06/hibernate-validator-700-62-final-released/ ) ● Environment Variable Prefix ● Metrics and endpoints ● Java 16 ● Jetty 10 Support ● Configuration Changes (https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.5-Configuration-C hangelog) ● Spring Boot 2.5 Release Notes https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.5-Release-Notes
  • 19.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 19 Upgrading - Spring Changes ● Official support for Apache Groovy 3 ● What's New in Spring Framework 5.x https://github.com/spring-projects/spring-framework/wiki/What%27s-New-in-Spring-Fr amework-5.x
  • 20.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 20 Gradle 7.2 ● Use mavenCentral() or maven { url "https://repo.grails.org/grails/core" } ● The scope “provided” is removed. ● Apache Groovy 3 ● Removal of Compile and Runtime Configurations ● Use maven-publish instead of maven ● Duplicate Strategy ● Upgrading from Gradle 5.x https://docs.gradle.org/7.2/userguide/upgrading_version_5.html ● Gradle 7.2 Release Notes https://docs.gradle.org/7.2/release-notes.html
  • 21.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 21 Gradle Scope Changes compile api/implementation compileOnly compileOnly runtime runtimeOnly testCompile testImplementation testRuntime testRuntimeOnly provided compileOnly/api
  • 22.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 22 Micronaut 3 ● The javax.inject annotations are no longer a transitive dependency. Micronaut now ships with the Jakarta inject annotations. Either replace all javax.inject imports with jakarta.inject, or add a dependency on javax-inject to continue using the older annotations: implementation("javax.inject:javax.inject:1") ● https://micronaut.io/2021/08/18/micronaut-framework-3-released/
  • 23.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 23 Build and Infrastructure
  • 24.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 24 Build and Infrastructure ● Configured Gradle Enterprise (https://ge.grails.org) to improve Gradle build ● Moved from Travis to Github Workflows ● The artifacts are published to Maven Central
  • 25.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 25 What Does Micronaut Integration Mean For You?
  • 26.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 26 The Powerful Micronaut Declarative HTTP Client ● implementation("io.micronaut:micronaut-http-client") @Client("https://start.grails.org") interface GrailsAppForgeClient { @Get("/{version}/profiles") List<Map> profiles(String version) }
  • 27.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 27 Testing Security in the Application when: 'login' UserCredentials credentials = new UserCredentials(username: 'sherlock', password: 'elementary') HttpRequest request = HttpRequest.POST('/api/login', credentials) HttpResponse<BearerToken> resp = client.toBlocking().exchange(request, BearerToken) resp = client.toBlocking().exchange(HttpRequest.GET('/api/announcements') .header('Authorization', "Bearer ${resp.body().accessToken}"), Argument.of(List, AnnouncementView)) then: 'announcement list' rsp.status.code == 200 rsp.body() != null ((List)rsp.body()).size() == 1
  • 28.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 28 Grails and Micronaut Kafka import io.micronaut.configuration.kafka.annotation.KafkaClient import io.micronaut.configuration.kafka.annotation.Topic @KafkaClient interface AnalyticsClient { @Topic('analytics') Map updateAnalytics(Map book) }
  • 29.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 29 Micronaut Features That Do Not Work With Grails ● Tracing ● Metrics ● Security ● CORS ● Open API
  • 30.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 30 Recent Releases
  • 31.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 31 Grails Database Migration Plugin 4.0.0-RC2 Released ● Support Liquibase 4.6 ● Liquibase Extension Upgrade Guide (https://docs.liquibase.com/tools-integrations/extensions/extension-upgrade-guides/h ome.html) ● Release Notes (https://github.com/liquibase/liquibase/releases/)
  • 32.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 32 Grails 5.0.3 Released ● Bug-fixes and Improvements ● Make Grails 5 compatible with Gradle 7.2 ● Fixed some bug around grails.factories file ● Release Notes (https://github.com/grails/grails-core/releases/tag/v5.0.3)
  • 33.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 33 Log4J2 - CVE-202144228 ● Grails® framework blog post (https://grails.org/blog/2021-12-14-log4j2-cve.html) ● CVE-202144228 (https://nvd.nist.gov/vuln/detail/CVE-2021-44228)
  • 34.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 34 The Road Ahead
  • 35.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 35 Grails Framework 5.1 ● Spring Boot 2.6.1 ● Micronaut 3.2 ● Hibernate 5.6 ● MongoDB Driver 4.4 ● Better support with Gradle 7.2
  • 36.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 36 ● Improvements to the Grails CLI ● Spring Security Core Grails Plugin Upcoming Changes
  • 37.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 37 2GM Quarterly Town Hall Meeting Each Town Hall Meeting is led by a panel of 2GM users, developers, and advocates. Everyone in the 2GM communities is welcome and encouraged to participate. https://objectcomputing.com/resources/events/2gm-town-hall Next Meeting - Friday, January 7, 2022
  • 38.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 38 Grails Foundation™ ● A not-for-profit organization that supports and collectively leads the open source Grails project. ● Supported by a Technology Advisory Board that ensures the Framework continues to reflect and serve its diverse and growing user community. ● The Board meets quarterly to discuss and make recommendations regarding the Grails framework roadmap and technical direction. ● For more information, check out https://grails.org/foundation/index.html.
  • 39.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 39 Thank You Community involvement is vital for the success of Grails framework. We appreciate the Grails community for the support and feedback throughout this journey. We are excited about this latest release. Please, upgrade your applications to Grails framework 5. We would love to hear about your experience, and if you need any help with your upgrade, we are here to support(https://grails.org/support.html) you.
  • 40.
    Ⓒ 2021 Grails Foundation.All rights reserved. grails.org 40 Merry Christmas!