COME INCORPORARE UNINTERPRETE GROOVY IN UN    APPLICATIVO JAVA    paolo.predonzani@manydesigns.com
Integrazione Java-Groovy    Compilazione              Embedding                       (caricamento a run-time)    BSF e JS...
COMPILAZIONE   MyClass.groovy                 MyClass.class     Maven                           AntJoint compilation: Java...
BEAN SCRIPTING      FRAMEWORK E JSR 223http://commons.apache.org/bsf/http://groovy.codehaus.org/Bean+Scripting+Frameworkht...
EMBEDDING NATIVO                                 GroovyScript                                    Engine                   ...
DIETRO LE QUINTE...GroovyShell                 GroovyScriptEngine                      ScriptClassLoader                  ...
GROOVYSHELLGroovyShell              .evaluate(String)                              Object              .run(File, String[]...
BINDING
GROOVYCLASSLOADERGroovyClass  Loader    .addClassPath(“/home/groovy”)            .loadClass(“com.manydesigns.Pippo”)      ...
GROOVYSCRIPTENGINEGroovyScript   Engine    GroovyScriptEngine(String[] roots)            .loadScriptByName(String)        ...
SCRIPT == CLASSE                                  Script                         run()def f() {}               main()print...
E’ COMODO GESTIRESCRIPT E CLASSI SEPARATAMENTE                       }   Classpath, package, classi,                      ...
GROOVY IN PORTOFINO 4           Classpath per classi           groovy comuni           Groovy actions
Groovy actions:  La struttura delle directory  ricalca quella degli URL  Un action.groovy per directory  Non è richiesto p...
Groovy classpath:  Un vero classpath con package  e classi  Contiene bean, classi di base  per action, classi di utilità  ...
CLASS LOADING   ClassLoader        Carica solo classi Java           parent        classloaderGroovyClassLoader     Carica...
Questo è il problema maggiore dell’embedding.  Se Groovy fosse compilato, Java e Groovy     vivrebbero nello stesso class ...
CLASS LOADING: OGNLOGNL: %{@org.example.MyGroovyClass@myMethod()}   ... non funziona perché OGNL usa il classloader Java  ...
CLASS LOADING: HIBERNATEDa Groovy funziona:Da Java funziona solo se si recupera Book dalGroovyClassLoader
PRESTAZIONI:CACHING E RELOADING Approccio dei test: 1.“riscaldare i motori” 2.misurare la prima esecuzione 3.misurare la s...
PRESTAZIONI:                CONCLUSIONI                               Caching   ReloadingGroovyShell.evaluate(String)     ...
RELOADING DIPENDENZE       A                   A dipende da B                   B viene modificato                   B vien...
RIFERIMENTIhttp://groovy.codehaus.org/Embedding+Groovyhttp://groovy.codehaus.org/The+groovyc+Ant+Taskhttp://docs.codehaus....
GRAZIE!paolo.predonzani@manydesigns.com  http://www.manydesigns.com/
Come Incorporare un Interprete Groovy in un Applicativo Java
Come Incorporare un Interprete Groovy in un Applicativo Java
Come Incorporare un Interprete Groovy in un Applicativo Java
Come Incorporare un Interprete Groovy in un Applicativo Java
Come Incorporare un Interprete Groovy in un Applicativo Java
Upcoming SlideShare
Loading in …5
×

Come Incorporare un Interprete Groovy in un Applicativo Java

924 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
924
On SlideShare
0
From Embeds
0
Number of Embeds
529
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Come Incorporare un Interprete Groovy in un Applicativo Java

  1. 1. COME INCORPORARE UNINTERPRETE GROOVY IN UN APPLICATIVO JAVA paolo.predonzani@manydesigns.com
  2. 2. Integrazione Java-Groovy Compilazione Embedding (caricamento a run-time) BSF e JSR 223 Embedding nativoGroovyShell GroovyClassLoader GroovyScriptEngine
  3. 3. COMPILAZIONE MyClass.groovy MyClass.class Maven AntJoint compilation: Java referenzia Groovy e viceversa
  4. 4. BEAN SCRIPTING FRAMEWORK E JSR 223http://commons.apache.org/bsf/http://groovy.codehaus.org/Bean+Scripting+Frameworkhttp://groovy.codehaus.org/JSR+223+Scripting+with+Groovy
  5. 5. EMBEDDING NATIVO GroovyScript Engine Script + GroovyClass classpath + Loader reload + Introduce il gestione delleGroovyShell concetto di dipendenze classpathSemplici script isolati
  6. 6. DIETRO LE QUINTE...GroovyShell GroovyScriptEngine ScriptClassLoader gestione dipendenze GroovyClassLoader
  7. 7. GROOVYSHELLGroovyShell .evaluate(String) Object .run(File, String[]) Object Script .parse(File) .run() .invokeMethod() Object
  8. 8. BINDING
  9. 9. GROOVYCLASSLOADERGroovyClass Loader .addClassPath(“/home/groovy”) .loadClass(“com.manydesigns.Pippo”) Class .parseClass(“/home/groovy/com/manydesigns/Pippo.groovy”) Class
  10. 10. GROOVYSCRIPTENGINEGroovyScript Engine GroovyScriptEngine(String[] roots) .loadScriptByName(String) Class .run(String, Binding) Object Script .createScript(String) .run()
  11. 11. SCRIPT == CLASSE Script run()def f() {} main()println “Hello world!” f()
  12. 12. E’ COMODO GESTIRESCRIPT E CLASSI SEPARATAMENTE } Classpath, package, classi, riuso, ingegneria } Script, file, utilizzo “spot”, hackingGroovy è groovy perché supporta entrambe le visioni!
  13. 13. GROOVY IN PORTOFINO 4 Classpath per classi groovy comuni Groovy actions
  14. 14. Groovy actions: La struttura delle directory ricalca quella degli URL Un action.groovy per directory Non è richiesto package Si possono spostare/rinominare gli URL spostando/rinominando le directory Nessuno può dipendere da una action Non è richiesto refactoring Editabili via web o da IDE Ogni action.groovy è un mondo a sé. Lo trattiamo come script.
  15. 15. Groovy classpath: Un vero classpath con package e classi Contiene bean, classi di base per action, classi di utilità utilizzabili dalle action File tipicamente editati da IDE Refactoring Classpath groovy, simile ad un classpath Java ma editabile dinamicamente
  16. 16. CLASS LOADING ClassLoader Carica solo classi Java parent classloaderGroovyClassLoader Carica classi Java e Groovy
  17. 17. Questo è il problema maggiore dell’embedding. Se Groovy fosse compilato, Java e Groovy vivrebbero nello stesso class loader.
  18. 18. CLASS LOADING: OGNLOGNL: %{@org.example.MyGroovyClass@myMethod()} ... non funziona perché OGNL usa il classloader Java e non riesce a risolvere classi Groovy
  19. 19. CLASS LOADING: HIBERNATEDa Groovy funziona:Da Java funziona solo se si recupera Book dalGroovyClassLoader
  20. 20. PRESTAZIONI:CACHING E RELOADING Approccio dei test: 1.“riscaldare i motori” 2.misurare la prima esecuzione 3.misurare la seconda esecuzione 4.touch dello script 5.misurare la terza esecuzione
  21. 21. PRESTAZIONI: CONCLUSIONI Caching ReloadingGroovyShell.evaluate(String) No -- GroovyShell.run(File) Sì No GroovyClassLoader Sì No GroovyScriptEngine Sì Sì
  22. 22. RELOADING DIPENDENZE A A dipende da B B viene modificato B viene ricaricato B Anche A dovrebbe essere ricaricatoIn teoria, ma fino a Groovy 1.8.8/2.0.4 c’era un bug:http://jira.codehaus.org/browse/GROOVY-4975
  23. 23. RIFERIMENTIhttp://groovy.codehaus.org/Embedding+Groovyhttp://groovy.codehaus.org/The+groovyc+Ant+Taskhttp://docs.codehaus.org/display/GMAVEN/Homehttp://groovy.codehaus.org/api/groovy/lang/GroovyShell.htmlhttp://groovy.codehaus.org/api/groovy/lang/GroovyClassLoader.htmlhttp://groovy.codehaus.org/api/groovy/util/GroovyScriptEngine.html
  24. 24. GRAZIE!paolo.predonzani@manydesigns.com http://www.manydesigns.com/

×