it-swarm-ja.com

EJBでのCMTトランザクションとCDI Beanでの@Transactional

今日、JavaEE JSF Webアプリケーションを設計しているとします。一方で、CDI Beanのメソッドを@Transactionalにするか、または(セッションステートレス、またはシングルトン)EJBをCDI Beanに注入するかを選択でき、EJBのメソッドはCMTトランザクションの下で実行されます。 。あなたは何を好みますか?どうして?それは単に好みの問題ですか?

1
John Donn

CDIはデフォルトのプログラミングモデルである必要があり、その下にEJBをスタックするのはコストがかかるため、必要な場合にのみ行う必要があります。

したがって、ルールは次のとおりです。CDIにない機能を提供しない場合は、EJBを使用しないでください。

新しいアプリケーションを設計する場合は、最初に@TransactionalでCDI管理Bean(POJO)を使用し、特定のEJB機能(コンポーネントプール、非同期操作、リモート呼び出し)が必要な場合にのみEJBにします。

@TransactionalはJTA仕様でインターセプターバインディングとして定義されており、JTA実装はこのインターセプターを通じてEJBのCMTと同じサービスを提供します。