groovy&&&grails2.x&update - callista...

88
Björn Beskow | [email protected] | 20130116 Groovy & Grails 2.x update

Upload: trinhhanh

Post on 01-Dec-2018

235 views

Category:

Documents


0 download

TRANSCRIPT

Björn  Beskow  |  [email protected]  |  2013-­‐01-­‐16

Groovy  &  Grails  2.x  update

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Agenda

2

• What’s  new  in  Groovy  2?• What’s  new  in  Grails  2.2?• Grails  Advanced  Enterprise  IntegraJons  through  examples

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Groovy

3

• Groovy  is  a  dynamic language  on  and  for  the  JVM–Fully  interoperable  with  Java  at  all  levels

• Goal  is  to  greatly simplify the life for developers

• Release 2.0.6, December 2012 (started in 2004)

• Full  Stack,  Full  Produc7vity  MVC  Framework• Built  on  a  solid,  well-­‐known  founda7on–Spring,  Hibernate,  Sitemesh

• ConvenJons  and  defaults  everywhere

• Release  2.2.0,  December  2012  (started  mid  2005)

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Grails

4

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Protect  investment  in  the  JavaEE  platform

JDBC

JNDI

5

• ExisJng  applicaJons• ExisJng  APIs• ExisJng  3rd  party  components• ExisJng  competence

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Groovy  &  Grails  1.x,  2011:What  was  the  problem?

6

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Groovy  1.x,  2011:  What  was  the  problem?

7

•Dynamic  languagues  are  scary!•Dynamic  languages  are  slow!

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Grails  1.x,  2011:  What  was  the  problem?

8

• Immature  Development  environment–  Bad  IDE  support–  Bad  build  system  support–  PrimiJve  dependency  management

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Grails  1.x,  2011:  What  was  the  problem?

9

•Not  well  suited  for  test-­‐driven  development–  Old-­‐school  unit  test  framework–  Long  round-­‐trip  startup  Jme

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Grails  1.x,  2011:  What  was  the  problem?

10

• Immature  plugins

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

 ...  but  things  change  ...

11

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update12

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update13

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update14

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update15

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update16

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update17

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update18

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update19

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update20

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update21

Groovy,  anno  2013

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update22

Groovy  AST  transformations

Also  known  as  compile-­‐.me  metaprogramming

@@

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update23

AST  transformations:  @Singleton

@Singleton(lazy = true)class MyClass {}

MyClass.instance.someMethod()

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update24

AST  transformations:  @Lazy

class Person {

@Lazy List dnaProfile = { /* complex

computation */ }

}

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update25

AST  transformations:  @Immutable@Immutablefinal class Coordinates {

Double latitude, longitude

}

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update26

AST  transformations:  @Delegate

class Event {

@Delegate Date when …

}

def cadec = new Event(…)

def javaOne = new Event(…)

assert cadec.before(javaOne.when)

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update27

AST  transformations:  @Log

@Logclass Employee {

Employee() {

log.info("Employee created")

}

}

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update28

AST  transformations:  @AutoClone

@AutoCloneclass Employee {

String firstName

String lastName

Assignment assignment

}

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update29

AST  transformations:  @ToString

@ToStringclass Employee {

String firstName

String lastName

}

def e = new Employee(firstName:”Björn”,lastName:”Beskow”)

assert e.toString == "Employee(Björn, Beskow)"

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update30

AST  transformations:  @EqualsAndHashCode@EqualsAndHashCodeclass Employee {

String firstName

String lastName

Assignment assignment

}

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update31

AST  transformations:  @InheritConstructors

@InheritConstructorsclass EmployeeException extends Exception {

EmployeeException(Assignment a) {..}

}

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update32

AST  transformations:  @Category

@Category(Number)class NumberCategory {

Distance getMeters() {

new Distance(number: this)

}

}

use(NumberCategory) {

def dist = 300.meters

}

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

AST  transformations:  @TypeChecked

33

•Best  of  two  worlds:  –  Brings  Sta$c  Typing  into  the  dynamic  world  of  Groovy

•Compiler  performs  sophisJcated  type  inference

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update34

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

AST  transformations:  @CompileStatic

35

•One  step  further:  –Sta.cally  compile  a  class  or  block  of  code,  which  makes  the  bytecode  (almost)  idenJcal  to  corresponding  compiled  Java  code,  with  iden.cal  performance–Can  prevent  dynamic  behavior  to  be  inadvertently  applied  to  a  block  of  code  (a.k.a.  “Monkey  Patching”)

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update36

Grails,  anno  2013

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Grails,  anno  2013

37

• IDE  support  that  finally  works• Many  high  quality  enterprise-­‐grade  plugins  available• Grails  2.2–Agent-­‐based  class  reloading  and  interacJve  console–NaJve  Maven  support–NoSQL  database  support–DB  MigraJons–Cloud  Deployments

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update38

IDE  support

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update39

Maven  integration  &  dependency  mgmt.

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update40

TDD  support

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update41

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Grails:  The  Power  of  Convention

Serv ice View

Domain Class

Controller

42

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Grails  Plugins

43

• Grails  Plugins  turn  Grails  into  an  extensible  pla4orm–Exposes  well-­‐defined  extension  points–Low  ceremony  format  makes  wriJng  plugins  trivial–AcJve  community,  with  well  over  800  plugins  available

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update44

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Plugins  in  action!

45

• DB  migraJons  with  Liquibase

• Cloud  deployment  to  Cloud  Foundry

• MongoDB  integraJon

• Db-­‐backed  message  translaJons

• Ajax-­‐based  Compass/Lucene  search

• LDAP-­‐based  authorizaJon

• Audit  logging

• ApplicaJon  monitoring

• Quartz  integraJon

• Mail  integraJon

• JMS  integraJon

• Spring  RemoJng  with  rich  clients

• RESTful  web  services

• SOAP  web  services

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Quiz:  How  many  lines  of  code?

46

• 30  lines?

• 75  lines?

• 150  lines?

• 750  lines?

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update47

Database  migrations

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update48

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update49

One-­‐click  Cloud  Deployment

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update50

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update51

NoSQL  Database  support

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update52

NoSQL  Database  support

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update53

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update54

I18n

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update55

I18n

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update56

I18n

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update57

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update58

Searching

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update59

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update60

Ajax-­‐based  incremental  searching

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update61

Authentication

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update62

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update63

Audit  Logging

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update64

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update65

Monitoring

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update66

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update67

Scheduling

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update68

Scheduling

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update69

Scheduling

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update70

Mail

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update71

Mail

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update72

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update73

JMS

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update74

JMS

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update75

JMS

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update76

JMS

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update77

Remoting

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update78

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update79

Restful  Web  Services

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update80

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update81

Restful  Web  Services

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update82

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update83

SOAP  Web  Services

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update84

SOAP  Web  Services

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Plugins  used  (grails.org/plugins)

85

• build-­‐test-­‐data• fixtures• auto-­‐test• database-­‐migraJon• cloud-­‐foundry• mongodb• searchable• localizaJons• spring-­‐security-­‐core,spring-­‐security-­‐ldap

• audit-­‐logging• app-­‐info,app-­‐info-­‐hibernate

• quartz,  quartz-­‐monitor• mail• jms• remoJng• json-­‐rest-­‐api• axis2

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Quiz:  How  many  lines  of  code?

86

• MigraJons:  1  line

• CloudForge  deploy:  1  line

• MongoDB:  2  lines

• I18n:  1  line

• Searching:  2  lines

• Ajax-­‐based  search:  16  lines

• LDAP  auth:  5

• Audit  logging:  2  lines

• AppServer  monitoring:    2  lines

• Quartz  scheduling:  11  lines

• SMTP  mail:  6  lines

• JMS  sender:  7  lines

• JMS  message-­‐driven  service:  9  lines

• RemoJng:  2  lines

• Rest-­‐API:  2  lines

• Rest-­‐based  controller:  4  lines

• Axis2  service:  2  line

• Total:  75  lines

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Conclusions

87

• Groovy  &  Grails  provides  an  extremely  producJve  extension  to  Java  &  JavaEE•Many  shortcomings  in  the  tooling  and  plugins  pornolio  have  been  addressed  recently–remains  to  be  seen  if  it  is  enough  to  lead  to  more  general  adopJon

©  2013  Callista  Enterprise  |  www.callistaenterprise.seGroovy  &  Grails  2.x  update

Questions

88