11

MySQLデータベースに接続する依存性注入を備えたJPA 2を使用するかなり標準的なJava EE6 Webアプリケーションがあり、すべて正常に動作しています。私が今やりたいことは、このアプリケーションを、クライアント サイトにインストールした他のアプリケーションのデータベースと対話させることです。これは、基本的に、他のアプリケーションのインストールに対する単一の制御ポイントとして機能します。

私が苦労しているのは、他のデータベースとの対話をどのように実行するのが最善かということです。理想的には、インストールごとに EntityManager を作成し、JPA を使用して対話したいのですが、これを設定する方法がわかりません。たとえば、1 つのアプリケーション タイプの 5 つのインストール (したがってデータベース) があり、マスター コントロール アプリケーションは実行時まで他のインストールについて認識しません。これにより、EntityManager の依存性注入やすべての自動トランザクション デマケーションなどの使用が妨げられているようです。別のオプションは、DataSource を作成し、対話を手動で行うことです。柔軟性はありますが、これには明らかに多くの労力が必要です。

ですから、私の質問は、この問題にどのように取り組むのが最善でしょうか?

4

1 に答える 1

7

私もこれを調べていますが、これまでのところ、それを行う方法を説明する次のブログ投稿を見つけました http://ayushsuman.blogspot.com/2010/06/configure-jpa-during-run-time-dynamic .html :

persistance.xml からすべてのデータベース プロパティを削除しました

<persistence>
<persistence-unit name="jpablogPUnit" transaction-type="RESOURCE_LOCAL">
<class>com.suman.Company</class>
</persistence-unit>
</persistence>

entityManager を構成している Java ファイルを変更しました。この場合は TestApplication.java です。

package com.suman;

import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.apache.log4j.Logger;

/**
* @author Binod Suman
*/
public class TestApplication {

Logger log = Logger.getLogger(TestApplication.class);
public static void main(String[] args) {
TestApplication test = new TestApplication();
test.saveCompany();
}

public void saveCompany(){
log.info("Company data is going to save");
EntityManagerFactory emf;
Map properties = new HashMap();
properties.put("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
properties.put("hibernate.connection.url", "jdbc:mysql://localhost:3306/sumandb");
properties.put("hibernate.connection.username", "root");
properties.put("hibernate.connection.password", "mysql");
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
properties.put("hibernate.show-sql", "true");
//emf = Persistence.createEntityManagerFactory("jpablogPUnit");
emf = Persistence.createEntityManagerFactory("jpablogPUnit",properties);
EntityManager entityManager = (EntityManager) emf.createEntityManager();
entityManager.getTransaction().begin();
Company company = new Company(120,"TecnoTree","Espoo, Finland");
entityManager.persist(company);
entityManager.getTransaction().commit();
log.info("Company data has been saved");
}

}
于 2011-03-08T15:50:01.960 に答える