SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
Grails Update


                       Peter Ledbrook




Monday, 30 May 2011                     1
Past year

     • Grails 1.3 line
          – Plugins in dependency DSL
     • More and more plugins
          – Spring Security Core et al.
          – RabbitMQ
          – Gemfire
          – Resources, etc.
     • noSQL
          – Redis, MongoDB, Riak, etc.




                                          2

Monday, 30 May 2011                           2
New users




                      3

Monday, 30 May 2011       3
Grails 1.4

     • Groovy 1.8
     • Spring 3.1
     • Hibernate 3.6
     • Tomcat 7
     • Prototype => jQuery

                             4

Monday, 30 May 2011              4
Grails 1.4

     • Data storage
     • Better testing
     • User experience
     • A better look
     • A truly collaborative effort

                                      5

Monday, 30 May 2011                       5
Grails 1.4

     • Data storage
     • Better testing
     • User experience
     • A better look
     • A truly collaborative effort

                                      6

Monday, 30 May 2011                       6
GORM API




     • Plugins should not assume Hibernate!

                                              7

Monday, 30 May 2011                               7
SQL database migration


                      Hibernate ‘update’
                              +
                       Production data
                              =

                              ?


                                           8

Monday, 30 May 2011                            8
SQL database migration




                          Liquibase
                      Database Migration
                              +
                           Plugin
                          Autobase



                                           9

Monday, 30 May 2011                            9
SQL database migration

                      Pre-production, Hibernate ‘update’ or ‘create-drop’



                                   dbm-generate-changelog
                                     dbm-changelog-sync



                                    Change domain model



                                        dbm-gorm-diff
                                         dbm-update


                                                                            10

Monday, 30 May 2011                                                              10
SQL reverse engineering

                      install-plugin db-reverse-engineer




                                              class Person {
                                                  String name
                                                  Integer age
                                                  ...
                                              }




                                                                11

Monday, 30 May 2011                                                  11
Other database stuff

     • Abstract base domain classes
          – These now result in a table
     • findOrCreateWhere()
     • findOrSaveWhere()
     def user = User.findByLogin('admin')
     if (!user) {
     def user = User.findOrSaveWhere(login: 'admin')
         user = new User(login: 'admin')
         user.save(failOnError: true)
     }




                                                      12

Monday, 30 May 2011                                        12
Grails 1.4

     • Data storage
     • Better testing
     • User experience
     • A better look
     • A truly collaborative effort

                                      13

Monday, 30 May 2011                        13
Unit testing pre-1.4

     • mockDomainClass() had only partial GORM support
          – always lagged changes in GORM
     • Inheritance-based
          – hierarchy duplicated for Spock
          – difficult to extend
     • Weak support for web-related testing
          – controllers
          – tag libraries




                                                         14

Monday, 30 May 2011                                           14
The mixin approach


      class MyControllerUnitTests extends ControllerUnitTestCase {
          void setUp() {
              mockDomain(Person, [
                      new Person(...),
                      new Person(...) ])
          }

               void testIndex() {
                   def model = this.controller.index()
                   ...
               }
      }




                                                                     15

Monday, 30 May 2011                                                       15
The mixin approach


      class MyControllerUnitTests {
          void setUp() {
              mockDomain(Person, [
                      new Person(...),
                      new Person(...) ])
          }

               void testIndex() {
                   def model = this.controller.index()
                   ...
               }
      }




                                                         16

Monday, 30 May 2011                                           16
The mixin approach
      @TestFor(MyController)
      @Mock(Person)
      class MyControllerUnitTests {
          void setUp() {
              mockDomain(Person, [
                      new Person(...),
                      new Person(...) ])
          }

               void testIndex() {
                   def model = this.controller.index()
                   ...
               }
      }




                                                         17

Monday, 30 May 2011                                           17
The mixin approach
      @TestFor(MyController)
      @Mock(Person)
      class MyControllerUnitTests {
          void setUp() {
              new Person(...).save()
              new Person(...).save()
          }

               void testIndex() {
                   def model = this.controller.index()
                   ...
               }
      }




                                                         18

Monday, 30 May 2011                                           18
The mixin approach (optional)
      @TestFor(MyController)
      @Mock(Person)
      class MyControllerUnitTests {
          @Before
          void before() {
              new Person(...).save()
              new Person(...).save()
          }

               @Test
               void indexAction() {
                   def model = this.controller.index()
                   ...
               }
      }




                                                         19

Monday, 30 May 2011                                           19
Support for testing...

     •   Tag libraries
     •   Command objects
     •   XML & JSON responses
     •   File upload
     •   View and template rendering
     •   Filters
     •   URL mappings
     •   Criteria queries
     •   and more!




                                       20

Monday, 30 May 2011                         20
Grails 1.4

     • Data storage
     • Better testing
     • User experience
     • A better look
     • A truly collaborative effort

                                      21

Monday, 30 May 2011                        21
New automatic reloading

     • Reloading in run-app works with
          – Typed service references
          – Domain classes
          – src/groovy, src/java
     • Any command with -agent
     • Interactive mode and integration tests?




                                                 22

Monday, 30 May 2011                                   22
Plugin portal


                + Plugin usage tracking
                + Grails usage tracking
                + More info about plugins
                How many We don’t know plugin?
                           people use each
                      Licence
                      Developers
                      Issue tracker
                      SCM
                      Dependencies (JAR & plugin)


                                                    23

Monday, 30 May 2011                                      23
Other stuff

     • Snapshot handling fixed
          – No need to clear Ivy cache when new snapshot available
     • Interactive mode
          – Eliminate Permgen errors?
     • H2 console
          – Out of the box interrogation of database
     • Binary plugins
          – Plugins as JAR dependencies!
     • AST transforms
          – Use domain classes from Java!
          – Real ‘errors’ and ‘log’ properties!
     • Public methods on controllers == actions

                                                                     24

Monday, 30 May 2011                                                       24
Grails 1.4

     • Data storage
     • Better testing
     • User experience
     • A better look
     • A truly collaborative effort

                                      25

Monday, 30 May 2011                        25
26

Monday, 30 May 2011        26
Grails 1.4

     • Data storage
     • Better testing
     • User experience
     • A better look
     • A truly collaborative effort

                                      27

Monday, 30 May 2011                        27
Contributors




                      Marc Palmer

                      Resources




                                    28

Monday, 30 May 2011                      28
Contributors




       Rob Fletcher

       Scaffolding &
       jQuery



                       29

Monday, 30 May 2011         29
Contributors




                      Stéphane
                      Maldini

                      AST Magic




                                  30

Monday, 30 May 2011                    30
Contributors




         Luke Daley

         Snapshot deps
         & testing



                         31

Monday, 30 May 2011           31
Contributors




                      Jonathan
                      Pearlin

                      Maven



                                 32

Monday, 30 May 2011                   32
Contributors




         Kim Betti

         JUnit Test
         Reports




                      33

Monday, 30 May 2011        33
Contributors




                      34

Monday, 30 May 2011        34
Other contributions

     •   60+ pull requests on grails-core
     •   35+ pull requests on grails-docs
     •   More and more plugins
     •   GitHub for the win!
          – grails-core
          – grails-docs
          – grails-website
          – grails-maven
          – and many, many plugins




                                            35

Monday, 30 May 2011                              35
Grails in the cloud




                           ?
                               36

Monday, 30 May 2011                 36
For the future

     • A continued focus on
          – Reliability
          – User experience
          – Modularity
          – More cloud

                              37

Monday, 30 May 2011                37
Thank you!

                       Questions?




                                    38

Monday, 30 May 2011                      38

Mais conteúdo relacionado

Destaque

GR8Conf 2011: Grails, how to plug in
GR8Conf 2011: Grails, how to plug inGR8Conf 2011: Grails, how to plug in
GR8Conf 2011: Grails, how to plug inGR8Conf
 
GR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting GrailsGR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting GrailsGR8Conf
 
GR8Conf 2011: CodeNarc and GMetrics
GR8Conf 2011: CodeNarc and GMetricsGR8Conf 2011: CodeNarc and GMetrics
GR8Conf 2011: CodeNarc and GMetricsGR8Conf
 
Developing Mobile HTML5 Apps with Grails
Developing Mobile HTML5 Apps with GrailsDeveloping Mobile HTML5 Apps with Grails
Developing Mobile HTML5 Apps with GrailsGR8Conf
 
Idiomatic spock
Idiomatic spockIdiomatic spock
Idiomatic spockGR8Conf
 
Mum, I want to be a Groovy full-stack developer
Mum, I want to be a Groovy full-stack developerMum, I want to be a Groovy full-stack developer
Mum, I want to be a Groovy full-stack developerGR8Conf
 
Metaprogramming with Groovy
Metaprogramming with GroovyMetaprogramming with Groovy
Metaprogramming with GroovyGR8Conf
 
Creating and testing REST contracts with Accurest Gradle
Creating and testing REST contracts with Accurest Gradle Creating and testing REST contracts with Accurest Gradle
Creating and testing REST contracts with Accurest Gradle GR8Conf
 
Uml Omg Fundamental Certification 1
Uml Omg Fundamental Certification 1Uml Omg Fundamental Certification 1
Uml Omg Fundamental Certification 1Ricardo Quintero
 
Uml Presentation
Uml PresentationUml Presentation
Uml Presentationmewaseem
 
Uml diagrams
Uml diagramsUml diagrams
Uml diagramsbarney92
 

Destaque (13)

GR8Conf 2011: Grails, how to plug in
GR8Conf 2011: Grails, how to plug inGR8Conf 2011: Grails, how to plug in
GR8Conf 2011: Grails, how to plug in
 
GR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting GrailsGR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting Grails
 
GR8Conf 2011: CodeNarc and GMetrics
GR8Conf 2011: CodeNarc and GMetricsGR8Conf 2011: CodeNarc and GMetrics
GR8Conf 2011: CodeNarc and GMetrics
 
Developing Mobile HTML5 Apps with Grails
Developing Mobile HTML5 Apps with GrailsDeveloping Mobile HTML5 Apps with Grails
Developing Mobile HTML5 Apps with Grails
 
Idiomatic spock
Idiomatic spockIdiomatic spock
Idiomatic spock
 
Unified Modeling Language
Unified Modeling LanguageUnified Modeling Language
Unified Modeling Language
 
Mum, I want to be a Groovy full-stack developer
Mum, I want to be a Groovy full-stack developerMum, I want to be a Groovy full-stack developer
Mum, I want to be a Groovy full-stack developer
 
Metaprogramming with Groovy
Metaprogramming with GroovyMetaprogramming with Groovy
Metaprogramming with Groovy
 
Creating and testing REST contracts with Accurest Gradle
Creating and testing REST contracts with Accurest Gradle Creating and testing REST contracts with Accurest Gradle
Creating and testing REST contracts with Accurest Gradle
 
Uml Omg Fundamental Certification 1
Uml Omg Fundamental Certification 1Uml Omg Fundamental Certification 1
Uml Omg Fundamental Certification 1
 
Uml - An Overview
Uml - An OverviewUml - An Overview
Uml - An Overview
 
Uml Presentation
Uml PresentationUml Presentation
Uml Presentation
 
Uml diagrams
Uml diagramsUml diagrams
Uml diagrams
 

Semelhante a GR8Conf 2011: Grails 1.4 Update by Peter Ledbrook

GR8Conf 2011: Tuning Grails Applications by Peter Ledbrook
GR8Conf 2011: Tuning Grails Applications by Peter LedbrookGR8Conf 2011: Tuning Grails Applications by Peter Ledbrook
GR8Conf 2011: Tuning Grails Applications by Peter LedbrookGR8Conf
 
Introduction to JUnit testing in OpenDaylight
Introduction to JUnit testing in OpenDaylightIntroduction to JUnit testing in OpenDaylight
Introduction to JUnit testing in OpenDaylightOpenDaylight
 
MarsJUG - Une nouvelle vision des tests avec Arquillian
MarsJUG - Une nouvelle vision des tests avec ArquillianMarsJUG - Une nouvelle vision des tests avec Arquillian
MarsJUG - Une nouvelle vision des tests avec ArquillianAlexis Hassler
 
Junit mockito and PowerMock in Java
Junit mockito and  PowerMock in JavaJunit mockito and  PowerMock in Java
Junit mockito and PowerMock in JavaAnkur Maheshwari
 
Backbone.js - Michał Taberski (PRUG 2.0)
Backbone.js - Michał Taberski (PRUG 2.0)Backbone.js - Michał Taberski (PRUG 2.0)
Backbone.js - Michał Taberski (PRUG 2.0)ecommerce poland expo
 
33rd Degree 2013, Bad Tests, Good Tests
33rd Degree 2013, Bad Tests, Good Tests33rd Degree 2013, Bad Tests, Good Tests
33rd Degree 2013, Bad Tests, Good TestsTomek Kaczanowski
 
How and what to unit test
How and what to unit testHow and what to unit test
How and what to unit testEugenio Lentini
 
Easy Java Integration Testing with Testcontainers​
Easy Java Integration Testing with Testcontainers​Easy Java Integration Testing with Testcontainers​
Easy Java Integration Testing with Testcontainers​Payara
 
Generating characterization tests for legacy code
Generating characterization tests for legacy codeGenerating characterization tests for legacy code
Generating characterization tests for legacy codeJonas Follesø
 
BizSpark SF Lightning Talk: "Automated Testing (Unit, Integration and Systems...
BizSpark SF Lightning Talk: "Automated Testing (Unit, Integration and Systems...BizSpark SF Lightning Talk: "Automated Testing (Unit, Integration and Systems...
BizSpark SF Lightning Talk: "Automated Testing (Unit, Integration and Systems...Mark A
 
Continuous Integration and Drupal
Continuous Integration and DrupalContinuous Integration and Drupal
Continuous Integration and DrupalSteven Merrill
 
Enjoy Munit with Mule
Enjoy Munit with MuleEnjoy Munit with Mule
Enjoy Munit with MuleBui Kiet
 
Art of unit testing: How developer should care about code quality
Art of unit testing: How developer should care about code qualityArt of unit testing: How developer should care about code quality
Art of unit testing: How developer should care about code qualityDmytro Patserkovskyi
 
NUS-ISS Learning Day 2019-Deploying AI apps using tensor flow lite in mobile ...
NUS-ISS Learning Day 2019-Deploying AI apps using tensor flow lite in mobile ...NUS-ISS Learning Day 2019-Deploying AI apps using tensor flow lite in mobile ...
NUS-ISS Learning Day 2019-Deploying AI apps using tensor flow lite in mobile ...NUS-ISS
 
Implementing Quality on Java projects
Implementing Quality on Java projectsImplementing Quality on Java projects
Implementing Quality on Java projectsVincent Massol
 
Drizzle 7.0, Future of Virtualizing
Drizzle 7.0, Future of VirtualizingDrizzle 7.0, Future of Virtualizing
Drizzle 7.0, Future of VirtualizingBrian Aker
 

Semelhante a GR8Conf 2011: Grails 1.4 Update by Peter Ledbrook (20)

GR8Conf 2011: Tuning Grails Applications by Peter Ledbrook
GR8Conf 2011: Tuning Grails Applications by Peter LedbrookGR8Conf 2011: Tuning Grails Applications by Peter Ledbrook
GR8Conf 2011: Tuning Grails Applications by Peter Ledbrook
 
Robotlegs Introduction
Robotlegs IntroductionRobotlegs Introduction
Robotlegs Introduction
 
Introduction to JUnit testing in OpenDaylight
Introduction to JUnit testing in OpenDaylightIntroduction to JUnit testing in OpenDaylight
Introduction to JUnit testing in OpenDaylight
 
MarsJUG - Une nouvelle vision des tests avec Arquillian
MarsJUG - Une nouvelle vision des tests avec ArquillianMarsJUG - Une nouvelle vision des tests avec Arquillian
MarsJUG - Une nouvelle vision des tests avec Arquillian
 
Mini training - Moving to xUnit.net
Mini training - Moving to xUnit.netMini training - Moving to xUnit.net
Mini training - Moving to xUnit.net
 
Junit mockito and PowerMock in Java
Junit mockito and  PowerMock in JavaJunit mockito and  PowerMock in Java
Junit mockito and PowerMock in Java
 
Backbone.js - Michał Taberski (PRUG 2.0)
Backbone.js - Michał Taberski (PRUG 2.0)Backbone.js - Michał Taberski (PRUG 2.0)
Backbone.js - Michał Taberski (PRUG 2.0)
 
33rd Degree 2013, Bad Tests, Good Tests
33rd Degree 2013, Bad Tests, Good Tests33rd Degree 2013, Bad Tests, Good Tests
33rd Degree 2013, Bad Tests, Good Tests
 
How and what to unit test
How and what to unit testHow and what to unit test
How and what to unit test
 
Easy Java Integration Testing with Testcontainers​
Easy Java Integration Testing with Testcontainers​Easy Java Integration Testing with Testcontainers​
Easy Java Integration Testing with Testcontainers​
 
Generating characterization tests for legacy code
Generating characterization tests for legacy codeGenerating characterization tests for legacy code
Generating characterization tests for legacy code
 
Unit testing basic
Unit testing basicUnit testing basic
Unit testing basic
 
BizSpark SF Lightning Talk: "Automated Testing (Unit, Integration and Systems...
BizSpark SF Lightning Talk: "Automated Testing (Unit, Integration and Systems...BizSpark SF Lightning Talk: "Automated Testing (Unit, Integration and Systems...
BizSpark SF Lightning Talk: "Automated Testing (Unit, Integration and Systems...
 
Junit and testNG
Junit and testNGJunit and testNG
Junit and testNG
 
Continuous Integration and Drupal
Continuous Integration and DrupalContinuous Integration and Drupal
Continuous Integration and Drupal
 
Enjoy Munit with Mule
Enjoy Munit with MuleEnjoy Munit with Mule
Enjoy Munit with Mule
 
Art of unit testing: How developer should care about code quality
Art of unit testing: How developer should care about code qualityArt of unit testing: How developer should care about code quality
Art of unit testing: How developer should care about code quality
 
NUS-ISS Learning Day 2019-Deploying AI apps using tensor flow lite in mobile ...
NUS-ISS Learning Day 2019-Deploying AI apps using tensor flow lite in mobile ...NUS-ISS Learning Day 2019-Deploying AI apps using tensor flow lite in mobile ...
NUS-ISS Learning Day 2019-Deploying AI apps using tensor flow lite in mobile ...
 
Implementing Quality on Java projects
Implementing Quality on Java projectsImplementing Quality on Java projects
Implementing Quality on Java projects
 
Drizzle 7.0, Future of Virtualizing
Drizzle 7.0, Future of VirtualizingDrizzle 7.0, Future of Virtualizing
Drizzle 7.0, Future of Virtualizing
 

Mais de GR8Conf

DevOps Enabling Your Team
DevOps Enabling Your TeamDevOps Enabling Your Team
DevOps Enabling Your TeamGR8Conf
 
Scraping with Geb
Scraping with GebScraping with Geb
Scraping with GebGR8Conf
 
How to create a conference android app with Groovy and Android
How to create a conference android app with Groovy and AndroidHow to create a conference android app with Groovy and Android
How to create a conference android app with Groovy and AndroidGR8Conf
 
Ratpack On the Docks
Ratpack On the DocksRatpack On the Docks
Ratpack On the DocksGR8Conf
 
Groovy Powered Clean Code
Groovy Powered Clean CodeGroovy Powered Clean Code
Groovy Powered Clean CodeGR8Conf
 
Cut your Grails application to pieces - build feature plugins
Cut your Grails application to pieces - build feature pluginsCut your Grails application to pieces - build feature plugins
Cut your Grails application to pieces - build feature pluginsGR8Conf
 
Performance tuning Grails applications
 Performance tuning Grails applications Performance tuning Grails applications
Performance tuning Grails applicationsGR8Conf
 
Ratpack and Grails 3
 Ratpack and Grails 3 Ratpack and Grails 3
Ratpack and Grails 3GR8Conf
 
Grails & DevOps: continuous integration and delivery in the cloud
Grails & DevOps: continuous integration and delivery in the cloudGrails & DevOps: continuous integration and delivery in the cloud
Grails & DevOps: continuous integration and delivery in the cloudGR8Conf
 
Functional testing your Grails app with GEB
Functional testing your Grails app with GEBFunctional testing your Grails app with GEB
Functional testing your Grails app with GEBGR8Conf
 
Deploying, Scaling, and Running Grails on AWS and VPC
Deploying, Scaling, and Running Grails on AWS and VPCDeploying, Scaling, and Running Grails on AWS and VPC
Deploying, Scaling, and Running Grails on AWS and VPCGR8Conf
 
The Grails introduction workshop
The Grails introduction workshopThe Grails introduction workshop
The Grails introduction workshopGR8Conf
 
The Groovy Ecosystem Revisited
The Groovy Ecosystem RevisitedThe Groovy Ecosystem Revisited
The Groovy Ecosystem RevisitedGR8Conf
 
Groovy 3 and the new Groovy Meta Object Protocol in examples
Groovy 3 and the new Groovy Meta Object Protocol in examplesGroovy 3 and the new Groovy Meta Object Protocol in examples
Groovy 3 and the new Groovy Meta Object Protocol in examplesGR8Conf
 
Integration using Apache Camel and Groovy
Integration using Apache Camel and GroovyIntegration using Apache Camel and Groovy
Integration using Apache Camel and GroovyGR8Conf
 
CRaSH the shell for the Java Virtual Machine
CRaSH the shell for the Java Virtual MachineCRaSH the shell for the Java Virtual Machine
CRaSH the shell for the Java Virtual MachineGR8Conf
 
Grooscript gr8conf
Grooscript gr8confGrooscript gr8conf
Grooscript gr8confGR8Conf
 
CRaSH the shell for the Java Virtual Machine
CRaSH the shell for the Java Virtual MachineCRaSH the shell for the Java Virtual Machine
CRaSH the shell for the Java Virtual MachineGR8Conf
 
Jan reher may 2013
Jan reher may 2013Jan reher may 2013
Jan reher may 2013GR8Conf
 
Good Form - complex web forms made Groovy
Good Form - complex web forms made GroovyGood Form - complex web forms made Groovy
Good Form - complex web forms made GroovyGR8Conf
 

Mais de GR8Conf (20)

DevOps Enabling Your Team
DevOps Enabling Your TeamDevOps Enabling Your Team
DevOps Enabling Your Team
 
Scraping with Geb
Scraping with GebScraping with Geb
Scraping with Geb
 
How to create a conference android app with Groovy and Android
How to create a conference android app with Groovy and AndroidHow to create a conference android app with Groovy and Android
How to create a conference android app with Groovy and Android
 
Ratpack On the Docks
Ratpack On the DocksRatpack On the Docks
Ratpack On the Docks
 
Groovy Powered Clean Code
Groovy Powered Clean CodeGroovy Powered Clean Code
Groovy Powered Clean Code
 
Cut your Grails application to pieces - build feature plugins
Cut your Grails application to pieces - build feature pluginsCut your Grails application to pieces - build feature plugins
Cut your Grails application to pieces - build feature plugins
 
Performance tuning Grails applications
 Performance tuning Grails applications Performance tuning Grails applications
Performance tuning Grails applications
 
Ratpack and Grails 3
 Ratpack and Grails 3 Ratpack and Grails 3
Ratpack and Grails 3
 
Grails & DevOps: continuous integration and delivery in the cloud
Grails & DevOps: continuous integration and delivery in the cloudGrails & DevOps: continuous integration and delivery in the cloud
Grails & DevOps: continuous integration and delivery in the cloud
 
Functional testing your Grails app with GEB
Functional testing your Grails app with GEBFunctional testing your Grails app with GEB
Functional testing your Grails app with GEB
 
Deploying, Scaling, and Running Grails on AWS and VPC
Deploying, Scaling, and Running Grails on AWS and VPCDeploying, Scaling, and Running Grails on AWS and VPC
Deploying, Scaling, and Running Grails on AWS and VPC
 
The Grails introduction workshop
The Grails introduction workshopThe Grails introduction workshop
The Grails introduction workshop
 
The Groovy Ecosystem Revisited
The Groovy Ecosystem RevisitedThe Groovy Ecosystem Revisited
The Groovy Ecosystem Revisited
 
Groovy 3 and the new Groovy Meta Object Protocol in examples
Groovy 3 and the new Groovy Meta Object Protocol in examplesGroovy 3 and the new Groovy Meta Object Protocol in examples
Groovy 3 and the new Groovy Meta Object Protocol in examples
 
Integration using Apache Camel and Groovy
Integration using Apache Camel and GroovyIntegration using Apache Camel and Groovy
Integration using Apache Camel and Groovy
 
CRaSH the shell for the Java Virtual Machine
CRaSH the shell for the Java Virtual MachineCRaSH the shell for the Java Virtual Machine
CRaSH the shell for the Java Virtual Machine
 
Grooscript gr8conf
Grooscript gr8confGrooscript gr8conf
Grooscript gr8conf
 
CRaSH the shell for the Java Virtual Machine
CRaSH the shell for the Java Virtual MachineCRaSH the shell for the Java Virtual Machine
CRaSH the shell for the Java Virtual Machine
 
Jan reher may 2013
Jan reher may 2013Jan reher may 2013
Jan reher may 2013
 
Good Form - complex web forms made Groovy
Good Form - complex web forms made GroovyGood Form - complex web forms made Groovy
Good Form - complex web forms made Groovy
 

Último

08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 

Último (20)

08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 

GR8Conf 2011: Grails 1.4 Update by Peter Ledbrook

  • 1. Grails Update Peter Ledbrook Monday, 30 May 2011 1
  • 2. Past year • Grails 1.3 line – Plugins in dependency DSL • More and more plugins – Spring Security Core et al. – RabbitMQ – Gemfire – Resources, etc. • noSQL – Redis, MongoDB, Riak, etc. 2 Monday, 30 May 2011 2
  • 3. New users 3 Monday, 30 May 2011 3
  • 4. Grails 1.4 • Groovy 1.8 • Spring 3.1 • Hibernate 3.6 • Tomcat 7 • Prototype => jQuery 4 Monday, 30 May 2011 4
  • 5. Grails 1.4 • Data storage • Better testing • User experience • A better look • A truly collaborative effort 5 Monday, 30 May 2011 5
  • 6. Grails 1.4 • Data storage • Better testing • User experience • A better look • A truly collaborative effort 6 Monday, 30 May 2011 6
  • 7. GORM API • Plugins should not assume Hibernate! 7 Monday, 30 May 2011 7
  • 8. SQL database migration Hibernate ‘update’ + Production data = ? 8 Monday, 30 May 2011 8
  • 9. SQL database migration Liquibase Database Migration + Plugin Autobase 9 Monday, 30 May 2011 9
  • 10. SQL database migration Pre-production, Hibernate ‘update’ or ‘create-drop’ dbm-generate-changelog dbm-changelog-sync Change domain model dbm-gorm-diff dbm-update 10 Monday, 30 May 2011 10
  • 11. SQL reverse engineering install-plugin db-reverse-engineer class Person { String name Integer age ... } 11 Monday, 30 May 2011 11
  • 12. Other database stuff • Abstract base domain classes – These now result in a table • findOrCreateWhere() • findOrSaveWhere() def user = User.findByLogin('admin') if (!user) { def user = User.findOrSaveWhere(login: 'admin') user = new User(login: 'admin') user.save(failOnError: true) } 12 Monday, 30 May 2011 12
  • 13. Grails 1.4 • Data storage • Better testing • User experience • A better look • A truly collaborative effort 13 Monday, 30 May 2011 13
  • 14. Unit testing pre-1.4 • mockDomainClass() had only partial GORM support – always lagged changes in GORM • Inheritance-based – hierarchy duplicated for Spock – difficult to extend • Weak support for web-related testing – controllers – tag libraries 14 Monday, 30 May 2011 14
  • 15. The mixin approach class MyControllerUnitTests extends ControllerUnitTestCase { void setUp() { mockDomain(Person, [ new Person(...), new Person(...) ]) } void testIndex() { def model = this.controller.index() ... } } 15 Monday, 30 May 2011 15
  • 16. The mixin approach class MyControllerUnitTests { void setUp() { mockDomain(Person, [ new Person(...), new Person(...) ]) } void testIndex() { def model = this.controller.index() ... } } 16 Monday, 30 May 2011 16
  • 17. The mixin approach @TestFor(MyController) @Mock(Person) class MyControllerUnitTests { void setUp() { mockDomain(Person, [ new Person(...), new Person(...) ]) } void testIndex() { def model = this.controller.index() ... } } 17 Monday, 30 May 2011 17
  • 18. The mixin approach @TestFor(MyController) @Mock(Person) class MyControllerUnitTests { void setUp() { new Person(...).save() new Person(...).save() } void testIndex() { def model = this.controller.index() ... } } 18 Monday, 30 May 2011 18
  • 19. The mixin approach (optional) @TestFor(MyController) @Mock(Person) class MyControllerUnitTests { @Before void before() { new Person(...).save() new Person(...).save() } @Test void indexAction() { def model = this.controller.index() ... } } 19 Monday, 30 May 2011 19
  • 20. Support for testing... • Tag libraries • Command objects • XML & JSON responses • File upload • View and template rendering • Filters • URL mappings • Criteria queries • and more! 20 Monday, 30 May 2011 20
  • 21. Grails 1.4 • Data storage • Better testing • User experience • A better look • A truly collaborative effort 21 Monday, 30 May 2011 21
  • 22. New automatic reloading • Reloading in run-app works with – Typed service references – Domain classes – src/groovy, src/java • Any command with -agent • Interactive mode and integration tests? 22 Monday, 30 May 2011 22
  • 23. Plugin portal + Plugin usage tracking + Grails usage tracking + More info about plugins How many We don’t know plugin? people use each Licence Developers Issue tracker SCM Dependencies (JAR & plugin) 23 Monday, 30 May 2011 23
  • 24. Other stuff • Snapshot handling fixed – No need to clear Ivy cache when new snapshot available • Interactive mode – Eliminate Permgen errors? • H2 console – Out of the box interrogation of database • Binary plugins – Plugins as JAR dependencies! • AST transforms – Use domain classes from Java! – Real ‘errors’ and ‘log’ properties! • Public methods on controllers == actions 24 Monday, 30 May 2011 24
  • 25. Grails 1.4 • Data storage • Better testing • User experience • A better look • A truly collaborative effort 25 Monday, 30 May 2011 25
  • 26. 26 Monday, 30 May 2011 26
  • 27. Grails 1.4 • Data storage • Better testing • User experience • A better look • A truly collaborative effort 27 Monday, 30 May 2011 27
  • 28. Contributors Marc Palmer Resources 28 Monday, 30 May 2011 28
  • 29. Contributors Rob Fletcher Scaffolding & jQuery 29 Monday, 30 May 2011 29
  • 30. Contributors Stéphane Maldini AST Magic 30 Monday, 30 May 2011 30
  • 31. Contributors Luke Daley Snapshot deps & testing 31 Monday, 30 May 2011 31
  • 32. Contributors Jonathan Pearlin Maven 32 Monday, 30 May 2011 32
  • 33. Contributors Kim Betti JUnit Test Reports 33 Monday, 30 May 2011 33
  • 34. Contributors 34 Monday, 30 May 2011 34
  • 35. Other contributions • 60+ pull requests on grails-core • 35+ pull requests on grails-docs • More and more plugins • GitHub for the win! – grails-core – grails-docs – grails-website – grails-maven – and many, many plugins 35 Monday, 30 May 2011 35
  • 36. Grails in the cloud ? 36 Monday, 30 May 2011 36
  • 37. For the future • A continued focus on – Reliability – User experience – Modularity – More cloud 37 Monday, 30 May 2011 37
  • 38. Thank you! Questions? 38 Monday, 30 May 2011 38