Какой правильный путь для ссылки на JAR-файл в jpa persistence.xml в веб-приложении? - PullRequest
21 голосов
/ 13 декабря 2010

persistence.xml выглядит так:

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

Это веб-проект, поэтому блок развертывания - это файл военных действий. Файл jar, к которому я пытался обратиться, находится в папке WEB-INF / lib / , persistence.xml находится в папке WEB-INF / classes / META-INF, При развертывании он просто говорит мне

"ПРЕДУПРЕЖДЕНИЕ: невозможно найти файл (игнорируется): file: ... / .. / lib / app-services-1.0.jar".

Я также испробовал все возможные пути, например: .. / lib / app-services-1.0.jar , lib / app-services-1.0.jar .

Каков правильный путь для этого?

Ответы [ 4 ]

21 голосов
/ 12 мая 2013

Взгляд на jsr всегда работает!

8.2.1.6.3 Jar-файлы

Один или несколько JAR-файлов могут быть указаны с использованием элементов jar-file вместо:или в дополнение к файлам сопоставления, указанным в элементах mapping-file.Если указано, эти JAR-файлы будут> искать управляемые классы персистентности, и любые найденные в них аннотации метаданных отображения будут обрабатываться, или они будут отображаться с использованием значений аннотаций отображения по умолчанию, определенных в этой спецификации.Такие JAR-файлы указываются относительно каталога или JAR-файла, который содержит корень единицы сохранения.

Следующие примеры иллюстрируют использование элемента jar-file для ссылки на дополнительные классы сохранения.В этих примерах используется соглашение о том, что файл jar с именем, оканчивающимся на «PUnit», содержит файл persistence.xml, а файл jar с именем, оканчивающимся на «Entities», содержит дополнительные классы постоянства.

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>

Как вы видите, для war-файлов нет примера, все war-файлы в приведенных выше примерах находятся внутри ear-файлов!
Но я проверял в war-файлах, и он работает только тогда, когда я указываю абсолютный путь к файлам jar иплохой подход к производственной среде!

12 голосов
/ 29 июня 2011

на тот случай, если кто-то еще наткнется на это: оператор-файл-jar действителен только. когда модуль постоянства развертывается как часть архивов предприятия (.ear) - во всех остальных случаях (.war) файл persistence.xml должен находиться в / META-INF / и не может ссылаться на классы, которые находятся за пределами модуля постоянства. (см .: http://javahowto.blogspot.com/2007/06/where-to-put-persistencexml-in-web-app.html). Так что, насколько я знаю, нет способа создать файл persistence.xml, живущий в WEB-INF / classes / META-INF, который ссылается на классы, которые не существуют в WEB-INF / классы.

7 голосов
/ 25 декабря 2015
war2.war
      WEB-INF/lib/warEntities.jar
      WEB-INF/classes/META-INF/persistence.xml
persistence.xml contains:
   <jar-file>lib/warEntities.jar</jar-file>

этот формат работает для файла войны. Я использую Wildlfy 8.2.0 и JPA 2.1

0 голосов
/ 15 декабря 2010

Не уверен, что это связано с тем фактом, что вы развертываете как WAR, но путь должен быть просто "app-sevices-1.0.jar", а jar должен находиться в lib приложения Java EE. Дело в том, что я не уверен, доступно ли это для упрощенного «военного» приложения Java EE. Я подозреваю, что это доступно только для традиционного файла развертывания Java EE (ear). Я бы протестировал создание EAR, содержащего WAR для веб-приложения, JAR для PU и ваш другой JAR для сервисов приложений, как в случае традиционного развертывания Java EE.

Следует также отметить, что относительные пути не поддерживаются, и использование этого в среде SE поддерживается не всеми поставщиками.

...