第5章 API アプローチを使用したプログラムによる JTA トランザクションの管理
UserTransaction
を注入して、トランザクション境界をプログラムで管理できます。以下の章では、API のアプローチを使用して JTA トランザクションを管理し、トランザクション境界を定義する方法を説明します。
5.1. API アプローチを使用したトランザクション境界の定義
その begin()
、commit()
、および rollback()
メソッドを呼び出すことにより、UserTransaction
を注入し、トランザクション境界を管理できます。
手順
UserTransaction
インターフェイスを注入します。src/main/java/org/acme/SantaClauseService.java
@ApplicationScoped public class SantaClausService { @Inject ChildDAO childDAO; @Inject SantaClausDAO santaDAO; @Inject UserTransaction transaction; }
トランザクションのデマケーションメソッドを使用してトランザクションを制御します。
src/main/java/org/acme/SantaClauseService.java
import javax.transaction.Transactional; import javax.inject.Inject; import javax.transaction.SystemException; import javax.transaction.UserTransaction; @ApplicationScoped public class SantaClausService { @Inject ChildDAO childDAO; @Inject SantaClausDAO santaDAO; @Inject UserTransaction transaction; public void getAGiftFromSanta(Child child, String giftDescription) { // some transaction work try { transaction.begin(); 1 Gift gift = childDAO.addToGiftList(child, giftDescription); santaDAO.addToSantaTodoList(gift); transaction.commit(); } catch(SomeException e) { // do something on Tx failure transaction.rollback(); 2 } } }
注記@Transactional
呼び出しによってトランザクションが開始するメソッドでUserTransaction
を使用することはできません。