gr8conf 2009: what's new in groovy 1.6? by guillaume laforge
DESCRIPTION
Guillaume Laforge, Groovy Project Manager, present the new features and improvements in Groovy 1.6.TRANSCRIPT
![Page 1: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/1.jpg)
![Page 2: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/2.jpg)
What’s new in Groovy 1.6?
Get started with Groovy and learn about all the novelties in the latest release
Guillaume LaforgeHead of Groovy Development
![Page 3: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/3.jpg)
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…
3
![Page 4: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/4.jpg)
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
4
![Page 5: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/5.jpg)
> 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
5
Agenda
![Page 6: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/6.jpg)
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
6
![Page 7: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/7.jpg)
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() ); }}
7
![Page 8: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/8.jpg)
8
> 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() ); }}
A Taste of Groovy — Take 2A Normal Groovy Program
![Page 9: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/9.jpg)
> class HelloWorld { String name String greet() { "Hello $name" }}
def helloWorld = new HelloWorld(name: "Groovy")println helloWorld.greet()
9
A Taste of Groovy — Take 3A Groovier Program
![Page 10: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/10.jpg)
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/
10
![Page 11: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/11.jpg)
11
The Groovy Web ConsoleA Screenshot
![Page 12: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/12.jpg)
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
12
![Page 13: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/13.jpg)
Joint Compilation
• Total Java interoperability• Concretely, what does it mean?
13
JInterface
<<implements>>
GClass
JClass
GInterface
JClass
GClass
<<implements>>
![Page 14: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/14.jpg)
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+/) { ... }
14
![Page 15: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/15.jpg)
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!”””
15
![Page 16: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/16.jpg)
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)
16
![Page 17: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/17.jpg)
BigDecimal Arithmetic
17
• 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 18: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/18.jpg)
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!” } } }}
18
![Page 19: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/19.jpg)
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] }}
19
![Page 20: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/20.jpg)
> 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
20
Agenda
![Page 21: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/21.jpg)
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
21
![Page 22: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/22.jpg)
> 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
Agenda
![Page 23: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/23.jpg)
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
23
![Page 24: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/24.jpg)
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
24
![Page 25: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/25.jpg)
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…
25
![Page 26: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/26.jpg)
> 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
26
Agenda
![Page 27: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/27.jpg)
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
27
![Page 28: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/28.jpg)
AST Transformations in 1.6Implement Patterns through Transformations
> Several transformations find their way in Groovy 1.6
@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!
28
![Page 29: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/29.jpg)
@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 {}
29
![Page 30: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/30.jpg)
@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
30
![Page 31: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/31.jpg)
@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
31
![Page 32: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/32.jpg)
@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…
32
![Page 33: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/33.jpg)
> 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
33
Agenda
![Page 34: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/34.jpg)
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()}
34
![Page 35: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/35.jpg)
> 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
Agenda
![Page 36: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/36.jpg)
@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); }}
36
![Page 37: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/37.jpg)
> Groovy’s solution
class MyBean { @Bindable String prop}
> Interesting in Griffon and Swing builder
textField text: bind { myBean.prop }
> Also of interest: @Vetoable
37
@Bindable (2/2)Event-Driven Made Easy
![Page 38: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/38.jpg)
GriffonThe Swing MVC Framework
> Leverages Groovy’s SwingBuilder and Grails’ infrastructure
http://griffon.codehaus.org
38
![Page 39: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/39.jpg)
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
39
![Page 40: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/40.jpg)
40
![Page 41: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/41.jpg)
> 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
41
Agenda
![Page 42: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/42.jpg)
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) }}
42
![Page 43: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/43.jpg)
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!"
43
![Page 44: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/44.jpg)
> 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
44
Agenda
![Page 45: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/45.jpg)
javax.script.* Scripting APIsGroovy Scripting Engine Built-In
> The JSR-223 / javax.script.* scripting engine for Groovy is bundled in Groovy 1.6
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!
45
![Page 46: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/46.jpg)
> 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
Agenda
![Page 47: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/47.jpg)
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
47
![Page 48: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/48.jpg)
> 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 -> …})
48
JMX Builder (2/2)Domain-Specific Language for JMX
![Page 49: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/49.jpg)
> 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
49
Agenda
![Page 50: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/50.jpg)
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
50
![Page 51: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/51.jpg)
Summary
![Page 52: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/52.jpg)
SummaryJust Remember that Groovy Rocks! :-)
> Any Java developer is a Groovy developer!> Great for your next-generation general purpose
programming language, as well as 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
52
![Page 53: GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge](https://reader033.vdocuments.mx/reader033/viewer/2022052618/554f6a7cb4c905c8088b5166/html5/thumbnails/53.jpg)
Questions & Answers