web-dev-qa-db-ja.com

永続性ユニットを動的に変更する-JPA

永続性.xmlの永続性ユニットは、アプリケーションのビルド中に作成されます。実行時にデータベースのURLを変更したいので、実行時に永続性ユニットを変更する方法はありますか?配布後、事前にバインドされたデータベース以外の別のデータベースを使用することになりました。

EclipseLink(JPA 2.1)を使用しています

14
N K

永続性ユニットファイル(Persistence.xml)をそのまま保持します。次のように、その中のプロパティをオーバーライドできます。

EntityManagerFactory managerFactory = null;
Map<String, String> persistenceMap = new HashMap<String, String>();

persistenceMap.put("javax.persistence.jdbc.url", "<url>");
persistenceMap.put("javax.persistence.jdbc.user", "<username>");
persistenceMap.put("javax.persistence.jdbc.password", "<password>");
persistenceMap.put("javax.persistence.jdbc.driver", "<driver>");

managerFactory = Persistence.createEntityManagerFactory("<current persistence unit>", persistenceMap);
manager = managerFactory.createEntityManager();
31
N K

Persistence.createEntityManagerFactory(Map)を使用してプロパティを渡し、データベースのURLやその他の設定を選択できます。

2
James

長期間有効なセッションアーキテクチャでは、プラグインフレームワークを作成する必要があります。

したがって、別のThread-GroupとClass-Repositoryを作成する必要があります。

これはあなたのクラスローダーツリーかもしれません

  • System-Class-Loader(通常はURLClassLoaderで、エンティティが含まれています)
    • JPA-クラスローダー
      • jpa.jarpersistence.xmlでロードし、Application-Class-LoaderからDatabase-Configurationを指定します
      • EntityManager/session-factoryをインスタンス化します。
      • データベースでの作業に必要なプラグインをロードします。単体テスト(; D)とプラグイン統合テストを実行します。
0
Peter Rader