Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Grails 3 Preview

graemerocher
September 09, 2014

Grails 3 Preview

Talk by Graeme Rocher on the future of the Grails framework and upcoming 3.0 version

graemerocher

September 09, 2014
Tweet

More Decks by graemerocher

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

  3. 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

    View Slide

  4. !
    Grails 2.4
    What’s new?
    2.4

    View Slide

  5. 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

    View Slide

  6. 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

    View Slide

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

    View Slide

  8. 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

    View Slide

  9. 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

    View Slide

  10. 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

    View Slide

  11. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. 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

    View Slide

  19. 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  
     

    View Slide

  20. 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

    View Slide

  21. !
    Q & A
    Grails 2.4
    2.4

    View Slide

  22. !
    The Future
    Grails 3.0
    3.0

    View Slide

  23. 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

    View Slide

  24. 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

    View Slide

  25. 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

    View Slide

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

    View Slide

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

    View Slide

  28. 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

    View Slide

  29. 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

    View Slide

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

    View Slide

  31. !
    Demo
    Grails 3.0 

    Gradle
    3.0

    View Slide

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

    View Slide

  33. 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

    View Slide

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

    View Slide

  35. !
    Demo
    Grails 3.0 

    Micro Services
    3.0

    View Slide

  36. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    but 545 lines in 2.x
    40
    DispatcherServlet
    Delegate Request
    GrailsController

    View Slide

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

    View Slide

  42. Evolution of Metaprogramming
    42
    Runtime

    Metaprogramming

    (ExpandoMetaClass)
    Compile time

    Metaprogramming

    (AST Transforms)
    Traits & 

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

    View Slide

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

    View Slide

  44. 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  
    !

    View Slide

  45. 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

    View Slide

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

    View Slide

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

    View Slide

  48. !
    Q & A
    Grails 3.0
    3.0

    View Slide

  49. 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

    View Slide