Migrating from Grails 2 to Grails 3

27
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ SPRINGONE2GX WASHINGTON, DC Migrating from Grails 2 to Grails 3 Michael Ploed - innoQ @bitboss

Transcript of Migrating from Grails 2 to Grails 3

Page 1: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

SPRINGONE2GXWASHINGTON, DC

Migrating from Grails 2 to Grails 3Michael Ploed - innoQ

@bitboss

Page 2: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

Grails 3 is the most major and radical change in the history of Grails

2

+ =

Page 3: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

HOWTOMIGRATE

3

Page 4: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

HOWTOMIGRATE

4

A Grails application usually consists of theapplication and various plugins

Page 5: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

HOWTOMIGRATE

5

An application usually integrates with many standard and some self written plugins

Page 6: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

Don’t add complexity. Wait until your major external plugins have been migrated

6

Page 7: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

Grails 3 has different file / directory locations

7

Grails 2 Grails 3grails-app/conf/BuildConfig.groovy build.gradle

grails-app/conf/Config.groovy grails-app/conf/application.groovy

grails-app/conf/UrlMappings.groovy grails-app/controllers/UrlMappings.groovy

grails-app/conf/BootStrap.groovy grails-app/init/BootStrap.groovy

scripts src/main/scripts

src/groovy src/main/groovy

src/java src/main/groovy

test/unit src/test/groovy

test/integration src/integration-test/groovy

web-app src/main/webapp or src/main/resources/

*GrailsPlugin.groovy src/main/groovy

Page 8: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

Files that are not present in Grails 2.x

8

New File Explanation

build.gradle Gradle build script

gradle.properties Gradle build properties

grails-app/conf/logback.groovy Logging has been extracted from Config.groovy and is now being defined via Logback

grails-app/conf/application.yml You can now also configure your application with YAML

grails-app/init/PACKAGE_PATH/Application.groovy The Application class that is used by Spring Boot to start the Grails 3 application

Page 9: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

Unneeded files after a successful migration

9

Obsolete File Explanation

application.properties Moved to build.gradle (for application name and version)

grails-app/conf/DataSource.groovy Merged to application.yml

lib Dependency resolution should be used to resolve JAR files

web-app/WEB-INF/applicationContext.xml Removed, beans should now be defined in grails-app/conf/spring/resources.groovy

src/templates/war/web.xml No longer needed for Grails 3. Do customization via Spring

web-app/WEB-INF/sitemesh.xml Removed, sitemesh filter is no longer present

web-app/WEB-INF/tld Removed, can be restored in src/main/webapp or src/main/resources/WEB-INF

Page 10: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/ 10

Before and after interceptors have been removedThey need to be replaced by standalone interceptors

Page 11: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

General migration steps 1/2

11

Grails 2

Grails 3create-app create-plugin

src/java src/groovy

src/main/groovy

grails-app

grails-app

test/unittest/integration

test-unitsrc/integration-test/groovy

Page 12: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

General migration steps 2/2

12

Grails 2

Grails 3Fix Build (imports)

Config.groovy to application.groovy

BuildConfig

build.groovy Merge DataSource.groovy

Move log4j config to Logback

C L EAN U P

Page 13: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/ 13

Step 1Migrate Plugins

Page 14: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/ 14

Mind the Plugin directory on the Grails Website.It focusses on Grails 1.x - 2.x plugins

Grails 3 Plugins are on Bintray

Page 15: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

Steps to take for plugin migration

There are several steps you have to take for migrating a plugin • Create a new Grails 3 plugin

• Copy Sources

• Handle the plugin descriptor

• Add dependencies to the build

• Modify package imports

• Migrate configuration

• Register ArtefactHandler definitions

• Migrate code generation scripts

• Delete unnecessary files

15

Page 16: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

Handle Plugin Descriptor

You must copy the Plugin descriptor from the Grails2 application to src/main/groovy/grails/plugins/[pluginname]

After that you have to add the correct package declaration to the plugin descriptor

16

package grails.plugins.recaptcha

class RecaptchaGrailsPlugin { … }

Page 17: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

Register Artefact Handler Definitions

If you have ArtefactHandler definitions written in Java you have to declare them in

src/main/resources/META-INF/grails.factories

This step can be ignored for Groovy based ArtefactHandlers, Grails detects them.

17

grails.core.ArtefactHandler=grails.plugins.quartz.JobArtefactHandler

Page 18: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

Migrate code generation scripts

Old Gant code generation scripts have to be replaced by Code Generation Scripts or Gradle tasks.

Simple code generation can easily be migrated to the new code generation API

More complex tasks are better of with a migration to Gradle tasks

18

Page 19: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

Simple code generation example

19

includeTargets << grailsScript("_GrailsCreateArtifacts") target(createJob: "Creates a new Quartz scheduled job") { depends(checkVersion, parseArguments) def type = "Job" promptForName(type: type)

for (name in argsMap.params) { name = purgeRedundantArtifactSuffix(name, type) createArtifact(name: name, suffix: type, type: type, path: "grails-app/jobs") createUnitTest(name: name, suffix: type) } }

setDefaultTarget 'createJob'

Page 20: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

Gradle Tasks for complex generation scripts

20

import … class RunQueryCommand implements ApplicationCommand { @Autowired DataSource dataSource

boolean handle(ExecutionContext ctx) { def sql = new Sql(dataSource) println sql.executeQuery("select * from foo") return true } }

> grails create-command run-query

Page 21: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

Command can be added to classpath in build.gradle

21

buildscript { … dependencies { classpath "org.grails.plugins:myplugin:0.1-SNAPSHOT" } } … dependencies { runtime "org.grails.plugins:myplugin:0.1-SNAPSHOT" }

> grails run-query

Page 22: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/ 22

Step 2Migrate Application

Page 23: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

Steps to take for application migration

There are several steps you have to take for migrating a application • Create a new Grails 3 application

• Copy Sources

• Add dependencies to the build

• Migrate Configuration

• Migrate web.xml Modifications to Spring

• Migrate static assets not handled by Asset pipeline

• Migrate Tests

• Delete unnecessary files

23

Page 24: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/ 24

Step 3Test intensively

Page 25: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

Let’s migrate an application

25

Page 26: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

Recap - Migration Steps

26

Plugins App Test

Page 27: Migrating from Grails 2 to Grails 3

Unless otherwise indicated, these s l ides are © 2013-2015 Pivotal Software, Inc. and l icensed under a Creat ive Commons Attr ibut ion-NonCommercial l icense: ht tp: / /creat ivecommons.org/ l icenses/by-nc/3.0/

SPRINGONE2GXWASHINGTON, DC

Thank You!Michael Ploed - innoQ

Twitter: @bitboss

Slides: http://slideshare.net/mploed