0

NetBeans に Java Web サービス モジュールと ejb モジュールがあります (エンタープライズ アプリケーションのすべての部分)。Web サービスは @EJB インジェクションを使用して ejb クラスを消費しています。ejb モジュール内には、エンタープライズ Bean ではない TransactionManager クラスがあります。ただの POJO クラスです。を使用して EntityManager を注入しようとしています

    @PersistanceContext(unitName = "testPU")
    EntityManager em;

ただし、em は常に null です。Bean から TransactionManager クラスを呼び出しています。Bean クラスで EntityManager 宣言を宣言すると、Bean クラスに問題なく挿入されます。しかし、POJO では常に null です。

EJB (バージョン JEE7 を使用) は初めてです。私を案内してもらえますか?

Shailendra への返信: 私の Bean と pojo は同じ jar ファイルにあり、bean.xml と persistence.xml があります。@Stateless と @Local を使用して、TransactionManager クラスを Bean として作成しようとしましたが、ejb クラスと TransactionManager クラスの間にいくつかの pojo クラスがあり、@EJB を使用してその親 pojo クラスから TransactionManager クラスにアクセスしようとしたときに、 TransactionManager transactionManager; このオブジェクトも null を返しました。

Shilendra様、返信ありがとうございます 以下は私のEJBクラスです

    @Stateless
    @Local(IMyService.class)
    public class MyService extends MyBase implements IMyService
    {
        MyComponent component = null;
        public void doSomething(X x)
        {
             component = new MyComponent();
             component.doSomething(x);
        }
    }

MyComponentとしてPOJOクラスがあります

    public class MyComponent extends MyBase implements IMyComponent
    {
        TransactionManager tManager = null;
        public void doSomething(X x)
        {
            tManager = new TransactionManager();
            tManager.doSomething(x);
        }
    }

そして、TransactionManager クラスは、PersistenceContext に対して依存性注入を実行したいクラスです

    public class TransactionManager extends MyBase implements ITransactionManager
    {
          @PersistenceContext(unitName="TestPU")
          EntityManager em;
          public void doSomething(X x)
          {
               em.persist(x);
          }
     }
4

3 に答える 3

1

POJO はコンテナーによって管理されません。Bean はコンテナーによって管理され、リソースの注入を担当します。

JNDI ルックアップを試して、コンテナが責任を負わない非管理カスタム クラスのリソースをルックアップできます。

于 2013-10-16T08:53:17.730 に答える