Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
2 (JBoss
As 7) e integrare Spring (JPA Spring e JBoss Integration )
Oggi parleremo di come integrare Spring e JBoss AS 7 (JBoss EAP 6). Dato che la nuova
versione di JBoss ignetta in modo implicito I propri moduli OSGi (logging, JPA, Hibernate), pu
essere a volte ripetitivo ed inutile doverli gestire a livello applicativo. Quindi presentiamo un
esempio su come integrare Spring con JBoss lasciando che JBoss ignetti le proprie librerie,
oppure usando JPA 2.1 che non ancora nativamente supportato da JBoss, e si dovr
impedire che JBoss implementi linjection automatic di JPA e Hibernate.
Step 1 : Persistence.xml
La creazione del file persistence.xml dipender dal fatto se lEntity Manager verr gestito dal
container (JBoss, qundi JPA 2.0) o da Spring (nel qual caso useremo JPA 2.1).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Un modo pi drastico di escludere i moduli OSGi che JBoss utilizza di default attraverso il file
jboss-deployment-structure.xml che sar di questo tipo:
<?xml version="1.0"?>
<jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">
<deployment>
<exclusions>
<module name="javax.persistence.api" />
<module name="org.hibernate" />
</exclusions>
</deployment>
</jboss-deployment-structure>
Questa una modalit in best-practice per utilizzare delle librerie con version diverse da quelle di
JBoss senza dover sovrascrivere la cartella /modules.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
In questo caso, lapplicazione usa una persistence unit deployata sul server. Quindi le
classi javax.persistence ed il persistence provider (Hibernate) sono contenuti allinterno di
moduli in JBoss
(in JBOSS_HOME\modules\system\layers\base\javax\persistence\api\main) e aggiunti
automaticamente dallapplicazione durante il deploy (Quando viene intercettato il file
persistence.xml o il persistence-unit, JBoss ignetta Hibernate in modo implicito).
Usando una persistence unit deploata sul server, dovrete anche dichiarare un JNDI
persistence context nel Web.xml:
NB: Il nome della persistence-unit specificato nel web.xml deve essere lo stesso di
quello dichiarato nel file persitence.xml (<persistence-unit name="module_enterprise")
1
2
3
4
5
6
7
8
9
10
11
12
class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<persistence-unit-ref>
<persistence-unit-ref-name>test/myfact</persistence-unit-ref-name>
<persistence-unit-name>module_enterprise</persistence-unit-name>
</persistence-unit-ref>
</web-app>
Notate che il nome che abbiamo dichiarato nell applicationcontext java:comp/env/test/myfact, e nel web.xml, dobbiamo mettere solo test/myfact
Se Spring non pu trovare il transaction Manager di default di JBoss, pu essere esplicitato
come spiegato in questo articolo.
- Spring gestisce lEntityManager.
Usando JPA2.0, possiamo abilitare il modulo JPA incluso allinterno di JBoss ed usare la prima
possibilit. Ma abbiamo disabilitato il modulo OSGi JPA e deciso di lavorare con JPA2.1 (E
vogliamo che Spring gestisca il persistence unit), quindi lEntityManagerFactory verr definito
usando Spring.
Il nostro applicationContext sar:
Questo tutto, adesso dovreste essere in grado di integrare JBoss e Spring sia abilitando la
gestione del persistence unit da parte di JBoss, o lasciandolo fare a Spring e ESCLUDENDO I
MODULI JBOSS JPA e Hibernate.