Come Incorporare un Interprete Groovy in Java

613 views

Published on

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

No Downloads
Views
Total views
613
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Come Incorporare un Interprete Groovy in 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/

    ×