2011-12-21 9 views
6

私はCDIとEJBとエンティティ境界コントロール(ECB)パターンを頭に入れようとしています。 ECBパターンの私の理解は、境界がトランザクション境界の始まりと終わりであるということです。さらに、CDIはEJBのようにトランザクションのサポートを提供しません。EJB対CDIと "エンティティ境界コントロール"パターン

ECBパターンを正常に実装したい場合、次のことが当てはまります。

  1. Iは、EJBの(すなわち@Stateless、@Stateful、@Singleton)との境界部分及びCDIまたはEJBの有するコントロール層を実装することができます。
  2. 私は境界とコントロールの部分をCDIで実装できますが、(http://smokeandice.blogspot.com/2009/12/cdi-and-declarative-transactions.html)のような境界でトランザクションのサポートを実装する
  3. 私はCDIで境界を実装することはできませんし、コントロール層でEJBの使用を開始します。

おかげ

+1

それでは、どういう疑問がありますか? –

+0

私が言いたい3つのポイントが正しいと思っていますか?または私の考えが間違っている場合。 – vcetinick

答えて

12

私はsucessfullyもっぱらコントローラの境界とCDIのためのEJBのを使用したJavaEE 6におけるECBのパターンを実装します。私の建築の典型的なスタックは、

  • ステートレスEJBの
  • CDIは、コントローラとして@Dependentスコープにビジネスロジックのための豆を管理
  • 境界としてRESTサービスを実装するためのJAX-RSのアノテーションで注釈さ
  • CDIは、管理対象Beanを使用していますデータベースと対話するためにJPAのEntityManagerを使用してデータアクセスオブジェクト
  • JPAエンティティBean

ため@DependentスコープでステートレスEJBのBOUNDAを形成しています常にデフォルトの@TransactionAttribute(REQUIRED)で注釈が付けられます。他のトランザクション属性は使用しません。そうすることで、境界とのすべてのやりとりが正確に1つのトランザクションで行われるようにすることができます。

CDIマネージドBeanの@Dependentスコープのみを使用することで、すべてのスレッドがそのBeanの独自のインスタンスを持つことを保証できます。したがって、CDIマネージドBeanに同時にアクセスするスレッドは複数ありません。そうすることで、典型的な並行性の問題を回避することができます。

重い重いバウンドのためのプールされたEJBと、アプリケーションの残りのための軽量CDIマネージドBeanを使用すると、私にとって非常によく機能します。