1º
JDBCコードを使用する場合、JTAがトランザクションに使用されることを意味しますか?
と
ローカル トランザクションでさえグローバル トランザクションとして実装されるということですか?
EJB コンテナーは、分散トランザクションが不要なエンタープライズ Bean の最適化手法として、リソース マネージャーのローカル トランザクションを使用できます。
宣言型またはプログラムによるトランザクション境界を使用する場合は、次のことを行うことをお勧めします。
- エンタープライズ Bean クラスで Resource アノテーションを使用するか、エンタープライズ Bean のデプロイメント記述子で resource-ref 要素を使用して、リソースを宣言します。
(セッターメソッドまたはメンバーフィールド)のようなもの
// mappedName points to a global mapping name
@Resource(mappedName="java:/DefaultDS")
private javax.sql.DataSource ds;
そして、ビジネスロジックメソッド内
セッターまたはメンバー フィールドの UserTransaction を宣言する
@Resource
private UserTransaction ut;
と
ut.beginTransaction();
Connection conn = ds.getConnection();
ut.commit();
次のことに注意してください
ステートフル セッション Bean を使用している場合は、PrePassivate コールバック メソッドで次の操作を行います。
- PrePassivate メソッドですべての JDBC 接続を閉じ、接続を格納するインスタンスのフィールドを null に割り当てます。
よろしく、