SlideShare a Scribd company logo
 
Groovy Update Guillaume Laforge G2One Dierk K önig Canoo Engineering AG
Overall Presentation Goal Learn more about the Groovy dynamic language for the JVM,  what’s new in the latest version, and how you can use it in your projects!
Guillaume Laforge Groovy Project Manager JSR-241 Spec Lead Initiator of the  Grails  framework Co-author of  Groovy in Action By Dierk König, et al. Vice-President Technology
Dierk König Canoo Engineering AG, Basel  Rich Internet Applications Projects, Consulting, Training www.canoo.com Trainer, Coach, Developer, Architect Groovy- and Grails-Committer Lead author: Groovy in Action
Agenda What’s Groovy? Syntax basics Groovy APIs What’s new in Groovy 1.5? Domain-Specific Languages Integrating Groovy in your applications Summary Q&A
What’s Groovy? An award-winning alternative  dynamic language for the JVM State of the Groovy Nation
Groovy – feature rich and Java friendly
Being Java friendly Groovy is Java-like Easy to learn for a Java developer     flat learning curve Simpler than Java for beginners  and  subject matter experts Seamless integration with Java You can  mix Groovy and Java  objects together Groovy class extending Java class implementing Groovy interface, and vice versa… Same strings, regex, APIs, OO, threads, security Same paradigm and platform! No impedance mismatch!
Being feature rich Fully object-oriented Properties  declared easily Closures  for versatile code blocks Operator overloading Native syntax  for enhanced Strings, regexes, lists, ranges, enums and maps Multimethods: call the right method! GPath: XPath-like navigation in object graphs BigDecimal arithmetic by default Optional semi-colons and parenthesis GDK: a library that builds upon the JDK Perfect for  Domain-Specific Languages
Lots of integrations AntHill  Grails  eXo Platform  JBoss Seam  NanoContainer  Eclipse  XWiki  ServiceMix  Tapestry Wicket  TestNG  SoapUI Turbine  Oracle OC4J  Blojsom  NetBeans  OpenEJB  Drools  1060NetKernel  RIFE  GroovyRules  Mule  FreeMind LuxorXUL  Spring  Ant Maven  IntelliJ IDEA  Simple JSPWiki eXist  Canoo WebTest  Biscuit ThinG  Oracle Data  Integrator  Struts2  Eclipse  JMeter JFreeChart,  IBM  Project Zero,  SAP  Composition,  …
Used in Mission-Critical applications Mutual of Omaha – Fortune 500 US Comp. 45,000 lines of Groovy   (half business code / half test code) Integrated in an EJB as a  risk calculation engine  for insurance policies Involved Java beginners, developers, and subject matter experts Exact arithmetic support, perfect Java integration, closures     ideal for business rules expression
Books already out… more coming…
JAX 2007 Innovation Award 40 proposals / 10 nominees Groovy won the first prize Most  innovative  and  creative  project 10,000 euros donation Past winner was  Spring
Syntax Basics Groovy as a Java-superset Properties, lists, maps, ranges, regex, strings, closures
Properties Support Don’t wait for Java 7/8/9   Getters / setters are boring boiler-plate code Groovy adds support for properties Declared fields get automagic accessors Example class Person {   String name   String firstName }
Literals for lists, maps, ranges, regex, strings List:  def list = ["Groovy", "Grails"] Map:  def map = [CA: "Calif.", TX: "Texas"] Ranges:  def oneToTen = 1..10 Regex:  assert fooooo ==~ /fo*/ Multiline strings:  def s = """ multi   line string"""     Gstring println "My name is ${name}"
Closures Don’t wait for Java 7/8/9, get closures now! Reusable / assignable code blocks Combine, store, share data and logic Examples new File('x.txt').eachLine{ println it } [0, 1, 2].each { println it } def numbers = 1..100 def odd = { it % 2 == 1 } numbers.findAll { it > 90 } numbers.findAll( odd )
Groovy APIs Groovy Development Kit Examples: XML, SQL, Swing and Office automation
Groovy Development Kit Simplified APIs for common tasks Mocking / stubbing support XML parsing and GPath navigation SQL support with exception & resource handling Scripting Ant with the AntBuilder Create Swing UIs easily with SwingBuilder Templating support à la Velocity Script COM / ActiveX components on Windows Consume / expose XML-RPC / SOAP services Handle JXM beans as local objects
XML Parsing and GPath Navigation Given this XML snippet def xml = &quot;&quot;&quot; <languages>   <language name=&quot;Groovy&quot;>   <feature coolness=&quot;low&quot;>SQL</feature>   <feature coolness=&quot;high&quot;>Template</feature>   </language>   <language name=&quot;Perl&quot;/> </languages>&quot;&quot;“ Navigate the object graph def root = new XmlParser().parseText(xml) println root.language.feature[1].text() root.language.feature   .findAll{ it['@coolness'] == &quot;low&quot; }   .each{ println it.text() }
SQL support Easy to use JDBC thanks to closures def sql = Sql.newInstance(url, usr, pwd, driver) sql.execute(&quot;insert into table values ($foo, $bar)&quot;) sql.execute(&quot;insert into table values(?,?)&quot;, [a, b]) sql.eachRow(&quot;select * from USER&quot;) { print it.name } def list = sql.rows(&quot;select * from USER&quot;) DataSet notion: « poor-man » ORM def set = sql.dataSet(&quot;USER&quot;) set.add(name: &quot;Johnny&quot;, age: 33) set.each { user -> println user.name } set.findAll  { it.age > 22 && it.age < 42 }
SwingBuilder def theMap = [color: &quot;green&quot;, object: &quot;pencil&quot;] def swing = new SwingBuilder() def frame = swing. frame (   title: 'A Groovy Swing', location: [240,240],   defaultCloseOperation:WC.EXIT_ON_CLOSE) {   panel  {   for (entry in theMap) {   label (text: entry.key)   textField (text: entry.value)   }   button (text: 'About',  actionPerformed:  {   def pane = swing.optionPane(message: 'SwingBuilder')   def dialog = pane.createDialog(null, 'About')   dialog.show()   })   button (text:'Quit', actionPerformed:{ System.exit(0) })   } } frame.pack() frame.show()
Automating Office Applications An additional module provide VB-like scripting capabilities with a VB-like syntax Example def outlook = new    ActiveXProxy(&quot;Outlook.Application&quot;) def message = outlook.CreateItem(0) def emails =  glaforge @ gmail.com   def rec= message.Recipients.add(emails) rec.Type = 1 message.Display(true)
Domain-Specific Languages Why create DSLs? How to create such DSLs?
Why Create a Domain-Specific Language? Use a  more expressive  language  than a general programming language Share a  common metaphore   between developers and subject matter experts Have  domain experts help  design  the business logic of an application Avoid cluttering business  code  with too much boilerplate technical code Cleanly  seperate business logic   from application code
Putting it all together Optional parens, map syntax, props on ints move left compare indicator: ‘NIKEI’, withFund: ‘XYZ’ account.debit amount: 30.euros, in: 3.days Custom control structures with closures unless ( account.balance < 0 ) {   account.debit 10.dollars } execute( withTimeoutOf: 50.seconds ) { … } Operator overloading a + b    a.plus(b) taskA | taskB    taskA.or(taskB)
Builder pattern at the syntax level Tree structures are everywhere XML, GUI components, Ant tasks, conf files… Through closure & chained method calls new MarkupBuider().invoices {   invoice(id: &quot;4&quot;) {   line &quot;product 1&quot;   line &quot;product 2&quot;   } } Create your own « builder » Extend BuilderSupport, or FactoryBuilderSupport
What’s new in 1.5? Java 5 features New dynamic capabilities Performance improvements IDE support
What’s New? Java 5 features Annotations, generics, enums, static imports New powerful  dynamic capabilities ExpandoMetaClass contributed by Grails Performance improvements Regular gains of perf. between the last releases IDE support IntelliJ IDEA, NetBeans & Eclipse
Java 5 Features Why adding Java 5 features to Groovy? To  leverage Enterprise frameworks   making use of annotations and generics Spring, JPA, Hibernate , Guice, TestNG, JUnit 4 Groovy is the sole alternative dynamic language for the JVM supporting annotations Groovy is Java-like,  but is closer to being a Java-superset If you need annotations / generics and want to benefit from a dynamic language Look no further,  Groovy is the sole option
Annotations Example Taken from  JBoss Seam ’s documentation @Entity @Name(&quot;hotel&quot;) class Hotel implements Serializable {   @Id @GeneratedValue   Long id   @Length(max=50) @NotNull   String name   @Override  String toString() {   &quot;Hotel ${name}&quot;    } }
Enums example with a Groovy switch enum Day { SUNDAY, MONDAY, TUESDAY,  WEDNESDAY, THURSDAY, FRIDAY, SATURDAY } def today =  Day.SATURDAY switch (today) {      case  [Day.SATURDAY, Day.SUNDAY] :           println &quot;Weekends are cool&quot;          break      case  Day.MONDAY..Day.FRIDAY :           println &quot;Boring work day&quot;          break      default:           println &quot;Is this a valid day?&quot; }
New dynamic features Grails contributed the ExpandoMetaClass Easily add new behavior to existing classes Symbiotic relationship between both projects Ex: Adding a meters property to numbers Integer.metaClass.getMeters = { ->   new Distance(delegate, Distance.METER)  } println 3.meters
Have a look at the IntelliJ IDEA plugin!
Integrating Groovy in your Applications Why integrating Groovy in your applications? The different integration mechanisms
Why Integrating Groovy in your Apps? Groovy’s great support for testing Mocks & stubs, GroovyTestCase More concise & readable tests Handy tool in the developer toolbox Externalize business rules Business rules be written by domain experts Rules follow their own lifecycle Providing extension points in your apps For third-party plugins Customizing the app to clients’ needs
Several Integration Mechanisms The « old » Bean Scripting Framework Java 6’s scripting APIs (JSR-223) Spring dynamic language support Groovy’s own mechanisms Let’s see some of them
JSR-223 – javax.script.* from JDK 6 One API to rule them all! Dedicated Groovy engine on scripting.dev.java.net Drop it in your classpath! Example ScriptEngineManager manager =    new ScriptEngineManager(); ScriptEngine gEngine =   manager.getEngineByName(&quot;groovy&quot;); String result = (String)gEngine.eval(&quot;’Foo’ * 2&quot;);
GroovyShell Easily evaluate expressions in your Java app Pass variables in and out Can provide global reusable functions Example def binding =  new Binding() binding.mass = 22.3 binding.velocity = 10.6 def shell = new GroovyShell( binding ) def expression = &quot;mass * velocity ** 2 / 2&quot;  assert  shell.evaluate(expression)  == 1252.814
GroovyClassLoader Most powerful integration mechanism With GCL, you can Parse and compile classes Provide a  resource loader  defining the location of sources Database, flat files, XML files, distant URLs… Define  Java security rules To avoid System.exit(0) in an Embedded DSL! Even  transform the Abstract Syntax Tree !
Spring 2.x Groovy integration Spring 2.0 provides support for alternative language bean definitions and configuration A POGO can be wired the like a POJO and be proxied You can mix languages in your Spring application POGO and POJO can be injected within each other Configuration of a POGO bean with the  specific lang namespace , and a  custom MetaClass <lang:groovy id=&quot;events&quot;    script-source=&quot;classpath:dsl/eventsChart.groovy&quot;    customizer-ref=&quot;eventsMetaClass&quot;  />
Let’s Wrap Up Summary Resources Q&A
Summary The Groovy dynamic language for the JVM simplifies the life of developers   through powerful APIs Groovy opens some interesting perspectives towards  extending your application Groovy provides  seamless Java integration  Groovy lets you create  DSL s Groovy  protects your investment  in Java  skills, tools, libraries, frameworks, and application platforms
Resources Groovy:  http: //groovy . codehaus . org Grails:  http: //grails . org Groovy blogs:  http: //groovyblogs . org AboutGroovy:  http: //aboutgroovy . com G2One:  http://www.g2one.com Canoo:  http://www.canoo.com
Q&A View JavaPolis talks @ www.parleys.com
Thank you for your attention
Ad

More Related Content

What's hot (20)

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
GR8Conf
 
C# Starter L03-Utilities
C# Starter L03-UtilitiesC# Starter L03-Utilities
C# Starter L03-Utilities
Mohammad Shaker
 
Grooscript gr8conf
Grooscript gr8confGrooscript gr8conf
Grooscript gr8conf
GR8Conf
 
Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)
HamletDRC
 
Getting rid of backtracking
Getting rid of backtrackingGetting rid of backtracking
Getting rid of backtracking
Dr. Jan Köhnlein
 
C# Starter L02-Classes and Objects
C# Starter L02-Classes and ObjectsC# Starter L02-Classes and Objects
C# Starter L02-Classes and Objects
Mohammad Shaker
 
Java Performance MythBusters
Java Performance MythBustersJava Performance MythBusters
Java Performance MythBusters
Sebastian Zarnekow
 
Patterns for JVM languages - Geecon 2014
Patterns for JVM languages - Geecon 2014Patterns for JVM languages - Geecon 2014
Patterns for JVM languages - Geecon 2014
Jaroslaw Palka
 
From android/java to swift (3)
From android/java to swift (3)From android/java to swift (3)
From android/java to swift (3)
allanh0526
 
Google Dart
Google DartGoogle Dart
Google Dart
Eberhard Wolff
 
groovy transforms
groovy transformsgroovy transforms
groovy transforms
Paul King
 
Building DSLs with Xtext - Eclipse Modeling Day 2009
Building DSLs with Xtext - Eclipse Modeling Day 2009Building DSLs with Xtext - Eclipse Modeling Day 2009
Building DSLs with Xtext - Eclipse Modeling Day 2009
Heiko Behrens
 
Groovy for java developers
Groovy for java developersGroovy for java developers
Groovy for java developers
Puneet Behl
 
AST Transformations
AST TransformationsAST Transformations
AST Transformations
HamletDRC
 
Groovy for Java Developers
Groovy for Java DevelopersGroovy for Java Developers
Groovy for Java Developers
Andres Almiray
 
Club of anonimous developers "Refactoring: Legacy code"
Club of anonimous developers "Refactoring: Legacy code"Club of anonimous developers "Refactoring: Legacy code"
Club of anonimous developers "Refactoring: Legacy code"
Victor_Cr
 
Дмитрий Нестерук, Паттерны проектирования в XXI веке
Дмитрий Нестерук, Паттерны проектирования в XXI векеДмитрий Нестерук, Паттерны проектирования в XXI веке
Дмитрий Нестерук, Паттерны проектирования в XXI веке
Sergey Platonov
 
Ast transformations
Ast transformationsAst transformations
Ast transformations
HamletDRC
 
Ast transformation
Ast transformationAst transformation
Ast transformation
Gagan Agrawal
 
C++ interview questions
C++ interview questionsC++ interview questions
C++ interview questions
arjavi
 
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
GR8Conf
 
C# Starter L03-Utilities
C# Starter L03-UtilitiesC# Starter L03-Utilities
C# Starter L03-Utilities
Mohammad Shaker
 
Grooscript gr8conf
Grooscript gr8confGrooscript gr8conf
Grooscript gr8conf
GR8Conf
 
Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)
HamletDRC
 
C# Starter L02-Classes and Objects
C# Starter L02-Classes and ObjectsC# Starter L02-Classes and Objects
C# Starter L02-Classes and Objects
Mohammad Shaker
 
Patterns for JVM languages - Geecon 2014
Patterns for JVM languages - Geecon 2014Patterns for JVM languages - Geecon 2014
Patterns for JVM languages - Geecon 2014
Jaroslaw Palka
 
From android/java to swift (3)
From android/java to swift (3)From android/java to swift (3)
From android/java to swift (3)
allanh0526
 
groovy transforms
groovy transformsgroovy transforms
groovy transforms
Paul King
 
Building DSLs with Xtext - Eclipse Modeling Day 2009
Building DSLs with Xtext - Eclipse Modeling Day 2009Building DSLs with Xtext - Eclipse Modeling Day 2009
Building DSLs with Xtext - Eclipse Modeling Day 2009
Heiko Behrens
 
Groovy for java developers
Groovy for java developersGroovy for java developers
Groovy for java developers
Puneet Behl
 
AST Transformations
AST TransformationsAST Transformations
AST Transformations
HamletDRC
 
Groovy for Java Developers
Groovy for Java DevelopersGroovy for Java Developers
Groovy for Java Developers
Andres Almiray
 
Club of anonimous developers "Refactoring: Legacy code"
Club of anonimous developers "Refactoring: Legacy code"Club of anonimous developers "Refactoring: Legacy code"
Club of anonimous developers "Refactoring: Legacy code"
Victor_Cr
 
Дмитрий Нестерук, Паттерны проектирования в XXI веке
Дмитрий Нестерук, Паттерны проектирования в XXI векеДмитрий Нестерук, Паттерны проектирования в XXI веке
Дмитрий Нестерук, Паттерны проектирования в XXI веке
Sergey Platonov
 
Ast transformations
Ast transformationsAst transformations
Ast transformations
HamletDRC
 
C++ interview questions
C++ interview questionsC++ interview questions
C++ interview questions
arjavi
 

Viewers also liked (7)

Groovy update at SpringOne2GX 2012
Groovy update at SpringOne2GX 2012Groovy update at SpringOne2GX 2012
Groovy update at SpringOne2GX 2012
Guillaume 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 2012
Guillaume Laforge
 
Groovy workshop à Mix-IT 2013
Groovy workshop à Mix-IT 2013Groovy workshop à Mix-IT 2013
Groovy workshop à Mix-IT 2013
Guillaume 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 2013
Guillaume Laforge
 
Gaelyk quickie - GR8Conf Europe 2010 - Guillaume Laforge
Gaelyk quickie - GR8Conf Europe 2010 - Guillaume LaforgeGaelyk quickie - GR8Conf Europe 2010 - Guillaume Laforge
Gaelyk quickie - GR8Conf Europe 2010 - Guillaume Laforge
Guillaume Laforge
 
Groovy, to Infinity and Beyond - Groovy/Grails eXchange 2009
Groovy, to Infinity and Beyond - Groovy/Grails eXchange 2009Groovy, to Infinity and Beyond - Groovy/Grails eXchange 2009
Groovy, to Infinity and Beyond - Groovy/Grails eXchange 2009
Guillaume Laforge
 
Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012
Guillaume Laforge
 
Groovy update at SpringOne2GX 2012
Groovy update at SpringOne2GX 2012Groovy update at SpringOne2GX 2012
Groovy update at SpringOne2GX 2012
Guillaume 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 2012
Guillaume Laforge
 
Groovy workshop à Mix-IT 2013
Groovy workshop à Mix-IT 2013Groovy workshop à Mix-IT 2013
Groovy workshop à Mix-IT 2013
Guillaume 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 2013
Guillaume Laforge
 
Gaelyk quickie - GR8Conf Europe 2010 - Guillaume Laforge
Gaelyk quickie - GR8Conf Europe 2010 - Guillaume LaforgeGaelyk quickie - GR8Conf Europe 2010 - Guillaume Laforge
Gaelyk quickie - GR8Conf Europe 2010 - Guillaume Laforge
Guillaume Laforge
 
Groovy, to Infinity and Beyond - Groovy/Grails eXchange 2009
Groovy, to Infinity and Beyond - Groovy/Grails eXchange 2009Groovy, to Infinity and Beyond - Groovy/Grails eXchange 2009
Groovy, to Infinity and Beyond - Groovy/Grails eXchange 2009
Guillaume Laforge
 
Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012
Guillaume Laforge
 
Ad

Similar to Groovy Update - JavaPolis 2007 (20)

Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008
Guillaume Laforge
 
Introduction To Groovy 2005
Introduction To Groovy 2005Introduction To Groovy 2005
Introduction To Groovy 2005
Tugdual Grall
 
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume LaforgeGroovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Guillaume Laforge
 
Scripting Oracle Develop 2007
Scripting Oracle Develop 2007Scripting Oracle Develop 2007
Scripting Oracle Develop 2007
Tugdual Grall
 
2007 09 10 Fzi Training Groovy Grails V Ws
2007 09 10 Fzi Training Groovy Grails V Ws2007 09 10 Fzi Training Groovy Grails V Ws
2007 09 10 Fzi Training Groovy Grails V Ws
loffenauer
 
Grails Introduction - IJTC 2007
Grails Introduction - IJTC 2007Grails Introduction - IJTC 2007
Grails Introduction - IJTC 2007
Guillaume Laforge
 
Smoothing Your Java with DSLs
Smoothing Your Java with DSLsSmoothing Your Java with DSLs
Smoothing Your Java with DSLs
intelliyole
 
Go 1.10 Release Party - PDX Go
Go 1.10 Release Party - PDX GoGo 1.10 Release Party - PDX Go
Go 1.10 Release Party - PDX Go
Rodolfo Carvalho
 
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
Guillaume Laforge
 
Visual Studio .NET2010
Visual Studio .NET2010Visual Studio .NET2010
Visual Studio .NET2010
Satish Verma
 
Clojure And Swing
Clojure And SwingClojure And Swing
Clojure And Swing
Skills Matter
 
Polyglot Programming in the JVM
Polyglot Programming in the JVMPolyglot Programming in the JVM
Polyglot Programming in the JVM
Andres Almiray
 
Groovy On Trading Desk (2010)
Groovy On Trading Desk (2010)Groovy On Trading Desk (2010)
Groovy On Trading Desk (2010)
Jonathan Felch
 
Polyglot Programming @ Jax.de 2010
Polyglot Programming @ Jax.de 2010Polyglot Programming @ Jax.de 2010
Polyglot Programming @ Jax.de 2010
Andres Almiray
 
TI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific LanguagesTI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific Languages
Eelco Visser
 
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
Guillaume Laforge
 
Ajax with DWR
Ajax with DWRAjax with DWR
Ajax with DWR
gouthamrv
 
Concepts of JetBrains MPS
Concepts of JetBrains MPSConcepts of JetBrains MPS
Concepts of JetBrains MPS
Vaclav Pech
 
Google Interview Questions By Scholarhat
Google Interview Questions By ScholarhatGoogle Interview Questions By Scholarhat
Google Interview Questions By Scholarhat
Scholarhat
 
Serverless in action
Serverless in actionServerless in action
Serverless in action
Microsoft Tech Community
 
Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008
Guillaume Laforge
 
Introduction To Groovy 2005
Introduction To Groovy 2005Introduction To Groovy 2005
Introduction To Groovy 2005
Tugdual Grall
 
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume LaforgeGroovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Guillaume Laforge
 
Scripting Oracle Develop 2007
Scripting Oracle Develop 2007Scripting Oracle Develop 2007
Scripting Oracle Develop 2007
Tugdual Grall
 
2007 09 10 Fzi Training Groovy Grails V Ws
2007 09 10 Fzi Training Groovy Grails V Ws2007 09 10 Fzi Training Groovy Grails V Ws
2007 09 10 Fzi Training Groovy Grails V Ws
loffenauer
 
Grails Introduction - IJTC 2007
Grails Introduction - IJTC 2007Grails Introduction - IJTC 2007
Grails Introduction - IJTC 2007
Guillaume Laforge
 
Smoothing Your Java with DSLs
Smoothing Your Java with DSLsSmoothing Your Java with DSLs
Smoothing Your Java with DSLs
intelliyole
 
Go 1.10 Release Party - PDX Go
Go 1.10 Release Party - PDX GoGo 1.10 Release Party - PDX Go
Go 1.10 Release Party - PDX Go
Rodolfo Carvalho
 
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
Guillaume Laforge
 
Visual Studio .NET2010
Visual Studio .NET2010Visual Studio .NET2010
Visual Studio .NET2010
Satish Verma
 
Polyglot Programming in the JVM
Polyglot Programming in the JVMPolyglot Programming in the JVM
Polyglot Programming in the JVM
Andres Almiray
 
Groovy On Trading Desk (2010)
Groovy On Trading Desk (2010)Groovy On Trading Desk (2010)
Groovy On Trading Desk (2010)
Jonathan Felch
 
Polyglot Programming @ Jax.de 2010
Polyglot Programming @ Jax.de 2010Polyglot Programming @ Jax.de 2010
Polyglot Programming @ Jax.de 2010
Andres Almiray
 
TI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific LanguagesTI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific Languages
Eelco Visser
 
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
Guillaume Laforge
 
Ajax with DWR
Ajax with DWRAjax with DWR
Ajax with DWR
gouthamrv
 
Concepts of JetBrains MPS
Concepts of JetBrains MPSConcepts of JetBrains MPS
Concepts of JetBrains MPS
Vaclav Pech
 
Google Interview Questions By Scholarhat
Google Interview Questions By ScholarhatGoogle Interview Questions By Scholarhat
Google Interview Questions By Scholarhat
Scholarhat
 
Ad

More from Guillaume Laforge (20)

JavaOne 2012 Groovy update
JavaOne 2012 Groovy updateJavaOne 2012 Groovy update
JavaOne 2012 Groovy update
Guillaume 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 2012
Guillaume 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 2012
Guillaume 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 Laforge
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
Guillaume Laforge
 
Groovy 2.0 - Devoxx France 2012
Groovy 2.0 - Devoxx France 2012Groovy 2.0 - Devoxx France 2012
Groovy 2.0 - Devoxx France 2012
Guillaume Laforge
 
Whats new in Groovy 2.0?
Whats new in Groovy 2.0?Whats new in Groovy 2.0?
Whats new in Groovy 2.0?
Guillaume 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 2011
Guillaume 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 Laforge
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
Guillaume Laforge
 
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011Gaelyk update - Guillaume Laforge - SpringOne2GX 2011
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011
Guillaume 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
 
Cloud foundry intro with groovy
Cloud foundry intro with groovyCloud foundry intro with groovy
Cloud foundry intro with groovy
Guillaume Laforge
 
Groovy update - S2GForum London 2011 - Guillaume Laforge
Groovy update - S2GForum London 2011 - Guillaume LaforgeGroovy update - S2GForum London 2011 - Guillaume Laforge
Groovy update - S2GForum London 2011 - Guillaume Laforge
Guillaume Laforge
 
Groovy DSLs - S2GForum London 2011 - Guillaume Laforge
Groovy DSLs - S2GForum London 2011 - Guillaume LaforgeGroovy DSLs - S2GForum London 2011 - Guillaume Laforge
Groovy DSLs - S2GForum London 2011 - Guillaume Laforge
Guillaume Laforge
 
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011Gaelyk - Guillaume Laforge - GR8Conf Europe 2011
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011
Guillaume Laforge
 
Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011
Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011
Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011
Guillaume Laforge
 
Gaelyk - JFokus 2011 - Guillaume Laforge
Gaelyk - JFokus 2011 - Guillaume LaforgeGaelyk - JFokus 2011 - Guillaume Laforge
Gaelyk - JFokus 2011 - Guillaume Laforge
Guillaume Laforge
 
Groovy Ecosystem - JFokus 2011 - Guillaume Laforge
Groovy Ecosystem - JFokus 2011 - Guillaume LaforgeGroovy Ecosystem - JFokus 2011 - Guillaume Laforge
Groovy Ecosystem - JFokus 2011 - Guillaume Laforge
Guillaume Laforge
 
Groovy and Gaelyk - Lausanne JUG 2011 - Guillaume Laforge
Groovy and Gaelyk - Lausanne JUG 2011 - Guillaume LaforgeGroovy and Gaelyk - Lausanne JUG 2011 - Guillaume Laforge
Groovy and Gaelyk - Lausanne JUG 2011 - Guillaume Laforge
Guillaume 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 2012
Guillaume 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 2012
Guillaume 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 Laforge
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
Guillaume Laforge
 
Groovy 2.0 - Devoxx France 2012
Groovy 2.0 - Devoxx France 2012Groovy 2.0 - Devoxx France 2012
Groovy 2.0 - Devoxx France 2012
Guillaume 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 2011
Guillaume 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 Laforge
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
Guillaume Laforge
 
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011Gaelyk update - Guillaume Laforge - SpringOne2GX 2011
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011
Guillaume 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
 
Cloud foundry intro with groovy
Cloud foundry intro with groovyCloud foundry intro with groovy
Cloud foundry intro with groovy
Guillaume Laforge
 
Groovy update - S2GForum London 2011 - Guillaume Laforge
Groovy update - S2GForum London 2011 - Guillaume LaforgeGroovy update - S2GForum London 2011 - Guillaume Laforge
Groovy update - S2GForum London 2011 - Guillaume Laforge
Guillaume Laforge
 
Groovy DSLs - S2GForum London 2011 - Guillaume Laforge
Groovy DSLs - S2GForum London 2011 - Guillaume LaforgeGroovy DSLs - S2GForum London 2011 - Guillaume Laforge
Groovy DSLs - S2GForum London 2011 - Guillaume Laforge
Guillaume Laforge
 
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011Gaelyk - Guillaume Laforge - GR8Conf Europe 2011
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011
Guillaume Laforge
 
Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011
Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011
Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011
Guillaume Laforge
 
Gaelyk - JFokus 2011 - Guillaume Laforge
Gaelyk - JFokus 2011 - Guillaume LaforgeGaelyk - JFokus 2011 - Guillaume Laforge
Gaelyk - JFokus 2011 - Guillaume Laforge
Guillaume Laforge
 
Groovy Ecosystem - JFokus 2011 - Guillaume Laforge
Groovy Ecosystem - JFokus 2011 - Guillaume LaforgeGroovy Ecosystem - JFokus 2011 - Guillaume Laforge
Groovy Ecosystem - JFokus 2011 - Guillaume Laforge
Guillaume Laforge
 
Groovy and Gaelyk - Lausanne JUG 2011 - Guillaume Laforge
Groovy and Gaelyk - Lausanne JUG 2011 - Guillaume LaforgeGroovy and Gaelyk - Lausanne JUG 2011 - Guillaume Laforge
Groovy and Gaelyk - Lausanne JUG 2011 - Guillaume Laforge
Guillaume Laforge
 

Recently uploaded (20)

Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Aqusag Technologies
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Aqusag Technologies
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 

Groovy Update - JavaPolis 2007

  • 1.  
  • 2. Groovy Update Guillaume Laforge G2One Dierk K önig Canoo Engineering AG
  • 3. Overall Presentation Goal Learn more about the Groovy dynamic language for the JVM, what’s new in the latest version, and how you can use it in your projects!
  • 4. Guillaume Laforge Groovy Project Manager JSR-241 Spec Lead Initiator of the Grails framework Co-author of Groovy in Action By Dierk König, et al. Vice-President Technology
  • 5. Dierk König Canoo Engineering AG, Basel Rich Internet Applications Projects, Consulting, Training www.canoo.com Trainer, Coach, Developer, Architect Groovy- and Grails-Committer Lead author: Groovy in Action
  • 6. Agenda What’s Groovy? Syntax basics Groovy APIs What’s new in Groovy 1.5? Domain-Specific Languages Integrating Groovy in your applications Summary Q&A
  • 7. What’s Groovy? An award-winning alternative dynamic language for the JVM State of the Groovy Nation
  • 8. Groovy – feature rich and Java friendly
  • 9. Being Java friendly Groovy is Java-like Easy to learn for a Java developer  flat learning curve Simpler than Java for beginners and subject matter experts Seamless integration with Java You can mix Groovy and Java objects together Groovy class extending Java class implementing Groovy interface, and vice versa… Same strings, regex, APIs, OO, threads, security Same paradigm and platform! No impedance mismatch!
  • 10. Being feature rich Fully object-oriented Properties declared easily Closures for versatile code blocks Operator overloading Native syntax for enhanced Strings, regexes, lists, ranges, enums and maps Multimethods: call the right method! GPath: XPath-like navigation in object graphs BigDecimal arithmetic by default Optional semi-colons and parenthesis GDK: a library that builds upon the JDK Perfect for Domain-Specific Languages
  • 11. Lots of integrations AntHill Grails eXo Platform JBoss Seam NanoContainer Eclipse XWiki ServiceMix Tapestry Wicket TestNG SoapUI Turbine Oracle OC4J Blojsom NetBeans OpenEJB Drools 1060NetKernel RIFE GroovyRules Mule FreeMind LuxorXUL Spring Ant Maven IntelliJ IDEA Simple JSPWiki eXist Canoo WebTest Biscuit ThinG Oracle Data Integrator Struts2 Eclipse JMeter JFreeChart, IBM Project Zero, SAP Composition, …
  • 12. Used in Mission-Critical applications Mutual of Omaha – Fortune 500 US Comp. 45,000 lines of Groovy (half business code / half test code) Integrated in an EJB as a risk calculation engine for insurance policies Involved Java beginners, developers, and subject matter experts Exact arithmetic support, perfect Java integration, closures  ideal for business rules expression
  • 13. Books already out… more coming…
  • 14. JAX 2007 Innovation Award 40 proposals / 10 nominees Groovy won the first prize Most innovative and creative project 10,000 euros donation Past winner was Spring
  • 15. Syntax Basics Groovy as a Java-superset Properties, lists, maps, ranges, regex, strings, closures
  • 16. Properties Support Don’t wait for Java 7/8/9  Getters / setters are boring boiler-plate code Groovy adds support for properties Declared fields get automagic accessors Example class Person { String name String firstName }
  • 17. Literals for lists, maps, ranges, regex, strings List: def list = [&quot;Groovy&quot;, &quot;Grails&quot;] Map: def map = [CA: &quot;Calif.&quot;, TX: &quot;Texas&quot;] Ranges: def oneToTen = 1..10 Regex: assert fooooo ==~ /fo*/ Multiline strings: def s = &quot;&quot;&quot; multi line string&quot;&quot;&quot;   Gstring println &quot;My name is ${name}&quot;
  • 18. Closures Don’t wait for Java 7/8/9, get closures now! Reusable / assignable code blocks Combine, store, share data and logic Examples new File('x.txt').eachLine{ println it } [0, 1, 2].each { println it } def numbers = 1..100 def odd = { it % 2 == 1 } numbers.findAll { it > 90 } numbers.findAll( odd )
  • 19. Groovy APIs Groovy Development Kit Examples: XML, SQL, Swing and Office automation
  • 20. Groovy Development Kit Simplified APIs for common tasks Mocking / stubbing support XML parsing and GPath navigation SQL support with exception & resource handling Scripting Ant with the AntBuilder Create Swing UIs easily with SwingBuilder Templating support à la Velocity Script COM / ActiveX components on Windows Consume / expose XML-RPC / SOAP services Handle JXM beans as local objects
  • 21. XML Parsing and GPath Navigation Given this XML snippet def xml = &quot;&quot;&quot; <languages> <language name=&quot;Groovy&quot;> <feature coolness=&quot;low&quot;>SQL</feature> <feature coolness=&quot;high&quot;>Template</feature> </language> <language name=&quot;Perl&quot;/> </languages>&quot;&quot;“ Navigate the object graph def root = new XmlParser().parseText(xml) println root.language.feature[1].text() root.language.feature .findAll{ it['@coolness'] == &quot;low&quot; } .each{ println it.text() }
  • 22. SQL support Easy to use JDBC thanks to closures def sql = Sql.newInstance(url, usr, pwd, driver) sql.execute(&quot;insert into table values ($foo, $bar)&quot;) sql.execute(&quot;insert into table values(?,?)&quot;, [a, b]) sql.eachRow(&quot;select * from USER&quot;) { print it.name } def list = sql.rows(&quot;select * from USER&quot;) DataSet notion: « poor-man » ORM def set = sql.dataSet(&quot;USER&quot;) set.add(name: &quot;Johnny&quot;, age: 33) set.each { user -> println user.name } set.findAll { it.age > 22 && it.age < 42 }
  • 23. SwingBuilder def theMap = [color: &quot;green&quot;, object: &quot;pencil&quot;] def swing = new SwingBuilder() def frame = swing. frame ( title: 'A Groovy Swing', location: [240,240], defaultCloseOperation:WC.EXIT_ON_CLOSE) { panel { for (entry in theMap) { label (text: entry.key) textField (text: entry.value) } button (text: 'About', actionPerformed: { def pane = swing.optionPane(message: 'SwingBuilder') def dialog = pane.createDialog(null, 'About') dialog.show() }) button (text:'Quit', actionPerformed:{ System.exit(0) }) } } frame.pack() frame.show()
  • 24. Automating Office Applications An additional module provide VB-like scripting capabilities with a VB-like syntax Example def outlook = new ActiveXProxy(&quot;Outlook.Application&quot;) def message = outlook.CreateItem(0) def emails = glaforge @ gmail.com   def rec= message.Recipients.add(emails) rec.Type = 1 message.Display(true)
  • 25. Domain-Specific Languages Why create DSLs? How to create such DSLs?
  • 26. Why Create a Domain-Specific Language? Use a more expressive language than a general programming language Share a common metaphore between developers and subject matter experts Have domain experts help design the business logic of an application Avoid cluttering business code with too much boilerplate technical code Cleanly seperate business logic from application code
  • 27. Putting it all together Optional parens, map syntax, props on ints move left compare indicator: ‘NIKEI’, withFund: ‘XYZ’ account.debit amount: 30.euros, in: 3.days Custom control structures with closures unless ( account.balance < 0 ) { account.debit 10.dollars } execute( withTimeoutOf: 50.seconds ) { … } Operator overloading a + b  a.plus(b) taskA | taskB  taskA.or(taskB)
  • 28. Builder pattern at the syntax level Tree structures are everywhere XML, GUI components, Ant tasks, conf files… Through closure & chained method calls new MarkupBuider().invoices { invoice(id: &quot;4&quot;) { line &quot;product 1&quot; line &quot;product 2&quot; } } Create your own « builder » Extend BuilderSupport, or FactoryBuilderSupport
  • 29. What’s new in 1.5? Java 5 features New dynamic capabilities Performance improvements IDE support
  • 30. What’s New? Java 5 features Annotations, generics, enums, static imports New powerful dynamic capabilities ExpandoMetaClass contributed by Grails Performance improvements Regular gains of perf. between the last releases IDE support IntelliJ IDEA, NetBeans & Eclipse
  • 31. Java 5 Features Why adding Java 5 features to Groovy? To leverage Enterprise frameworks making use of annotations and generics Spring, JPA, Hibernate , Guice, TestNG, JUnit 4 Groovy is the sole alternative dynamic language for the JVM supporting annotations Groovy is Java-like, but is closer to being a Java-superset If you need annotations / generics and want to benefit from a dynamic language Look no further, Groovy is the sole option
  • 32. Annotations Example Taken from JBoss Seam ’s documentation @Entity @Name(&quot;hotel&quot;) class Hotel implements Serializable { @Id @GeneratedValue Long id @Length(max=50) @NotNull String name @Override String toString() { &quot;Hotel ${name}&quot;  } }
  • 33. Enums example with a Groovy switch enum Day { SUNDAY, MONDAY, TUESDAY,  WEDNESDAY, THURSDAY, FRIDAY, SATURDAY } def today =  Day.SATURDAY switch (today) {      case  [Day.SATURDAY, Day.SUNDAY] :           println &quot;Weekends are cool&quot;          break      case  Day.MONDAY..Day.FRIDAY :           println &quot;Boring work day&quot;          break      default:           println &quot;Is this a valid day?&quot; }
  • 34. New dynamic features Grails contributed the ExpandoMetaClass Easily add new behavior to existing classes Symbiotic relationship between both projects Ex: Adding a meters property to numbers Integer.metaClass.getMeters = { -> new Distance(delegate, Distance.METER) } println 3.meters
  • 35. Have a look at the IntelliJ IDEA plugin!
  • 36. Integrating Groovy in your Applications Why integrating Groovy in your applications? The different integration mechanisms
  • 37. Why Integrating Groovy in your Apps? Groovy’s great support for testing Mocks & stubs, GroovyTestCase More concise & readable tests Handy tool in the developer toolbox Externalize business rules Business rules be written by domain experts Rules follow their own lifecycle Providing extension points in your apps For third-party plugins Customizing the app to clients’ needs
  • 38. Several Integration Mechanisms The « old » Bean Scripting Framework Java 6’s scripting APIs (JSR-223) Spring dynamic language support Groovy’s own mechanisms Let’s see some of them
  • 39. JSR-223 – javax.script.* from JDK 6 One API to rule them all! Dedicated Groovy engine on scripting.dev.java.net Drop it in your classpath! Example ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine gEngine = manager.getEngineByName(&quot;groovy&quot;); String result = (String)gEngine.eval(&quot;’Foo’ * 2&quot;);
  • 40. GroovyShell Easily evaluate expressions in your Java app Pass variables in and out Can provide global reusable functions Example def binding = new Binding() binding.mass = 22.3 binding.velocity = 10.6 def shell = new GroovyShell( binding ) def expression = &quot;mass * velocity ** 2 / 2&quot; assert shell.evaluate(expression) == 1252.814
  • 41. GroovyClassLoader Most powerful integration mechanism With GCL, you can Parse and compile classes Provide a resource loader defining the location of sources Database, flat files, XML files, distant URLs… Define Java security rules To avoid System.exit(0) in an Embedded DSL! Even transform the Abstract Syntax Tree !
  • 42. Spring 2.x Groovy integration Spring 2.0 provides support for alternative language bean definitions and configuration A POGO can be wired the like a POJO and be proxied You can mix languages in your Spring application POGO and POJO can be injected within each other Configuration of a POGO bean with the specific lang namespace , and a custom MetaClass <lang:groovy id=&quot;events&quot; script-source=&quot;classpath:dsl/eventsChart.groovy&quot; customizer-ref=&quot;eventsMetaClass&quot; />
  • 43. Let’s Wrap Up Summary Resources Q&A
  • 44. Summary The Groovy dynamic language for the JVM simplifies the life of developers through powerful APIs Groovy opens some interesting perspectives towards extending your application Groovy provides seamless Java integration Groovy lets you create DSL s Groovy protects your investment in Java skills, tools, libraries, frameworks, and application platforms
  • 45. Resources Groovy: http: //groovy . codehaus . org Grails: http: //grails . org Groovy blogs: http: //groovyblogs . org AboutGroovy: http: //aboutgroovy . com G2One: http://www.g2one.com Canoo: http://www.canoo.com
  • 46. Q&A View JavaPolis talks @ www.parleys.com
  • 47. Thank you for your attention