Две единицы сохранения в одном Persistence.xml

Мы создали несколько библиотек, которые будут использоваться всеми нашими проектами, эти библиотеки обеспечат базовую функциональность всех наших систем (логин, некоторые управляют и т.д.). Но само приложение может использовать другую базу данных.

Мы сделали, чтобы создать Persistence.xml с двумя сохраняющимися единицами. И упакуйте все основные объекты библиотеки в банке под названием "LN-model.jar" и все объекты тестового приложения в "App-model.jar". Но по какой-то причине мы по-прежнему получаем следующее сообщение.

Не удалось разрешить блок персистентности, соответствующий persistence-context-ref-name [xxxxlistener.InicializadorListener/em] в области модуля с именем [gfdeploy #/Users/zkropotkine/WORK/SeguridadCore/dist/gfdeploy/SeguridadCore-war_war]. Проверьте свою заявку.

Здесь наш Persistence.xml

<persistence version="1.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_1_0.xsd">

<persistence-unit name="x" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/x</jta-data-source>
    <jar-file>App-model.jar</jar-file>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
    </properties> 
</persistence-unit>

<persistence-unit name="y" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/y</jta-data-source>
    <jar-file>LN-model.jar</jar-file>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties/>
</persistence-unit> 

Кстати, мы помещаем Persistence.xml в банку, добавляем к нашему Enterprise Project (EAR).

Ответ 1

Проблема заключается в том, что JPA не знает, какой блок персистентности использовать. когда у вас есть только одна единица сохранения, эта проблема не возникает. Для исправления выполните следующие действия:

Вам нужно указать блок персистентности: @PersistenceContext (unitName = "..." ) в Ejb, которые не имеют

Ответ 2

Вы можете добавить аннотации:

@PersistenceUnit(name = "x")
EntityManagerFactory entityManagerFactory;

@PersistenceContext(unitName = "y")
EntityManager entityManager;

Или вы можете создать его вручную:

EntityManagerFactory emfA = Persistence.createEntityManagerFactory("x", properties);
EntityManagerFactory emfB = Persistence.createEntityManagerFactory("y", properties);

Подробнее см. в следующей ссылке: https://docs.oracle.com/html/E25034_01/usingmultipledbs.htm очень полезен, мне помогли!