1

こんにちは、私はOSGiユーザー認証を担当するバンドルをプログラミングしています。設計上の理由から、複数のデータベース スキーマに対してクエリを実行する必要があります (これらのスキーマは動的に作成または削除できます)。私はMySQLストレージエンジンとして実行しています。

どうにかして、これらのスキーマのオンデマンド エンティティ マネージャーを作成できるようにする必要がありますが、うまくいきませんでした。これが私が試したもので、必要なものに近づきました:

実際に、デフォルト スキーマへのデータベース接続を確立できる JTA データ ソースを使用して永続化ユニット (Eclipselink) を作成します。ただし、プロパティをオーバーライドしようとすると、javax.persistence.jdbc.url. ただし、常にデフォルトのスキーマを指し続けます。

プロパティを正しくオーバーライドしていないか、JTA データソース プロパティを からEntityManagerに変更できないと思いますEntityManager。EntityManagers を作成する方法は次のとおりです。

Map<String, String> dbProps = new HashMap<String, String>();            
dbProps.put("javax.persistence.jdbc.url","jdbc:mysql://mydomain:3306/mydynamicdb);                                                        
EntityManagerFactory fact = Persistence.createEntityManagerFactory("myPersistenceUnit", dbProps); 
EntityManager myEM = fact.createEntityManager();  

最後に、それらはすべてデフォルトのスキーマを使用し続けるため、私の質問は次のとおりです。

  1. これは、動的な EntityManager 処理の効率的なアプローチですか? もしそうなら、スキーマプロパティを効果的にオーバーライドするにはどうすればよいですか?
  2. オーバーライド以外の代替手段はありますか?

ご案内を差し上げますので、よろしくお願いいたします。

4

2 に答える 2

2

OSGi で EclipseLink を使用する場合は、EclipseLink をラップするGemini JPAプロジェクトを使用し、PU バンドル用の EntityManagerFactory および EntityManagerFactoryBuilder サービスを作成して登録する必要があります。PU 間で jdbc 接続を共有したい場合は、Gemini DBAccessが提供する JDBC サービスを使用できます。

于 2013-06-17T18:37:01.300 に答える