0

特定のファサード/実装デザインパターンを尊重しようとする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コンテキストが正しく初期化されていません。

誰かがここで私を助けてくれますか?

ありがとう

4

1 に答える 1

0

最終的に、セッションBeanをカプセル化し、コンストラクターで初期化する別の「マネージャー」クラスを作成しました。

別のレイヤーを追加しますが、最終的には整理がはるかに簡単になります。

于 2010-09-27T13:54:29.427 に答える