通常のコントロール メソッド、イベント セット メソッド、Web サービス コントロールのコールバック メソッドではトランザクションが使用可能です。このトピックでは、コントロールのトランザクション サポートの概要について説明します。
メソッド、イベント セット メソッド、コールバック メソッドのトランザクションの動作は、@TransactionAttribute アノテーションによって指定されます。以下に、@TransactionAttribute で修飾された Web サービス コールバックの例を示します。
public interface MyServiceControl extends ServiceControl { @ServiceControl.HttpSoapProtocol @ServiceControl.SOAPBinding(style = ServiceControl.SOAPBinding.Style.RPC, use = ServiceControl.SOAPBinding.Use.ENCODED) @EventSet(unicast=false) public interface Callback { @TransactionAttribute(TransactionAttributeType.REQUIRES) public void onCallback(java.lang.String message); } public void requestCallback(); }
上記の例の TransactionAttributeType.REQUIRES は、トランザクションがコールバック スレッド内で既に開始した場合はそのトランザクションを使用し、それ以外の場合はコールバック メソッドが呼び出される直前に新しいトランザクションを開始するということを意味します。処理の結果に応じて、トランザクションはコミット、ロールバック、ロールバックとしてマークされる (他の場所で開始した場合) のいずれかになります。
@TransactionAttribute には、6 つの有効な設定があります。
チェック済み例外 (RuntimeException ではなく Exception のサブクラスの例外) は、他の例外と処理が異なります。
アノテーション属性 rollbackOnCheckedException を使用して、チェック済み例外への応答を制御することができます。
@TransactionAttribute( rollbackOnCheckedException=<boolean> )
rollbackOnCheckedException が true の場合、コントロールのメソッドまたはコールバックによってチェック済み例外が発生すると、トランザクションはロールバック (またはロールバックとしてマーク) されます。デフォルトでは、rollbackOnCheckedException は false に設定されています。デフォルトの動作は、メソッドまたはコールバック呼び出しによってチェック済み例外が送出される場合でも、トランザクションは自動的にロールバックされないということです。コントロールのメソッドまたはコールバックの呼び出しによってシステム例外 (java.lang.RuntimeException と java.lang.Error のサブクラスの例外) が発生する場合、トランザクションは自動的にロールバック (またはロールバックとしてマーク) されます。