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

Benefit from Groovy now, why when how — JFokus ...

Benefit from Groovy now, why when how — JFokus 2014

Presentation given at the JFokus 2014 conference on the various usage patterns for Groovy and how can developers can take advantage of Groovy

Guillaume Laforge

February 05, 2014
Tweet

More Decks by Guillaume Laforge

Other Decks in Technology

Transcript

  1. Guillaume Laforge 
 @glaforge Benefit from Groovy now, when, why

    and how By the way, you know there’s a Groovy User Group here in Stockholm? http://www.meetup.com/ Stockholm-Groovy-User- Group/
  2. @glaforge / #groovylang What for? Scripting: task automation ! •

    Groovy is also a scripting language, you can easily… ! – run a Groovy script with the groovy command ! – @Grab & import third-party libraries •no need for a dedicated project or a build file •leverage the wealth of Ant tasks with the Groovy Ant builder ! – invoke other command-line tools !20
  3. @glaforge / #groovylang Who? Scripting: task automation !21 You or

    anybody :-) Or me for grepping through the logs to compute download stats
  4. @glaforge / #groovylang Who? Scripting: task automation !21 You or

    anybody :-) Or me for grepping through the logs to compute download stats Anyone who’s not a Bash guru!
  5. @glaforge / #groovylang Who? Scripting: task automation !21 You or

    anybody :-) Or me for grepping through the logs to compute download stats Anyone who’s not a Bash guru! Groovy team exports Confluence wiki to html, then transforms to AsciiDoc format
  6. @glaforge / #groovylang How? Scripting: task automation !22 Use HtmlCleaner

    to clean the Confluence wiki HTML export <html/> AsciiDoctor
  7. @glaforge / #groovylang How? Scripting: task automation !22 Use HtmlCleaner

    to clean the Confluence wiki HTML export Transform the cleaned HTML into AsciiDoctor format <html/> AsciiDoctor
  8. @glaforge / #groovylang How? Scripting: task automation !23 This is

    how you can grab a dependency… …and use the library right away, without a build file or IDE
  9. @glaforge / #groovylang How? Scripting: task automation • Groovy’s APIs

    feature – an Ant task scripting API to reuse all existing Ant tasks •ftp, ssh, file copying/moving… – a template engine •for generating files, source code – easy creation & parsing of XML or JSON payloads – Sql facility to simplifying accessing a JDBC compliant relational DB – exposing and accessing JMX beans !26
  10. @glaforge / #groovylang How? Scripting: task automation !28 Use the

    Groovy Markup Builder class to generate HTML or XML payloads
  11. @glaforge / #groovylang How? Scripting: task automation !29 Use the

    Ant Builder, reusing the Mail Ant task to send a build notification
  12. @glaforge / #groovylang What for? Scripting: build automation ! •

    Gradle is a powerful build automation solution – uses Groovy for its automation language ! • You can – build / package / deploy Java, Groovy, Scala, C/C++ projects – handle dependency management cleanly – define and enforce your own enterprise build conventions – extend Gradle declaratively and programmatically !30
  13. @glaforge / #groovylang How? Scripting: build automation !32 Use the

    ‘Java’ plugin Fetch your dependencies from Maven Central
  14. @glaforge / #groovylang How? Scripting: build automation !32 Use the

    ‘Java’ plugin Fetch your dependencies from Maven Central Declare your dependencies and their scope
  15. @glaforge / #groovylang How? Scripting: build automation !35 Gradle plugins

    can create their own declarative mini- language
  16. @glaforge / #groovylang What for? Scripting: DevOps ! • More

    Groovy-based initiatives around the DevOps theme ! • Goals – handle Amazon AWS configuration, provisioning and deployments – talking with remote servers through SSH, and automating server configuration, working with scp and more !36
  17. @glaforge / #groovylang What for? Scripting: DevOps • Learn more:

    ! – http://slideshare.net/aestasit/groovy-dev-ops-in-the-cloud – sshoogr: a Groovy-based DSL for working with remote SSH servers – grammazon: a Groovy library and Gradle plugin for working with Amazon EC2 instances ! – https://github.com/danveloper/provisioning-gradle-plugin – a Gradle plugin for driving server provisioning through configuration !37
  18. @glaforge / #groovylang Who? Scripting: DevOps !38 Anyone who needs

    to automate cloud deployments sshoogr & gramazon are from
  19. @glaforge / #groovylang How? Scripting: DevOps with gramazon Gradle plugin

    !40 Start EC2 instances from your Gradle automation build
  20. @glaforge / #groovylang How? Scripting: DevOps with Provisioning Gradle plugin

    !42 Import and apply the Provisioning plugin for Gradle
  21. @glaforge / #groovylang How? Scripting: DevOps with Provisioning Gradle plugin

    !43 Virtual box configuration Network configuration
  22. @glaforge / #groovylang How? Scripting: DevOps with Provisioning Gradle plugin

    ! ! • Checkout the Provisioning Gradle plugin from Dan Woods: ! – https://github.com/danveloper/provisioning-gradle-plugin !47
  23. @glaforge / #groovylang What for? Testing: More readable & expressive

    tests ! • Groovy has a malleable and streamlined syntax ! • Makes it nice for creating libraries and frameworks 
 with readable and expressive APIs !49
  24. @glaforge / #groovylang Who? Testing: More readable & expressive tests

    ! • Many companies started integrating Groovy 
 in their projects through testing, 
 before any line of Groovy code in production ! • Benefit – easier to add, evolve and maintain test cases !50
  25. @glaforge / #groovylang How? Testing: More readable & expressive tests

    ! • We’ll have a look at: ! – the Spock testing framework – the Geb web integration testing framework !51
  26. @glaforge / #groovylang How? Testing: Geb web integration tests !57

    An HtmlUnit, FireFox or Chrome browser Drive the browser to a certain URL
  27. @glaforge / #groovylang How? Testing: Geb web integration tests !57

    An HtmlUnit, FireFox or Chrome browser Drive the browser to a certain URL Assert the title contains the text
  28. @glaforge / #groovylang How? Testing: Geb web integration tests !57

    An HtmlUnit, FireFox or Chrome browser Drive the browser to a certain URL Assert the title contains the text Fill in a form, click the button to send it
  29. @glaforge / #groovylang How? Testing: Geb web integration tests with

    Spock !58 With page objects BDD style: given/when/then
  30. @glaforge / #groovylang How? Testing: Geb web integration tests with

    Spock !58 With page objects BDD style: given/when/then Wait for slow loading pages
  31. @glaforge / #groovylang What for? Customizing: extension, configuration, plugins !

    • You need to… ! – customize an application for a particular customer – configure an application for a particular environment – create / update / externalize business rules – create plugins for extending a platform !60
  32. @glaforge / #groovylang Who? Customizing: extension, configuration, plugins !61 Continuous

    Integration server Internet of Things Second-generation wiki
  33. @glaforge / #groovylang How? Customizing: extension, configuration, plugins ! •

    Jenkins provides two Groovy plugins: ! – the Groovy plugin
 https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin •execute arbitrary Groovy scripts as Jenkins jobs ! – the Groovy postbuild plugin
 https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin •set build outcome, display badges, info or error messages, once a build completed !62
  34. @glaforge / #groovylang How? Customizing: extension, configuration, plugins ! •

    Home automation in the era 
 of the Internet of Things ! • Built-in IDE and simulator allow you to automate 
 all your devices of your home with Groovy scripts
 https://support.smartthings.com/entries/21603015-Introduction-to-Writing-SmartApps ! • Groovy supports allows to • set preferences, subscribe to events, set timers, handle events, send notifications, access people’s presence, consume external services… !64
  35. @glaforge / #groovylang How? Customizing: extension, configuration, plugins ! •

    Home automation in the era 
 of the Internet of Things ! • Built-in IDE and simulator allow you to automate 
 all your devices of your home with Groovy scripts
 https://support.smartthings.com/entries/21603015-Introduction-to-Writing-SmartApps ! • Groovy supports allows to • set preferences, subscribe to events, set timers, handle events, send notifications, access people’s presence, consume external services… !64
  36. @glaforge / #groovylang How? Customizing: extension, configuration, plugins ! •

    XWiki is a second-generation wiki
 http://www.xwiki.org/
 (XWiki case study: http://bit.ly/xwiki-cs) • not just content, but programmable • a platform for building your own apps • extensible with plugins and macros ! • You can create your own plugins and macros in Groovy to extend the wiki, and add dynamic content !66
  37. @glaforge / #groovylang How? Customizing: extension, configuration, plugins !67 A

    wiki user with programming rights can add this Groovy script in a page
  38. @glaforge / #groovylang How? Customizing: extension, configuration, plugins !67 A

    wiki user with programming rights can add this Groovy script in a page Uses Groovy’s handy JSON support
  39. @glaforge / #groovylang How? Customizing: extension, configuration, plugins !67 A

    wiki user with programming rights can add this Groovy script in a page Uses Groovy’s handy JSON support
  40. @glaforge / #groovylang How? Customizing: extension, configuration, plugins • What

    Groovy also brings to the table: ! • a rich API for integrating and embedding Groovy in your app • GroovyShell, Binding, customizers… ! • dedicated configuration API (ConfigSlurper) with a special « builder » syntax with a hierarchical data structure ! • a JMX bean & JMX builder for interacting with 
 and exposing JMX services !68
  41. @glaforge / #groovylang What for? Domain-Specific Languages: business rules •

    The goal of Groovy Domain-Specific Languages: • beyond just integrating Groovy scripts and classes: create a dedicated mini-language modeling your business • less technical boilerplate code, focus on the business semantics • write almost plain English-like sentences ! • Groovy has… • a succint, flexible & malleable syntax • both dynamic and compile-time metaprogramming capabilities • operator overloading !70
  42. @glaforge / #groovylang Who? Domain-Specific Languages: business rules !71 US

    Fortune 500 insurance actuaries write risk calculation rules in Groovy
  43. @glaforge / #groovylang Who? Domain-Specific Languages: business rules !71 US

    Fortune 500 insurance actuaries write risk calculation rules in Groovy EPO built a data flow language atop Groovy to extract / transform / route patents across patent offices
  44. @glaforge / #groovylang Who? Domain-Specific Languages: business rules !71 US

    Fortune 500 insurance actuaries write risk calculation rules in Groovy EPO built a data flow language atop Groovy to extract / transform / route patents across patent offices 1 billion € worth of loan granted through Hypoport’s financial platform Groovy decision rules
  45. @glaforge / #groovylang Who? Domain-Specific Languages: business rules !71 US

    Fortune 500 insurance actuaries write risk calculation rules in Groovy EPO built a data flow language atop Groovy to extract / transform / route patents across patent offices 1 billion € worth of loan granted through Hypoport’s financial platform Groovy decision rules Customize experience of travel and hotel reservation with Groovy scripts and templates
  46. @glaforge / #groovylang Who? Domain-Specific Languages: business rules !71 US

    Fortune 500 insurance actuaries write risk calculation rules in Groovy EPO built a data flow language atop Groovy to extract / transform / route patents across patent offices 1 billion € worth of loan granted through Hypoport’s financial platform Groovy decision rules Customize experience of travel and hotel reservation with Groovy scripts and templates Case study: http://bit.ly/epo-cs
  47. @glaforge / #groovylang How? Domain-Specific Languages: business rules • Groovy

    uses BigDecimal by default for floating point • you can, of course, specify floats or doubles if needed • important for financial calculations w/ exact arithmetics !72
  48. @glaforge / #groovylang How? Domain-Specific Languages: business rules • Groovy

    uses BigDecimal by default for floating point • you can, of course, specify floats or doubles if needed • important for financial calculations w/ exact arithmetics !72
  49. @glaforge / #groovylang How? Domain-Specific Languages: business rules • Groovy

    uses BigDecimal by default for floating point • you can, of course, specify floats or doubles if needed • important for financial calculations w/ exact arithmetics !72
  50. @glaforge / #groovylang How? Domain-Specific Languages: business rules • Groovy

    uses BigDecimal by default for floating point • you can, of course, specify floats or doubles if needed • important for financial calculations w/ exact arithmetics !72 Which formula would you rather maintain?
  51. @glaforge / #groovylang How? Domain-Specific Languages: business rules • Groovy

    uses BigDecimal by default for floating point • you can, of course, specify floats or doubles if needed • important for financial calculations w/ exact arithmetics !72 Which formula would you rather maintain? Operator overloading
  52. @glaforge / #groovylang How? Domain-Specific Languages: business rules • Groovy

    lets you create your own control 
 structures with closures !73
  53. @glaforge / #groovylang How? Domain-Specific Languages: business rules • Groovy

    lets you create your own control 
 structures with closures !73
  54. @glaforge / #groovylang How? Domain-Specific Languages: business rules • Groovy

    lets you create your own control 
 structures with closures !73
  55. @glaforge / #groovylang How? Domain-Specific Languages: business rules • Groovy

    lets you create your own control 
 structures with closures !73
  56. @glaforge / #groovylang How? Domain-Specific Languages: business rules • A

    Groovy-based DSL developed at the
 Liverpool School of Tropical Medicine
 to study antimalarial drug resistance !74
  57. @glaforge / #groovylang How? Domain-Specific Languages: business rules • A

    Groovy-based DSL developed at the
 Liverpool School of Tropical Medicine
 to study antimalarial drug resistance !74 Paper: http://bit.ly/ronald-dsl
  58. Adding properties to numbers through runtime meta-programming Groovy « command

    chains »: syntax convention for dropping parens & dots for natural-language-like sentences
  59. @glaforge / #groovylang Groovy ecosystem • The Groovy ecosystem is

    rich of tools, frameworks, and libraries ! • For web development, you can use – the mainstream Grails web stack, powered by Spring and Groovy – the newcomer Ratpack, a lightweight toolkit on top of Netty – or Spring Boot, an opinionated & Groovy-friendly take on Spring ! • For desktop applications, you can use Griffon – which supports different view toolkits such as GroovyFX, Swing, Pivot… !77
  60. @glaforge / #groovylang What for? Full blown apps: the Grails

    web framework ! • Grails is a full web stack for the JVM – based on Groovy and Spring – can interact with relational databases through Hibernate or through any NoSQL datastore with Spring Data, with the GORM mapping layer – follows the Convention over Configuration paradigm – lets you see changes live with hot reloading – advanced REST and Async support – built-in view technology (GSPs) with taglibs !78
  61. @glaforge / #groovylang Who? Full blown apps: the Grails web

    framework !79 Created the Open Source Asgard web interface for application deployments and cloud management in Amazon Web Services
  62. @glaforge / #groovylang Who? Full blown apps: the Grails web

    framework !79 Created the Open Source Asgard web interface for application deployments and cloud management in Amazon Web Services LinkedIn uses Grails for their commercial portals, for recruiters, companies searching for profiles…
  63. @glaforge / #groovylang Who? Full blown apps: the Grails web

    framework !79 Created the Open Source Asgard web interface for application deployments and cloud management in Amazon Web Services LinkedIn uses Grails for their commercial portals, for recruiters, companies searching for profiles… Many web frontends from the Sky network serving a few hundred millions page views a month
  64. @glaforge / #groovylang Who? Full blown apps: the Grails web

    framework !79 Created the Open Source Asgard web interface for application deployments and cloud management in Amazon Web Services LinkedIn uses Grails for their commercial portals, for recruiters, companies searching for profiles… Many web frontends from the Sky network serving a few hundred millions page views a month Wired’s product review section is powered by Grails
  65. @glaforge / #groovylang How? Full blown apps: the Grails web

    framework !80 Too hard to cover Grails in a couple slides, just go download it now! :-)
  66. @glaforge / #groovylang Java’s best friend • Java derived syntax

    –Flat learning curve –Easy to learn • But goes beyond Java –Concise, expressive, readable –Fit for Domain-Specific Languages • Seamless & transparent Java integration –Mix & match Groovy & Java classes (joint compil.) –No language barrier to cross !82
  67. @glaforge / #groovylang Groovy’s nature ! • Object oriented dynamic

    language... ! • But... – as type safe as you want it — static type checking – as fast as you need it — static compilation – as functional as you make it — closures... !83
  68. @glaforge / #groovylang Groovy use cases • Scripting tasks, build

    automation, DevOps • Extension points for customizing / configuring apps • More readable and expressive tests • Business languages & Domain-Specific Languages • Full blown apps – for the web with Grails, Ratpack, Gaelyk – for web reactive programming with Reactor – for desktop with Griffon !84