Grails 3.0 Preview

  • View
    2.454

  • Download
    1

  • Category

    Software

Preview:

DESCRIPTION

Preview of upcoming Grails 3.0 release at SpringOne 2GX 2014

Citation preview

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

Grails 3.0 PreviewBy Graeme Rocher

Agenda

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

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

!Grails 2.4What’s new?

2.4

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

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

Groovy 2.3

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

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

7

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

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

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

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

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

12

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

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

13

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

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

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

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)'          }  }

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])          }        …  }

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

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>  

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

!Q & AGrails 2.4

2.4

!The FutureGrails 3.0

3.0

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

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

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

Spring IO Platform

26

Grails

Spring IO Platform

Spring XD

Spring Foundation

Apps

3rd Party Dependencies

Spring Boot

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'  }

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

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

Gradle

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

30

!Demo Grails 3.0 Gradle

3.0

Spring Boot

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

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

32

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

Boot Powered Micro Services

34

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

!Demo Grails 3.0 Micro Services

3.0

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

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'          }  }

Simplification• Removed

– UrlMappingsFilter – GrailsDispatcherServlet – SimpleGrailsController – Sitemesh Filter

38

Old Grails 2.x Flow

39

UrlMappingsFilterGrailsPageFilter

Decorate Request Forward Request

GrailsDispatherServlet

Delegate Request

GrailsController

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

but 545 lines in 2.x

40

DispatcherServlet

Delegate Request

GrailsController

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

• commons-fileupload gone • No internal forwarding

41

Evolution of Metaprogramming

42

Runtime Metaprogramming

(ExpandoMetaClass)

Compile time Metaprogramming(AST Transforms)

Traits & Transforms

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

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)  {            …      }  }

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  !

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

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

Grails 3.0: Challenges

• Compatibility – Plugins – Build System

• Modularization – Servlet API independence – Refactoring

47

3.0

!Q & AGrails 3.0

3.0

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