Grails 3.0 Preview

49
© 2014 SpringOne 2GX. All rights reserved. Do not distribute without permission. Grails 3.0 Preview By Graeme Rocher

description

Preview of upcoming Grails 3.0 release at SpringOne 2GX 2014

Transcript of Grails 3.0 Preview

Page 1: Grails 3.0 Preview

© 2014 SpringOne 2GX. All rights reserved. Do not distribute without permission.

Grails 3.0 PreviewBy Graeme Rocher

Page 2: Grails 3.0 Preview

Agenda

§ State of Nation § What’s planned for Grails 2.4? § What’s planned for Grails 3.0? § Summary / Q & A

Page 3: Grails 3.0 Preview

State of Nation

§ Grails 2.4.3 most recent version § Grails 2.3.x line at 2.3.9 § Hundreds of bugs fixed in the last 3

months § More than 1,100 plugins now for

Grails

Page 4: Grails 3.0 Preview

!Grails 2.4What’s new?

2.4

Page 5: Grails 3.0 Preview

Grails 2.4

• Spring 4.0 Upgrade • Java 8 Support • Groovy 2.3 Upgrade • Improved @CompileStatic Support • Asset Pipeline Plugin • Moduralization of Codebase • Hibernate Goodies • GORM & GSP Standalone

5

3.02.4

Page 6: Grails 3.0 Preview

Spring 4.0 / 4.1

• Native GroovyBeanDefinitionReader (ported from BeanBuilder) – https://spring.io/blog/2014/03/03/groovy-

bean-configuration-in-spring-framework-4 • Spring Web Socket

– http://grails.org/plugin/spring-websocket

6

Page 7: Grails 3.0 Preview

Groovy 2.3

• Traits • Java 8 • Implicit closure coercion • Lots more!

• http://docs.codehaus.org/display/GROOVY/Groovy+2.3+release+notes

7

Page 8: Grails 3.0 Preview

Other Notable Updates• Java 8 Support • Hibernate 4.3.5 now default • AspectJ 1.8 with Java 8 support • Eclipse Aether 1.0.0 • Fewer Overall Dependencies

8

Page 9: Grails 3.0 Preview

Modularization

9

grails-web

grails-web-mvc

grails-web-sitemesh

grails-web-gsp grails-web-jsp

grails-web-servlet

grails-web-common

grails-core

grails-encoder

grails-project-api

grails-validation

Page 10: Grails 3.0 Preview

Asset Pipeline Plugin• Resources replaced with Asset

Pipeline – https://github.com/bertramdev/asset-

pipeline/wiki/Why-asset-pipeline-over-grails-resources-plugin

• Full documentation – http://bertramdev.github.io/asset-

pipeline/ • Many thanks to David Estes!

10

Page 11: Grails 3.0 Preview

Standalone• GORM for Hibernate 4 in Spring Boot

– https://spring.io/guides/gs/accessing-data-gorm/ • GORM for MongoDB in Spring Boot

– https://spring.io/guides/gs/accessing-data-gorm-mongodb/ • GSP standalone

– https://github.com/grails/grails-boot/tree/master/sample-apps/gsp

11

Page 12: Grails 3.0 Preview

@GrailsCompileStatic• Grails-aware version of Groovy’s @CompileStatic

12

import  grails.compiler.*  !@GrailsCompileStatic  class  BookController  {     …  }

Page 13: Grails 3.0 Preview

Maven-style Dependency Management• Use management block to declare managed dependencies

13

!management  {      dependency  "commons-­‐logging:commons-­‐logging:1.1.3"  }

Page 14: Grails 3.0 Preview

Hibernate Subqueries• Perform nested “in” or “notIn” sub queries that span domain

classes using where queries:

14

def  employees  =  Employee.where  {          region.continent  in  ['APAC',  "EMEA"]  }.id()  !def  results  =  Sale.where  {        employee  in  employees  &&  total  >  50000  }.employee.list()

Page 15: Grails 3.0 Preview

Hibernate Correlated Subqueries• Declare aliases using “def” for cross query references:

15

def  query  =  Employee.where  {          def  em1  =  Employee          exists  Sale.where  {                  def  s1  =  Sale                  def  em2  =  employee                  return  em2.id  ==  em1.id          }.id()  }  def  results  =  query.list()

Page 16: Grails 3.0 Preview

Hibernate Column Readers/Writers• Implement custom column readers and writers to transform

data when written or read from the database.

16

class  Name  {          String  title          static  mapping  =  {                  title  write:'UPPER(?)',                            read:'REPEAT(title,  2)'          }  }

Page 17: Grails 3.0 Preview

Hibernate 4 in Unit Tests (Coming Soon)• Test Hibernate 4 interaction in unit tests

17

import  grails.test.mixin.hibernate.*  !@TestMixin(HibernateTestMixin)  class  PersonSpec  extends  Specification{          void  setupSpec()  {                  hibernateDomain([Person])          }        …  }

Page 18: Grails 3.0 Preview

GORM for MongoDB 3.0• Support for MongoDB 2.6 • GeoJSON type support • Maps of entities • Full Text Search • Projections using Aggregations • Size queries (sizeEq, sizeLt etc.) • Spring Boot

– https://spring.io/guides/gs/accessing-data-gorm-mongodb/

18

Page 19: Grails 3.0 Preview

New Maven Plugin 2.4.3• Upgraded to Maven 3.1+ • Rewritten to use Aether for dependency resolution as per

recommendations • Can now be used with multiple versions of Grails:

19

<configuration>        <grailsVersion>2.3.8</grailsVersion>  </configuration>  

Page 20: Grails 3.0 Preview

Grails 2.4.x TODOs• Grails 2.4.4 - Out Soon • Spring Security Core 2.0 GA • Spring Web Flow Plugin Update • Bug Fixes

20

2.4

Page 21: Grails 3.0 Preview

!Q & AGrails 2.4

2.4

Page 22: Grails 3.0 Preview

!The FutureGrails 3.0

3.0

Page 23: Grails 3.0 Preview

Grails 3.0: Goals

• Embrace Gradle • Abstract Packaging / Deployment • Reach outside the Servlet Container • App Profiles: Netty, Servlet, Batch,

Hadoop • Deployment with run-app / runnable

JARs • Extend the reach of Grails

23

3.03.0

Page 24: Grails 3.0 Preview

Grails 3.0: Goals

• Build on Spring Boot • Plugin System & Events • Support Multi Project Builds • Support Micro Services • Remove Bloat • Reduce Dependencies

24

3.03.0

Page 25: Grails 3.0 Preview

Spring IO Platform Reprise

25

Jobs, Steps, Ingestion, Export, Controllers, REST, Channels, Adapters,

WEBINTEGRATION BATCH BIG DATA

SPRING CORE

FRAMEWOR SECURIT GROOV REACTO

DATA

RELATIONA NON-

BOOT

Bootable, Minimal, Ops-Ready

GRAILS XD IO

IO

Page 26: Grails 3.0 Preview

Spring IO Platform

26

Grails

Spring IO Platform

Spring XD

Spring Foundation

Apps

3rd Party Dependencies

Spring Boot

Page 27: Grails 3.0 Preview

Spring IO & Grails• What does Spring IO bring to Grails?

– Standardised dependency management – Published BOMs for use with Maven & Gradle – Foundational libraries – See more http://docs.spring.io/platform/docs/current/

reference/htmlsingle/

27

dependencies  {          compile  'commons-­‐lang:commons-­‐lang'  }

Page 28: Grails 3.0 Preview

Gradle

• Deprecate existing build system • Replace with Gradle build • Easier now everything is forked in 2.3.x • All the flexibility of a powerful build

system • Separate build plugins can provide

Gradle extensions

28

Page 29: Grails 3.0 Preview

Plugin Delineation

29

Grails.sh

Static void m

ain

Gradle B

uild

Forked Grails Runtime

test-app

shellrun-app

console

Codegen Plugins

Build Time Plugins

Runtime Plugins

Page 30: Grails 3.0 Preview

Gradle

• Allow Micro or Monolith Applications • Multi-Project Plugin Architectures • Run individual sub projects • Or run as a whole

30

Page 31: Grails 3.0 Preview

!Demo Grails 3.0 Gradle

3.0

Page 32: Grails 3.0 Preview

Spring Boot

• Grails 3.0 to be built on Spring Boot • Boot to handle

• Embedded servers • Runnable JARs • WAR packaging • Scripting / Micro Services

32

Page 33: Grails 3.0 Preview

Why Spring Boot?

• Handles Fat JAR and embedding • Already supports different runtimes • Includes monitoring and health

checks • Grails can take advantage of Boot

auto configuration

33

Page 34: Grails 3.0 Preview

Boot Powered Micro Services

34

@Grab("com.h2database:h2:1.3.173")  import  grails.persistence.*  !@Entity  @Resource(uri='/books')  class  Book  {          String  title  }  

Page 35: Grails 3.0 Preview

!Demo Grails 3.0 Micro Services

3.0

Page 36: Grails 3.0 Preview

Deprecations / Removals• Servlet 2.5 support (no web.xml) • Gant & Current Build System • GDoc - Replaced by AsciiDoctor • Integration Tests - Replaced by more

Mixins • Converters / Codecs plugins -

Replaced by Groovy extensions • Filters - Replaced by new mechanism

36

Page 37: Grails 3.0 Preview

Servlet 3.0 only and no web.xml• Thanks to Spring Boot, new servlets and filters can just be

Spring beans

37

!def  doWithSpring  =  {          characterEncodingFilter(                    CharacterEncodingFilter)  {                          encoding  ='utf-­‐8'          }  }

Page 38: Grails 3.0 Preview

Simplification• Removed

– UrlMappingsFilter – GrailsDispatcherServlet – SimpleGrailsController – Sitemesh Filter

38

Page 39: Grails 3.0 Preview

Old Grails 2.x Flow

39

UrlMappingsFilterGrailsPageFilter

Decorate Request Forward Request

GrailsDispatherServlet

Delegate Request

GrailsController

Page 40: Grails 3.0 Preview

Grails 3.0 Flow• GrailsDispatcherSerlvet 50 lines of code in 3.x,

but 545 lines in 2.x

40

DispatcherServlet

Delegate Request

GrailsController

Page 41: Grails 3.0 Preview

Benefits of Simplification• Less code to maintain • Better performance • Better integration with Spring • Fewer dependencies

• commons-fileupload gone • No internal forwarding

41

Page 42: Grails 3.0 Preview

Evolution of Metaprogramming

42

Runtime Metaprogramming

(ExpandoMetaClass)

Compile time Metaprogramming(AST Transforms)

Traits & Transforms

Grails 1.x Grails 2.x Grails 3.x

Page 43: Grails 3.0 Preview

Grails 3.0 & Groovy Traits• Most logic previously added via AST transforms will now be

added by Traits – (Cases not possible as Trait done with transforms)

43

trait  Controller  {      …      def  withFormat(Closure  callable)  {            …      }  }

Page 44: Grails 3.0 Preview

Application Profiles

• Each profile will have distinct plugins, runtimes and packaging (JAR, WAR etc.)

44

!$  grails  create-­‐app  myapp  -­‐-­‐profile=netty    $  cd  myapp  $  grails  package  $  java  -­‐jar  target/myapp.jar  !

Page 45: Grails 3.0 Preview

Application Profiles

• Extensible profiles with an API exposing structure • Profile specific commands (run, package, test) • Profile specific plugins • Profile specific project templates and file templates (code

generators) backed by Git • Community maintained profiles and core profiles

45

Page 46: Grails 3.0 Preview

Profile Repository• All Profiles managed by git • Profiles checked out locally and periodically updated • Profiles wrap code generation infrastructure

46

$  grails  create-­‐controller  foo  !Profile  .getCurrentProfile()  .getCommand('create-­‐controller')  .execute(  'foo'  )

Page 47: Grails 3.0 Preview

Grails 3.0: Challenges

• Compatibility – Plugins – Build System

• Modularization – Servlet API independence – Refactoring

47

3.0

Page 48: Grails 3.0 Preview

!Q & AGrails 3.0

3.0

Page 49: Grails 3.0 Preview

Stay Connected.

!!!!

Web: grails.org StackOverflow: http://stackoverflow.com/tags/grails Twitter: twitter.com/grailsframework LinkedIn: http://linkedin.com/groups/Grails-User-Group-39757 Google+: https://plus.google.com/communities/109558563916416343008