¿Cuál es la ruta correcta para referir un archivo jar a jpa persistence.xml en una aplicación web?

persistence.xml se ve así:

 org.hibernate.ejb.HibernatePersistence jdbc/test ../../lib/app-services-1.0.jar false  

Es un proyecto web, por lo que la unidad de implementación es un archivo de guerra. El archivo jar al que intenté referirme está en la carpeta WEB-INF / lib / , persistence.xml está en la carpeta WEB-INF / classes / META-INF . Cuando se despliega, simplemente me dice

“ADVERTENCIA: no se puede encontrar el archivo (ignorado): file: … / .. / lib / app-services-1.0.jar”.

También probé todos los caminos posibles que pude pensar, es decir, ../lib/app-services-1.0.jar , lib / app-services-1.0.jar .

¿Cuál es el camino correcto para hacer esto?

solo en caso de que alguien más tropiece con esto: la statement del archivo jar es solo válida. cuando la unidad de persistencia se despliega como parte de un Archivo de empresa (.ear) – en cualquier otro caso (.war), persistence.xml debe residir en / META-INF / y no puede refrenciar clases que viven fuera de la unidad de persistencia (ver: http://javahowto.blogspot.com/2007/06/where-to-put-persistencexml-in-web-app.html ). Entonces, hasta donde yo sé, no hay forma de tener un persistence.xml que viva en WEB-INF / classes / META-INF que haga referencia a clases que no vivan en WEB-INF / classes.

Echar un vistazo a jsr siempre funciona!

8.2.1.6.3 Archivos Jar

Se pueden especificar uno o más archivos JAR utilizando los elementos del jar-file lugar de, o además de los archivos de mapeo especificados en los elementos del mapping-file . Si se especifica, estos archivos JAR se buscarán para clases de persistencia administradas, y cualquier anotación de metadatos de mapeo encontrada en ellos se procesará, o se mapearán usando los valores predeterminados de la anotación de mapeo definidos por esta especificación. Dichos archivos JAR se especifican en relación con el directorio o el archivo jar que contiene la raíz de la unidad de persistencia.

Los siguientes ejemplos ilustran el uso del elemento jar-file para referenciar clases de persistencia adicionales. Estos ejemplos utilizan la convención de que un archivo jar con un nombre que termina en “PUnit” contiene el archivo persistence.xml y que un archivo jar con un nombre que termina en “Entities” contiene clases de persistencia adicionales.

 Example 1: app.ear lib/earEntities.jar earRootPUnit.jar (with META-INF/persistence.xml ) persistence.xml contains: lib/earEntities.jar Example 2: app.ear lib/earEntities.jar lib/earLibPUnit.jar (with META-INF/persistence.xml ) persistence.xml contains: earEntities.jar Example 3: app.ear lib/earEntities.jar ejbjar.jar (with META-INF/persistence.xml ) persistence.xml contains: lib/earEntities.jar Example 4: app.ear war1.war WEB-INF/lib/warEntities.jar WEB-INF/lib/warPUnit.jar (with META-INF/persistence.xml ) persistence.xml contains: warEntities.jar Example 5: app.ear war2.war WEB-INF/lib/warEntities.jar WEB-INF/classes/META-INF/persistence.xml persistence.xml contains: lib/warEntities.jar Example 6: app.ear lib/earEntities.jar war2.war WEB-INF/classes/META-INF/persistence.xml persistence.xml contains: ../../lib/earEntities.jar Example 7: app.ear lib/earEntities.jar war1.war WEB-INF/lib/warPUnit.jar (with META-INF/persistence.xml ) persistence.xml contains: ../../../lib/earEntities.jar 

Como ve, no hay ningún ejemplo para los archivos war, ¡todos los archivos war de los ejemplos anteriores están dentro de los archivos ear!
Pero probé en archivos war y funciona justo cuando especifico la ruta absoluta de los archivos jar y no es un buen enfoque para el entorno de producción.

 war2.war WEB-INF/lib/warEntities.jar WEB-INF/classes/META-INF/persistence.xml persistence.xml contains: lib/warEntities.jar 

este formato funciona para el archivo war. Estoy usando Wildlfy 8.2.0 y JPA 2.1

No estoy seguro de que esto esté relacionado con el hecho de que está implementando como WAR, pero la ruta debería ser simplemente “app-sevices-1.0.jar” y el jar debería estar en la lib de la aplicación Java EE. Lo que pasa es que no estoy seguro de si esto está disponible para la aplicación Java EE simplificada de “guerra”. Sospecho que esto está disponible solo para el archivo de implementación Java EE tradicional (ear). Probaría hacer un EAR, conteniendo un WAR para la aplicación web, JAR para la PU y su otra JAR para servicios de aplicaciones, como lo sería una implementación Java EE tradicional.

Otra cosa a tener en cuenta es que las rutas relativas no son compatibles, y el uso de esto en el entorno SE no es compatible con todos los proveedores.