4.3.1.9. SubtransactionAwareResourceインタフェース

SubtransactionAwareResourceインタフェースのメソッドは、SubtransactionAwareResourceオブジェクトを登録してあるサブトランザクションのコミットあるいはロールバックを開始する時にWebOTX Transaction Service側から呼び出されます。

クラスorg.omg.CosTransactions.SubtransactionAwareResourceには次のメソッドがあります。

commit_subtransaction サブトランザクションのコミットを実施する
rollback_subtransaction サブトランザクションのロールバックを実施する

   
4.3.1.9.1. commit_subtransaction

名称 commit_subtransaction - サブトランザクションのコミットを実施する
形式
 package org.omg.CosTransactions;

 public interface SubtransactionAwareResource {
     public void commit_subtransaction (
         public org.omg.CosTransactions.Coordinator parent
     ); 
 }
説明 このオブジェクトがサブトランザクションに登録されており、かつそのサブトランザクションがコミット処理を開始した場合にこのメソッドが呼び出されます。
WebOTX Transaction Serviceが引数に親トランザクションと関連付けられたCoordinatorオブジェクトを提供します。

このメソッドではCORBA標準例外をthrowすることが可能です。その場合、WebOTX Transaction Serviceではサブトランザクションのコミットのリトライは実施せず、ロールバックを自動的に実施し、org.omg.CosTransactions.Current.commit、あるいはorg.omg.CosTransactions.Terminator.commitorg.omg.CORBA.TRANSACTION_ROLLEDBACK例外をthrowします。

コミットが正常に終了したサブトランザクションは、WebOTX Transaction Service側で自動的に親のトランザクションに関連付けます。つまり親(あるいは祖先)のトランザクションが完了するのにともなってこのトランザクションが完了します。そのため、親のトランザクションとの関連付けが失敗した場合、サブトランザクション自体は親のトランザクションが完了しても完了せずに残ってしまいます。これはWebOTX Transaction Serviceでの制限ですので、この場合は運用管理ツールから強制ロールバック、あるいは強制削除の処理を実施してください。

ここで注意することは、このSubtransactionAwareResourceオブジェクトをorg.omg.CosTransactions.Coordinator.register_subtran_awareメソッドでしか登録しなかった場合、このオブジェクトはサブトランザクションのコミットの完了と同時にそのトランザクションとの関連を失うことです。そのため祖先のトランザクションがコミットを開始した場合にこのSubtransactionAwareResourceオブジェクトのprepare、あるいはcommit_one_phaseメソッドは呼び出されません。それを呼び出したい場合は、サブトランザクションに関連づけられたたCoordinatorオブジェクトのregister_resourceメソッドを呼び出して、Resourceオブジェクトとしてトランザクションに登録しておく必要があります。SubtransactionAwareResourceインタフェースはResourceインタフェースを派生しているため、これが可能となります。
戻り値 ありません。
エラー CORBA標準例外をthrowすることが可能です。CORBA標準例外以外の例外はthrowしないでください。
関連項目 ありません。

   
4.3.1.9.2. rollback_subtransaction

名称 rollback_subtransaction - サブトランザクションのロールバックを実施する
形式
 package org.omg.CosTransactions;

 public interface SubtransactionAwareResource {
     public void rollback_subtransaction (); 
 }
説明 このオブジェクトがサブトランザクションに登録されており、かつそのサブトランザクションがロールバック処理を開始した場合、このメソッドが呼び出されます。

このメソッドではCORBA標準例外をthrowすることが可能です。その場合、WebOTX Transaction Serviceではサブトランザクションのロールバックのリトライなどは実施しません。

サブトランザクションのロールバック完了後、WebOTX Transaction Serviceはこのサブトランザクションに関連付けられたCoordinatorオブジェクトのregister_resourceメソッドを使って登録したResourceオブジェクトのrollbackメソッドを呼び出し、ロールバック処理を開始します。正常に終了した場合、このサブトランザクションは消滅します。サブトランザクションのコミットと異なり、祖先のトランザクションとは関連付けられません。
戻り値 ありません。
エラー CORBA標準例外をthrowすることが可能です。CORBA標準例外以外の例外はthrowしないでください。
関連項目 ありません。