SlideShare a Scribd company logo
1 of 44
Download to read offline
Guillaume Laforge / Groovy Project Manager / SpringSource


What’s new in Groovy 1.6?
All the novelties of the latest version!



                                                       1
Guillaume Laforge
Groovy 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
                                                      2
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
                                                            3
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
                                                 4
Groovy in a Nutshell
Simplify the Life of Java Developers

      Groovy is a dynamic language for the Java Virtual
  >
      Machine
          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
                                                                   5
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


                                               6
                                                              6
A Taste of Groovy — Take 1
A 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 quot;Hello quot;+ name;
          }
          public static void main(String[] args) {
              HelloWorld helloWorld = new HelloWorld();
              helloWorld.setName(quot;Groovyquot;);
              System.out.println( helloWorld.greet() );
          }
      }




                                                          7
                                                              7
A Taste of Groovy — Take 2
A Valid Groovy Program
      public class HelloWorld {
  >
          private String name;
          public void setName(String name) {
              this.name = name;
          }
          public String getName() {
              return name;
          }
          public String greet() {
              return quot;Hello quot;+ name;
          }
          public static void main(String[] args) {
              HelloWorld helloWorld = new HelloWorld();
              helloWorld.setName(quot;Groovyquot;);
              System.out.println( helloWorld.greet() );
          }
      }




                                                          8
                                                              8
A Taste of Groovy — Take 3
A Groovier Program!


      class HelloWorld {
  >
          String name
          String greet() { quot;Hello $namequot; }
      }

      def helloWorld = new HelloWorld(name: quot;Groovyquot;)
      println helloWorld.greet()




                                                    9
                                                        9
The Groovy Web Console
A 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
                                                         10
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
         >



                                   11
                                                 11
Performance Improvements
Both Runtime & Compile-Time

     The Groovyc compiler is 3x to 5x faster
 >

         With a clever class lookup cache
     




     Certain online micro-benchmarks show
 >
     150% 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

                                                  12
                                                           12
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
         >



                                   13
                                                 13
Multiple Assignment
Assign Multiple Variables at Once

      Newly defined variables
  >

          def (a, b) = [1, 2]
      
          assert a == 1
          assert 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


                                          14
                                                    14
More Optional Return
In 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(quot;fooquot;)
              1
          } catch(e) { 2 }
          finally    {3}
      }
      assert method(false) == 1
      assert method(true) == 2
                                                 15
                                                               15
Annotation Definition
The 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…


                                                   16
                                                                16
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
         >



                                   17
                                                 17
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
     



                                                   18
                                                           18
AST Transformations in Groovy 1.6
Implement 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!
  >



                                                   19
                                                        19
@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 {}
      




                                                      20
                                                                 20
@Immutable
The 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

                                                   21
                                                          21
@Lazy
Not 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
  >




                                              22
                                                            22
@Delegate
Not Just for Managers!

      You can delegate to fields of your class
  >

          Think multiple inheritance
      

          class Employee {
      

              def doTheWork() { quot;donequot; }
          }

          class Manager {
              @Delegate
              Employee slave = new Employee()
          }
          def god = new Manager()
          assert god.doTheWork() == quot;donequot;


      Damn manager who will get all the praise…
  >


                                                 23
                                                      23
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
                                                 24
Grab a Grape
Groovy 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 , quot;/quot;, SESSIONS);
          ctx.resourceBase = quot;.quot;
          ctx.addServlet(GroovyServlet, quot;*.groovyquot;)
          srv.start()
      }

                                                          25
                                                                    25
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
         >



                                   26
                                                 26
@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(quot;propquot;, this.prop, this.prop = prop);
            }
       }



                                                                               27
                                                                                    27
@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
  >




                                                 28
                                                      28
Griffon
The Swing MVC Framework


     Leverages Groovy’s SwingBuilder
 >
     and Grails’ infrastructure
         http://griffon.codehaus.org
     




     Don’t miss the next session on!
 >




                                       29
                                            29
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
 >




                                            30
                                                      30
31
     31
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
         >



                                   32
                                                 32
ExpandoMetaClass DSL
Less 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) }
          }


                                                      33
                                                                   33
Runtime Mixins
Inject New Behavior to Types at Runtime


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

      class JamesBondVehicle {
          String getName() { quot;James Bond's vehiclequot; }
      }

      JamesBondVehicle.mixin FlyingAbility

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




                                             34
                                                        34
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
                                                 35
javax.script.* Scripting APIs
Groovy 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(quot;groovyquot;)
          assert engine.evaluate(quot;2 + 3quot;) == 5


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

                                               36
                                                              36
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
                                                 37
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
  >
                                               38
                                                                 38
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: quot;jmx.builder:type=Timerquot;,
     
             event: quot;heartbeatquot;, period: quot;1squot;).start()
     JMX listener
 >

         jmx.listener(event: quot;…quot;, from: quot;fooquot;,
     

             call: { event -> …})
                                                  39
                                                         39
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
         >



                                   40
                                                 40
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




                                                   41
                                                                 41
Guillaume Laforge / Groovy Project Manager / SpringSource


Summary



                                                       42
Summary
Just Remember that Groovy Rocks! :-)

      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
      




                                                    43
                                                            43
Guillaume Laforge / Groovy Project Manager / SpringSource


Question & Answers



                                                       44

More Related Content

What's hot

Embedding Groovy in a Java Application
Embedding Groovy in a Java ApplicationEmbedding Groovy in a Java Application
Embedding Groovy in a Java ApplicationPaolo Predonzani
 
Groovy AST Demystified
Groovy AST DemystifiedGroovy AST Demystified
Groovy AST DemystifiedAndres Almiray
 
Apache Groovy: the language and the ecosystem
Apache Groovy: the language and the ecosystemApache Groovy: the language and the ecosystem
Apache Groovy: the language and the ecosystemKostas Saidis
 
Introduction to Griffon
Introduction to GriffonIntroduction to Griffon
Introduction to GriffonJames Williams
 
Greach 2014 - Metaprogramming with groovy
Greach 2014 - Metaprogramming with groovyGreach 2014 - Metaprogramming with groovy
Greach 2014 - Metaprogramming with groovyIván López Martín
 
Metaprogramming Techniques In Groovy And Grails
Metaprogramming Techniques In Groovy And GrailsMetaprogramming Techniques In Groovy And Grails
Metaprogramming Techniques In Groovy And GrailszenMonkey
 
Grooscript in Action SpringOne2gx 2015
Grooscript in Action SpringOne2gx 2015Grooscript in Action SpringOne2gx 2015
Grooscript in Action SpringOne2gx 2015Jorge Franco Leza
 
Golang for PHP programmers: A practical introduction
Golang for PHP programmers: A practical introductionGolang for PHP programmers: A practical introduction
Golang for PHP programmers: A practical introductionRichard Tuin
 
Groovy And Grails Introduction
Groovy And Grails IntroductionGroovy And Grails Introduction
Groovy And Grails IntroductionEric Weimer
 
Metaprogramming with Groovy
Metaprogramming with GroovyMetaprogramming with Groovy
Metaprogramming with GroovyAli Tanwir
 
Introduction to Groovy runtime metaprogramming and AST transforms
Introduction to Groovy runtime metaprogramming and AST transformsIntroduction to Groovy runtime metaprogramming and AST transforms
Introduction to Groovy runtime metaprogramming and AST transformsMarcin Grzejszczak
 
Pavimentando el camino con Jakarta EE 9 y Apache TomEE
Pavimentando el camino con Jakarta EE 9 y Apache TomEE Pavimentando el camino con Jakarta EE 9 y Apache TomEE
Pavimentando el camino con Jakarta EE 9 y Apache TomEE César Hernández
 
Paving the road with Jakarta EE and Apache TomEE - JCON 2021
Paving the road with Jakarta EE  and Apache TomEE - JCON 2021Paving the road with Jakarta EE  and Apache TomEE - JCON 2021
Paving the road with Jakarta EE and Apache TomEE - JCON 2021César Hernández
 
Javaone2008 Bof 5101 Groovytesting
Javaone2008 Bof 5101 GroovytestingJavaone2008 Bof 5101 Groovytesting
Javaone2008 Bof 5101 GroovytestingAndres Almiray
 
Build microservice with gRPC in golang
Build microservice with gRPC in golangBuild microservice with gRPC in golang
Build microservice with gRPC in golangTing-Li Chou
 
Communication between Java and Python
Communication between Java and PythonCommunication between Java and Python
Communication between Java and PythonAndreas Schreiber
 
7 recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
7 recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...7 recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
7 recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...César Hernández
 
Javaone2008 Bof 5102 Groovybuilders
Javaone2008 Bof 5102 GroovybuildersJavaone2008 Bof 5102 Groovybuilders
Javaone2008 Bof 5102 GroovybuildersAndres Almiray
 

What's hot (20)

Embedding Groovy in a Java Application
Embedding Groovy in a Java ApplicationEmbedding Groovy in a Java Application
Embedding Groovy in a Java Application
 
Groovy AST Demystified
Groovy AST DemystifiedGroovy AST Demystified
Groovy AST Demystified
 
Apache Groovy: the language and the ecosystem
Apache Groovy: the language and the ecosystemApache Groovy: the language and the ecosystem
Apache Groovy: the language and the ecosystem
 
Introduction to Griffon
Introduction to GriffonIntroduction to Griffon
Introduction to Griffon
 
Greach 2014 - Metaprogramming with groovy
Greach 2014 - Metaprogramming with groovyGreach 2014 - Metaprogramming with groovy
Greach 2014 - Metaprogramming with groovy
 
Metaprogramming Techniques In Groovy And Grails
Metaprogramming Techniques In Groovy And GrailsMetaprogramming Techniques In Groovy And Grails
Metaprogramming Techniques In Groovy And Grails
 
Grooscript in Action SpringOne2gx 2015
Grooscript in Action SpringOne2gx 2015Grooscript in Action SpringOne2gx 2015
Grooscript in Action SpringOne2gx 2015
 
Golang for PHP programmers: A practical introduction
Golang for PHP programmers: A practical introductionGolang for PHP programmers: A practical introduction
Golang for PHP programmers: A practical introduction
 
Groovy And Grails Introduction
Groovy And Grails IntroductionGroovy And Grails Introduction
Groovy And Grails Introduction
 
Metaprogramming with Groovy
Metaprogramming with GroovyMetaprogramming with Groovy
Metaprogramming with Groovy
 
Introduction to Groovy runtime metaprogramming and AST transforms
Introduction to Groovy runtime metaprogramming and AST transformsIntroduction to Groovy runtime metaprogramming and AST transforms
Introduction to Groovy runtime metaprogramming and AST transforms
 
Grooscript greach
Grooscript greachGrooscript greach
Grooscript greach
 
Pavimentando el camino con Jakarta EE 9 y Apache TomEE
Pavimentando el camino con Jakarta EE 9 y Apache TomEE Pavimentando el camino con Jakarta EE 9 y Apache TomEE
Pavimentando el camino con Jakarta EE 9 y Apache TomEE
 
Paving the road with Jakarta EE and Apache TomEE - JCON 2021
Paving the road with Jakarta EE  and Apache TomEE - JCON 2021Paving the road with Jakarta EE  and Apache TomEE - JCON 2021
Paving the road with Jakarta EE and Apache TomEE - JCON 2021
 
Javaone2008 Bof 5101 Groovytesting
Javaone2008 Bof 5101 GroovytestingJavaone2008 Bof 5101 Groovytesting
Javaone2008 Bof 5101 Groovytesting
 
Groovy
GroovyGroovy
Groovy
 
Build microservice with gRPC in golang
Build microservice with gRPC in golangBuild microservice with gRPC in golang
Build microservice with gRPC in golang
 
Communication between Java and Python
Communication between Java and PythonCommunication between Java and Python
Communication between Java and Python
 
7 recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
7 recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...7 recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
7 recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
 
Javaone2008 Bof 5102 Groovybuilders
Javaone2008 Bof 5102 GroovybuildersJavaone2008 Bof 5102 Groovybuilders
Javaone2008 Bof 5102 Groovybuilders
 

Similar to Whats New In Groovy 1.6?

Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009
Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009
Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009Guillaume Laforge
 
GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge
GR8Conf 2009: What's New in Groovy 1.6? by Guillaume LaforgeGR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge
GR8Conf 2009: What's New in Groovy 1.6? by Guillaume LaforgeGR8Conf
 
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume LaforgeGroovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume LaforgeGuillaume Laforge
 
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with GroovyBoosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with GroovyJames Williams
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13Fred Sauer
 
Griffon - Making Swing Fun Again
Griffon - Making Swing Fun AgainGriffon - Making Swing Fun Again
Griffon - Making Swing Fun AgainDanno Ferrin
 
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
 
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 & Grails: Scripting for Modern Web Applications
Groovy & Grails: Scripting for Modern Web ApplicationsGroovy & Grails: Scripting for Modern Web Applications
Groovy & Grails: Scripting for Modern Web Applicationsrohitnayak
 
Grails @ Java User Group Silicon Valley
Grails @ Java User Group Silicon ValleyGrails @ Java User Group Silicon Valley
Grails @ Java User Group Silicon ValleySven Haiges
 
Scripting Oracle Develop 2007
Scripting Oracle Develop 2007Scripting Oracle Develop 2007
Scripting Oracle Develop 2007Tugdual Grall
 
Testing of javacript
Testing of javacriptTesting of javacript
Testing of javacriptLei Kang
 
Groovy Finesse
Groovy FinesseGroovy Finesse
Groovy Finessemzgubin
 
Groovy Finesse
Groovy FinesseGroovy Finesse
Groovy Finessemzgubin
 
greach 2014 marco vermeulen bdd using cucumber jvm and groovy
greach 2014 marco vermeulen bdd using cucumber jvm and groovygreach 2014 marco vermeulen bdd using cucumber jvm and groovy
greach 2014 marco vermeulen bdd using cucumber jvm and groovyJessie Evangelista
 

Similar to Whats New In Groovy 1.6? (20)

Whats New In Groovy 1.6?
Whats New In Groovy 1.6?Whats New In Groovy 1.6?
Whats 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?
What's New in Groovy 1.6?
 
Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009
Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009
Introduction to Groovy and what's New in Groovy 1.6 - SpringOne Europe 2009
 
GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge
GR8Conf 2009: What's New in Groovy 1.6? by Guillaume LaforgeGR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge
GR8Conf 2009: What's New in Groovy 1.6? by Guillaume Laforge
 
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume LaforgeGroovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
 
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with GroovyBoosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
 
Svcc Groovy Testing
Svcc Groovy TestingSvcc Groovy Testing
Svcc Groovy Testing
 
Griffon - Making Swing Fun Again
Griffon - Making Swing Fun AgainGriffon - Making Swing Fun Again
Griffon - Making Swing Fun Again
 
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
 
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 & Grails: Scripting for Modern Web Applications
Groovy & Grails: Scripting for Modern Web ApplicationsGroovy & Grails: Scripting for Modern Web Applications
Groovy & Grails: Scripting for Modern Web Applications
 
Grails @ Java User Group Silicon Valley
Grails @ Java User Group Silicon ValleyGrails @ Java User Group Silicon Valley
Grails @ Java User Group Silicon Valley
 
Scripting Oracle Develop 2007
Scripting Oracle Develop 2007Scripting Oracle Develop 2007
Scripting Oracle Develop 2007
 
OpenLogic
OpenLogicOpenLogic
OpenLogic
 
Grooscript gr8conf 2015
Grooscript gr8conf 2015Grooscript gr8conf 2015
Grooscript gr8conf 2015
 
Testing of javacript
Testing of javacriptTesting of javacript
Testing of javacript
 
Groovy Finesse
Groovy FinesseGroovy Finesse
Groovy Finesse
 
Groovy Finesse
Groovy FinesseGroovy Finesse
Groovy Finesse
 
greach 2014 marco vermeulen bdd using cucumber jvm and groovy
greach 2014 marco vermeulen bdd using cucumber jvm and groovygreach 2014 marco vermeulen bdd using cucumber jvm and groovy
greach 2014 marco vermeulen bdd using cucumber jvm and groovy
 

More from 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
 

More from 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...
 

Recently uploaded

Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 

Recently uploaded (20)

Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 

Whats New In Groovy 1.6?

  • 1. Guillaume Laforge / Groovy Project Manager / SpringSource What’s new in Groovy 1.6? All the novelties of the latest version! 1
  • 2. Guillaume Laforge Groovy 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 2
  • 3. 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 3
  • 4. 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 4
  • 5. Groovy in a Nutshell Simplify the Life of Java Developers Groovy is a dynamic language for the Java Virtual > Machine 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 5
  • 6. 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 6 6
  • 7. A Taste of Groovy — Take 1 A 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 quot;Hello quot;+ name; } public static void main(String[] args) { HelloWorld helloWorld = new HelloWorld(); helloWorld.setName(quot;Groovyquot;); System.out.println( helloWorld.greet() ); } } 7 7
  • 8. A Taste of Groovy — Take 2 A Valid Groovy Program public class HelloWorld { > private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } public String greet() { return quot;Hello quot;+ name; } public static void main(String[] args) { HelloWorld helloWorld = new HelloWorld(); helloWorld.setName(quot;Groovyquot;); System.out.println( helloWorld.greet() ); } } 8 8
  • 9. A Taste of Groovy — Take 3 A Groovier Program! class HelloWorld { > String name String greet() { quot;Hello $namequot; } } def helloWorld = new HelloWorld(name: quot;Groovyquot;) println helloWorld.greet() 9 9
  • 10. The Groovy Web Console A 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 10
  • 11. 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 > 11 11
  • 12. Performance Improvements Both Runtime & Compile-Time The Groovyc compiler is 3x to 5x faster > With a clever class lookup cache  Certain online micro-benchmarks show > 150% 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 12 12
  • 13. 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 > 13 13
  • 14. Multiple Assignment Assign Multiple Variables at Once Newly defined variables > def (a, b) = [1, 2]  assert a == 1 assert 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 14 14
  • 15. More Optional Return In 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(quot;fooquot;) 1 } catch(e) { 2 } finally {3} } assert method(false) == 1 assert method(true) == 2 15 15
  • 16. Annotation Definition The 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… 16 16
  • 17. 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 > 17 17
  • 18. 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  18 18
  • 19. AST Transformations in Groovy 1.6 Implement 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! > 19 19
  • 20. @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 {}  20 20
  • 21. @Immutable The 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 21 21
  • 22. @Lazy Not 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 > 22 22
  • 23. @Delegate Not Just for Managers! You can delegate to fields of your class > Think multiple inheritance  class Employee {  def doTheWork() { quot;donequot; } } class Manager { @Delegate Employee slave = new Employee() } def god = new Manager() assert god.doTheWork() == quot;donequot; Damn manager who will get all the praise… > 23 23
  • 24. 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 24
  • 25. Grab a Grape Groovy 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 , quot;/quot;, SESSIONS); ctx.resourceBase = quot;.quot; ctx.addServlet(GroovyServlet, quot;*.groovyquot;) srv.start() } 25 25
  • 26. 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 > 26 26
  • 27. @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(quot;propquot;, this.prop, this.prop = prop); } } 27 27
  • 28. @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 > 28 28
  • 29. Griffon The Swing MVC Framework Leverages Groovy’s SwingBuilder > and Grails’ infrastructure http://griffon.codehaus.org  Don’t miss the next session on! > 29 29
  • 30. 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 > 30 30
  • 31. 31 31
  • 32. 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 > 32 32
  • 33. ExpandoMetaClass DSL Less 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) } } 33 33
  • 34. Runtime Mixins Inject New Behavior to Types at Runtime class FlyingAbility { > def fly() { quot;I'm ${name} and I fly!quot; } } class JamesBondVehicle { String getName() { quot;James Bond's vehiclequot; } } JamesBondVehicle.mixin FlyingAbility assert new JamesBondVehicle().fly() == quot;I'm James Bond's vehicle and I fly!quot; 34 34
  • 35. 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 35
  • 36. javax.script.* Scripting APIs Groovy 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(quot;groovyquot;) assert engine.evaluate(quot;2 + 3quot;) == 5 To evaluate Groovy scripts at runtime in your > application, just drop the Groovy JAR in your classpath! 36 36
  • 37. 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 37
  • 38. 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 > 38 38
  • 39. 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: quot;jmx.builder:type=Timerquot;,  event: quot;heartbeatquot;, period: quot;1squot;).start() JMX listener > jmx.listener(event: quot;…quot;, from: quot;fooquot;,  call: { event -> …}) 39 39
  • 40. 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 > 40 40
  • 41. 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 41 41
  • 42. Guillaume Laforge / Groovy Project Manager / SpringSource Summary 42
  • 43. Summary Just Remember that Groovy Rocks! :-) 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  43 43
  • 44. Guillaume Laforge / Groovy Project Manager / SpringSource Question & Answers 44