EJB 3.1 @EJBインジェクションへのポジョ
質問
新しいEJB 3.1仕様では、EJBをPOJOに注入することは可能ですか? EJB 3.0では、 @ejbアノテーションを使用してEJBを注入できますが、これは単純なpojoでは機能しませんでした。
そうでない場合は、新しいキーワードを簡単に使用できないことがわかっているため、JNDIで豆を調べる必要があります。
解決
はい、JNDIルックアップを使用します。
あなたのpojoはあなたによって作成されているため(私は想定します)、コンテナは依存関係を注入する責任を負いません。
他のヒント
新しいEJB 3.1仕様では、EJBをPOJOに注入することは可能ですか? EJB 3.0では、 @ejbアノテーションを使用してEJBを注入できますが、これは単純なpojoでは機能しませんでした。
EJBからPojoへの注入が可能です もしも JSR-299(Java cONTEXTSと d省略 私noction)ieあなたのpojoがCDIマネージドビーンの場合。その場合、あなたはすることができます:
@Inject MyEJB service
しかし、これはEJB 3.1機能ではなく、CDIからの機能です。また、CDIを使用していない場合は、検索を行う必要があります。
新しいEJB仕様(3.1)は、EJBのグローバルJNDI名を指定する機能を追加します。これは、どこでも、あらゆる豆でそれらを使用できることを意味します。
ただし、EJB 3.1コンテナはPojoについて知らないため、明示的なJNDI検索を行う必要があります。
私が推測している唯一の例外は、あなたのPojoが本当にアプリケーションクライアントである場合、その場合、EJBを含むフィールドが静的であることを提供する場合、@EJBアノテーションを適用できます。それがあなたの状況の場合は、Java EE 5全体の仕様のアプリケーションクライアントルールをチェックアウトする必要があります。
最後に、JSR-299が含まれているJava EE 6は、何らかの形で発生することを許可する可能性があります。スペックがまだわからないので、コメントできません。
これがすべて役立つことを願っています。
私もできるのだろうか EJBを管理されていないオブジェクトに注入します. 。を参照してください 溶接 (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;
}
}
注射を行う必要がある多くの方法がある場合は、インターセプターを使用できます。