it-swarm.com.de

was ist der richtige Pfad, um eine JAR-Datei in der Datei jpa persistence.xml in einer Webanwendung zu referenzieren?

persistence.xml sieht so aus:

<persistence-unit name="testPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source>jdbc/test</non-jta-data-source>
    <jar-file>../../lib/app-services-1.0.jar</jar-file>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
</persistence-unit>

Da es sich um ein Webprojekt handelt, handelt es sich bei der Bereitstellungseinheit um eine Kriegsdatei. Die JAR-Datei, auf die ich verweisen wollte, befindet sich im Ordner WEB-INF/lib/, persistence.xml befindet sich im Ordner WEB-INF/classes/META-INF . Wenn es eingesetzt wird, sagt es mir einfach

"WARNUNG: Datei kann nicht gefunden werden (ignoriert): Datei: .../../lib/app-services-1.0.jar".

Ich habe auch jeden erdenklichen Pfad ausprobiert, d. H. ../lib/app-services-1.0.jar , lib/app-services-1.0.jar .

Was ist der richtige Weg dazu?

21
Bobo

für den Fall, dass jemand anderes darauf stößt: Die jar-file-Anweisung ist nur gültig. Wenn die Persistence Unit als Teil eines Enterprise Archives (.ear) bereitgestellt wird - in jedem anderen Fall (.war) muss sich persistence.xml in/META-INF/befinden und kann keine Klassen konsolidieren, die außerhalb der Persistence Unit leben (Siehe: http://javahowto.blogspot.com/2007/06/where-to-put-persistencexml-in-web-app.html ). So weit ich weiß, gibt es keine Möglichkeit, eine Persistenz.xml in WEB-INF/classes/META-INF zu haben, die auf Klassen verweist, die nicht in WEB-INF/classes leben. 

12
Stefan

Ein Blick auf jsr funktioniert immer!

8.2.1.6.3 Jar-Dateien

Eine oder mehrere JAR-Dateien können mithilfe der jar-file-Elemente anstelle von oder zusätzlich zu den in den mapping-file-Elementen angegebenen Zuordnungsdateien angegeben werden. Wenn angegeben, werden diese JAR-Dateien nach verwalteten Persistenzklassen durchsucht, und die darin gefundenen Annotationen für Mapping-Metadaten werden verarbeitet, oder sie werden mithilfe der in dieser Spezifikation definierten Mapping-Annotations-Standardeinstellungen zugeordnet. Sol JAR-Dateien werden relativ zu dem Verzeichnis oder der JAR-Datei angegeben, in der sich der Stamm der Persistenzeinheit befindet.

Die folgenden Beispiele veranschaulichen die Verwendung des jar-file-Elements zum Verweisen auf zusätzliche Persistenzklassen. In diesen Beispielen wird die Konvention verwendet, dass eine JAR-Datei mit einem Namen, die in „PUnit“ endet, die persistence.xml-Datei enthält, und dass eine JAR-Datei mit einem Namen, der in „Entities“ endet, zusätzliche Persistenzklassen enthält.

Example 1:
app.ear  
   lib/earEntities.jar  
   earRootPUnit.jar (with META-INF/persistence.xml )  
persistence.xml contains:  
   <jar-file>lib/earEntities.jar</jar-file>  

Example 2:
app.ear
   lib/earEntities.jar
   lib/earLibPUnit.jar (with META-INF/persistence.xml )
persistence.xml contains:
   <jar-file>earEntities.jar</jar-file>

Example 3:
app.ear
   lib/earEntities.jar
   ejbjar.jar (with META-INF/persistence.xml )
persistence.xml contains:
   <jar-file>lib/earEntities.jar</jar-file>

Example 4:
app.ear
    war1.war
       WEB-INF/lib/warEntities.jar
       WEB-INF/lib/warPUnit.jar (with META-INF/persistence.xml )
persistence.xml contains:
    <jar-file>warEntities.jar</jar-file>

Example 5:
app.ear
   war2.war
      WEB-INF/lib/warEntities.jar
      WEB-INF/classes/META-INF/persistence.xml
persistence.xml contains:
   <jar-file>lib/warEntities.jar</jar-file>

Example 6:
app.ear
    lib/earEntities.jar
    war2.war
    WEB-INF/classes/META-INF/persistence.xml
 persistence.xml contains:
    <jar-file>../../lib/earEntities.jar</jar-file>

Example 7:
app.ear
   lib/earEntities.jar
   war1.war
   WEB-INF/lib/warPUnit.jar (with META-INF/persistence.xml )
persistence.xml contains:
   <jar-file>../../../lib/earEntities.jar</jar-file>

Wie Sie sehen, gibt es kein Beispiel für Kriegsdateien. Alle Kriegsdateien in den obigen Beispielen befinden sich in Ohrdateien!
Aber ich habe War-Dateien getestet, und es funktioniert genau dann, wenn ich den absoluten Pfad der JAR-Dateien angege- ben habe. Dies ist kein guter Ansatz für die Produktionsumgebung!

20
Heidarzadeh
war2.war
      WEB-INF/lib/warEntities.jar
      WEB-INF/classes/META-INF/persistence.xml
persistence.xml contains:
   <jar-file>lib/warEntities.jar</jar-file>

dieses Format funktioniert für Kriegsdateien. Ich verwende Wildlfy 8.2.0 und JPA 2.1

7
Pragalathan M

Nicht sicher, dass dies mit der Tatsache zusammenhängt, dass Sie sich als WAR bereitstellen, der Pfad sollte jedoch einfach "app-sevices-1.0.jar" lauten und das JAR sollte sich in der Bibliothek der Java EE-Anwendung befinden. Die Sache ist: Ich bin nicht sicher, ob dies für die vereinfachte "Java" -Anwendung von War verfügbar ist. Ich vermute, dass dies nur für die traditionelle Java EE-Implementierungsdatei (Ohr) verfügbar ist. Ich würde das Erstellen einer EAR mit einem WAR für die Webanwendung, JAR für PU und Ihrer anderen JAR für App-Services wie bei einer traditionellen Java EE-Bereitstellung testen. 

Beachten Sie außerdem, dass relative Pfade nicht unterstützt werden. Die Verwendung dieser Option in einer SE-Umgebung wird nicht von allen Anbietern unterstützt. 

0
jpkrohling