19

リクエストスコープのCDIBeanをステートレスセッションBeanに注入することは可能ですか?

私は関連する質問をし、@Stateless質問への特定のCDI@RequestScopedはそれ自身の投稿に値すると思いました。

EJBメソッド/@RequestScopedと@Statelessの間で状態を渡す

また、JMS @MessageDriven Beanについても同様の質問をしました。基本的に、@Statelessについても同じことを知りたいと思います。

@MessageDrivenBeanへの@RequestScopedCDIインジェクション

4

1 に答える 1

34

言及したことを絶対に実行@RequestScopedし、@StatelessセッションBeanとBeanでBeanを使用でき@MessageDrivenます。これはCDI仕様とTCKのコア部分であり、ポータブルであることが保証されています。

MDBに関する注意

@StatelessBeanを使用するBeanのテストはありますが、 BeanがBeanを参照できること@RequestScopedを保証するテストはないことに注意してください。これは単なる見落としであり、Java EE7TCKではすでに修正されています。したがって、MDBの場合に機能しない場合は、それがあなたのせいではない可能性があることに注意してください:)@MessageDriven@RequestScoped

回避策は、MDBを、、などの任意の種類のSessionBeanに委任するだけ@Stateless@Stateful@Singletonすべてに@RequestScopedテストがあります。

EJB自体をスコープ化する

@Stateless@Singletonおよびを@MessageDriven介してスコープ参照を挿入することはできますが、または他のスコープ@Injectにすることはできません @RequestScopedモデルだけが@Statefulスコープをサポートするのに十分な柔軟性を備えています。@Statefulつまり、 Beanクラス自体@RequestScoped@SessionScoped、などの注釈を付けることができます。

簡単に言えば@Stateless@Singletonすでに「スコープ」を修正しています。 @Singletonそれが存在する場合、本質的@ApplicationScopedに、そして@Statelessおそらく、のようないくつかの構成されたスコープになるでしょう@InvocationScoped。Beanのライフサイクルは、@MessageDrivenそれを駆動するコネクタに完全に依存しているため、ユーザー定義のスコープを持つことも許可されていません。

于 2012-01-03T23:30:43.433 に答える