Настройте единицы сохранения, чтобы они были доступны в нескольких банках уха. - PullRequest
2 голосов
/ 03 декабря 2011

В файле .ear мои EJB-файлы копируются в несколько банок и войну из-за некоторых технических ограничений. И только один из этих jar содержит файл persistence.xml, в котором я настроил несколько модулей постоянства.

myear.ear
|---- myjar1.jar
|-------- META-INF/persistence.xml
|---- myjar2.jar
|---- mywar.war

Проблема в том, что Jboss не может найти конфигурацию постоянства для классов в банке "myjar2" и войне:

Не удалось получить конфигурацию класса для .... EjbA.class из-за следующих ошибок: Не удается найти модуль развертывания с именем xxxxx в Подразделение "jar2.jar" развертывания "myear.ear"

Чтобы решить эту проблему, я попытался создать новый jar-файл, содержащий только файл persistence.xml, но он не работает.

Есть ли у вас идеи, как я могу поделиться своим файлом persistence.xml для каждой банки без реорганизации всего моего архива ушей?

1 Ответ

2 голосов
/ 04 декабря 2011

Согласно спецификации JPA, у вас должна быть возможность определить постоянную единицу на уровне EAR, которая будет видна всем подмодулям, которые вы определяете в одном и том же .ear:

8.2.2 Область единицы сохраняемости

...

Единица постоянства, определяемая на уровне EAR, обычно видна всем компонентам в приложении .Однако если единица персистентности с тем же именем определена файлом EJB-JAR, WAR или jar приложения в EAR, единица персистентности с таким именем, определенная на уровне EAR, не будет видна компонентам, определенным этим EJB-JAR, WAR или файл JAR приложения, если ссылка на единицу хранения не использует синтаксис имени единицы сохранения # для указания пути для устранения неоднозначности ссылки.

Однако в разделе 8:

ПРИМЕЧАНИЕ. Java Persistence 1.0 поддерживал использование файла JAR в корне EAR в качестве корня единицы сохраняемости.Это использование больше не поддерживается.Портативные приложения должны использовать каталог библиотеки EAR для этого случая вместо .См. [9].

Так что я бы попытался поместить банку в папку lib.Если вам нужно, чтобы этот модуль был EJB-модулем, он должен находиться в корне уха, поэтому вы можете создать отдельный jar-файл с файлом persistence.xml.

...