2015-06-05 26 views
7

Nasz projekt ma wiele modułów EJB i chcemy udostępnić pojedynczy plik persistence.xml między nimi.Udostępnij ten sam plik JPA persistence.xml w wielu plikach JAR EJB wewnątrz EAR

Umieszczamy plik persistence.xml w katalogu EARs META-INF, ale jednostka utrwalania nie jest dostępna w środowisku wykonawczym. Wygląda na to, że plik nigdy nie jest czytany, ponieważ wymusiliśmy niepoprawne klasy i pliki jar, ale nic się nie dzieje.

Dlaczego WebLogic nie czyta pliku persistence.xml wewnątrz pliku EAR?

Otrzymujemy następujący błąd podczas uruchamiania kodu, nie znaleziono PU (Dostępne jednostki utrwalania: []).

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> 

Struktura (jednostka Trwałość jest umieszczony wewnątrz ucha)

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

Jesteśmy przy WebLogic 10.3.6 który wykorzystuje JPA 1.0 i TopLink/EclipseLink że wysyła z nim.

+1

Dlaczego nie umieścić go w dedykowanym pliku jar i wszystkie moduły ejb są zależne od dodatkowego słoika? – mp911de

+0

Musimy spakować nasze moduły EJB do dwóch zestawów EAR, które korzystają z różnych baz danych. Najlepszym sposobem byłoby dla nas umieszczenie pliku persistence.xml w pliku EAR. – BonanzaOne

Odpowiedz

3

Wdrażanie persistence.xml pod uszami folderu META-INF nie spowoduje serwer do załadowania jednostki trwałości (przynajmniej nie w WebLogic 10g, nawet z włączoną wersją JPA 2.0).

Jednostka trwałości musi być wdrożona w katalogu/lib przy użyciu pliku JAR. Struktura robocza:

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

W tym przykładzie słowo "persistence-unit.jar" służy do spakowania konfiguracji JPA.

Teraz jestem w stanie stworzyć kolejne EAR przy użyciu różnych źródeł danych. Korzystanie z composite persistence units może również zwiększyć możliwość ponownego użycia tego podejścia.

+0

Tak ... jeśli spojrzysz na drugie rozwiązanie pod warunkiem EAR + | - lib + | | - core-module.jar | \ - persistence-module.jar + | \ - META-INF + | \ - persistence.xml | - ejb1-module.jar \ - ejb2-module.jar – Cris

4

należy uaktualnić do JPA 2.0

Zobacz ten link: JPA 2.0 in WebLogic Server 10.3.6

następnie postępuj odpowiedź od

Sharing a persistence unit across components in a .ear file

+0

Ponieważ mój wkład w tę odpowiedź jest oparty na innych odpowiedziach nie chciałbym otrzymać nagrody, na wypadek, gdyby ci to pomogło. – Cris

+0

Korzystanie z JPA 2.0 nie rozwiązało problemu. Okazuje się, że muszę wdrożyć plik JAR w katalogu/lib. Wkrótce otrzymasz odpowiedź. – BonanzaOne