qual é o caminho certo para se referir a um arquivo jar no jpa persistence.xml em um aplicativo da web?

persistence.xml tem esta aparência:

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

É um projeto da Web, portanto, a unidade de implantação é um arquivo de guerra. O arquivo jar que eu tentei referenciar está na pasta WEB-INF / lib / , persistence.xml está na pasta WEB-INF / classs / META-INF . Ao ser implantado, simplesmente me diz

“AVISO: Não foi possível encontrar o arquivo (ignorado): file: … / .. / lib / app-services-1.0.jar”.

Eu também tentei todos os caminhos possíveis que eu poderia pensar, ou seja, ../lib/app-services-1.0.jar , lib / app-services-1.0.jar .

Qual é o caminho certo para fazer isso?

apenas no caso de alguém mais se deparar com isso: a declaração jar-file só é válida. quando a unidade de persistência é implantada como parte de um Enterprise Archives (.ear) – em todos os outros casos (.war), o persistence.xml deve residir em / META-INF / e não pode referenciar classs que residem fora da unidade de persistência. (veja: http://javahowto.blogspot.com/2007/06/where-to-put-persistencexml-in-web-app.html ). Então, até onde eu sei, não há como ter um persistence.xml vivendo em WEB-INF / classs / META-INF que referencia classs que não vivem em WEB-INF / classs.

Dar uma olhada no jsr sempre funciona!

8.2.1.6.3 Arquivos Jar

Um ou mais arquivos JAR podem ser especificados usando os elementos jar-file vez de, ou além dos arquivos de mapeamento especificados nos elementos mapping-file . Se especificado, esses arquivos JAR serão pesquisados ​​por classs de persistência gerenciadas, e quaisquer annotations de metadados de mapeamento encontradas nelas serão processadas ou serão mapeadas usando os padrões de anotação de mapeamento definidos por esta especificação. Esses arquivos JAR são especificados em relação ao diretório ou arquivo jar que contém a raiz da unidade de persistência.

Os exemplos a seguir ilustram o uso do elemento jar-file para referenciar classs de persistência adicionais. Esses exemplos usam a convenção de que um arquivo jar com um nome terminado em “PUnit” contém o arquivo persistence.xml e que um arquivo jar com um nome terminado em “Entidades” contém classs de persistência adicionais.

 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/classs/META-INF/persistence.xml persistence.xml contains: lib/warEntities.jar Example 6: app.ear lib/earEntities.jar war2.war WEB-INF/classs/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 você vê, não há exemplo para arquivos war, todos os arquivos war nos exemplos acima estão dentro dos arquivos ear!
Mas eu testei em arquivos de guerra e funciona apenas quando eu especificar o caminho absoluto dos arquivos jar e não é uma boa abordagem para o ambiente de produção!

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

este formato funciona para arquivo de guerra. Estou usando o Wildlfy 8.2.0 e o JPA 2.1

Não tenho certeza se isso está relacionado ao fato de você estar implementando como um WAR, mas o caminho deve ser simplesmente “app-sevices-1.0.jar” e o jar deve estar na biblioteca do aplicativo Java EE. O problema é: não tenho certeza se isso está disponível para o aplicativo simplificado “war” Java EE. Eu suspeito que isso esteja disponível apenas para o arquivo de implantação tradicional do Java EE (ear). Eu testaria a criação de um EAR, contendo um WAR para o aplicativo da Web, JAR para o PU e seu outro JAR para serviços de aplicativos, como seria uma implantação tradicional do Java EE.

Outra coisa a notar é que os caminhos relativos não são suportados e o uso deste no ambiente SE não é suportado por todos os fornecedores.

Intereting Posts