Share
Embed
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
Transcript
168 slides
-
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/ -
Guillaume Laforge Groovy project lead at . ! @glaforge
http://glaforge.appspot.com -
What for? Who? for what kind of tasks projects, companies
using that pattern -
Who? How? projects, companies using that pattern What for? for
what kind of tasks -
Who? How? projects, companies using that pattern do it yourself
What for? for what kind of tasks -
@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 -
@glaforge / #groovylang Who? Scripting: task automation !21 You or
anybody :-) Or me for grepping through the logs to compute download stats -
@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! -
@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 -
@glaforge / #groovylang How? Scripting: task automation !22 Use HtmlCleaner
to clean the Confluence wiki HTML export <html/> AsciiDoctor -
@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 -
@glaforge / #groovylang How? Scripting: task automation !23 This is
how you can grab a dependency… -
@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 -
@glaforge / #groovylang How? Scripting: task automation !24 Traverse the
file system easily -
@glaforge / #groovylang How? Scripting: task automation !25 Execute external
commands Wait for the end of the process -
@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 -
@glaforge / #groovylang How? Scripting: task automation !28 Use the
Groovy Markup Builder class to generate HTML or XML payloads -
@glaforge / #groovylang How? Scripting: task automation !29 Use the
Ant Builder, reusing the Mail Ant task to send a build notification -
@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 -
@glaforge / #groovylang How? Scripting: build automation !32 Use the
‘Java’ plugin Fetch your dependencies from Maven Central -
@glaforge / #groovylang How? Scripting: build automation !32 Use the
‘Java’ plugin Fetch your dependencies from Maven Central Declare your dependencies and their scope -
@glaforge / #groovylang How? Scripting: build automation !34 Declare and
use the ‘android’ plugin -
@glaforge / #groovylang How? Scripting: build automation !35 Gradle plugins
can create their own declarative mini- language -
@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 -
@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 -
@glaforge / #groovylang Who? Scripting: DevOps !38 Anyone who needs
to automate cloud deployments -
@glaforge / #groovylang Who? Scripting: DevOps !38 Anyone who needs
to automate cloud deployments sshoogr & gramazon are from -
@glaforge / #groovylang How? Scripting: DevOps with sshoogr !39 Remote
execution SSH Secure copy -
@glaforge / #groovylang How? Scripting: DevOps with gramazon Gradle plugin
!40 Start EC2 instances from your Gradle automation build -
@glaforge / #groovylang How? Scripting: DevOps with Provisioning Gradle plugin
!42 Import and apply the Provisioning plugin for Gradle -
@glaforge / #groovylang How? Scripting: DevOps with Provisioning Gradle plugin
!43 Virtual box configuration -
@glaforge / #groovylang How? Scripting: DevOps with Provisioning Gradle plugin
!43 Virtual box configuration Network configuration -
@glaforge / #groovylang How? Scripting: DevOps with Provisioning Gradle plugin
!44 Disk partitioning definition -
@glaforge / #groovylang How? Scripting: DevOps with Provisioning Gradle plugin
!45 Packages to be installed -
@glaforge / #groovylang How? Scripting: DevOps with Provisioning Gradle plugin
!46 Post installation commands -
@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 -
@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 -
@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 -
@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 -
@glaforge / #groovylang How? Testing: Spock test framework !53 Wiki-like
notation for defining data driven tests -
Define the mock interactions Possible to define cardinality, matching any
number of parameter, or arbitrary method name -
@glaforge / #groovylang How? Testing: Geb web integration tests !57
An HtmlUnit, FireFox or Chrome browser -
@glaforge / #groovylang How? Testing: Geb web integration tests !57
An HtmlUnit, FireFox or Chrome browser Drive the browser to a certain URL -
@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 -
@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 -
@glaforge / #groovylang How? Testing: Geb web integration tests with
Spock !58 With page objects -
@glaforge / #groovylang How? Testing: Geb web integration tests with
Spock !58 With page objects BDD style: given/when/then -
@glaforge / #groovylang How? Testing: Geb web integration tests with
Spock !58 With page objects BDD style: given/when/then Wait for slow loading pages -
@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 -
@glaforge / #groovylang Who? Customizing: extension, configuration, plugins !61 Continuous
Integration server Internet of Things -
@glaforge / #groovylang Who? Customizing: extension, configuration, plugins !61 Continuous
Integration server Internet of Things Second-generation wiki -
@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 -
@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 -
@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 -
@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 -
@glaforge / #groovylang How? Customizing: extension, configuration, plugins !67 A
wiki user with programming rights can add this Groovy script in a page -
@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 -
@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 -
@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 -
@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 -
@glaforge / #groovylang Who? Domain-Specific Languages: business rules !71 US
Fortune 500 insurance actuaries write risk calculation rules in Groovy -
@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 -
@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 -
@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 -
@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 -
@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 -
@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 -
@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 -
@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? -
@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 -
@glaforge / #groovylang How? Domain-Specific Languages: business rules • Groovy
lets you create your own control structures with closures !73 -
@glaforge / #groovylang How? Domain-Specific Languages: business rules • Groovy
lets you create your own control structures with closures !73 -
@glaforge / #groovylang How? Domain-Specific Languages: business rules • Groovy
lets you create your own control structures with closures !73 -
@glaforge / #groovylang How? Domain-Specific Languages: business rules • Groovy
lets you create your own control structures with closures !73 -
@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 -
@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 -
Adding properties to numbers through runtime meta-programming Groovy « command
chains »: syntax convention for dropping parens & dots for natural-language-like sentences -
@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 -
@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 -
@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 -
@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… -
@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 -
@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 -
@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! :-) -
@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 -
@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 -
@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