2013-06-13 3 views
12

Я в тупике, когда дело доходит до местоположения моего файла persistence.xml. Я использую eclipselink 2.4 в качестве моей реализации JPA 2.0 и имею свой файл persistence.xml, расположенный под src/main/resources/META-INF/persistence.xml, как и много сообщений.JPA persistence.xml META-INF работает неправильно

Первый выпуск: После публикации на моем сервере внутри eclipse я получаю сообщение об ошибке, указывающее, что мой файл persistence.xml не найден.

Exception: : java.lang.IllegalArgumentException: No persistence unit named 'X' 
is available in scope Webapp. Available persistence units: [] at 

enter image description here

Вот код для моего persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
<persistence-unit name="X" transaction-type="JTA"> 
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
<jta-data-source>localJTA</jta-data-source> 
<exclude-unlisted-classes>false</exclude-unlisted-classes> 
<properties> 
    <property name="eclipselink.target-server" value="WebLogic"/> 
    <property name="eclipselink.logging.level" value="FINEST"/>   
</properties> 
</persistence-unit> 
</persistence> 

Если я двигаю META-INF в WebAPP/WEB-INF/классы/META-INF, то он работает ! Я не понимаю, в чем проблема.

enter image description here

Я проверил проекты построить путь, и все выглядит хорошо там.

enter image description here

Второй вопрос я имею что мой аннотированный класс сущностей не подхватили автоматически EclipseLink. В моей конфигурации JPA у меня есть автоматически выбранные классы аннотированных подписей.

enter image description here

У меня есть следующие в моей XML

<exclude-unlisted-classes>false</exclude-unlisted-classes> 

технологий, используемых: сервер WebLogic 12c, EJB 3.1, JPA 2.0, М2Э-WTP и JSF 2.1

обновление 1: Оставив META-INF на пути src/main/resources/META-INF/persistence.xml и выполнив установку maven для создания военного файла, папка META-INF правильно размещена в WEB-INF/classes/META- INF/настойчивость. xml как это должно быть (внутри войны). Кажется, что это только и проблема, когда webapp создается и запускается локально в Eclipse. Может кто-нибудь объяснить это?

Update 2: Оставляя META-INF в SRC/основные/ресурсы т.е. SRC/основные/ресурсы/META-INF/persistence.xml и следующий в моем persistence.xml, а не в явном виде листинг класса сущностей

<exclude-unlisted-classes>false</exclude-unlisted-classes> 

works IF Я строю войну и разворачиваю ее через консоль weblogic через интернет-проводник. Почему он не работает внутри затмения !?

Update 3:
сделал вы проверяете, что будет построен Да, внутри Eclipse, у меня есть построить набор автоматически. Глядя в папку проекта, я вижу пакет java package com, папку META-INF, содержащую папку persistence.xml и ресурсов, которые находятся в разделе Webapp/target/classes.
Если война такая же -Вы ссылаетесь на Webapp.папке войны, найденной в C: \ workspace.metadata.plugins \ org.eclipse.wst.server.core \ tmp0 \ Weblogic12cDomain_auto_generated_ear_ \ Webapp.war? Если так, единственное, что есть в WEB-INF \ lib \ jsf-impl-2.1.7.jar
, то вы проверили путь к классу, который используется для проверки вашего приложения в Eclipse. - Эта запись находится в моем пути к классам как ожидалось в Webapp/.classpath
Если persistence.xml в каталоге ресурсов находится в начале пути класса, он будет выбран вместо того, который был в вашей войне, или один в правильном каталоге - Мое понимание - Eclipse будет строить проект, а затем скопировать содержимое на сервер без создания военного файла.

Вот что в корне мавена сгенерирована Webapp.war:

enter image description here

Вот что лежит в корне папки проекта Webapp:

enter image description here

Вот что находится в корне папки Webapp.war FOLDER под C: \ workspace.metadata.plugins \ org.eclipse.wst.server.core \ tmp0 \ Weblogic12cDomain_auto_generated_ear_ \ Webapp.war

enter image description here

если persistence.xml в каталоге ресурсов находится на пути к классам первым, он будет подобран вместо одного в вашей войне или один в нужном каталоге. - Не уверен, что вы подразумеваете под этим. Persistence.xml в моем ресурсе/META-INF - это тот, который я хочу получить. Не знаете, какой военный файл имеет к этому отношение? В любом случае они должны быть одинаковыми persistence.xml, я бы подумал.

Любая помощь очень ценится !!

ответ

5

Раздел 8.2.1 спецификаций JPA указывает: «Файл persistence.xml находится в каталоге META-INF корня блока сохранения.» и позже «Управляемые классы персистентности могут либо содержаться в корневой части единицы персистентности, либо они могут быть указаны посредством ссылки, то есть путем присвоения имени классам, архивам классов или файлам сопоставления XML (которые, в свою очередь, справочные классы) которые доступны на пути класса приложения «

Таким образом, корень единицы персистентности является каталогом каталога META-INF. Поместив классы в каталог классов, они не находятся в корневой части единицы персистентности и поэтому должны быть явно указаны для включения.

+0

Thx Крис! это имеет смысл, однако это не работает внутри затмения! =/См. Мои обновления. – Padawan

+0

Крис вы можете изменить свой ответ на комментарий, чтобы другие не думали, что на вопрос был дан ответ? – Padawan

+0

Если это не тот, который вы ищете, и вы хотите больше подвергать его воздействию, поместите на него щедрость или сделайте то, что вы сделали, - попросите снова с большей или разной информацией. Вы отмечаете, что это происходит только «при построении в Eclipse» - вы проверили, что построено? Если война такая же, то вы проверили путь к классам, который использовался для тестирования вашего приложения в Eclipse? если файл persistence.xml в каталоге ресурсов находится сначала в пути к классам, он будет выбран, а не тот, который находится в вашей войне, или один в правильном каталоге. – Chris

2

Вы никогда не упоминаете maven, поэтому я не знаю, если это на вашей тарелке; он не работал для меня с maven, пока я не добавил зависимость hibernate-entitymanager. Мой pom.xml имел только спящий ядро. После того, как я добавил hibernate-entitymanager, он начал работать (для моего теста).

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>4.3.1.Final</version> 
</dependency> 

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>4.3.1.Final</version> 
</dependency> 
0

Проверьте, находится ли persistence.xml в вашей войне. Или это не так, но оно находится в неправильном месте. Вы также можете поместить этот файл в папку java/main/resources, чтобы его поместить в ваш путь к классу.

4

Я считаю, что у вас есть не менее 2 вопросов.

1) Maven построить

Ваш проект имеет Maven структура не Eclipse, структуру веб-проекта, поэтому он должен быть построена с использованием команды Maven, а не Eclipse, строить по умолчанию. (Я не эксперт в maven, поэтому, пожалуйста, maven эксперты вскакивают и комментируют, если не правда). Поэтому, когда вы делаете автоматическую сборку в Eclipse, он не знает, что должен скопировать ваш src/main/resources/META-INF/persistence.xml в WEB-INF/classes/META-INF/persistence.xml и просто компилировать java классы.

2) Развертывание

Если следовать структуры проекта Eclipse, то Eclipse, знает, как упаковать и добавить свой проект на сервер, когда вы выбираете «Добавить сервер». Если вы используете maven, ваша построенная война обычно находится в целевом каталоге. Таким образом, вам также нужно будет экспортировать эту войну и установить ее с помощью инструментов WebLogic или установить ее с помощью задачи maven.

Проверить WebLogic Server with Maven and Eclipse как Oracle предлагает использовать Eclipse, с WebLogic и Maven

+0

У меня есть Tomcat7 (OpenJPA2.x) и IBM WAS 8.5.5 (OpenJPA 2.x), webapp - это проект jda (resource_local) jpa. Томкат был в порядке, но БУДУТ неудачным с тем же военным пакетом. Размещение xml в "mywebapp/WEB-INF/classes/META-INF/persistence.xml" сделало трюк, теперь оба работают нормально. – Whome