すべてのプロジェクトで使用するライブラリをいくつか作成しました。このライブラリは、すべてのシステムの基本機能(ログイン、一部の管理など)を提供します。ただし、アプリケーション自体は別のデータベースを使用できます。
私たちが行ったことは、2つの永続ユニットを使用してPersistence.xmlを作成することでした。そして、すべてのコアライブラリエンティティを「LN-model.jar」というjarにパッケージ化し、アウトテストアプリのすべてのエンティティを「App-model.jar」にパッケージ化します。しかし、何らかの理由で、次のメッセージが表示されます。
[gfdeploy#/ Users/zkropotkine/WORK/SeguridadCore/dist/gfdeploy/SeguridadCore-war_warというモジュールのスコープ内で、persistence-context-ref-name [xxxxlistener.InicializadorListener/em]に対応する永続性ユニットを解決できませんでした]。アプリケーションを確認してください。
これが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をjarに入れて、Enterprise Project(EAR)に追加します。
問題は、JPAがどちらを使用する永続性ユニットであるかを認識していないことです。永続ユニットが1つしかない場合、この問題は発生しません。修正するには、次のようにします。
Ejbに永続性ユニットを指定する必要があります:@PersistenceContext(unitName = "...")
注釈を追加できます。
@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 非常に便利で、助けてくれました。