SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
Groovy in the Enterprise:
Case Studies



Guillaume Laforge
VP Technology
G2One, Inc.
glaforge@g2one.com
Guillaume Laforge
Groovy Project Manager
 • Spec Lead of JSR-241
Initiator of the Grails framework

Co-author of Groovy in Action

VP Technology at G2One
 • The Groovy / Grails company
 • Training, support, consulting
Evangelizing Groovy, Grails and DSLs
 • JavaOne, JavaPolis, QCon, JAX, Sun TechDays...
Goal of this talk

                    Discover real-world Groovy
                    usage in the Enterprise
                    to better understand:

                •How you can leverage Groovy
                    in your own environment

                •How to integrate Groovy
                    in your applications
Agenda


About Groovy and Grails

Groovy usage patterns

Integrating Groovy in your applications

Case studies
About Groovy and Grails


Groovy, a dynamic language for the JVM
Grails, an agile web application framework
Groovy is...
The fastest dynamic language for the JVM
 • that integrates seamlessly with Java
  without any impedance mismatch

An Apache-licensed Open Source project
 • successful project hosted at Codehaus
Aiming at simplifying the life of developers
 • by bringing expressiveness and productivity boosts
 • by borrowing good ideas from other languages
An innovative and creative project
Java-like on steroids
Syntax derived from the Java 5 grammar
 • Flat learning curve for Java developers
 • Supports both static and dynamic typing
Support Java 5 features
 • Annotations, generics, static imports, enums...
 • Sole dynamic language to support this!
                                                             GInterface
                                             JInterface



Real full Java / Groovy interop                            <<implements>>
                                           <<implements>>


                                                               JClass
                                              GClass

 • Joint compiler
 • or can be evaluated on the fly             JClass           GClass
A Java program
import java.util.List;
import java.util.ArrayList;
class Erase {
    private List filterLongerThan(List strings, int length) {
        List result = new ArrayList();
        for (int i = 0; i < strings.size(); i++) {
            String s = (String) strings.get(i);
            if (s.length() <= length) {
                result.add(s);
            }
        }
        return result;
    }
    public static void main(String[] args) {
        List names = new ArrayList();
        names.add(quot;Tedquot;);
        names.add(quot;Fredquot;);
        names.add(quot;Jedquot;);
        names.add(quot;Nedquot;);
        System.out.println(names);
        Erase e = new Erase();
        List shortNames= e.filterLongerThan(names, 3);
        System.out.println(shortNames.size());
        for (inti= 0; i< shortNames.size(); i++) {
            String s = (String) shortNames.get(i);
            System.out.println(s);
        }
    }
}
A Groovy program
import java.util.List;
import java.util.ArrayList;
class Erase {
    private List filterLongerThan(List strings, int length) {
        List result = new ArrayList();
        for (int i = 0; i < strings.size(); i++) {
            String s = (String) strings.get(i);
            if (s.length() <= length) {
                result.add(s);
            }
        }
        return result;
    }
    public static void main(String[] args) {
        List names = new ArrayList();
        names.add(quot;Tedquot;);
        names.add(quot;Fredquot;);
        names.add(quot;Jedquot;);
        names.add(quot;Nedquot;);
        System.out.println(names);
        Erase e = new Erase();
        List shortNames= e.filterLongerThan(names, 3);
        System.out.println(shortNames.size());
        for (inti= 0; i< shortNames.size(); i++) {
            String s = (String) shortNames.get(i);
            System.out.println(s);
        }
    }
}
A more idiomatic Groovy solution


 def names = [“Ted”, “Frend”, “Jed”, “Ned”]
 println names
 def shortNames = names.findAll {
    it.size() <= 3
 }
 println shortNames.size()
 shortNames.each { println it }
Features at a glance...
Don’t wait for Java 7, 8, 9
 • closures, properties, collection & regex literals
Operator overloading
 • Just method calls: plus(), multiply(), etc.
 • BigDecimal arithmetics by default
Metaprogramming — useful for DSLs
 • Property / method calls interception
Optional semicolons and parentheses

SQL, Ant, XML, templates, Swing, JMX...
Lots to read to learn more!
Grails
Groovy usage patterns


A tool in the developer toolbox
A full stack web application framework
An extension point in your application
Domain-Specific Languages
Pattern: Developer tool
Great support for unit
 testing and mock objects
 • Nice way to introduce Groovy in a project
Shell scripting reusing all your JARs
 • Easy to control Ant task for custom builds
Template engine for code generation needs

Excellent XML parsing and creation support

Easy JDBC for import/export database scripts
Pattern: CoC web app development
Convention over Configuration
 • Productive in minutes with scaffolding
 • No useless configuration, focus on what matters
 • Dir. layout, naming conventions, transparent wiring...
Grails = Groovy + Spring + Hibernate + ...
 • Groovy is the glue to write
    your views (Groovy Server Pages)
    your controllers
    your services
    your domain classes
Pattern: Application extension point
Customize or extend your application at
 extension points through Groovy scripting

Create plugins adding new functionality

Add / Update business rules at runtime

 • See also Domain-Specific Languages
Personalize your reporting screens
 • With Groovy templates
Remote introspection of your app
 • Embed a remote Groovy shell
Pattern: Domain-Specific Language
Use a more expressive language
 • than a general purpose language
Share a common metaphore between
 developers and subject matter experts

Domain experts can help write the rules!

Avoid boilerplate technical code

Cleanly seperate business logic
 from application plumbing code
Integrating Groovy
in your applications

JSR-223, one API to rule them all
Spring dynamic beans
Groovy’s own mechanisms
JSR-223: javax.script.*
One API to rule them all

Groovy engine JAR at scripting.dev.java.net
 • drop it in your classpath


ScriptEngineManager mgr =
     new ScriptEngineManager();
 ScriptEngine eng =
     mgr.getEngineByName(“Groovy”);
 String result =
     (String)eng.eval(“‘foo’*2”);
Spring 2 dynamic language beans
Spring 2 provides support for alternative
 language bean definitions & implementations
 • POGOs can be wired, proxied, injected in POJOs

Configuration with the <lang:*> namespace
 • <lang:groovyid=’bean’
      script-source=’classpath:com.foo.GBean’
      customizer-ref=’specialMetaClass’/>



Groovy beans can be “refreshed”
Groovy’s own mechanisms
Several integration mechanisms
 • Eval, GroovyShell, GroovyScriptEngine
 • def binding = new Binding()
  binding.mass = 22.3
  binding.velocity = 10.6
  def shell = new GroovyShell()
  def expr = “mass * velocity ** 2 / 2”
  assert shell.evalute(expr) == 1252.814

GroovyClassLoader for more advanced
 integration scenario
Case studies


Groovy and Grails Success Stories
Grails Examples


LinkedIn
BSkyB showbiz portal
LinkedIn
Main site
 • Java / Tomcat / Spring / Hibernate / custom MVC
But their corporate solutions are in Grails
 • Private portals for recruiters, for premium customers
  with focused needs

Why Grails?
 • Needed a more productive webapp framework with
  rapid prototyping capabilities
 • Needed deep integration with their Java backend
    custom session, reuse business services, SSO
showbiz
Biggest UK satellite
 broadcaster
 • also known as BSkyB
 • owned by News Corp.


Developed their showbiz website on Grails
 • 186+ million page views per month
 • “Grails just scales” ™
Currently rewriting their main portal in Grails
Groovy as a Developer Tool


Patterson Institute for Cancer Research
French Ministry of Justice
Canoo WebTest
Patterson Institute for Cancer Research
Manchester University / Cancer Research UK

Groovy in two projects
 • X:Map: a Genome browser
    using a 54GB tileset for Google Maps

 • exonmap: microarrays analysis program
Groovy used to
 • Fetch latest genome sequencing information (FTP)
 • Homogenize data sources
 • Scan databases, extrapolate and filter data
Code generation

Groovy was used as a developer tool
 • but no line of Groovy in production code

                             Groovy XML
                               Parsers
                      XMI
      UML

                                           Groovy
                                          Template
                                           Engine
Canoo WebTest
Open Source tool for automating testing
 of web applications


 invoke “http://google.com”
  verifyTitle “Google”
  setInputField name: ‘q’,
      value: ‘WebTest’
  clickButton “I’m feeling lucky”
  verifyTitle “Canoo WebTest”
Groovy as a Language for
Application Extension Points

CodeStreet Market Data Studio
Hyperic HQ
codestreet
Market Data Works simplifies
 • capturing, auditing
 • editing Reuters market data



Traders can use Groovy
 • modify market data feeds
 • record and replay feeds
 • test evolutionary scenario
Groovy
Hyperic HQ: open source web infrastructure
 monitoring and management suite
 • used in Spring Application Management Suite


Big Groovy-based plugin infrastructure
 • script deployments, server reboots, threshold alerts,
  resources monitoring, etc...
 • agent side: custom handling of monitored resources
 • also embeds a Groovy console for interactive work
 • plugins updatable / reloadable at runtime
Groovy for
Business Rules and DSLs

Mutual of Omaha
National Cancer Institute
IRSN
OCTO Technology
Mutual of Omaha
US Fortune 500 insurance company

Risk calculation engine in Groovy
 part of a mission-critical application

50,000 lines of Groovy code
 • half business rules, half test code
Module part of a large EJB-based application

Choice of Groovy
 • Business rules readability, maintenance by IT and
  Subject Matter experts, seamless Java integration
Mutual of Omaha
On business rules readability...
   • Groovy’s BigDecimal support
   • Simple interpolation formula
       (d*(b-c)+e*(c-a))/(a-b)



                BigDecimal uMinusv = upperBound.subtract(value);
                BigDecimal vMinusl = value.subtract(lowerBound);
                BigDecimal uMinusl = upperBound.subtract(lowerBound);
                return lowerValue.multiply(uMinusv).
                    add(upperValue.multiply(vMinusl)).
                    divide(uMinusl, 10, BigDecimal.ROUND_HALF_UP);




(lowerValue * (upperBound-value) + upperValue * (value-lowerBound) ) / (upperBound-lowerBound)
National Cancer Institute
Cancer registry management
 • Organizes large amounts of medical records
 • JBoss / Oracle / Hibernate / Struts application
Groovy used in several places
 • As an architecture validation system — dev. tool
    ensure proper layer seperation, if not, fail the build

 • Param validation for customizing reporting screens
 • Business rules to edit and validation medical records
    validity of fields, of set of fields, of records
    check / fix / improve the patient files
    700k patient files * 1,300 edits
Nuclear safety organization
Scientific context, with intensive
 and complex computation needs

Matlab/Mathematica-like DSL on top of super
 efficient Java custom math library
 • Thin Groovy DSL layer
 • Enjoyed a math-like syntax for matrices, seamless
  integration with Java
 • Groovy’s operator overloading mechanism
 • Friendlier to scientists and mathematicians
 • Application targets 200-300 engineers & researchers
Human Resources DSL
Architecture / Agile consultancy
 • Needed a way to track consultant skills & knowledge
    pay raises, finding the right person for the gig, etc...



Developed a DSL to represent skills
 • Textual DSL transformed into a treemap-like graphics
 • Integrated in Confluence as a plugin
    the plugin parses and generates an in-memory model
    a servlet renders graphics to embed in the wiki pages
    a Confluence macro renders everything on the wiki page

 • Leverages Confluence’s search capabilities
Human Resources DSL
etre {
  idees {
    capture 1
    formule 1
    produit 1
  }
    organisation {
    controle 1
    abandonne 1
    aligne 1
  }
  engagement {
    euros 1
    gens 1
    idees 1
    enseigner 1
  }
}
faire {
    ...
}
Summary
Summary
Groovy is a successful, mature and
 performant dynamic language for the JVM

Provides several interesting usage patterns
 • Developer tool, CoC webapp development,
  application extension mechanism,
  DSLs & business rules externalization

Used in production for mission-critical
 applications, and integrated in many
 frameworks
Questions & Answers




             glaforge @   .com

Más contenido relacionado

La actualidad más candente

Spicy javascript: Create your first Chrome extension for web analytics QA
Spicy javascript: Create your first Chrome extension for web analytics QASpicy javascript: Create your first Chrome extension for web analytics QA
Spicy javascript: Create your first Chrome extension for web analytics QAAlban Gérôme
 
Eric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemEric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemGuardSquare
 
Eric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemEric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemGuardSquare
 
20130530-PEGjs
20130530-PEGjs20130530-PEGjs
20130530-PEGjszuqqhi 2
 
Go 1.10 Release Party - PDX Go
Go 1.10 Release Party - PDX GoGo 1.10 Release Party - PDX Go
Go 1.10 Release Party - PDX GoRodolfo Carvalho
 
Introduction To Grails
Introduction To GrailsIntroduction To Grails
Introduction To GrailsEric Berry
 
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...Guillaume Laforge
 
Andriy Shalaenko - GO security tips
Andriy Shalaenko - GO security tipsAndriy Shalaenko - GO security tips
Andriy Shalaenko - GO security tipsOWASP Kyiv
 
Introduction To Groovy 2005
Introduction To Groovy 2005Introduction To Groovy 2005
Introduction To Groovy 2005Tugdual Grall
 
Groovy for Java Developers
Groovy for Java DevelopersGroovy for Java Developers
Groovy for Java DevelopersAndres Almiray
 
2007 09 10 Fzi Training Groovy Grails V Ws
2007 09 10 Fzi Training Groovy Grails V Ws2007 09 10 Fzi Training Groovy Grails V Ws
2007 09 10 Fzi Training Groovy Grails V Wsloffenauer
 
Gradle For Beginners (Serbian Developer Conference 2013 english)
Gradle For Beginners (Serbian Developer Conference 2013 english)Gradle For Beginners (Serbian Developer Conference 2013 english)
Gradle For Beginners (Serbian Developer Conference 2013 english)Joachim Baumann
 
Groovy for java developers
Groovy for java developersGroovy for java developers
Groovy for java developersPuneet Behl
 
Add (Syntactic) Sugar To Your Java
Add (Syntactic) Sugar To Your JavaAdd (Syntactic) Sugar To Your Java
Add (Syntactic) Sugar To Your JavaPascal-Louis Perez
 
Python Debugging Fundamentals
Python Debugging FundamentalsPython Debugging Fundamentals
Python Debugging Fundamentalscbcunc
 

La actualidad más candente (20)

Spicy javascript: Create your first Chrome extension for web analytics QA
Spicy javascript: Create your first Chrome extension for web analytics QASpicy javascript: Create your first Chrome extension for web analytics QA
Spicy javascript: Create your first Chrome extension for web analytics QA
 
Eric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemEric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build system
 
Practical Groovy DSL
Practical Groovy DSLPractical Groovy DSL
Practical Groovy DSL
 
Eric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemEric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build system
 
Golang for OO Programmers
Golang for OO ProgrammersGolang for OO Programmers
Golang for OO Programmers
 
Js tacktalk team dev js testing performance
Js tacktalk team dev js testing performanceJs tacktalk team dev js testing performance
Js tacktalk team dev js testing performance
 
20130530-PEGjs
20130530-PEGjs20130530-PEGjs
20130530-PEGjs
 
Go 1.10 Release Party - PDX Go
Go 1.10 Release Party - PDX GoGo 1.10 Release Party - PDX Go
Go 1.10 Release Party - PDX Go
 
What's New in Groovy 1.6?
What's New in Groovy 1.6?What's New in Groovy 1.6?
What's New in Groovy 1.6?
 
Introduction To Grails
Introduction To GrailsIntroduction To Grails
Introduction To Grails
 
groovy & grails - lecture 7
groovy & grails - lecture 7groovy & grails - lecture 7
groovy & grails - lecture 7
 
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...
 
Andriy Shalaenko - GO security tips
Andriy Shalaenko - GO security tipsAndriy Shalaenko - GO security tips
Andriy Shalaenko - GO security tips
 
Introduction To Groovy 2005
Introduction To Groovy 2005Introduction To Groovy 2005
Introduction To Groovy 2005
 
Groovy for Java Developers
Groovy for Java DevelopersGroovy for Java Developers
Groovy for Java Developers
 
2007 09 10 Fzi Training Groovy Grails V Ws
2007 09 10 Fzi Training Groovy Grails V Ws2007 09 10 Fzi Training Groovy Grails V Ws
2007 09 10 Fzi Training Groovy Grails V Ws
 
Gradle For Beginners (Serbian Developer Conference 2013 english)
Gradle For Beginners (Serbian Developer Conference 2013 english)Gradle For Beginners (Serbian Developer Conference 2013 english)
Gradle For Beginners (Serbian Developer Conference 2013 english)
 
Groovy for java developers
Groovy for java developersGroovy for java developers
Groovy for java developers
 
Add (Syntactic) Sugar To Your Java
Add (Syntactic) Sugar To Your JavaAdd (Syntactic) Sugar To Your Java
Add (Syntactic) Sugar To Your Java
 
Python Debugging Fundamentals
Python Debugging FundamentalsPython Debugging Fundamentals
Python Debugging Fundamentals
 

Destacado

Groovy DSLs - S2GForum London 2011 - Guillaume Laforge
Groovy DSLs - S2GForum London 2011 - Guillaume LaforgeGroovy DSLs - S2GForum London 2011 - Guillaume Laforge
Groovy DSLs - S2GForum London 2011 - Guillaume LaforgeGuillaume Laforge
 
Google App Engine, Groovy and Gaelyk presentation at the Paris JUG
Google App Engine, Groovy and Gaelyk presentation at the Paris JUGGoogle App Engine, Groovy and Gaelyk presentation at the Paris JUG
Google App Engine, Groovy and Gaelyk presentation at the Paris JUGGuillaume Laforge
 
Groovy introduction - IJTC 2008
Groovy introduction - IJTC 2008Groovy introduction - IJTC 2008
Groovy introduction - IJTC 2008Guillaume Laforge
 
Groovy 1 7 Update, past, present, future - S2G Forum 2010
Groovy 1 7 Update, past, present, future - S2G Forum 2010Groovy 1 7 Update, past, present, future - S2G Forum 2010
Groovy 1 7 Update, past, present, future - S2G Forum 2010Guillaume Laforge
 
Groovy and Gaelyk - Lausanne JUG 2011 - Guillaume Laforge
Groovy and Gaelyk - Lausanne JUG 2011 - Guillaume LaforgeGroovy and Gaelyk - Lausanne JUG 2011 - Guillaume Laforge
Groovy and Gaelyk - Lausanne JUG 2011 - Guillaume LaforgeGuillaume Laforge
 
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011Gaelyk - Guillaume Laforge - GR8Conf Europe 2011
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011Guillaume Laforge
 

Destacado (6)

Groovy DSLs - S2GForum London 2011 - Guillaume Laforge
Groovy DSLs - S2GForum London 2011 - Guillaume LaforgeGroovy DSLs - S2GForum London 2011 - Guillaume Laforge
Groovy DSLs - S2GForum London 2011 - Guillaume Laforge
 
Google App Engine, Groovy and Gaelyk presentation at the Paris JUG
Google App Engine, Groovy and Gaelyk presentation at the Paris JUGGoogle App Engine, Groovy and Gaelyk presentation at the Paris JUG
Google App Engine, Groovy and Gaelyk presentation at the Paris JUG
 
Groovy introduction - IJTC 2008
Groovy introduction - IJTC 2008Groovy introduction - IJTC 2008
Groovy introduction - IJTC 2008
 
Groovy 1 7 Update, past, present, future - S2G Forum 2010
Groovy 1 7 Update, past, present, future - S2G Forum 2010Groovy 1 7 Update, past, present, future - S2G Forum 2010
Groovy 1 7 Update, past, present, future - S2G Forum 2010
 
Groovy and Gaelyk - Lausanne JUG 2011 - Guillaume Laforge
Groovy and Gaelyk - Lausanne JUG 2011 - Guillaume LaforgeGroovy and Gaelyk - Lausanne JUG 2011 - Guillaume Laforge
Groovy and Gaelyk - Lausanne JUG 2011 - Guillaume Laforge
 
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011Gaelyk - Guillaume Laforge - GR8Conf Europe 2011
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011
 

Similar a Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge

Scripting Oracle Develop 2007
Scripting Oracle Develop 2007Scripting Oracle Develop 2007
Scripting Oracle Develop 2007Tugdual Grall
 
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume LaforgeGroovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume LaforgeGuillaume Laforge
 
Groovy And Grails Introduction
Groovy And Grails IntroductionGroovy And Grails Introduction
Groovy And Grails IntroductionEric Weimer
 
Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Guillaume Laforge
 
Gg Code Mash2009 20090106
Gg Code Mash2009 20090106Gg Code Mash2009 20090106
Gg Code Mash2009 20090106Jim Shingler
 
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...Guillaume Laforge
 
Intro To Django
Intro To DjangoIntro To Django
Intro To DjangoUdi Bauman
 
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with GroovyBoosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with GroovyJames Williams
 
Javaone2008 Bof 5101 Groovytesting
Javaone2008 Bof 5101 GroovytestingJavaone2008 Bof 5101 Groovytesting
Javaone2008 Bof 5101 GroovytestingAndres Almiray
 
"Xapi-lang For declarative code generation" By James Nelson
"Xapi-lang For declarative code generation" By James Nelson"Xapi-lang For declarative code generation" By James Nelson
"Xapi-lang For declarative code generation" By James NelsonGWTcon
 
TypeScript - Silver Bullet for the Full-stack Developers
TypeScript - Silver Bullet for the Full-stack DevelopersTypeScript - Silver Bullet for the Full-stack Developers
TypeScript - Silver Bullet for the Full-stack DevelopersRutenis Turcinas
 
Ratpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web AppsRatpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web AppsJames Williams
 
.gradle 파일 정독해보기
.gradle 파일 정독해보기.gradle 파일 정독해보기
.gradle 파일 정독해보기경주 전
 
GTAC Boosting your Testing Productivity with Groovy
GTAC Boosting your Testing Productivity with GroovyGTAC Boosting your Testing Productivity with Groovy
GTAC Boosting your Testing Productivity with GroovyAndres Almiray
 
Android Bootcamp
Android   BootcampAndroid   Bootcamp
Android Bootcampahkjsdcsadc
 
Testing of javacript
Testing of javacriptTesting of javacript
Testing of javacriptLei Kang
 
Bring the fun back to java
Bring the fun back to javaBring the fun back to java
Bring the fun back to javaciklum_ods
 

Similar a Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge (20)

Scripting Oracle Develop 2007
Scripting Oracle Develop 2007Scripting Oracle Develop 2007
Scripting Oracle Develop 2007
 
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume LaforgeGroovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
 
Groovy And Grails Introduction
Groovy And Grails IntroductionGroovy And Grails Introduction
Groovy And Grails Introduction
 
Whats New In Groovy 1.6?
Whats New In Groovy 1.6?Whats New In Groovy 1.6?
Whats New In Groovy 1.6?
 
Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007
 
Gg Code Mash2009 20090106
Gg Code Mash2009 20090106Gg Code Mash2009 20090106
Gg Code Mash2009 20090106
 
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
 
Intro To Django
Intro To DjangoIntro To Django
Intro To Django
 
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with GroovyBoosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
 
Javaone2008 Bof 5101 Groovytesting
Javaone2008 Bof 5101 GroovytestingJavaone2008 Bof 5101 Groovytesting
Javaone2008 Bof 5101 Groovytesting
 
Svcc Groovy Testing
Svcc Groovy TestingSvcc Groovy Testing
Svcc Groovy Testing
 
"Xapi-lang For declarative code generation" By James Nelson
"Xapi-lang For declarative code generation" By James Nelson"Xapi-lang For declarative code generation" By James Nelson
"Xapi-lang For declarative code generation" By James Nelson
 
TypeScript - Silver Bullet for the Full-stack Developers
TypeScript - Silver Bullet for the Full-stack DevelopersTypeScript - Silver Bullet for the Full-stack Developers
TypeScript - Silver Bullet for the Full-stack Developers
 
Ratpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web AppsRatpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web Apps
 
Having Fun with Play
Having Fun with PlayHaving Fun with Play
Having Fun with Play
 
.gradle 파일 정독해보기
.gradle 파일 정독해보기.gradle 파일 정독해보기
.gradle 파일 정독해보기
 
GTAC Boosting your Testing Productivity with Groovy
GTAC Boosting your Testing Productivity with GroovyGTAC Boosting your Testing Productivity with Groovy
GTAC Boosting your Testing Productivity with Groovy
 
Android Bootcamp
Android   BootcampAndroid   Bootcamp
Android Bootcamp
 
Testing of javacript
Testing of javacriptTesting of javacript
Testing of javacript
 
Bring the fun back to java
Bring the fun back to javaBring the fun back to java
Bring the fun back to java
 

Más de Guillaume Laforge

Lift off with Groovy 2 at JavaOne 2013
Lift off with Groovy 2 at JavaOne 2013Lift off with Groovy 2 at JavaOne 2013
Lift off with Groovy 2 at JavaOne 2013Guillaume Laforge
 
Groovy workshop à Mix-IT 2013
Groovy workshop à Mix-IT 2013Groovy workshop à Mix-IT 2013
Groovy workshop à Mix-IT 2013Guillaume Laforge
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Guillaume Laforge
 
Groovy 2.0 update at Devoxx 2012
Groovy 2.0 update at Devoxx 2012Groovy 2.0 update at Devoxx 2012
Groovy 2.0 update at Devoxx 2012Guillaume Laforge
 
Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012Guillaume Laforge
 
Groovy update at SpringOne2GX 2012
Groovy update at SpringOne2GX 2012Groovy update at SpringOne2GX 2012
Groovy update at SpringOne2GX 2012Guillaume Laforge
 
Groovy 1.8 et 2.0 au BreizhC@mp 2012
Groovy 1.8 et 2.0 au BreizhC@mp 2012Groovy 1.8 et 2.0 au BreizhC@mp 2012
Groovy 1.8 et 2.0 au BreizhC@mp 2012Guillaume Laforge
 
Groovy 1.8 and 2.0 at GR8Conf Europe 2012
Groovy 1.8 and 2.0 at GR8Conf Europe 2012Groovy 1.8 and 2.0 at GR8Conf Europe 2012
Groovy 1.8 and 2.0 at GR8Conf Europe 2012Guillaume Laforge
 
Groovy 2.0 update - Cloud Foundry Open Tour Moscow - Guillaume Laforge
Groovy 2.0 update - Cloud Foundry Open Tour Moscow - Guillaume LaforgeGroovy 2.0 update - Cloud Foundry Open Tour Moscow - Guillaume Laforge
Groovy 2.0 update - Cloud Foundry Open Tour Moscow - Guillaume LaforgeGuillaume Laforge
 
Going to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific LanguagesGoing to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific LanguagesGuillaume Laforge
 
Groovy 2.0 - Devoxx France 2012
Groovy 2.0 - Devoxx France 2012Groovy 2.0 - Devoxx France 2012
Groovy 2.0 - Devoxx France 2012Guillaume Laforge
 
Groovy Update, new in 1.8 and beyond - Guillaume Laforge - Devoxx 2011
Groovy Update, new in 1.8 and beyond - Guillaume Laforge - Devoxx 2011Groovy Update, new in 1.8 and beyond - Guillaume Laforge - Devoxx 2011
Groovy Update, new in 1.8 and beyond - Guillaume Laforge - Devoxx 2011Guillaume Laforge
 
GPars et PrettyTime - Paris JUG 2011 - Guillaume Laforge
GPars et PrettyTime - Paris JUG 2011 - Guillaume LaforgeGPars et PrettyTime - Paris JUG 2011 - Guillaume Laforge
GPars et PrettyTime - Paris JUG 2011 - Guillaume LaforgeGuillaume Laforge
 
Groovy Update - Guillaume Laforge - Greach 2011
Groovy Update - Guillaume Laforge - Greach 2011Groovy Update - Guillaume Laforge - Greach 2011
Groovy Update - Guillaume Laforge - Greach 2011Guillaume Laforge
 
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011Gaelyk update - Guillaume Laforge - SpringOne2GX 2011
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011Guillaume Laforge
 
Groovy Update, what's new in Groovy 1.8 and beyond - Guillaume Laforge - Spri...
Groovy Update, what's new in Groovy 1.8 and beyond - Guillaume Laforge - Spri...Groovy Update, what's new in Groovy 1.8 and beyond - Guillaume Laforge - Spri...
Groovy Update, what's new in Groovy 1.8 and beyond - Guillaume Laforge - Spri...Guillaume Laforge
 

Más de Guillaume Laforge (20)

Lift off with Groovy 2 at JavaOne 2013
Lift off with Groovy 2 at JavaOne 2013Lift off with Groovy 2 at JavaOne 2013
Lift off with Groovy 2 at JavaOne 2013
 
Groovy workshop à Mix-IT 2013
Groovy workshop à Mix-IT 2013Groovy workshop à Mix-IT 2013
Groovy workshop à Mix-IT 2013
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013
 
Groovy 2 and beyond
Groovy 2 and beyondGroovy 2 and beyond
Groovy 2 and beyond
 
Groovy 2.0 update at Devoxx 2012
Groovy 2.0 update at Devoxx 2012Groovy 2.0 update at Devoxx 2012
Groovy 2.0 update at Devoxx 2012
 
Groovy 2.0 webinar
Groovy 2.0 webinarGroovy 2.0 webinar
Groovy 2.0 webinar
 
Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012
 
Groovy update at SpringOne2GX 2012
Groovy update at SpringOne2GX 2012Groovy update at SpringOne2GX 2012
Groovy update at SpringOne2GX 2012
 
JavaOne 2012 Groovy update
JavaOne 2012 Groovy updateJavaOne 2012 Groovy update
JavaOne 2012 Groovy update
 
Groovy 1.8 et 2.0 au BreizhC@mp 2012
Groovy 1.8 et 2.0 au BreizhC@mp 2012Groovy 1.8 et 2.0 au BreizhC@mp 2012
Groovy 1.8 et 2.0 au BreizhC@mp 2012
 
Groovy 1.8 and 2.0 at GR8Conf Europe 2012
Groovy 1.8 and 2.0 at GR8Conf Europe 2012Groovy 1.8 and 2.0 at GR8Conf Europe 2012
Groovy 1.8 and 2.0 at GR8Conf Europe 2012
 
Groovy 2.0 update - Cloud Foundry Open Tour Moscow - Guillaume Laforge
Groovy 2.0 update - Cloud Foundry Open Tour Moscow - Guillaume LaforgeGroovy 2.0 update - Cloud Foundry Open Tour Moscow - Guillaume Laforge
Groovy 2.0 update - Cloud Foundry Open Tour Moscow - Guillaume Laforge
 
Going to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific LanguagesGoing to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific Languages
 
Groovy 2.0 - Devoxx France 2012
Groovy 2.0 - Devoxx France 2012Groovy 2.0 - Devoxx France 2012
Groovy 2.0 - Devoxx France 2012
 
Whats new in Groovy 2.0?
Whats new in Groovy 2.0?Whats new in Groovy 2.0?
Whats new in Groovy 2.0?
 
Groovy Update, new in 1.8 and beyond - Guillaume Laforge - Devoxx 2011
Groovy Update, new in 1.8 and beyond - Guillaume Laforge - Devoxx 2011Groovy Update, new in 1.8 and beyond - Guillaume Laforge - Devoxx 2011
Groovy Update, new in 1.8 and beyond - Guillaume Laforge - Devoxx 2011
 
GPars et PrettyTime - Paris JUG 2011 - Guillaume Laforge
GPars et PrettyTime - Paris JUG 2011 - Guillaume LaforgeGPars et PrettyTime - Paris JUG 2011 - Guillaume Laforge
GPars et PrettyTime - Paris JUG 2011 - Guillaume Laforge
 
Groovy Update - Guillaume Laforge - Greach 2011
Groovy Update - Guillaume Laforge - Greach 2011Groovy Update - Guillaume Laforge - Greach 2011
Groovy Update - Guillaume Laforge - Greach 2011
 
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011Gaelyk update - Guillaume Laforge - SpringOne2GX 2011
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011
 
Groovy Update, what's new in Groovy 1.8 and beyond - Guillaume Laforge - Spri...
Groovy Update, what's new in Groovy 1.8 and beyond - Guillaume Laforge - Spri...Groovy Update, what's new in Groovy 1.8 and beyond - Guillaume Laforge - Spri...
Groovy Update, what's new in Groovy 1.8 and beyond - Guillaume Laforge - Spri...
 

Último

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 

Último (20)

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 

Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge

  • 1. Groovy in the Enterprise: Case Studies Guillaume Laforge VP Technology G2One, Inc. glaforge@g2one.com
  • 2. Guillaume Laforge Groovy Project Manager • Spec Lead of JSR-241 Initiator of the Grails framework Co-author of Groovy in Action VP Technology at G2One • The Groovy / Grails company • Training, support, consulting Evangelizing Groovy, Grails and DSLs • JavaOne, JavaPolis, QCon, JAX, Sun TechDays...
  • 3. Goal of this talk Discover real-world Groovy usage in the Enterprise to better understand: •How you can leverage Groovy in your own environment •How to integrate Groovy in your applications
  • 4. Agenda About Groovy and Grails Groovy usage patterns Integrating Groovy in your applications Case studies
  • 5. About Groovy and Grails Groovy, a dynamic language for the JVM Grails, an agile web application framework
  • 6. Groovy is... The fastest dynamic language for the JVM • that integrates seamlessly with Java without any impedance mismatch An Apache-licensed Open Source project • successful project hosted at Codehaus Aiming at simplifying the life of developers • by bringing expressiveness and productivity boosts • by borrowing good ideas from other languages An innovative and creative project
  • 7. Java-like on steroids Syntax derived from the Java 5 grammar • Flat learning curve for Java developers • Supports both static and dynamic typing Support Java 5 features • Annotations, generics, static imports, enums... • Sole dynamic language to support this! GInterface JInterface Real full Java / Groovy interop <<implements>> <<implements>> JClass GClass • Joint compiler • or can be evaluated on the fly JClass GClass
  • 8. A Java program import java.util.List; import java.util.ArrayList; class Erase { private List filterLongerThan(List strings, int length) { List result = new ArrayList(); for (int i = 0; i < strings.size(); i++) { String s = (String) strings.get(i); if (s.length() <= length) { result.add(s); } } return result; } public static void main(String[] args) { List names = new ArrayList(); names.add(quot;Tedquot;); names.add(quot;Fredquot;); names.add(quot;Jedquot;); names.add(quot;Nedquot;); System.out.println(names); Erase e = new Erase(); List shortNames= e.filterLongerThan(names, 3); System.out.println(shortNames.size()); for (inti= 0; i< shortNames.size(); i++) { String s = (String) shortNames.get(i); System.out.println(s); } } }
  • 9. A Groovy program import java.util.List; import java.util.ArrayList; class Erase { private List filterLongerThan(List strings, int length) { List result = new ArrayList(); for (int i = 0; i < strings.size(); i++) { String s = (String) strings.get(i); if (s.length() <= length) { result.add(s); } } return result; } public static void main(String[] args) { List names = new ArrayList(); names.add(quot;Tedquot;); names.add(quot;Fredquot;); names.add(quot;Jedquot;); names.add(quot;Nedquot;); System.out.println(names); Erase e = new Erase(); List shortNames= e.filterLongerThan(names, 3); System.out.println(shortNames.size()); for (inti= 0; i< shortNames.size(); i++) { String s = (String) shortNames.get(i); System.out.println(s); } } }
  • 10. A more idiomatic Groovy solution def names = [“Ted”, “Frend”, “Jed”, “Ned”] println names def shortNames = names.findAll { it.size() <= 3 } println shortNames.size() shortNames.each { println it }
  • 11. Features at a glance... Don’t wait for Java 7, 8, 9 • closures, properties, collection & regex literals Operator overloading • Just method calls: plus(), multiply(), etc. • BigDecimal arithmetics by default Metaprogramming — useful for DSLs • Property / method calls interception Optional semicolons and parentheses SQL, Ant, XML, templates, Swing, JMX...
  • 12. Lots to read to learn more!
  • 14. Groovy usage patterns A tool in the developer toolbox A full stack web application framework An extension point in your application Domain-Specific Languages
  • 15. Pattern: Developer tool Great support for unit testing and mock objects • Nice way to introduce Groovy in a project Shell scripting reusing all your JARs • Easy to control Ant task for custom builds Template engine for code generation needs Excellent XML parsing and creation support Easy JDBC for import/export database scripts
  • 16. Pattern: CoC web app development Convention over Configuration • Productive in minutes with scaffolding • No useless configuration, focus on what matters • Dir. layout, naming conventions, transparent wiring... Grails = Groovy + Spring + Hibernate + ... • Groovy is the glue to write  your views (Groovy Server Pages)  your controllers  your services  your domain classes
  • 17. Pattern: Application extension point Customize or extend your application at extension points through Groovy scripting Create plugins adding new functionality Add / Update business rules at runtime • See also Domain-Specific Languages Personalize your reporting screens • With Groovy templates Remote introspection of your app • Embed a remote Groovy shell
  • 18. Pattern: Domain-Specific Language Use a more expressive language • than a general purpose language Share a common metaphore between developers and subject matter experts Domain experts can help write the rules! Avoid boilerplate technical code Cleanly seperate business logic from application plumbing code
  • 19. Integrating Groovy in your applications JSR-223, one API to rule them all Spring dynamic beans Groovy’s own mechanisms
  • 20. JSR-223: javax.script.* One API to rule them all Groovy engine JAR at scripting.dev.java.net • drop it in your classpath ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine eng = mgr.getEngineByName(“Groovy”); String result = (String)eng.eval(“‘foo’*2”);
  • 21. Spring 2 dynamic language beans Spring 2 provides support for alternative language bean definitions & implementations • POGOs can be wired, proxied, injected in POJOs Configuration with the <lang:*> namespace • <lang:groovyid=’bean’ script-source=’classpath:com.foo.GBean’ customizer-ref=’specialMetaClass’/> Groovy beans can be “refreshed”
  • 22. Groovy’s own mechanisms Several integration mechanisms • Eval, GroovyShell, GroovyScriptEngine • def binding = new Binding() binding.mass = 22.3 binding.velocity = 10.6 def shell = new GroovyShell() def expr = “mass * velocity ** 2 / 2” assert shell.evalute(expr) == 1252.814 GroovyClassLoader for more advanced integration scenario
  • 23. Case studies Groovy and Grails Success Stories
  • 25. LinkedIn Main site • Java / Tomcat / Spring / Hibernate / custom MVC But their corporate solutions are in Grails • Private portals for recruiters, for premium customers with focused needs Why Grails? • Needed a more productive webapp framework with rapid prototyping capabilities • Needed deep integration with their Java backend  custom session, reuse business services, SSO
  • 26. showbiz Biggest UK satellite broadcaster • also known as BSkyB • owned by News Corp. Developed their showbiz website on Grails • 186+ million page views per month • “Grails just scales” ™ Currently rewriting their main portal in Grails
  • 27. Groovy as a Developer Tool Patterson Institute for Cancer Research French Ministry of Justice Canoo WebTest
  • 28. Patterson Institute for Cancer Research Manchester University / Cancer Research UK Groovy in two projects • X:Map: a Genome browser  using a 54GB tileset for Google Maps • exonmap: microarrays analysis program Groovy used to • Fetch latest genome sequencing information (FTP) • Homogenize data sources • Scan databases, extrapolate and filter data
  • 29. Code generation Groovy was used as a developer tool • but no line of Groovy in production code Groovy XML Parsers XMI UML Groovy Template Engine
  • 30. Canoo WebTest Open Source tool for automating testing of web applications  invoke “http://google.com” verifyTitle “Google” setInputField name: ‘q’, value: ‘WebTest’ clickButton “I’m feeling lucky” verifyTitle “Canoo WebTest”
  • 31. Groovy as a Language for Application Extension Points CodeStreet Market Data Studio Hyperic HQ
  • 32. codestreet Market Data Works simplifies • capturing, auditing • editing Reuters market data Traders can use Groovy • modify market data feeds • record and replay feeds • test evolutionary scenario
  • 34. Hyperic HQ: open source web infrastructure monitoring and management suite • used in Spring Application Management Suite Big Groovy-based plugin infrastructure • script deployments, server reboots, threshold alerts, resources monitoring, etc... • agent side: custom handling of monitored resources • also embeds a Groovy console for interactive work • plugins updatable / reloadable at runtime
  • 35. Groovy for Business Rules and DSLs Mutual of Omaha National Cancer Institute IRSN OCTO Technology
  • 36. Mutual of Omaha US Fortune 500 insurance company Risk calculation engine in Groovy part of a mission-critical application 50,000 lines of Groovy code • half business rules, half test code Module part of a large EJB-based application Choice of Groovy • Business rules readability, maintenance by IT and Subject Matter experts, seamless Java integration
  • 37. Mutual of Omaha On business rules readability... • Groovy’s BigDecimal support • Simple interpolation formula  (d*(b-c)+e*(c-a))/(a-b) BigDecimal uMinusv = upperBound.subtract(value); BigDecimal vMinusl = value.subtract(lowerBound); BigDecimal uMinusl = upperBound.subtract(lowerBound); return lowerValue.multiply(uMinusv). add(upperValue.multiply(vMinusl)). divide(uMinusl, 10, BigDecimal.ROUND_HALF_UP); (lowerValue * (upperBound-value) + upperValue * (value-lowerBound) ) / (upperBound-lowerBound)
  • 38. National Cancer Institute Cancer registry management • Organizes large amounts of medical records • JBoss / Oracle / Hibernate / Struts application Groovy used in several places • As an architecture validation system — dev. tool  ensure proper layer seperation, if not, fail the build • Param validation for customizing reporting screens • Business rules to edit and validation medical records  validity of fields, of set of fields, of records  check / fix / improve the patient files  700k patient files * 1,300 edits
  • 39. Nuclear safety organization Scientific context, with intensive and complex computation needs Matlab/Mathematica-like DSL on top of super efficient Java custom math library • Thin Groovy DSL layer • Enjoyed a math-like syntax for matrices, seamless integration with Java • Groovy’s operator overloading mechanism • Friendlier to scientists and mathematicians • Application targets 200-300 engineers & researchers
  • 40. Human Resources DSL Architecture / Agile consultancy • Needed a way to track consultant skills & knowledge  pay raises, finding the right person for the gig, etc... Developed a DSL to represent skills • Textual DSL transformed into a treemap-like graphics • Integrated in Confluence as a plugin  the plugin parses and generates an in-memory model  a servlet renders graphics to embed in the wiki pages  a Confluence macro renders everything on the wiki page • Leverages Confluence’s search capabilities
  • 41. Human Resources DSL etre { idees { capture 1 formule 1 produit 1 } organisation { controle 1 abandonne 1 aligne 1 } engagement { euros 1 gens 1 idees 1 enseigner 1 } } faire { ... }
  • 43. Summary Groovy is a successful, mature and performant dynamic language for the JVM Provides several interesting usage patterns • Developer tool, CoC webapp development, application extension mechanism, DSLs & business rules externalization Used in production for mission-critical applications, and integrated in many frameworks
  • 44. Questions & Answers glaforge @ .com