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?
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.
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émentsmapping-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 fichierpersistence.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!
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
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.