2015-06-05 11 views
7

Il nostro progetto ha più moduli EJB e vogliamo condividere un singolo file persistence.xml tra di loro.Condividi lo stesso JPA persistence.xml su più JAR EJB all'interno di EAR

Inseriamo il file persistence.xml nella directory EARs META-INF, ma l'unità di persistenza non è disponibile in fase di esecuzione. Sembra che il file non venga mai letto poiché abbiamo forzato classi errate e file jar, ma non succede nulla.

Perché WebLogic non legge il file persistence.xml all'interno di EAR?

Viene visualizzato il seguente errore durante l'esecuzione del codice, non viene trovato alcun PU (unità di persistenza disponibili: []).

Caused By: java.lang.IllegalArgumentException: No persistence unit named 'em' is available in scope ejb1-module.jar. Available persistence units: [] 

persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"> 
    <persistence-unit name="system-unit" transaction-type="JTA"> 
     <jta-data-source>sysmtem-ds</jta-data-source> 
     <jar-file>../ejb1-module.jar</jar-file> 
     <class>...</class> 
     <class>...</class> 
     <class>...</class> 
    </persistence-unit> 
</persistence> 

Struttura (unità di persistenza è posto all'interno dell'orecchio)

EAR + 
    |- META-INF + 
    |  - persistence.xml 
    |- ejb1-module.jar 
    |- ejb2-module.jar 
    |- ejb3-module.jar 

Usiamo WebLogic 10.3.6 che utilizza JPA 1.0 e TopLink/EclipseLink che navi con esso.

+1

Perché non lo metti in un file jar dedicato e tutti i tuoi moduli ejb dipendono dal vaso aggiuntivo? – mp911de

+0

Abbiamo bisogno di impacchettare i nostri moduli EJB in due EAR che utilizzano database diversi. Il modo migliore per noi sarebbe quello di mettere persistence.xml in EAR. – BonanzaOne

risposta

3

Distribuzione del persistence.xml sotto le orecchie cartella META-INF non si innescherà il server per caricare l'unità di persistenza (almeno non in WebLogic 10g, anche con JPA 2.0 abilitato).

L'unità di persistenza deve essere distribuita sotto/lib utilizzando un file JAR. struttura di lavoro:

EAR + 
    |- lib + 
    |  |- entities.jar 
    |  \- persistence-unit.jar + 
    |        \- META-INF + 
    |           \- persistence.xml 
    |- ejb-core-module.jar 
    \- ejb-business-module.jar 

In questo esempio la "persistenza-unit.jar" è utilizzato per imballare le configurazioni JPA.

Ora sono in grado di creare un altro EAR utilizzando diverse origini dati. L'utilizzo di composite persistence units potrebbe aumentare la riusabilità di questo approccio.

+0

Sì ... se si guarda sulla seconda soluzione fornita EAR + | - lib + | | - core-module.jar | \ - persistence-module.jar + | \ - META-INF + | \ - persistence.xml | - ejb1-module.jar \ - ejb2-module.jar – Cris

4

Si dovrebbe eseguire l'aggiornamento a JPA 2.0

Vedi questo link: JPA 2.0 in WebLogic Server 10.3.6

Poi seguono la risposta da

Sharing a persistence unit across components in a .ear file

+0

Dato che il mio contributo a questa risposta è basato sulla risposta di altri, non mi piacerebbe ottenere il premio in caso ti aiuti. – Cris

+0

L'uso di JPA 2.0 non risolve il problema. Risulta che ho bisogno di distribuire un JAR sotto la directory/lib. Caricamento di una risposta al più presto. – BonanzaOne

Problemi correlati