ログインセッションに応じてJavaEE6プロジェクト(JBoss7)のEntityManagerを選択する必要があります。 ユーザー "Peter"はdbPeterを使用し、ユーザーPaulはデータベースdbPaulを使用します。JavaEE6:ログイン情報でエンティティマネージャの永続ユニットを選択する方法
問題は今、どのようにして自動的にデータベース/永続性ユニットにバインドされるエンティティマネージャを生成できますか?
CDIを使用してEntityManagerを挿入します。だから私の最初のステップは、セッションからログイン情報を探してデータベースを選択するEntityManager用のプロデューサを持つことです。 それでは、このprducerでデータベース/永続コンテキストを選択するにはどうすればいいですか? Jboss7では永続ユニットのjndiエントリが見えなくなるため、jndiルックアップは考慮されません。
私は
@Produces
public EntityManager produceEM() {
EntityManagerFactory managerFactory = Persistence.createEntityManagerFactory("dbPaul");
return managerFactory.createEntityManager();
}
を使用してみましたが、これは
HHH000231で展開中失敗:スキーマのエクスポートの失敗:ます。java.sql.SQLException:あなたが管理するトランザクション中に自動コミットを設定することはできませんが!
emが注入された場所がほとんどトランザクション内ですので問題ありません。 アイデアは誰ですか?
まあ、EntityManagerFactoryに関しては正しいです。 私のケースでは、運用環境でどれくらいの持続ユニットが存在するのか分かりません。私たちには、各クライアント用のデータベースがありますが、展開されたWebアプリケーションは1つだけです。クライアントの数が増え、新しいクライアントごとにDAOが作成されないことは非常に確実です。私が必要とするのは、EntityManagerを永続ユニットにバインドする一般的な方法です。プリンシパル情報が使用する永続ユニットを指しています。 – martin
私はそれに応じて私の答えを編集 –
これは私のSQLExceptionの問題を解決していません。 "java.sql.SQLException:管理されたトランザクション中に自動コミットを設定できません!" – martin