abbiamo visto le difficoltà incontrate nel far andare d’amore e d’accordo JBoss 7.0.2 ed EclipseLink 2.3. Probabilmente i problemi incontrati dipendevano dal fatto che la versione 7.0.2 non era completamente Java EE complinant, ma lo era solo per il profilo web. Con la nuova versione di JBoss (al momento 7.1.1) le cose sono leggermente migliorate ma, come anticipato, è meglio aggiornare anche EclipseLink alla versione 2.4. Vediamo perché.
La nuova coppia: JBoss AS 7.1.x e EclipseLink 2.4
Partendo dalla , se proviamo ad aggiornare esclusivamente il server, al momento del deploy la console ci avvisa che non è presente il modulo per il Persistence Provider specificato! Questa è una novità rispetto a prima! Non possiamo quindi più tenere il jar di EclipseLink nel nostro EAR, ma dobbiamo creare per forza un modulo JBoss. Niente di più facile, come spiega un tutorial di JBoss (che consiglia almeno la versione 2.3.3 di EclipseLink). Basta scaricare EclipseLink e copiare il file eclipselink.jar (magari rinominandolo in eclipselink-2.4.0.jar per tenere traccia della versione) nella cartella del server $JBOSS_HOME/modules/org/eclipse/persistence/main. Sempre in questa cartella, creare il file module.xml con il seguente contenuto:
Fatto! Il modulo è creato! Nel persistence.xml possiamo mettere tranquillamente la target platform di default (che a differenza di JBoss 7.0.2 questa volta funziona):
Riavviamo il server e se avete l’ultima versione non ci dovrebbero essere problemi.
Lazy Loading che passione
Se usiamo infatti una versione di EclipseLink inferiore alla 2.3.3, anche con weaving statico attivato con Ant (come visto nel ) i comportamenti lazy vengono clamorosamente ignorati…
Purtroppo il mancato funzionamento del weaving dinamico dipende da un bug che gli sviluppatori di JBoss fisseranno nella versione 7.2. Nel frattempo, armiamoci di pazienza e di Ant.. oppure di Maven! Infatti esiste un plugin Maven che ci permette di evitare il lancio dello script Ant visto nel post precedente ad ogni modifica del nostro progetto JPA, eseguendo per noi il weaving statico in modo trasparente in fase di compilazione. Questa magia è possibile grazie al plugin . Per prima cosa, nel pom.xml (non sapete cos’è un pom? Niente paura! C’è giusto giusto per voi…) dobbiamo aggiungere un nuovo repository:
eclipselink http://download.eclipse.org/rt/eclipselink/maven.repo/
Aggiungiamo poi EclipseLink
org.eclipse.persistence eclipselink ${version.eclipselink} provided
con scope provided, perché lo abbiamo già caricato come modulo in JBoss, e versione regolata dalla property:
2.4.0
Infine, aggiungiamo il plugin, con la sua dipendenza da EclipseLink:
au.com.alderaan eclipselink-staticweave-maven-plugin 1.0.3 process-classes weave ALL org.eclipse.persistence eclipselink ${version.eclipselink} org.eclipse.persistence javax.persistence 2.0.0
Se stiamo usando Maven da Eclipse, probabilmente ci saranno diversi warning: per metterli a tacere aggiungere il seguente codice per m2eclipse prima della chiusura del blocco build:
org.eclipse.m2e lifecycle-mapping 1.0.0 au.com.alderaan eclipselink-staticweave-maven-plugin [1.0.3,) weave
Se questo non bastasse… ignorate il resto 😉
A questo punto non resta che rifare un build del progetto e farsi un giro nell’applicazione con un occhio alle query in console! Se per caso avete problemi di risorse out-of-sync, ricordatevi di abilitare il refresh automatico all’accesso delle risorse in Eclipse: Settings > General > Workspace > Refresh On Access.
Conclusioni
Usare EclipseLink con JBoss sicuramente è più facile con le ultime versioni. Usare inoltre Maven per rendere completamente trasparente il weaving statico (e non solo…) è sicuramente molto più comodo di ricordarsi di lanciare lo script Ant ad ogni modifica.
Attendiamo con ansia la versione 7.2 di JBoss per vedere se finalmente potremmo abbandonare tutte le soluzioni, anche se quest’ultima non “disturba” affatto!