0

Maven フレームワークを使用してプロジェクトをビルドしています。EJB 3.0 が EJB 仕様です。EJB インターフェース A と、それに対応する A を実装する EJB クラス B があります。クラス B の本体を以下に示します。

@Stateless
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
class B implements A{

      @PersistenceContext(unitName = "Draco-PU", type = PersistenceContextType.TRANSACTION)
  EntityManager entityManager;  

      //called post construct
      @PostConstruct
      public init(){

            //body of init method

      }

同じプロジェクトの別のパッケージに非 EJB クラスがあります。このクラスでクラス B をインスタンス化し、init() メソッドと他のアノテーションが自動的に参照され、EJB クラスの他のメソッドを明示的に呼び出すことができるようにします。助けてください。

4

1 に答える 1

1

そんなことはできません。NonEJBClass.someMethod() の呼び出し元が A を someMethod に渡す必要があるか (呼び出し元がそれを挿入または検索したため)、または someMethod が検索自体を行う必要があります (おそらく「java:」名前空間の 1 つで)。それ以外の場合は、Bean を変更して、管理されていないクライアントで使用できるようにする必要があります。

豆:

@Stateless
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
class B implements A {
    private EntityManager entityManager;  

    @PersistenceContext(unitName = "Draco-PU", type = PersistenceContextType.TRANSACTION)
    public void setEntityManager(EntityManager em) {
        entityManager = em;
    }

    @PostConstruct
    public init() {
        //body of init method
    }
}

管理されていないクライアント:

B obj = new B();
obj.setEntityManager(...);
obj.init();

そのため、コンテナーにオブジェクトの作成を許可する (そしてコンテナーがすべての注入と初期化を処理する) か、自分でオブジェクトを作成します (その後、すべてのセッター呼び出しと初期化を処理します)。

于 2012-10-24T21:10:29.153 に答える