13

新しいEJB3.1仕様では、EJBをpojoに注入することは可能ですか?EJB 3.0では、@ EJBアノテーションを使用してEJBを挿入できることは知っていますが、これは単純なpojoでは機能しませんでした。

そうでない場合は、新しいキーワードを単純に使用することはできないことを知っているので、JNDIでBeanを検索する必要があります。

4

4 に答える 4

29

新しいEJB3.1仕様では、EJBをpojoに注入することは可能ですか?EJB 3.0では、@ EJBアノテーションを使用してEJBを挿入できることは知っていますが、これは単純なpojoでは機能しませんでした。

JSR-299(Java ContextsおよびDependencyI njection)を使用する場合つまりPOJOCDI管理対象Beanである場合、POJOへのEJBの注入が可能です。その場合、次のことができます。

@Inject MyEJB service

ただし、これはEJB 3.1の機能ではなく、CDIに由来します。また、CDIを使用していない場合は、ルックアップを実行する必要があります。

于 2010-08-14T14:23:44.417 に答える
19

はい、JNDIルックアップを使用します。

POJOはあなたが作成したものであるため(私は推測します)、コンテナーは依存関係を注入する責任を負いません。

于 2010-01-07T16:22:35.227 に答える
7

新しいEJB仕様(3.1)には、EJBのグローバルJNDI名を指定する機能が追加されています。これは、どこでも、どのBeanでも使用できることを意味します。

ただし、EJB 3.1コンテナはPOJOを認識しないため、明示的なJNDIルックアップを実行する必要があります。

私が推測している唯一の例外は、POJOが実際にアプリケーションクライアントである場合です。この場合、EJBを含むフィールドが静的であれば、@EJBアノテーションを適用できます。そのような場合は、JavaEE5仕様全体のアプリケーションクライアントルールを確認する必要があります。

最後に、Java EE 6には、JSR-299が含まれているため、説明した内容が何らかの形で発生する可能性があります。まだスペックがわからないのでコメントできません。

これがすべてお役に立てば幸いです。

于 2010-01-07T18:19:36.130 に答える
1

アンマネージオブジェクトにEJBを注入できるかどうかも疑問です。詳細については、Weld(JSR 299リファレンス実装)のドキュメントを参照してください。

ただし、次のように、リポジトリまたはファクトリ内で手動で依存性注入を実行できます。

@Stateless
public PojoRespository {

  @Inject
  ResourceForPojos resource;
  @PersistenceContext
  private EntityManager em;

  public Pojo findById(Object id) {
    Pojo p = (Pojo) em.find(Pojo.class, id);
    p.setResource(resource); // injects resource
    return p;
  }

}

インジェクションを実行する方法が多数ある場合は、インターセプターを使用できます。

于 2010-01-08T13:43:57.657 に答える