Groovy Scripting with Groovy 1'1 - PowerPoint PPT Presentation

1 / 48
About This Presentation
Title:

Groovy Scripting with Groovy 1'1

Description:

Learn more about the Groovy dynamic language for the JVM, what's new in the ... Drools 1060NetKernel RIFE GroovyRules Mule FreeMind LuxorXUL Spring Ant Maven ... – PowerPoint PPT presentation

Number of Views:796
Avg rating:3.0/5.0
Slides: 49
Provided by: turingCsC
Category:
Tags: groovy | mule | scripting

less

Transcript and Presenter's Notes

Title: Groovy Scripting with Groovy 1'1


1
GroovyScripting with Groovy 1.1
  • Guillaume Laforge
  • Vice-President, Technology
  • G2One, Inc.
  • http//www.g2one.com

2
Goal of This Talk
Scripting with Groovy 1.1
Learn more about the Groovy dynamic language for
the JVM, whats new in the latest version, and
how you can use it in your projects!
3
Guillaume Laforge
  • Groovy Project Manager
  • JSR-241 Spec Lead
  • Initiator of the Grails framework
  • Co-author of Groovy in Action
  • By Dierk König, et al.
  • Vice-President Technology

4
Agenda
  • Whats Groovy?
  • Syntax basics
  • Groovy APIs
  • Whats new in Groovy 1.1?
  • Domain-Specific Languages
  • Integrating Groovy in your applications
  • Summary
  • QA

5
Whats Groovy?
  • An award-winning alternative dynamic language
    for the JVM
  • State of the Groovy Nation

6
Sugar in your Java
  • Groovy is Java-like
  • Easy to learn for a Java developer
  • ? flat learning curve
  • Simpler than Java for beginners and subject
    matter experts
  • Seamless integration with Java
  • You can mix Groovy and Java objects together
  • Groovy class extending Java class implementing
    Groovy interface, and vice versa
  • Same strings, regex, APIs, OO, threads, security
  • Same paradigm and platform!
  • No impedance mismatch!

7
Features at a Glance
  • Fully object-oriented
  • Closures reusable assignable code blocks
  • Properties support dont wait for Java 7 or 8!
  • Operator overloading
  • Native syntax for list, maps and regex
  • Multimethods call the right method!
  • GPath XPath-like navigation in object graphs
  • BigDecimal arithmetics by default
  • Optional semi-colons and parenthesis
  • SQL, Ant, XML, templates, Swing, XML-RPC, JMX
  • Perfect for Domain-Specific Languages

8
Groovy Figures
  • Groovy is a 4 years old project Codehaus
  • Over 10 active committers
  • 4 on the core, 3 on Eclipse plugin, 3 on Swing
  • After 1.0, 11K downloads in weeks
  • Highest traffic mailing-lists at Codehaus
  • Actually, 2nd to Grails (MVC Web Framework)?
  • 1000 subscribers to our lists
  • In the process of standardization JSR-241

9
Already Integrated Everywhere
  • AntHill Grails eXo Platform JBoss Seam
    NanoContainer Eclipse XWiki ServiceMix Tapestry
    Wicket TestNG SoapUI Turbine Oracle OC4J Blojsom
    NetBeans OpenEJB Drools 1060NetKernel RIFE
    GroovyRules Mule FreeMind LuxorXUL Spring Ant
    Maven IntelliJ IDEA Simple JSPWiki eXist Canoo
    WebTest Biscuit ThinG Oracle Data Integrator
    Struts2 Eclipse JMeter JFreeChart,

10
Used in Mission-Critical applications
  • Mutual of Omaha Fortune 500 US Comp.
  • 45,000 lines of Groovy (half business code / half
    test code)?
  • Integrated in an EJB as a risk calculation engine
    for insurance policies
  • Involved Java beginners, developers, and subject
    matter experts
  • Exact arithmetic support, perfect Java
    integration, closures ? ideal for business rules
    expression

11
Books already out more coming
12
JAX 2007 Innovation Award
  • 40 proposals / 10 nominees
  • Groovy won the first prize
  • Most innovative and creative project
  • 10,000 euros donation
  • Past winner was Spring

13
Syntax Basics
  • Groovy as a Java-superset
  • Syntax examples
  • Properties, lists, maps, ranges, regex, strings,
    closures

14
Valid 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 lt strings.size() i)
  • String s (String) strings.get(i)
  • if (s.length() lt length)
  • result.add(s)
  • return result
  • public static void main(String args)
  • List names new ArrayList()
  • names.add("Ted")
  • names.add("Fred")
  • names.add("Jed")
  • names.add("Ned")

15
Valid 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 lt strings.size() i)
  • String s (String) strings.get(i)
  • if (s.length() lt length)
  • result.add(s)
  • return result
  • public static void main(String args)
  • List names new ArrayList()
  • names.add("Ted")
  • names.add("Fred")
  • names.add("Jed")
  • names.add("Ned")

16
Groovier solution ?
  • def names "Ted", "Fred", "Jed", "Ned"
  • println names
  • def shortNames names.findAll
  • it.size() lt 3
  • println shortNames.size()?
  • shortNames.each println it

17
Properties Support
  • Dont wait for Java 7/8/9 ?
  • Getters / setters are boring boiler-plate code
  • Groovy adds support for properties
  • Declared fields get automagic accessors
  • Example
  • class Person String name String
    firstName

18
Litterals for lists, maps, ranges, regex, strings
  • List def list "Groovy", "Grails"
  • Map def map CA "Calif.", TX "Texas"
  • Ranges def uptoten 1..10
  • Regex assert fooooo /fo/
  • Multiline strings
  • def s """ multi line string"""  
  • Gstring
  • println "My name is name"

19
Closures
  • Dont wait for Java 7/8/9, get closures now!
  • Reusable / assignable code blocks
  • Combine, store, share data and logic
  • Examples
  • new File('x.txt').eachLine println it
  • 0, 1, 2.each println it
  • def numbers 1..100def odd it 2 1
    numbers.findAll it gt 90 numbers.findAll(
    odd )?

20
Groovy APIs
  • Groovy Development Kit
  • Examples XML, SQL, Swing and Office automation

21
Groovy Development Kit
  • Simplified APIs for common tasks
  • Mocking / stubbing support
  • XML parsing and GPath navigation
  • SQL support with exception resource handling
  • Script Ant with the AntBuilder
  • Create Swing UIs easily with SwingBuilder
  • Templating support à la Velocity
  • Script COM / ActiveX components on Windows
  • Consume / expose XML-RPC / SOAP services
  • Handle JXM beans as local objects

22
XML Parsing and GPath Navigation
  • Given this XML snippet
  • def xml """ltlanguagesgt ltlanguage
    name"Groovy"gt ltfeature coolness"low"gtSQLlt/fe
    aturegt ltfeature coolness"high"gtTemplatelt/feat
    uregt lt/languagegt ltlanguage name"Perl"/gtlt/lan
    guagesgt""
  • Navigate the object graph
  • def root new XmlParser().parseText(xml)println
    root.language.feature1.text()root.language.fea
    ture .findAll it'_at_coolness' "low"
    .each println it.text()

23
SQL support
  • Easy to use JDBC thanks to closures
  • def sql Sql.newInstance(url, usr, pwd,
    driver)sql.execute("insert into table values
    (foo, bar)")sql.execute("insert into table
    values(?,?)", a, b)sql.eachRow("select from
    USER") print it.name def list
    sql.rows("select from USER")?
  • DataSet notion  poor-man  ORM
  • def set sql.dataSet("USER")set.add(name
    "Johnny", age 33)set.each user -gt println
    user.name set.findAll it.age gt 22 it.age lt
    42

24
SwingBuilder
  • def theMap color "green", object
    "pencil"def swing new SwingBuilder()def
    frame swing.frame( title 'A Groovy
    Swing', location 240,240,
    defaultCloseOperationWC.EXIT_ON_CLOSE) panel
    for (entry in theMap) label(text
    entry.key) textField(text entry.value)
    button(text 'About', actionPerformed
    def pane swing.optionPane(message
    'SwingBuilder') def dialog
    pane.createDialog(null, 'About')
    dialog.show() ) button(text'Quit',
    actionPerformed System.exit(0) )
    frame.pack()frame.show()?

25
Automating Office Applications
  • An additional module provide VB-like scripting
    capabilities with a VB-like syntax
  • Example
  • def outlook new ActiveXProxy("Outlook.Appli
    cation")def message outlook.CreateItem(0)def
    emails glaforge_at_gmail.com def rec
    message.Recipients.add(emails)rec.Type
    1message.Display(true)

26
Domain-Specific Languages
  • Why create Domain-Specific Languages?
  • How to create such DSLs?

27
Why Create a Domain-Specific Language?
  • Use a more expressive language than a general
    programming language
  • Share a common metaphore between developers and
    subject matter experts
  • Have domain experts help design the business
    logic of an application
  • Avoid cluttering business code with too much
    boilerplate technical code
  • Cleanly seperate business logic from application
    code

28
Putting it all together
  • Optional parens, map syntax, props on ints
  • move left
  • compare indicator NIKEI, withFund XYZ
  • account.debit amount 30.euros, in 3.days
  • Custom control structures with closures
  • unless ( account.balance lt 0 )
    account.debit 10.dollars
  • execute( withTimeoutOf 50.seconds )
  • Operator overloading
  • a b ? a.plus(b)?
  • taskA taskB ? taskA.or(taskB)?

29
Builder pattern at the syntax level
  • Tree structures are everywhere
  • XML, GUI components, Ant tasks, conf files
  • Through closure chained method calls
  • new MarkupBuider().invoices invoice(id
    "4") line "product 1" line
    "product 2"
  • Create your own  builder 
  • Extend BuilderSupport, or FactoryBuilderSupport

30
Whats new in 1.1?
  • Java 5 features
  • New dynamic capabilities
  • Performance improvements
  • IDE support

31
Whats New?
  • Java 5 features
  • Annotations, generics, enums, static imports
  • New powerful dynamic capabilities
  • ExpandoMetaClass contributed by Grails
  • Performance improvements
  • Regular gains of perf. between the last releases
  • IDE support IntelliJ IDEA Eclipse

32
Java 5 Features
  • Why adding Java 5 features to Groovy?
  • To leverage Enterprise frameworks making use of
    annorations and generics
  • Spring, JPA, Hibernate, Guice, TestNG, JUnit 4
  • Groovy is the sole alternative dynamic language
    for the JVM supporting annotations
  • Groovy is Java-like, but is closer to being a
    pure Java-superset
  • If you need annotations / generics and want to
    benefit from a dynamic language
  • Look no further, Groovy is the sole option

33
Annotations Example
  • Taken from JBoss Seams documentation
  • _at_Entity_at_Name("hotel")class Hotel implements
    Serializable _at_Id _at_GeneratedValue Long
    id _at_Length(max50) _at_NotNull String
    name _at_Override String toString()
    "Hotel name" 

34
Enums example with a Groovy switch
  • enum Day  SUNDAY,  MONDAY, TUESDAY, WEDNESDAY, 
  • THURSDAY, FRIDAY, SATURDAY 
  • def today  Day.SATURDAY
  • switch (today) 
  •     case Day.SATURDAY, Day.SUNDAY 
  •         println "Weekends are cool"
  •         break
  •     case Day.MONDAY..Day.FRIDAY 
  •         println "Boring work day"
  •         break
  •     default 
  •         println "Are you sure this is a valid day?
    "

35
New dynamic features
  • Grails contributed the ExpandoMetaClass
  • Easily add new behavior to existing classes
  • Symbiotic relationship between both projects
  • Ex Adding a meters property to numbers
  • Integer.metaClass.getMeters -gt new
    Distance(delegate, Distance.METER) println
    3.meters

36
Have a look at the IntelliJ IDEA plugin!
37
Integrating Groovyin your Applications
  • Why integrating Groovy in your applications?
  • The different integration mechanisms

38
Why Integrating Groovy in your Apps?
  • Groovys great support for testing
  • Mocks stubs, GroovyTestCase
  • More concise readable tests
  • Handy tool int the developer toolbox
  • Externalize business rules
  • Business rules be written by domain experts
  • Rules follow their own lifecycle
  • Providing extension points in your apps
  • For third-party plugins
  • Customizing the app to clients needs

39
Several Integration Mechanisms
  • The  old  Bean Scripting Framework
  • Java 6s scripting APIs (JSR-223)?
  • Spring dynamic language support
  • Groovys own mechanisms
  • Lets see some of them

40
JSR-223 javax.script. from JDK 6
  • One API to rule them all!
  • Dedicated Groovy engineon scripting.dev.java.net
  • Drop it in your classpath!
  • Example
  • ScriptEngineManager manager new
    ScriptEngineManager()ScriptEngine gEngine
    manager.getEngineByName("groovy")String result
    (String)gEngine.eval("Foo 2")

41
GroovyShell
  • Easily evaluate expressions in your Java app
  • Pass variables in and out
  • Can provide global reusable functions
  • Example
  • def binding new Binding()binding.mass
    22.3binding.velocity 10.6def shell new
    GroovyShell( binding )def expression "mass
    velocity 2 / 2" assert shell.evaluate(expressi
    on) 1252.814

42
GroovyClassLoader
  • Most powerful integration mechanism
  • With GCL, you can
  • Parse and compile classes
  • Provide a resource loader defining the location
    of sources
  • Database, flat files, XML files, distant URLs
  • Define Java security rules
  • To avoid System.exit(0) in an Embedded DSL!
  • Even transform the Abstract Syntax Tree!

43
Spring 2.x Groovy integration
  • Spring 2.0 provides support for alternative
    language bean definitions and configuration
  • A POGO can be wired the like a POJO and be
    proxied
  • You can mix languages in your Spring application
  • POGO and POJO can be injected within each other
  • Configuration of a POGO bean with the specific
    lang namespace, and a custom MetaClass
  • ltlanggroovy id"events" script-source"class
    pathdsl/eventsChart.groovy"
    customizer-ref"eventsMetaClass" /gt

44
Lets Wrap Up
  • Summary
  • Resources
  • QA

45
Summary
  • The Groovy dynamic language for the
    JVMsimplifies the life of developers through
    powerful APIs
  • Groovy opens some interesting perspectives
    towards extending your application
  • Groovy provides the most seamless Java
    integration experience
  • Groovy lets you create DSLs
  • Groovy protects your investment in skills, tools,
    libraries and application servers

46
Resources
  • Groovy http//groovy.codehaus.org
  • Grails http//grails.org
  • Groovy blogs http//groovyblogs.org
  • AboutGroovy http//aboutgroovy.com
  • G2One http//www.g2one.com

47
G2One, Inc.
  • Groovy Grails at the source!
  • Graeme Rocher, Grails lead
  • Guillaume Laforge, Groovy lead
  • Plus key committers
  • Professional Services
  • Training, support, consulting
  • Custom developments
  • Connectors, plugins, etc

48
QA
Write a Comment
User Comments (0)
About PowerShow.com