56
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. An Introduction to Groovy and the New Features in 1.6 Get started with Groovy and learn about all the novelties in the latest release Guillaume Laforge Head of Groovy Development

Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Embed Size (px)

Citation preview

Page 1: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

An Introduction to Groovyand the New Features in 1.6

Get started with Groovy and learn about all the novelties in the latest release

Guillaume LaforgeHead of Groovy Development

Page 2: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Guillaume LaforgeGroovy Project Manager — SpringSource

> Working on Groovy since 2003> JSR-241 Spec Lead

> Initiator of the Grails web framework

> Co-author of Groovy in Action

> Speaker: JavaOne, QCon, JavaPolis/Devoxx, JavaZone, Sun Tech Days, SpringOne/The Spring Experience, JAX, DSL DevCon, and more…

2

Page 3: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

What’s new in Groovy 1.6?Article Published by InfoQ

> This presentation was prepared with the examples I’ve used in my article written for InfoQ

> http://www.infoq.com/articles/groovy-1-6

> Read this article for more detailed explanations of all the new features in Groovy 1.6

3

Page 4: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Agenda

> Groovy Overview> Performance Improvements> Syntax Enhancements> Compile-Time Metaprogramming> The Grape Module System> Swing-Related Improvements> Runtime Metaprogramming

Additions> JSR-223 Scripting Engine Built-In> JMX Builder> OSGi Readiness

4

Page 5: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Groovy in a NutshellSimplify the Life of Java Developers

> Groovy is a dynamic language for the JVM With a Meta-Object Protocol Compiles down to bytecode

> Open Source Apache licensed project

> Relaxed grammar derived from the Java 5 grammar Borrowed some good ideas from Smalltalk/Python/Ruby Java 5 features out of the box:

annotations, generics, static imports, enums… Flat learning curve

5

Page 6: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

• Are you a Groovy developer?

6

Page 7: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

• Ok, so, are you a Java developer?

7

Page 8: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

• Then, yes, you are a Groovy developer!

•Any Java developer is a also a Groovy developer!

8

Page 9: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

A Taste of Groovy — Take 1A Normal Java Program

> public class HelloWorld { private String name;

public void setName(String name) { this.name = name; }

public String getName() { return name; }

public String greet() { return "Hello " + name; }

public static void main(String[] args) { HelloWorld helloWorld = new HelloWorld(); helloWorld.setName("Groovy"); System.out.println( helloWorld.greet() ); }}

9

Page 10: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

A Taste of Groovy — Take 2A Valid Groovy Program

10

> public class HelloWorld { private String name;

public void setName(String name) { this.name = name; }

public String getName() { return name; }

public String greet() { return "Hello " + name; }

public static void main(String[] args) { HelloWorld helloWorld = new HelloWorld(); helloWorld.setName("Groovy"); System.out.println( helloWorld.greet() ); }}

Page 11: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

A Taste of Groovy — Take 3A Groovier Program!

> class HelloWorld { String name String greet() { "Hello $name" }}

def helloWorld = new HelloWorld(name: "Groovy")println helloWorld.greet()

11

Page 12: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

The Groovy Web ConsoleA Groovy Playground

> Groovy works nicely on Google App Engine You can also deploy Grails applications

> You can play with Groovy in the web console http://groovyconsole.appspot.com/

12

Page 13: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 13

The Groovy Web ConsoleA Screenshot

Page 14: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Features at a Glance

> Fully Object-Oriented> Joint compiler: seamless Java integration> Closures: reusable blocks of code / anon functions> Properties: forget about getters and setters> Optional typing: your choice!> BigDecimal arithmetic by default for floating point> Handy APIs

XML, JDBC, JMX, template engine, Swing UIs> Strong ability for authoring Domain-Specific

Languages Syntax-level “builders” Adding properties to numbers: 10.dollars Operator overloading: 10.meters + 20.kilometers

14

Page 15: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Joint Compilation

• Total Java interoperability• Concretely, what does it mean?

15

JInterface

<<implements>>

GClass

JClass

GInterface

JClass

GClass

<<implements>>

Page 16: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Native Syntax Constructs

• Lists–def numbers = [1, 2, 3, 4, 5]

• Maps–def map = [FR: ‘France’, BE: ‘Belgium’]

• Ranges–def allowed = 18..65

• Regular expressions–def whitespace = ~/\s+?/–if (‘foo’ ==~ /o+/) { ... }

16

Page 17: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

GStrings!

• GStrings are... interpolated strings–Sorry, not really what you expected!–Placeholder variables are replaced –You can have multiline strings

• def person = ‘John’def letter = “““${new Date()} Dear ${person}, I hope you’re fine!”””

17

Page 18: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Closures

• Closures are reusable and assignable code blocks or anonymous functions–No need to wait for Java 7/8/9 to get them!–def greet = { println “Hello ${it}” }greet(“Guillaume”)

• You can pass parameters–def greet = { String name -> println “Hello ${name}” }

• You can passe closures around–def method(Closure c) { c(“Hello”) }method(greet)

18

Page 19: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

BigDecimal Arithmetic

19

• Main reason why financial institutions often decide to use Groovy for their business rules!–Although these days rounding issues are overrated!

• Java vs Groovy for a simple interpolation equation

• BigDecimal uMinusv = c.subtract(a); BigDecimal vMinusl = b.subtract(c); BigDecimal uMinusl = a.subtract(b); return e.multiply(uMinusv) .add(d.multiply(vMinusl)) .divide(uMinusl, 10, BigDecimal.ROUND_HALF_UP);

• (d * (b - c) + e * (c - a)) / (a - b)

Page 20: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Groovy Builders

• The Markup builder–Easy way for creating XML or HTML content

– def mkp = new MarkupBuilder()mkp.html { head { title “Groovy in Action” } body { div(width: ‘100’) { p(class: ‘para’) { span “Best book ever!” } } }}

20

Page 21: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Parsing XML

• And it’s so easy to parser XML and navigate through the node graph!

• def geocodingUrl = "http://...".toURL()geocodingUrl.withInputStream { stream -> def node = new XmlSlurper().parse(stream) if (node.Response.Status.code == "200") { def text = node.Response.Placemark. Point.coordinates.text() def coord = text.tokenize(','). collect{ Float.parseFloat(it) } (latitude, longitude) = coord[1..0] }}

21

Page 22: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Agenda

> Groovy Overview> Performance Improvements> Syntax Enhancements> Compile-Time Metaprogramming> The Grape Module System> Swing-Related Improvements> Runtime Metaprogramming

Additions> JSR-223 Scripting Engine Built-In> JMX Builder> OSGi Readiness

22

Page 23: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Performance ImprovementsBoth Runtime & Compile-Time

> The Groovyc compiler is 3x to 5x faster With a clever class lookup cache

> Certain online micro-benchmarks show150% to 460% increase in performance compared to Groovy 1.5 Thanks to advanced call-site caching techniques Beware of micro-benchmarks!

> Makes Groovy one of the fastest dynamic languages available

23

Page 24: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Agenda

> Groovy Overview> Performance Improvements> Syntax Enhancements> Compile-Time Metaprogramming> The Grape Module System> Swing-Related Improvements> Runtime Metaprogramming

Additions> JSR-223 Scripting Engine Built-In> JMX Builder> OSGi Readiness

24

Page 25: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Multiple AssignmentAssign Multiple Variables at Once

> Newly defined variables def (a, b) = [1, 2]assert a == 1assert b == 2

> Assign to existing variables def lat, lng(lat, lng) = geocode(‘Paris’)

> The classical swap case (a, b) = [b, a]

> Extra elements ⇒ not assigned to any variable> Less elements ⇒ null into extra variables

25

Page 26: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

More Optional ReturnIn if/else and try/catch Blocks

> The return keyword is optional for the last expression of a method body But if/else & try/catch didn’t return any value

> def method() { if (true) 1 else 0 }assert method() == 1

> def method(bool) { try { if (bool) throw new Exception("foo") 1 } catch(e) { 2 } finally { 3 }} assert method(false) == 1assert method(true) == 2

26

Page 27: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Annotation DefinitionThe Missing Bit of Java 5 Support

> Groovy support for Java 5 features is now complete with the missing annotation definition

> Nothing to show here, it’s just normal Java :-)

> Note that the sole dynamic language supporting annotation is… Groovy Opens the door to EJB3 / JPA / Spring annotations /

Guice / TestNG…

27

Page 28: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Agenda

> Groovy Overview> Performance Improvements> Syntax Enhancements> Compile-Time Metaprogramming> The Grape Module System> Swing-Related Improvements> Runtime Metaprogramming

Additions> JSR-223 Scripting Engine Built-In> JMX Builder> OSGi Readiness

28

Page 29: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Meta-What?Meta-Programming

> The ability of a language to modify itself

> Groovy 1.6 introduces AST Transformations Abstract Syntax Tree

> Goodbye to a lot of boiler-plate technical code!

> Two kinds of transformations Global transformations Local transformations: triggered by annotations

29

Page 30: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

AST Transformations in Groovy 1.6Implement Patterns through Transformations

> Several transformations finds their way @Singleton — okay, not really a pattern ;-) @Immutable, @Lazy, @Delegate @Newify @Category and @Mixin @PackageScope Swing’s @Bindable and @Vetoable Grape’s @Grab

> Let’s have a look at some of them!

30

Page 31: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

@Singleton(Anti-)Pattern Revisited

> The evil Java singleton public class Evil { public static final Evil instance = new Evil (); private Evil () {} Evil getInstance() { return instance; }

}

> In Groovy: @Singleton() class Evil {}

> There’s also a « lazy » version @Singleton(lazy = true) class Evil {}

31

Page 32: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

@ImmutableThe Immutable… Boiler-Plate Code

> To properly implement immutable classes No mutators (state musn’t change) Private final fields Defensive copying of mutable components Proper equals() / hashCode() / toString() for

comparisons or for keys in maps, etc.

> In Groovy @Immutable final class Coordinates { Double lat, lng}def c1 = new Coordinates(lat: 48.8, lng: 2.5)def c2 = new Coordinates(48.8, 2.5)assert c1 == c2

32

Page 33: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

@LazyNot Just for Lazy Dudes!

> When you need to lazy evaluate / instantiate complex data structures for class fields, mark them as @Lazy

class Dude { @Lazy pets = retriveFromSlowDB()}

> Groovy will handle the boiler-plate code for you

33

Page 34: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

@DelegateNot Just for Managers!

> You can delegate to fields of your class Think multiple inheritance class Employee { def doTheWork() { "done" }}

class Manager { @Delegate Employee slave = new Employee()}def god = new Manager()assert god.doTheWork() == "done"

> Damn manager who will get all the praise…

34

Page 35: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Agenda

> Groovy Overview> Performance Improvements> Syntax Enhancements> Compile-Time Metaprogramming> The Grape Module System> Swing-Related Improvements> Runtime Metaprogramming

Additions> JSR-223 Scripting Engine Built-In> JMX Builder> OSGi Readiness

35

Page 36: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Grab a GrapeGroovy Advanced Packaging Engine

> Helps you distribute scripts without dependencies> Just declare your dependencies with @Grab

Will look for dependencies in Maven or Ivy repositories

> @Grab(group = 'org.mortbay.jetty', module = 'jetty-embedded', version = '6.1.0')def startServer() { def srv = new Server(8080) def ctx = new Context(srv , "/", SESSIONS) ctx.resourceBase = "." ctx.addServlet(GroovyServlet, "*.groovy") srv.start()}

36

Page 37: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Agenda

> Groovy Overview> Performance Improvements> Syntax Enhancements> Compile-Time Metaprogramming> The Grape Module System> Swing-Related Improvements> Runtime Metaprogramming

Additions> JSR-223 Scripting Engine Built-In> JMX Builder> OSGi Readiness

37

Page 38: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

@Bindable (1/2)Event-Driven Made Easy

> Speaking of boiler-plate code… property change listeners

> import java.beans.PropertyChangeSupport;import java.beans.PropertyChangeListener;

public class MyBean { private String prop; PropertyChangeSupport pcs = new PropertyChangeSupport(this);

public void addPropertyChangeListener(PropertyChangeListener l) { pcs.add(l); }

public void removePropertyChangeListener(PropertyChangeListener l) { pcs.remove(l); }

public String getProp() { return prop; }

public void setProp(String prop) { pcs.firePropertyChanged("prop", this.prop, this.prop = prop); }}

38

Page 39: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

@Bindable (2/2)Event-Driven Made Easy

> Groovy’s solution

class MyBean { @Bindable String prop}

> Interesting in Griffon and Swing builder

textField text: bind { myBean.prop }

> Also of interest: @Vetoable

39

Page 40: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

GriffonThe Swing MVC Framework

> Leverages Groovy’s SwingBuilder and Grails’ infrastructure

http://griffon.codehaus.org

40

Page 41: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Swing Console Improvements

> The console can be run as an applet> Code indentation support> Script drag’n drop> Add JARs in the classpath from the GUI> Execution results visualization plugin> Clickable stacktraces and error messages

> Not intended to be a full-blown IDE, but handy

41

Page 42: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 42

Page 43: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Agenda

> Groovy Overview> Performance Improvements> Syntax Enhancements> Compile-Time Metaprogramming> The Grape Module System> Swing-Related Improvements> Runtime Metaprogramming Additions> JSR-223 Scripting Engine Built-In> JMX Builder> OSGi Readiness

43

Page 44: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

ExpandoMetaClass DSLLess Repetition

> EMC is a way to change the behavior of types at runtime

> Before Number.metaClass.multiply = { Amount amount -> amount.times(delegate) }Number.metaClass.div = { Amount amount -> amount.inverse().times(delegate) }

> Now in Groovy 1.6 Number.metaClass { multiply { Amount amount -> amount.times(delegate) } div { Amount amount -> amount.inverse().times(delegate) }}

44

Page 45: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Runtime MixinsInject New Behavior to Types at Runtime

> class FlyingAbility { def fly() { "I'm ${name} and I fly!" }}

class JamesBondVehicle { String getName() { "James Bond's vehicle" }}

JamesBondVehicle.mixin FlyingAbility

assert new JamesBondVehicle().fly() == "I'm James Bond's vehicle and I fly!"

45

Page 46: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Agenda

> Groovy Overview> Performance Improvements> Syntax Enhancements> Compile-Time Metaprogramming> The Grape Module System> Swing-Related Improvements> Runtime Metaprogramming

Additions> JSR-223 Scripting Engine Built-In> JMX Builder> OSGi Readiness

46

Page 47: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

javax.script.* Scripting APIsGroovy Scripting Engine Built-In

> In Groovy 1.6, the JSR-223 / javax.script.* scripting engine for Groovy is bundled

import javax.script.*

def manager = new ScriptEngineManager()def engine = manager.getEngineByName("groovy")

assert engine.evaluate("2 + 3") == 5

> To evaluate Groovy scripts at runtime in your application, just drop the Groovy JAR in your classpath!

47

Page 48: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Agenda

> Groovy Overview> Performance Improvements> Syntax Enhancements> Compile-Time Metaprogramming> The Grape Module System> Swing-Related Improvements> Runtime Metaprogramming

Additions> JSR-223 Scripting Engine Built-In> JMX Builder> OSGi Readiness

48

Page 49: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

JMX Builder (1/2)Domain-Specific Language for JMX

• Simplify JMX handling with a Builder pattern approach• Declaratively expose Java/Groovy objects as MBeans• JMX's event model support

–Inline closures to create event handler & broadcaster–Closures for receiving event notifications

• Provides a flexible registration policy for MBean• Exposes attribute, constructors, operations,

parameters, and notifications• Simplified creation of connector servers & clients• Support for exporting JMX timers• http://groovy.codehaus.org/Groovy+JmxBuilder

49

Page 50: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

JMX Builder (2/2)Examples

> Create a connector server def jmx = new JmxBuilder()jmx.connectorServer(port:9000).start()

> Create a connector client jmx.connectorClient(port:9000).connect()

> Export a bean jmx.export { bean new MyService() }

> Defining a timer jmx.timer(name: "jmx.builder:type=Timer", event: "heartbeat", period: "1s").start()

> JMX listener jmx.listener(event: "…", from: "foo", call: { event -> …})

50

Page 51: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Agenda

> Groovy Overview> Performance Improvements> Syntax Enhancements> Compile-Time Metaprogramming> The Grape Module System> Swing-Related Improvements> Runtime Metaprogramming

Additions> JSR-223 Scripting Engine Built-In> JMX Builder> OSGi Readiness

51

Page 52: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

OSGi Readiness

> The Groovy JAR contains OSGi metadata Can be reused in OSGi containers out-of-the-box

> Tutorials on Groovy and OSGi http://groovy.codehaus.org/OSGi+and+Groovy Will show you how to load Groovy as a service, write,

publish and consume Groovy services, and more

52

Page 53: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Summary

Page 54: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

SummaryJust Remember that Groovy Rocks! :-)

> Any Java developer is a Groovy developer!> Great for admin tasks, extending apps, writing DSLs

> Groovy 1.6 provides Important performance gains Efficient compile-time metaprogramming hooks New useful features (JMX, javax.script.*, etc.) A script dependencies system Various Swing-related improvements Several runtime metaprogramming additions

> Get it now! http://groovy.codehaus.org/Download

54

Page 55: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

GR8 Conference

• If you wish to learn more about Groovy, Grails and Griffon, register for the GR8 Conference

• A conference dedicated to Groovy, Grails, Griffon and other Groovy related technologies

• Co-organized by SpringSource and the Danish JUG (Javagruppen)

• Takes place in Copenhagen, Denmark, on May 18th and 19th

• Use the code SPRING to get a discount ;-)

55

Page 56: Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Questions & Answers