11. GROOVYCLASSLOADER
GroovyClass
Loader .addClassPath(“/home/groovy”)
.loadClass(“com.manydesigns.Pippo”) Class
.parseClass(“/home/groovy/com/manydesigns/Pippo.groovy”)
Class
18. 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.
19. 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
20. CLASS LOADING
ClassLoader Carica solo classi Java
parent
classloader
GroovyClassLoader Carica classi Java e Groovy
21. Questo è il problema maggiore dell’embedding.
Se Groovy fosse compilato, Java e Groovy
vivrebbero nello stesso class loader.
22. CLASS LOADING: OGNL
OGNL: %{@org.example.MyGroovyClass@myMethod()}
... non funziona perché OGNL usa il classloader Java
e non riesce a risolvere classi Groovy
23. CLASS LOADING: HIBERNATE
Da Groovy funziona:
Da Java funziona solo se si recupera Book dal
GroovyClassLoader
24. 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
25.
26. PRESTAZIONI:
CONCLUSIONI
Caching Reloading
GroovyShell.evaluate(String) No --
GroovyShell.run(File) Sì No
GroovyClassLoader Sì No
GroovyScriptEngine Sì Sì
27. RELOADING DIPENDENZE
A
A dipende da B
B viene modificato
B viene ricaricato
B
Anche A dovrebbe essere ricaricato
In teoria, ma fino a Groovy 1.8.8/2.0.4 c’era un bug:
http://jira.codehaus.org/browse/GROOVY-4975