J2EE プラットフォームでは、プログラマチックまたは宣言型のいずれかのトランザクション区分アプローチを使用して、ご使用のアプリケーション内のトランザクションを管理します。プログラマチック・アプローチはコンポーネント管理トランザクションで、宣言型トランザクション区分アプローチはコンテナー管理トランザクションです。
J2EE アプリケーションは、JTA javax.transaction.UserTransaction インターフェースを使用して、保護リソースへの一連の変更に対して、プログラマチックにトランザクション境界を定めます。コンポーネント管理トランザクションは、サーブレットと EJB 環境の両方で使用できます。 EJB の場合、そのデプロイメント記述子内のトランザクション属性を、TX_BEAN_MANAGED に設定します。
通常、トランザクションは、UserTransaction.begin() 呼び出しから始まります。アプリケーション・コンポーネントは、変更をコミットする準備が完了すると、UserTransaction.commit() 呼び出しを実行して、変更を調整およびコミットします。アプリケーション・コンポーネントがトランザクションをロールバックしなければならない場合には、UserTransaction.rollback() を呼び出し、すべての変更をバックアウトします。例:
// Get User Transaction javax.transaction.UserTransaction transaction = ejbcontext.getUserTransaction(); // Start transaction transaction.begin(); // Make changes to the protected resources. // For example, use the J2EE/CA's CCI Interaction interface // to submit changes to an EIS system(s) interaction.execute(interactionSpec, input, output); if (/* decide to commit */) { // commit the transaction transaction.commit(); } else { /* decide to roll back */ // rollback the transaction transaction.rollback(); }
コンテナー管理トランザクションは、EJB 環境でのみ使用可能です。EJB は、デプロイメント記述子 (TX_REQUIRED など) のトランザクション属性を通して、宣言的にコンテナー管理トランザクションを指定します。コンテナー管理トランザクションは、EJB コンテナーによって管理されます。コンテナーは、EJB コンポーネントの代わりに、適切なメソッド (開始、コミット、またはロールバックなど) を呼び出します。この宣言型のアプローチは、EJB におけるプログラミング呼び出しを単純化します。
関連資料: J2EE アーキテクチャーおよび JTA 仕様について、詳しくは、http://java.sun.com/j2ee/docs.html を参照してください。