質問

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をカプセル化します別の「マネージャ」クラスを作成し、コンストラクタでそれを初期化することになりました。

これは別のレイヤーを追加していますが、最終的にそれが出てソートする方がはるかに簡単です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top