web-dev-qa-db-fra.com

quel est le bon chemin pour référencer un fichier jar dans jpa persistence.xml dans une application Web?

persistence.xml ressemble à ceci:

<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>

Il s’agit d’un projet Web, l’unité de déploiement est donc un fichier war. Le fichier jar auquel j'ai essayé de faire référence se trouve dans WEB-INF/lib/folder, persistence.xml se trouve dans WEB-INF/classes/META-INF folder. En cours de déploiement, il me dit simplement

"AVERTISSEMENT: fichier introuvable (ignoré): fichier: .../../lib/app-services-1.0.jar".

J'ai également essayé tous les chemins possibles auxquels je pouvais penser, à savoir ../lib/app-services-1.0.jar , lib/app-services-1.0.jar .

Quelle est la bonne voie pour faire cela?

21
Bobo

juste au cas où quelqu'un d’autre trébucherait dessus: la déclaration de fichier de jar n’est valable que. lorsque l'unité de persistance est déployée dans le cadre d'une archive d'entreprise (.ear) - dans tous les autres cas (.war), le fichier persistence.xml doit résider dans/META-INF/et ne peut pas référencer les classes qui résident en dehors de l'unité de persistance. (voir: http://javahowto.blogspot.com/2007/06/where-to-put-persistencexml-in-web-app.html ). Donc, autant que je sache, il n'y a aucun moyen d'avoir un persistence.xml résidant dans WEB-INF/classes/META-INF qui référence des classes qui ne résident pas dans WEB-INF/classes. 

12
Stefan

Regarder jsr fonctionne toujours!

8.2.1.6.3 Fichiers Jar

Un ou plusieurs fichiers JAR peuvent être spécifiés à l'aide des éléments jar-file à la place de, ou en plus des fichiers de mappage spécifiés dans les éléments mapping-file. Si spécifié, ces fichiers JAR> seront recherchés pour les classes de persistance gérées, et toutes les annotations de métadonnées de mappage trouvées sur ceux-ci seront traitées, ou ils seront mappés en utilisant les valeurs par défaut d'annotation de mappage définies par cette spécification. Les fichiers JAR sont spécifiés par rapport au répertoire ou au fichier JAR contenant la racine de l'unité persis-tence.

Les exemples suivants illustrent l'utilisation de l'élément jar-file pour référencer des classes de persistance supplémentaires. Ces exemples utilisent la convention selon laquelle un fichier JAR dont le nom se termine par «PUnit» contient le fichier persistence.xml et qu'un fichier JAR dont le nom se termine par «Entities» contient des classes de persistance supplémentaires.

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>

Comme vous le voyez, il n'y a pas d'exemple pour les fichiers war, tous les fichiers war des exemples ci-dessus sont des fichiers intra-auriculaires!
Mais j’ai testé dans des fichiers war et cela fonctionne au moment même où je spécifie le chemin absolu des fichiers jar et ce n’est pas une bonne approche pour l’environnement de production!

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>

ce format fonctionne pour le fichier war. J'utilise Wildlfy 8.2.0 et JPA 2.1

7
Pragalathan M

Pas sûr que cela soit lié au fait que vous déployez en tant que WAR, mais le chemin doit simplement être "app-sevices-1.0.jar" et le fichier jar doit se trouver dans la bibliothèque de l'application Java EE. Le problème est le suivant: je ne sais pas si cela est disponible pour l’application Java EE simplifiée «war». Je suppose que cela n’est disponible que pour le fichier de déploiement Java EE traditionnel (ear). J'essayais de créer un fichier EAR contenant un fichier WAR pour l'application Web, un fichier JAR pour le PU et votre autre fichier JAR pour des services d'application, comme le serait un déploiement traditionnel Java EE. 

Une autre chose à noter est que les chemins relatifs ne sont pas pris en charge et que leur utilisation dans un environnement SE n'est pas prise en charge par tous les fournisseurs. 

0
jpkrohling