Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

! Grails 2.4 What’s new? 2.4

Slide 5

Slide 5 text

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.0 2.4

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

Groovy 2.3 • Traits • Java 8 • Implicit closure coercion • Lots more! • http://docs.codehaus.org/ display/GROOVY/Groovy +2.3+release+notes 7

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

@GrailsCompileStatic • Grails-aware version of Groovy’s @CompileStatic 12 import  grails.compiler.*   ! @GrailsCompileStatic   class  BookController  {     …   }

Slide 13

Slide 13 text

Maven-style Dependency Management • Use management block to declare managed dependencies 13 ! management  {      dependency  "commons-­‐logging:commons-­‐ logging:1.1.3"   }

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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        2.3.8    

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

! Q & A Grails 2.4 2.4

Slide 22

Slide 22 text

! The Future Grails 3.0 3.0

Slide 23

Slide 23 text

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.0 3.0

Slide 24

Slide 24 text

Grails 3.0: Goals • Build on Spring Boot • Plugin System & Events • Support Multi Project Builds • Support Micro Services • Remove Bloat • Reduce Dependencies 24 3.0 3.0

Slide 25

Slide 25 text

Spring IO Platform Reprise 25 Jobs, Steps,
 Ingestion, Export,
 Controllers, REST, Channels, Adapters,
 WEB INTEGRATION BATCH BIG DATA SPRING CORE FRAMEWOR SECURIT GROOV REACTO DATA RELATIONA NON- BOOT Bootable, Minimal, Ops-Ready GRAILS XD IO IO

Slide 26

Slide 26 text

Spring IO Platform 26 Grails Spring IO Platform Spring XD Spring Foundation Apps 3rd Party Dependencies Spring Boot

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

Plugin Delineation 29 Grails.sh Static void main Gradle Build Forked Grails Runtime test-app shell run-app console Codegen Plugins Build Time Plugins Runtime Plugins

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

! Demo Grails 3.0 
 Gradle 3.0

Slide 32

Slide 32 text

Spring Boot • Grails 3.0 to be built on Spring Boot • Boot to handle • Embedded servers • Runnable JARs • WAR packaging • Scripting / Micro Services 32

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

! Demo Grails 3.0 
 Micro Services 3.0

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

Simplification • Removed – UrlMappingsFilter – GrailsDispatcherServlet – SimpleGrailsController – Sitemesh Filter 38

Slide 39

Slide 39 text

Old Grails 2.x Flow 39 UrlMappingsFilter GrailsPageFilter Decorate Request Forward Request GrailsDispatherServlet Delegate Request GrailsController

Slide 40

Slide 40 text

Grails 3.0 Flow • GrailsDispatcherSerlvet 50 lines of code in 3.x, 
 but 545 lines in 2.x 40 DispatcherServlet Delegate Request GrailsController

Slide 41

Slide 41 text

Benefits of Simplification • Less code to maintain • Better performance • Better integration with Spring • Fewer dependencies • commons-fileupload gone • No internal forwarding 41

Slide 42

Slide 42 text

Evolution of Metaprogramming 42 Runtime
 Metaprogramming
 (ExpandoMetaClass) Compile time
 Metaprogramming
 (AST Transforms) Traits & 
 Transforms Grails 1.x Grails 2.x Grails 3.x

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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   !

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

Grails 3.0: Challenges • Compatibility – Plugins – Build System • Modularization – Servlet API independence – Refactoring 47 3.0

Slide 48

Slide 48 text

! Q & A Grails 3.0 3.0

Slide 49

Slide 49 text

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