EJB3セッションBeanのコンストラクタを定義する方法
-
25-09-2019 - |
質問
Iは、特定のファサード/実装デザインパターンを尊重しようとEJB3モジュールを作成しています。私のファサードは完全にEJBがあってはならない。
エンティティBeanと、このエンティティの管理者であるセッションBean、私はこのモジュールの2つのクラスを持っています。管理者は、EntityManagerの属性が含まれています。
私はまた私のマネージャーBeanをインスタンス化し、工場を持っていますが、この工場では、マネージャの実装を認識していない(したがって、EJBについて知りません)。工場は唯一のプロパティファイルを使用してマネージャーのクラス名を取得することができます。工場はその後、マネージャのインスタンスを生成します。
Class lClass = Class.forName (lClassName);
corporateActionManager = (ICorporateActionManager) lClass.newInstance();
私の質問は:?私はその後、私の上司の実装では、コンストラクタを宣言し、することができ、そのコンストラクタの内部で、初期の私のEntityManager
通常、私はちょうどのEntityManager上記@PersistenceContext注釈を使用します:
@PersistenceContext(unitName = "my_persistence_unit")
private EntityManager em;
しかし、どうやらクラスを直接インスタンス化されるとき、これは動作しません。
私はこのような何かを試してみました。
public CorporateActionManagerImpl() {
Context jndi;
try {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("my_persistence_unit")
em = emf.createEntityManager();
} catch (NamingException e1) {
e1.printStackTrace();
}
}
しかし、その後、私はNoInitialContextExceptionを取得し、明らかに私のJNDIコンテキストが正しく初期化されていません。
ここでは誰も助け私をもらえますか?
おかげ
解決
私は、セッションBeanをカプセル化します別の「マネージャ」クラスを作成し、コンストラクタでそれを初期化することになりました。
これは別のレイヤーを追加していますが、最終的にそれが出てソートする方がはるかに簡単です。
所属していません StackOverflow