SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
By Graeme RocherRoad to Grails 3.0
Agenda
§ State of Nation
§ What’s new in Grails 2.3?
§ What’s planned for Grails 2.4?
§ What’s planned for Grails 3.0?
§ Summary / Q & A
State of Nation
§ Grails 2.3.7 most recent version
§ One release per month
§ Hundreds of bugs fixed in the last 3
months
§ More than 1,000 plugins now for
Grails
What’s new in Grails 2.3?
• Forked Execution and Test Daemon
• Dependency Resolution with Aether
• Complete Server-Side REST Support
• Async Programmings APIs
• New Data Binding APIs
!4
2.3
What’s new in Grails 2.3?
• XSS Prevention
• Hibernate 4 Support (via Plugin)
• RESTful Scaffolding v2.0
• Controller Namespaces
• ... and much, much more
!5
2.3
Aether & Dependency Management
• Aether == Same dependency
resolution engine as Maven
– No snapshot troubles
– Same local repo
– No Ivy bugs
• New dependency-report
command to visualize graph
!6
REST: URL Mappings
• RESTful Mappings
– Single or Multiple resources
– Versioning
– Nested resources
• New url-mappings-report
command to mappings
!7
REST: @Resource Transformation
• Automatically exposes a
domain class as a REST
resource
• Configurable formats
• Configuration HTTP
methods
!8
import	
  grails.rest.*	
  
!
@Resource	
  
class	
  Person	
  {	
  
	
  	
  	
  	
  String	
  name	
  
}
REST: The respond method
• Sends the most
appropriate response for
the given object
• For HTML calculates a
model by convention and
delegates to view

!9
class	
  PersonController	
  
{	
  
def	
  index()	
  {	
  
respond	
  Book.list()	
  
}	
  
}
REST: HAL, JSON, XML Renderers
• Rendering customizable
in resources.groovy
• HAL, Atom, Vnd.Error
renders included
• Flexible and complete
!10
import	
  grails.rest.render.hal.*	
  
beans	
  =	
  {	
  
	
  halBookRenderer(HalJsonRenderer,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  rest.test.Book)	
  
}
import	
  grails.rest.render.xml.*	
  
beans	
  =	
  {	
  
	
  	
  	
  	
  bookRenderer(XmlRenderer,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Book)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  includes	
  =	
  ['title']	
  
	
  	
  	
  	
  }	
  
}
REST: Scaffolding 2.0
• Scaffolding support now a plugin
– http://grails.org/plugin/scaffolding
• Generated controllers now
RESTful
• New generate-async-
controller command for
Async support
!11
REST: Misc Goodies
• grails.rest.RestfulController
– Controller base class for inheriting RESTful actions
• The respond method
– Chooses most appropriate response format
• Versioning support via URL mapping or Accept-Version
header
• Find out more http://grails.org/doc/2.3.x/guide/
webServices.html#REST
!12
Async: Promise Primitives
• Foundational API for Async
programming
• Includes notion of Promise
• Ability to combine / chain
promises
!13
import	
  static	
  
grails.async.Promises.*	
  
!
def	
  p1	
  =	
  task	
  {	
  2	
  *	
  2	
  }	
  
def	
  p2	
  =	
  task	
  {	
  4	
  *	
  4	
  }	
  
def	
  p3	
  =	
  task	
  {	
  8	
  *	
  8	
  }	
  
assert	
  [	
  4,	
  16,	
  64	
  ]	
  ==	
  
waitAll(p1,	
  p2,	
  p3)
Async: @DelegateAsync Transform
• Transform any synchronous
API into an asynchronous
one
• Takes each method and
returns a promise
!14
!
import	
  grails.async.*	
  
!
class	
  AsyncBookService	
  {	
  
	
  	
  	
  @DelegateAsync	
  	
  
	
  	
  	
  BookService	
  bookService	
  
}	
  
Async: GORM
• Makes all GORM methods
async
• Deals with binding session
to background thread
• Works across all
datastores (MongoDB,
GORM for REST etc.)
!15
!
def	
  p1	
  =	
  Person.async.get(1)	
  
def	
  p2	
  =	
  Person.async.get(2)	
  
def	
  p3	
  =	
  Person.async.get(3)	
  
!
def	
  results	
  =	
  	
  
	
  	
  	
  	
  	
  	
  	
  waitAll(p1,	
  p2,	
  p3)	
  
Async: Request Processing
• Handle requests
asynchronously
• Uses Servlet 3.0 async
under the covers
• Create asynchronous
models
!16
import	
  static	
  
grails.async.Promises.*	
  
!
class	
  PersonController	
  {	
  
	
  	
  def	
  index()	
  {	
  
	
  	
  	
  tasks	
  books:	
  Book.async.list(),	
  
	
  	
  	
  	
  	
  	
  	
  	
  total:	
  Book.async.count(),	
  
	
  	
  	
  	
  	
  	
  	
  	
  otherValue:	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  do	
  hard	
  work	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  }	
  
}
Data Binder: @BindingFormat
• Per property formatting
• Extensible
!17
!
class	
  Person	
  {	
  
	
  @BindingFormat('MMddyyyy')	
  
	
  Date	
  birthDate	
  
	
  @BindingFormat('Uppercase')	
  
	
  String	
  salutation	
  
}
Data Binder: @BindUsing
• For cases where more
flexibility is needed
• Can be applied to class 

or property
• Takes a closure or a class

that implements 

BindingHelper
!18
!
class	
  Person	
  {	
  
	
  	
  @BindUsing({	
  
	
  	
  	
  	
  	
  	
  	
  	
  obj,	
  source	
  -­‐>	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  source['name']?	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  .toUpperCase()	
  
	
  })	
  
	
  String	
  salutation	
  
}
Data Binding: XML/JSON Command Objects
• Can now bind XML/JSON
data to command objects
• Binding can be customized
using the BindingSource
and
BindingSourceCreator
interfaces
!19
!
class	
  PersonController	
  
{	
  
	
  	
  def	
  save(PersonCmd	
  p)	
  	
  	
  
	
  	
  {	
  
	
  	
  	
  	
  ...	
  
	
  	
  }	
  
}	
  
Data Binding: Auto Query if Domain Object
• If command object is a
domain class query on id
• Passes null if domain class
not found
• If found binds XML, JSON
or params
!20
!
class	
  PersonController	
  
{	
  
	
  	
  def	
  save(Person	
  p)	
  {	
  
	
  	
  	
  	
  ...	
  
	
  	
  }	
  
}	
  
XSS Prevention
• All GSP expressions and scriptlets now escaped by
default
• Double-encoding prevention
• New raw method to mark data as safe
!21
!
//	
  Inside	
  GSP	
  
<section>${raw(page.content)}</section>	
  
Other Goodies: Hibernate 4 Support
• Hibernate 3 and 4 binary incompatible, so new plugin
• Not all plugins that work with Hibernate 3 will work with
Hibernate 4
!22
!
//	
  add	
  to	
  BuildConfig	
  
compile	
  ‘:hibernate::hibernate4:4.3.4.2’	
  
Other Goodies: @Transactional Transform
• Can be applied to any class
• No proxies required!
• Replacement for Spring’s
@Transactional annotation
!23
import	
  
grails.transactions.*	
  
!
@Transactional	
  
class	
  PersonService	
  {	
  
...	
  
}
Other Goodies: @DirtyCheck Transform
• Can be applied to any class
to add dirty checking
• Tracks calls to setters that
modify state
• Classes implement the
DirtyCheckable interface
!24
@DirtyCheck	
  
class	
  Person	
  {	
  
...	
  
}	
  
def	
  p	
  =	
  	
  
	
  new	
  Person(name:'Bob')	
  
p.trackChanges()	
  
assert	
  !p.hasChanged()	
  
p.name	
  =	
  'Fred'	
  
assert	
  p.hasChanged()
Other Goodies: Action Error Handlers
• Actions that define an exception as the first argument get
invoked if the exception is thrown from any other action
!25
!
class	
  PersonController	
  {	
  
	
  	
  	
  ...	
  
	
  	
  	
  def	
  tooOld(TooOldException	
  e)	
  {	
  
	
  	
  	
  	
  	
  	
  render	
  view:	
  'tooOld'	
  	
  	
  	
  
	
  	
  	
  }	
  
}
Other Goodies: Controller Namespaces
• Controllers can now define a namespace
• URL Mappings can map to a specific namespace
!26
!
class	
  PersonController	
  {	
  
	
  	
  	
  ...	
  
	
  	
  	
  static	
  namespace	
  =	
  'admins'	
  	
  	
  	
  	
  	
  	
  
}	
  
!
Q & A
Grails 2.3
2.3
!
The Future
Grails 2.4
2.4
Grails 2.4: Goals
• Spring 4.0 Upgrade
• Java 8 Support
• Groovy 2.3 Upgrade
• Improved @CompileStatic Support
• Asset Pipeline Plugin
• Moduralization of Codebase
• GORM & GSP Standalone
!29
3.02.4
Spring 4.0
• Native GroovyBeanDefinitionReader
(ported from BeanBuilder)
– https://spring.io/blog/2014/03/03/groovy-
bean-configuration-in-spring-framework-4
• Spring Web Socket
– https://github.com/zyro23/grails-spring-
websocket
!30
Groovy 2.3
• Traits
• Java 8
• Implicit closure coercion
• Lots more!
• http://groovy.codehaus.org/
Roadmap
!31
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!
!32
Modularization
!33
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
Standalone
• GORM for Hibernate 4 in Spring Boot
– https://gist.github.com/graemerocher/d31648899fdb461609fb
• GORM for MongoDB in Spring Boot
– https://gist.github.com/graemerocher/9683543
• GSP standalone coming
!34
!
The Future
Grails 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
• Extend the reach of Grails
!
!36
3.03.0
Grails 3.0: Goals
• Plugin Model / Event Driven
• Support Multi Project Builds
• Support Micro Services
• Remove Bloat
• Reduce Dependencies
• Discourage “Monolothic App” development
!37
3.03.0
Grails 3.0: 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
• Plugins can provide Gradle extensions
!38
Grails 3.0: App Profiles
• Each profile will have distinct plugins, runtimes and
packaging (JAR, WAR etc.)
!39
!
$	
  grails	
  create-­‐app	
  myapp	
  -­‐-­‐profile=netty	
  	
  
$	
  cd	
  myapp	
  
$	
  grails	
  package	
  
$	
  java	
  -­‐jar	
  target/myapp.jar	
  
!
Grails 3.0 Plugin Delineation
!40
grails.sh
static void
main
Gradle
Build
Forked Grails Runtime
test-app
run-app
console
shell
Codegen Plugins Build Time
Plugins
Runtime Plugins
Grails 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
!41
Grails 3.0: Challenges
• Compatibility
– Plugins
– Build System
• Modularization
– Servlet API independence
– Refactoring
!42
3.0
!
Q & A
Grails 3.0
3.0
Stay Connected.
!
!
!
!
Web: grails.org
Twitter: twitter.com/grailsframework
LinkedIn: http://linkedin.com/groups/Grails-User-Group-39757
Google +: https://plus.google.com/communities/
109558563916416343008

Más contenido relacionado

La actualidad más candente

Grails Plugin Best Practices
Grails Plugin Best PracticesGrails Plugin Best Practices
Grails Plugin Best PracticesBurt Beckwith
 
Modularizing your Grails Application with Private Plugins - SpringOne 2GX 2012
Modularizing your Grails Application with Private Plugins - SpringOne 2GX 2012Modularizing your Grails Application with Private Plugins - SpringOne 2GX 2012
Modularizing your Grails Application with Private Plugins - SpringOne 2GX 2012kennethaliu
 
Cd with Github Travis CI and Heroku
Cd with Github Travis CI and HerokuCd with Github Travis CI and Heroku
Cd with Github Travis CI and HerokuJadson Santos
 
Dropwizard and Groovy
Dropwizard and GroovyDropwizard and Groovy
Dropwizard and Groovytomaslin
 
Building Angular 2.0 applications with TypeScript
Building Angular 2.0 applications with TypeScriptBuilding Angular 2.0 applications with TypeScript
Building Angular 2.0 applications with TypeScriptMSDEVMTL
 
Kubernetes best practices
Kubernetes best practicesKubernetes best practices
Kubernetes best practicesBill Liu
 
Kubernetes on AWS
Kubernetes on AWSKubernetes on AWS
Kubernetes on AWSGrant Ellis
 
Webcast - Making kubernetes production ready
Webcast - Making kubernetes production readyWebcast - Making kubernetes production ready
Webcast - Making kubernetes production readyApplatix
 
Developing Microservices with Apache Camel
Developing Microservices with Apache CamelDeveloping Microservices with Apache Camel
Developing Microservices with Apache CamelClaus Ibsen
 
How to improve ELK log pipeline performance
How to improve ELK log pipeline performanceHow to improve ELK log pipeline performance
How to improve ELK log pipeline performanceSteven Shim
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsPablo Godel
 
Shakr - Container CI/CD with Google Cloud Platform
Shakr - Container CI/CD with Google Cloud PlatformShakr - Container CI/CD with Google Cloud Platform
Shakr - Container CI/CD with Google Cloud PlatformMinku Lee
 
Kubernetes One-Click Deployment: Hands-on Workshop (Munich)
Kubernetes One-Click Deployment: Hands-on Workshop (Munich)Kubernetes One-Click Deployment: Hands-on Workshop (Munich)
Kubernetes One-Click Deployment: Hands-on Workshop (Munich)QAware GmbH
 
"[WORKSHOP] K8S for developers", Denis Romanuk
"[WORKSHOP] K8S for developers", Denis Romanuk"[WORKSHOP] K8S for developers", Denis Romanuk
"[WORKSHOP] K8S for developers", Denis RomanukFwdays
 
Mattia Gandolfi - Improving utilization and portability with Containers and C...
Mattia Gandolfi - Improving utilization and portability with Containers and C...Mattia Gandolfi - Improving utilization and portability with Containers and C...
Mattia Gandolfi - Improving utilization and portability with Containers and C...Codemotion
 
Load Balancing in the Cloud using Nginx & Kubernetes
Load Balancing in the Cloud using Nginx & KubernetesLoad Balancing in the Cloud using Nginx & Kubernetes
Load Balancing in the Cloud using Nginx & KubernetesLee Calcote
 
Docker for PHP Developers - ZendCon 2016
Docker for PHP Developers - ZendCon 2016Docker for PHP Developers - ZendCon 2016
Docker for PHP Developers - ZendCon 2016Chris Tankersley
 
New Features of Kubernetes v1.2.0 beta
New Features of Kubernetes v1.2.0 betaNew Features of Kubernetes v1.2.0 beta
New Features of Kubernetes v1.2.0 betaGiragadurai Vallirajan
 
(DEV302) Hosting ASP.Net 5 Apps in AWS with Docker & AWS CodeDeploy
(DEV302) Hosting ASP.Net 5 Apps in AWS with Docker & AWS CodeDeploy(DEV302) Hosting ASP.Net 5 Apps in AWS with Docker & AWS CodeDeploy
(DEV302) Hosting ASP.Net 5 Apps in AWS with Docker & AWS CodeDeployAmazon Web Services
 
Play Framework: Intro & High-Level Overview
Play Framework: Intro & High-Level OverviewPlay Framework: Intro & High-Level Overview
Play Framework: Intro & High-Level OverviewJosh Padnick
 

La actualidad más candente (20)

Grails Plugin Best Practices
Grails Plugin Best PracticesGrails Plugin Best Practices
Grails Plugin Best Practices
 
Modularizing your Grails Application with Private Plugins - SpringOne 2GX 2012
Modularizing your Grails Application with Private Plugins - SpringOne 2GX 2012Modularizing your Grails Application with Private Plugins - SpringOne 2GX 2012
Modularizing your Grails Application with Private Plugins - SpringOne 2GX 2012
 
Cd with Github Travis CI and Heroku
Cd with Github Travis CI and HerokuCd with Github Travis CI and Heroku
Cd with Github Travis CI and Heroku
 
Dropwizard and Groovy
Dropwizard and GroovyDropwizard and Groovy
Dropwizard and Groovy
 
Building Angular 2.0 applications with TypeScript
Building Angular 2.0 applications with TypeScriptBuilding Angular 2.0 applications with TypeScript
Building Angular 2.0 applications with TypeScript
 
Kubernetes best practices
Kubernetes best practicesKubernetes best practices
Kubernetes best practices
 
Kubernetes on AWS
Kubernetes on AWSKubernetes on AWS
Kubernetes on AWS
 
Webcast - Making kubernetes production ready
Webcast - Making kubernetes production readyWebcast - Making kubernetes production ready
Webcast - Making kubernetes production ready
 
Developing Microservices with Apache Camel
Developing Microservices with Apache CamelDeveloping Microservices with Apache Camel
Developing Microservices with Apache Camel
 
How to improve ELK log pipeline performance
How to improve ELK log pipeline performanceHow to improve ELK log pipeline performance
How to improve ELK log pipeline performance
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web Applications
 
Shakr - Container CI/CD with Google Cloud Platform
Shakr - Container CI/CD with Google Cloud PlatformShakr - Container CI/CD with Google Cloud Platform
Shakr - Container CI/CD with Google Cloud Platform
 
Kubernetes One-Click Deployment: Hands-on Workshop (Munich)
Kubernetes One-Click Deployment: Hands-on Workshop (Munich)Kubernetes One-Click Deployment: Hands-on Workshop (Munich)
Kubernetes One-Click Deployment: Hands-on Workshop (Munich)
 
"[WORKSHOP] K8S for developers", Denis Romanuk
"[WORKSHOP] K8S for developers", Denis Romanuk"[WORKSHOP] K8S for developers", Denis Romanuk
"[WORKSHOP] K8S for developers", Denis Romanuk
 
Mattia Gandolfi - Improving utilization and portability with Containers and C...
Mattia Gandolfi - Improving utilization and portability with Containers and C...Mattia Gandolfi - Improving utilization and portability with Containers and C...
Mattia Gandolfi - Improving utilization and portability with Containers and C...
 
Load Balancing in the Cloud using Nginx & Kubernetes
Load Balancing in the Cloud using Nginx & KubernetesLoad Balancing in the Cloud using Nginx & Kubernetes
Load Balancing in the Cloud using Nginx & Kubernetes
 
Docker for PHP Developers - ZendCon 2016
Docker for PHP Developers - ZendCon 2016Docker for PHP Developers - ZendCon 2016
Docker for PHP Developers - ZendCon 2016
 
New Features of Kubernetes v1.2.0 beta
New Features of Kubernetes v1.2.0 betaNew Features of Kubernetes v1.2.0 beta
New Features of Kubernetes v1.2.0 beta
 
(DEV302) Hosting ASP.Net 5 Apps in AWS with Docker & AWS CodeDeploy
(DEV302) Hosting ASP.Net 5 Apps in AWS with Docker & AWS CodeDeploy(DEV302) Hosting ASP.Net 5 Apps in AWS with Docker & AWS CodeDeploy
(DEV302) Hosting ASP.Net 5 Apps in AWS with Docker & AWS CodeDeploy
 
Play Framework: Intro & High-Level Overview
Play Framework: Intro & High-Level OverviewPlay Framework: Intro & High-Level Overview
Play Framework: Intro & High-Level Overview
 

Destacado

Gr8Conf 2016 - GORM Inside and Out
Gr8Conf 2016 - GORM Inside and OutGr8Conf 2016 - GORM Inside and Out
Gr8Conf 2016 - GORM Inside and Outgraemerocher
 
Gr8Conf 2016 - What's new in Grails 3
Gr8Conf 2016 - What's new in Grails 3Gr8Conf 2016 - What's new in Grails 3
Gr8Conf 2016 - What's new in Grails 3graemerocher
 
Under the Hood: Using Spring in Grails
Under the Hood: Using Spring in GrailsUnder the Hood: Using Spring in Grails
Under the Hood: Using Spring in GrailsBurt Beckwith
 
Grails @ Java User Group Silicon Valley
Grails @ Java User Group Silicon ValleyGrails @ Java User Group Silicon Valley
Grails @ Java User Group Silicon ValleySven Haiges
 
Katalog - 120 vteřIn pro inovativní firmy - 9.12.2010
Katalog - 120 vteřIn pro inovativní firmy - 9.12.2010Katalog - 120 vteřIn pro inovativní firmy - 9.12.2010
Katalog - 120 vteřIn pro inovativní firmy - 9.12.2010jindrichweiss
 
Katalog 120 vteřin plus 25.9.2013
Katalog 120 vteřin plus 25.9.2013Katalog 120 vteřin plus 25.9.2013
Katalog 120 vteřin plus 25.9.2013jindrichweiss
 
Katalog firem 120 vteřin 04122013, Innovation Park a kreativci
Katalog firem 120 vteřin 04122013, Innovation Park a kreativciKatalog firem 120 vteřin 04122013, Innovation Park a kreativci
Katalog firem 120 vteřin 04122013, Innovation Park a kreativcijindrichweiss
 
Pozvánka: 120 vteřin+ Moderní technologie pro dopravu
Pozvánka: 120 vteřin+ Moderní technologie pro dopravuPozvánka: 120 vteřin+ Moderní technologie pro dopravu
Pozvánka: 120 vteřin+ Moderní technologie pro dopravujindrichweiss
 
Imagination beyond imagination
Imagination beyond imaginationImagination beyond imagination
Imagination beyond imaginationAli Anani, PhD
 
Katalog 120 vteřin pro biotechnologie 4.6.2014
Katalog 120 vteřin pro biotechnologie 4.6.2014Katalog 120 vteřin pro biotechnologie 4.6.2014
Katalog 120 vteřin pro biotechnologie 4.6.2014jindrichweiss
 
Two Steps for Rapidly Eliminating Pain in Every Business, Non-Profit Organiza...
Two Steps for Rapidly Eliminating Pain in Every Business, Non-Profit Organiza...Two Steps for Rapidly Eliminating Pain in Every Business, Non-Profit Organiza...
Two Steps for Rapidly Eliminating Pain in Every Business, Non-Profit Organiza...Rod King, Ph.D.
 
Goal Examples for Finance
Goal Examples for FinanceGoal Examples for Finance
Goal Examples for FinanceBetterWorks
 
Business Model Canvas: GOOD TOOL with BAD INSTRUCTIONS
Business Model Canvas: GOOD TOOL with BAD INSTRUCTIONSBusiness Model Canvas: GOOD TOOL with BAD INSTRUCTIONS
Business Model Canvas: GOOD TOOL with BAD INSTRUCTIONSRod King, Ph.D.
 
Goal Examples for Legal
Goal Examples for LegalGoal Examples for Legal
Goal Examples for LegalBetterWorks
 
Goal Summit 2016: The New Organization – Different by Design
Goal Summit 2016: The New Organization – Different by DesignGoal Summit 2016: The New Organization – Different by Design
Goal Summit 2016: The New Organization – Different by DesignBetterWorks
 
New insights on human behavor
New insights on human behavorNew insights on human behavor
New insights on human behavorAli Anani, PhD
 

Destacado (20)

Gr8Conf 2016 - GORM Inside and Out
Gr8Conf 2016 - GORM Inside and OutGr8Conf 2016 - GORM Inside and Out
Gr8Conf 2016 - GORM Inside and Out
 
Gr8Conf 2016 - What's new in Grails 3
Gr8Conf 2016 - What's new in Grails 3Gr8Conf 2016 - What's new in Grails 3
Gr8Conf 2016 - What's new in Grails 3
 
Under the Hood: Using Spring in Grails
Under the Hood: Using Spring in GrailsUnder the Hood: Using Spring in Grails
Under the Hood: Using Spring in Grails
 
Grails @ Java User Group Silicon Valley
Grails @ Java User Group Silicon ValleyGrails @ Java User Group Silicon Valley
Grails @ Java User Group Silicon Valley
 
Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grails
 
Katalog - 120 vteřIn pro inovativní firmy - 9.12.2010
Katalog - 120 vteřIn pro inovativní firmy - 9.12.2010Katalog - 120 vteřIn pro inovativní firmy - 9.12.2010
Katalog - 120 vteřIn pro inovativní firmy - 9.12.2010
 
Katalog 120 vteřin plus 25.9.2013
Katalog 120 vteřin plus 25.9.2013Katalog 120 vteřin plus 25.9.2013
Katalog 120 vteřin plus 25.9.2013
 
Cycling of ideas
Cycling of ideasCycling of ideas
Cycling of ideas
 
Katalog firem 120 vteřin 04122013, Innovation Park a kreativci
Katalog firem 120 vteřin 04122013, Innovation Park a kreativciKatalog firem 120 vteřin 04122013, Innovation Park a kreativci
Katalog firem 120 vteřin 04122013, Innovation Park a kreativci
 
Pozvánka: 120 vteřin+ Moderní technologie pro dopravu
Pozvánka: 120 vteřin+ Moderní technologie pro dopravuPozvánka: 120 vteřin+ Moderní technologie pro dopravu
Pozvánka: 120 vteřin+ Moderní technologie pro dopravu
 
Imagination beyond imagination
Imagination beyond imaginationImagination beyond imagination
Imagination beyond imagination
 
IPDD Kano model
IPDD Kano modelIPDD Kano model
IPDD Kano model
 
Thinking on the edge
Thinking on the edgeThinking on the edge
Thinking on the edge
 
Katalog 120 vteřin pro biotechnologie 4.6.2014
Katalog 120 vteřin pro biotechnologie 4.6.2014Katalog 120 vteřin pro biotechnologie 4.6.2014
Katalog 120 vteřin pro biotechnologie 4.6.2014
 
Two Steps for Rapidly Eliminating Pain in Every Business, Non-Profit Organiza...
Two Steps for Rapidly Eliminating Pain in Every Business, Non-Profit Organiza...Two Steps for Rapidly Eliminating Pain in Every Business, Non-Profit Organiza...
Two Steps for Rapidly Eliminating Pain in Every Business, Non-Profit Organiza...
 
Goal Examples for Finance
Goal Examples for FinanceGoal Examples for Finance
Goal Examples for Finance
 
Business Model Canvas: GOOD TOOL with BAD INSTRUCTIONS
Business Model Canvas: GOOD TOOL with BAD INSTRUCTIONSBusiness Model Canvas: GOOD TOOL with BAD INSTRUCTIONS
Business Model Canvas: GOOD TOOL with BAD INSTRUCTIONS
 
Goal Examples for Legal
Goal Examples for LegalGoal Examples for Legal
Goal Examples for Legal
 
Goal Summit 2016: The New Organization – Different by Design
Goal Summit 2016: The New Organization – Different by DesignGoal Summit 2016: The New Organization – Different by Design
Goal Summit 2016: The New Organization – Different by Design
 
New insights on human behavor
New insights on human behavorNew insights on human behavor
New insights on human behavor
 

Similar a Greach 2014 - Road to Grails 3.0

Creating applications with Grails, Angular JS and Spring Security
Creating applications with Grails, Angular JS and Spring SecurityCreating applications with Grails, Angular JS and Spring Security
Creating applications with Grails, Angular JS and Spring SecurityAlvaro Sanchez-Mariscal
 
Rapid API Development ArangoDB Foxx
Rapid API Development ArangoDB FoxxRapid API Development ArangoDB Foxx
Rapid API Development ArangoDB FoxxMichael Hackstein
 
Ajug - The Spring Update
Ajug - The Spring UpdateAjug - The Spring Update
Ajug - The Spring UpdateGunnar Hillert
 
Icinga 2009 at OSMC
Icinga 2009 at OSMCIcinga 2009 at OSMC
Icinga 2009 at OSMCIcinga
 
PLAT-16 Using Enterprise Content in Grails
PLAT-16 Using Enterprise Content in GrailsPLAT-16 Using Enterprise Content in Grails
PLAT-16 Using Enterprise Content in GrailsAlfresco Software
 
Offline first development - Glasgow PHP - January 2016
Offline first development - Glasgow PHP - January 2016Offline first development - Glasgow PHP - January 2016
Offline first development - Glasgow PHP - January 2016Glynn Bird
 
How to Contribute to Apache Usergrid
How to Contribute to Apache UsergridHow to Contribute to Apache Usergrid
How to Contribute to Apache UsergridDavid M. Johnson
 
CouchDB for Web Applications - Erlang Factory London 2009
CouchDB for Web Applications - Erlang Factory London 2009CouchDB for Web Applications - Erlang Factory London 2009
CouchDB for Web Applications - Erlang Factory London 2009Jason Davies
 
MongoDB.local Austin 2018: Solving Your Backup Needs Using MongoDB Ops Manage...
MongoDB.local Austin 2018: Solving Your Backup Needs Using MongoDB Ops Manage...MongoDB.local Austin 2018: Solving Your Backup Needs Using MongoDB Ops Manage...
MongoDB.local Austin 2018: Solving Your Backup Needs Using MongoDB Ops Manage...MongoDB
 
MongoDB.local DC 2018: Solving Your Backup Needs Using MongoDB Ops Manager, C...
MongoDB.local DC 2018: Solving Your Backup Needs Using MongoDB Ops Manager, C...MongoDB.local DC 2018: Solving Your Backup Needs Using MongoDB Ops Manager, C...
MongoDB.local DC 2018: Solving Your Backup Needs Using MongoDB Ops Manager, C...MongoDB
 
Solving your Backup Needs - Ben Cefalo mdbe18
Solving your Backup Needs - Ben Cefalo mdbe18Solving your Backup Needs - Ben Cefalo mdbe18
Solving your Backup Needs - Ben Cefalo mdbe18MongoDB
 
Solving Your Backup Needs Using MongoDB Ops Manager, Cloud Manager and Atlas
Solving Your Backup Needs Using MongoDB Ops Manager, Cloud Manager and AtlasSolving Your Backup Needs Using MongoDB Ops Manager, Cloud Manager and Atlas
Solving Your Backup Needs Using MongoDB Ops Manager, Cloud Manager and AtlasMongoDB
 
Using GitHub Actions to Deploy your Workloads to Azure
Using GitHub Actions to Deploy your Workloads to AzureUsing GitHub Actions to Deploy your Workloads to Azure
Using GitHub Actions to Deploy your Workloads to AzureKasun Kodagoda
 
LasCon 2014 DevOoops
LasCon 2014 DevOoops LasCon 2014 DevOoops
LasCon 2014 DevOoops Chris Gates
 
Spring data presentation
Spring data presentationSpring data presentation
Spring data presentationOleksii Usyk
 
JavaScript Service Worker Design Patterns for Better User Experience
JavaScript Service Worker Design Patterns for Better User ExperienceJavaScript Service Worker Design Patterns for Better User Experience
JavaScript Service Worker Design Patterns for Better User Experiencereeder29
 
What’s New in Spring Batch?
What’s New in Spring Batch?What’s New in Spring Batch?
What’s New in Spring Batch?VMware Tanzu
 

Similar a Greach 2014 - Road to Grails 3.0 (20)

Creating applications with Grails, Angular JS and Spring Security
Creating applications with Grails, Angular JS and Spring SecurityCreating applications with Grails, Angular JS and Spring Security
Creating applications with Grails, Angular JS and Spring Security
 
ITB2017 - Keynote
ITB2017 - KeynoteITB2017 - Keynote
ITB2017 - Keynote
 
Rapid API Development ArangoDB Foxx
Rapid API Development ArangoDB FoxxRapid API Development ArangoDB Foxx
Rapid API Development ArangoDB Foxx
 
Ajug - The Spring Update
Ajug - The Spring UpdateAjug - The Spring Update
Ajug - The Spring Update
 
The Spring Update
The Spring UpdateThe Spring Update
The Spring Update
 
Icinga 2009 at OSMC
Icinga 2009 at OSMCIcinga 2009 at OSMC
Icinga 2009 at OSMC
 
PLAT-16 Using Enterprise Content in Grails
PLAT-16 Using Enterprise Content in GrailsPLAT-16 Using Enterprise Content in Grails
PLAT-16 Using Enterprise Content in Grails
 
Intro to CakePHP
Intro to CakePHPIntro to CakePHP
Intro to CakePHP
 
Offline first development - Glasgow PHP - January 2016
Offline first development - Glasgow PHP - January 2016Offline first development - Glasgow PHP - January 2016
Offline first development - Glasgow PHP - January 2016
 
How to Contribute to Apache Usergrid
How to Contribute to Apache UsergridHow to Contribute to Apache Usergrid
How to Contribute to Apache Usergrid
 
CouchDB for Web Applications - Erlang Factory London 2009
CouchDB for Web Applications - Erlang Factory London 2009CouchDB for Web Applications - Erlang Factory London 2009
CouchDB for Web Applications - Erlang Factory London 2009
 
MongoDB.local Austin 2018: Solving Your Backup Needs Using MongoDB Ops Manage...
MongoDB.local Austin 2018: Solving Your Backup Needs Using MongoDB Ops Manage...MongoDB.local Austin 2018: Solving Your Backup Needs Using MongoDB Ops Manage...
MongoDB.local Austin 2018: Solving Your Backup Needs Using MongoDB Ops Manage...
 
MongoDB.local DC 2018: Solving Your Backup Needs Using MongoDB Ops Manager, C...
MongoDB.local DC 2018: Solving Your Backup Needs Using MongoDB Ops Manager, C...MongoDB.local DC 2018: Solving Your Backup Needs Using MongoDB Ops Manager, C...
MongoDB.local DC 2018: Solving Your Backup Needs Using MongoDB Ops Manager, C...
 
Solving your Backup Needs - Ben Cefalo mdbe18
Solving your Backup Needs - Ben Cefalo mdbe18Solving your Backup Needs - Ben Cefalo mdbe18
Solving your Backup Needs - Ben Cefalo mdbe18
 
Solving Your Backup Needs Using MongoDB Ops Manager, Cloud Manager and Atlas
Solving Your Backup Needs Using MongoDB Ops Manager, Cloud Manager and AtlasSolving Your Backup Needs Using MongoDB Ops Manager, Cloud Manager and Atlas
Solving Your Backup Needs Using MongoDB Ops Manager, Cloud Manager and Atlas
 
Using GitHub Actions to Deploy your Workloads to Azure
Using GitHub Actions to Deploy your Workloads to AzureUsing GitHub Actions to Deploy your Workloads to Azure
Using GitHub Actions to Deploy your Workloads to Azure
 
LasCon 2014 DevOoops
LasCon 2014 DevOoops LasCon 2014 DevOoops
LasCon 2014 DevOoops
 
Spring data presentation
Spring data presentationSpring data presentation
Spring data presentation
 
JavaScript Service Worker Design Patterns for Better User Experience
JavaScript Service Worker Design Patterns for Better User ExperienceJavaScript Service Worker Design Patterns for Better User Experience
JavaScript Service Worker Design Patterns for Better User Experience
 
What’s New in Spring Batch?
What’s New in Spring Batch?What’s New in Spring Batch?
What’s New in Spring Batch?
 

Más de graemerocher

Micronaut Deep Dive - Devoxx Belgium 2019
Micronaut Deep Dive - Devoxx Belgium 2019Micronaut Deep Dive - Devoxx Belgium 2019
Micronaut Deep Dive - Devoxx Belgium 2019graemerocher
 
Micronaut: Evolving Java for the Microservices and Serverless Era
Micronaut: Evolving Java for the Microservices and Serverless EraMicronaut: Evolving Java for the Microservices and Serverless Era
Micronaut: Evolving Java for the Microservices and Serverless Eragraemerocher
 
Micronaut Deep Dive - Codeone 2019
Micronaut Deep Dive - Codeone 2019Micronaut Deep Dive - Codeone 2019
Micronaut Deep Dive - Codeone 2019graemerocher
 
Introduction to Micronaut - JBCNConf 2019
Introduction to Micronaut - JBCNConf 2019Introduction to Micronaut - JBCNConf 2019
Introduction to Micronaut - JBCNConf 2019graemerocher
 
Grails 4 and Micronaut at Devnexus 2019
Grails 4 and Micronaut at Devnexus 2019Grails 4 and Micronaut at Devnexus 2019
Grails 4 and Micronaut at Devnexus 2019graemerocher
 
Micronaut and the Power of Ahead of Time Compilation - Devnexus 2019
Micronaut and the Power of Ahead of Time Compilation - Devnexus 2019Micronaut and the Power of Ahead of Time Compilation - Devnexus 2019
Micronaut and the Power of Ahead of Time Compilation - Devnexus 2019graemerocher
 
Micronaut Deep Dive - Devnexus 2019
Micronaut Deep Dive - Devnexus 2019Micronaut Deep Dive - Devnexus 2019
Micronaut Deep Dive - Devnexus 2019graemerocher
 
Introduction to Micronaut at Oracle CodeOne 2018
Introduction to Micronaut at Oracle CodeOne 2018Introduction to Micronaut at Oracle CodeOne 2018
Introduction to Micronaut at Oracle CodeOne 2018graemerocher
 

Más de graemerocher (8)

Micronaut Deep Dive - Devoxx Belgium 2019
Micronaut Deep Dive - Devoxx Belgium 2019Micronaut Deep Dive - Devoxx Belgium 2019
Micronaut Deep Dive - Devoxx Belgium 2019
 
Micronaut: Evolving Java for the Microservices and Serverless Era
Micronaut: Evolving Java for the Microservices and Serverless EraMicronaut: Evolving Java for the Microservices and Serverless Era
Micronaut: Evolving Java for the Microservices and Serverless Era
 
Micronaut Deep Dive - Codeone 2019
Micronaut Deep Dive - Codeone 2019Micronaut Deep Dive - Codeone 2019
Micronaut Deep Dive - Codeone 2019
 
Introduction to Micronaut - JBCNConf 2019
Introduction to Micronaut - JBCNConf 2019Introduction to Micronaut - JBCNConf 2019
Introduction to Micronaut - JBCNConf 2019
 
Grails 4 and Micronaut at Devnexus 2019
Grails 4 and Micronaut at Devnexus 2019Grails 4 and Micronaut at Devnexus 2019
Grails 4 and Micronaut at Devnexus 2019
 
Micronaut and the Power of Ahead of Time Compilation - Devnexus 2019
Micronaut and the Power of Ahead of Time Compilation - Devnexus 2019Micronaut and the Power of Ahead of Time Compilation - Devnexus 2019
Micronaut and the Power of Ahead of Time Compilation - Devnexus 2019
 
Micronaut Deep Dive - Devnexus 2019
Micronaut Deep Dive - Devnexus 2019Micronaut Deep Dive - Devnexus 2019
Micronaut Deep Dive - Devnexus 2019
 
Introduction to Micronaut at Oracle CodeOne 2018
Introduction to Micronaut at Oracle CodeOne 2018Introduction to Micronaut at Oracle CodeOne 2018
Introduction to Micronaut at Oracle CodeOne 2018
 

Último

"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 

Último (20)

"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 

Greach 2014 - Road to Grails 3.0

  • 1. By Graeme RocherRoad to Grails 3.0
  • 2. Agenda § State of Nation § What’s new in Grails 2.3? § What’s planned for Grails 2.4? § What’s planned for Grails 3.0? § Summary / Q & A
  • 3. State of Nation § Grails 2.3.7 most recent version § One release per month § Hundreds of bugs fixed in the last 3 months § More than 1,000 plugins now for Grails
  • 4. What’s new in Grails 2.3? • Forked Execution and Test Daemon • Dependency Resolution with Aether • Complete Server-Side REST Support • Async Programmings APIs • New Data Binding APIs !4 2.3
  • 5. What’s new in Grails 2.3? • XSS Prevention • Hibernate 4 Support (via Plugin) • RESTful Scaffolding v2.0 • Controller Namespaces • ... and much, much more !5 2.3
  • 6. Aether & Dependency Management • Aether == Same dependency resolution engine as Maven – No snapshot troubles – Same local repo – No Ivy bugs • New dependency-report command to visualize graph !6
  • 7. REST: URL Mappings • RESTful Mappings – Single or Multiple resources – Versioning – Nested resources • New url-mappings-report command to mappings !7
  • 8. REST: @Resource Transformation • Automatically exposes a domain class as a REST resource • Configurable formats • Configuration HTTP methods !8 import  grails.rest.*   ! @Resource   class  Person  {          String  name   }
  • 9. REST: The respond method • Sends the most appropriate response for the given object • For HTML calculates a model by convention and delegates to view
 !9 class  PersonController   {   def  index()  {   respond  Book.list()   }   }
  • 10. REST: HAL, JSON, XML Renderers • Rendering customizable in resources.groovy • HAL, Atom, Vnd.Error renders included • Flexible and complete !10 import  grails.rest.render.hal.*   beans  =  {    halBookRenderer(HalJsonRenderer,                                      rest.test.Book)   } import  grails.rest.render.xml.*   beans  =  {          bookRenderer(XmlRenderer,                                      Book)  {                  includes  =  ['title']          }   }
  • 11. REST: Scaffolding 2.0 • Scaffolding support now a plugin – http://grails.org/plugin/scaffolding • Generated controllers now RESTful • New generate-async- controller command for Async support !11
  • 12. REST: Misc Goodies • grails.rest.RestfulController – Controller base class for inheriting RESTful actions • The respond method – Chooses most appropriate response format • Versioning support via URL mapping or Accept-Version header • Find out more http://grails.org/doc/2.3.x/guide/ webServices.html#REST !12
  • 13. Async: Promise Primitives • Foundational API for Async programming • Includes notion of Promise • Ability to combine / chain promises !13 import  static   grails.async.Promises.*   ! def  p1  =  task  {  2  *  2  }   def  p2  =  task  {  4  *  4  }   def  p3  =  task  {  8  *  8  }   assert  [  4,  16,  64  ]  ==   waitAll(p1,  p2,  p3)
  • 14. Async: @DelegateAsync Transform • Transform any synchronous API into an asynchronous one • Takes each method and returns a promise !14 ! import  grails.async.*   ! class  AsyncBookService  {        @DelegateAsync          BookService  bookService   }  
  • 15. Async: GORM • Makes all GORM methods async • Deals with binding session to background thread • Works across all datastores (MongoDB, GORM for REST etc.) !15 ! def  p1  =  Person.async.get(1)   def  p2  =  Person.async.get(2)   def  p3  =  Person.async.get(3)   ! def  results  =                  waitAll(p1,  p2,  p3)  
  • 16. Async: Request Processing • Handle requests asynchronously • Uses Servlet 3.0 async under the covers • Create asynchronous models !16 import  static   grails.async.Promises.*   ! class  PersonController  {      def  index()  {        tasks  books:  Book.async.list(),                  total:  Book.async.count(),                  otherValue:  {                        //  do  hard  work                  }        }   }
  • 17. Data Binder: @BindingFormat • Per property formatting • Extensible !17 ! class  Person  {    @BindingFormat('MMddyyyy')    Date  birthDate    @BindingFormat('Uppercase')    String  salutation   }
  • 18. Data Binder: @BindUsing • For cases where more flexibility is needed • Can be applied to class 
 or property • Takes a closure or a class
 that implements 
 BindingHelper !18 ! class  Person  {      @BindUsing({                  obj,  source  -­‐>                          source['name']?                          .toUpperCase()    })    String  salutation   }
  • 19. Data Binding: XML/JSON Command Objects • Can now bind XML/JSON data to command objects • Binding can be customized using the BindingSource and BindingSourceCreator interfaces !19 ! class  PersonController   {      def  save(PersonCmd  p)          {          ...      }   }  
  • 20. Data Binding: Auto Query if Domain Object • If command object is a domain class query on id • Passes null if domain class not found • If found binds XML, JSON or params !20 ! class  PersonController   {      def  save(Person  p)  {          ...      }   }  
  • 21. XSS Prevention • All GSP expressions and scriptlets now escaped by default • Double-encoding prevention • New raw method to mark data as safe !21 ! //  Inside  GSP   <section>${raw(page.content)}</section>  
  • 22. Other Goodies: Hibernate 4 Support • Hibernate 3 and 4 binary incompatible, so new plugin • Not all plugins that work with Hibernate 3 will work with Hibernate 4 !22 ! //  add  to  BuildConfig   compile  ‘:hibernate::hibernate4:4.3.4.2’  
  • 23. Other Goodies: @Transactional Transform • Can be applied to any class • No proxies required! • Replacement for Spring’s @Transactional annotation !23 import   grails.transactions.*   ! @Transactional   class  PersonService  {   ...   }
  • 24. Other Goodies: @DirtyCheck Transform • Can be applied to any class to add dirty checking • Tracks calls to setters that modify state • Classes implement the DirtyCheckable interface !24 @DirtyCheck   class  Person  {   ...   }   def  p  =      new  Person(name:'Bob')   p.trackChanges()   assert  !p.hasChanged()   p.name  =  'Fred'   assert  p.hasChanged()
  • 25. Other Goodies: Action Error Handlers • Actions that define an exception as the first argument get invoked if the exception is thrown from any other action !25 ! class  PersonController  {        ...        def  tooOld(TooOldException  e)  {              render  view:  'tooOld'              }   }
  • 26. Other Goodies: Controller Namespaces • Controllers can now define a namespace • URL Mappings can map to a specific namespace !26 ! class  PersonController  {        ...        static  namespace  =  'admins'               }  
  • 27. ! Q & A Grails 2.3 2.3
  • 29. Grails 2.4: Goals • Spring 4.0 Upgrade • Java 8 Support • Groovy 2.3 Upgrade • Improved @CompileStatic Support • Asset Pipeline Plugin • Moduralization of Codebase • GORM & GSP Standalone !29 3.02.4
  • 30. Spring 4.0 • Native GroovyBeanDefinitionReader (ported from BeanBuilder) – https://spring.io/blog/2014/03/03/groovy- bean-configuration-in-spring-framework-4 • Spring Web Socket – https://github.com/zyro23/grails-spring- websocket !30
  • 31. Groovy 2.3 • Traits • Java 8 • Implicit closure coercion • Lots more! • http://groovy.codehaus.org/ Roadmap !31
  • 32. 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! !32
  • 34. Standalone • GORM for Hibernate 4 in Spring Boot – https://gist.github.com/graemerocher/d31648899fdb461609fb • GORM for MongoDB in Spring Boot – https://gist.github.com/graemerocher/9683543 • GSP standalone coming !34
  • 36. Grails 3.0: Goals • Embrace Gradle • Abstract Packaging / Deployment • Reach outside the Servlet Container • App Profiles: Netty, Servlet, Batch, Hadoop • Deployment with run-app • Extend the reach of Grails ! !36 3.03.0
  • 37. Grails 3.0: Goals • Plugin Model / Event Driven • Support Multi Project Builds • Support Micro Services • Remove Bloat • Reduce Dependencies • Discourage “Monolothic App” development !37 3.03.0
  • 38. Grails 3.0: 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 • Plugins can provide Gradle extensions !38
  • 39. Grails 3.0: App Profiles • Each profile will have distinct plugins, runtimes and packaging (JAR, WAR etc.) !39 ! $  grails  create-­‐app  myapp  -­‐-­‐profile=netty     $  cd  myapp   $  grails  package   $  java  -­‐jar  target/myapp.jar   !
  • 40. Grails 3.0 Plugin Delineation !40 grails.sh static void main Gradle Build Forked Grails Runtime test-app run-app console shell Codegen Plugins Build Time Plugins Runtime Plugins
  • 41. Grails 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 !41
  • 42. Grails 3.0: Challenges • Compatibility – Plugins – Build System • Modularization – Servlet API independence – Refactoring !42 3.0
  • 43. ! Q & A Grails 3.0 3.0
  • 44. Stay Connected. ! ! ! ! Web: grails.org Twitter: twitter.com/grailsframework LinkedIn: http://linkedin.com/groups/Grails-User-Group-39757 Google +: https://plus.google.com/communities/ 109558563916416343008