BEA Logo BEA Tuxedo Release 8.0

  BEA ホーム  |  イベント  |  ソリューション  |  パートナ  |  製品  |  サービス  |  ダウンロード  |  ディベロッパ・センタ  |  WebSUPPORT

 

   Tuxedo ホーム   |   C 言語を使用した BEA Tuxedo アプリケーションのプログラミング   |   先頭へ   |   前へ   |   次へ   |   目次

 


トランザクションの中断と再開

場合によっては、実行中のトランザクションから一時的にプロセスを削除し、tpbegin() または tpresume() を呼び出して、そのプロセスで別のトランザクションを開始した方がよい場合もあります。たとえば、サーバがデータベースの中央イベント・ログに要求を記録する場合、トランザクションがアボートしてもログ処理をロールバックしたくない場合などです。

BEA Tuxedo システムでは、このような場合にクライアントまたはサーバでトランザクションを中断して再開する tpsuspend(3c)tpresume(3c) という 2 つの関数が提供されています。この 2 つの関数を使用すると、次の処理を行うことができます。

  1. tpsuspend() を呼び出して、現在のトランザクションを一時的に中断します。

  2. 別のトランザクションを開始します。前述の例では、サーバのイベント・ログへ のエントリの書き込みが開始されます。

  3. 手順 2 で開始されたトランザクションをコミットします。

  4. tpresume() を呼び出して、元のトランザクションを再開します。

トランザクションの中断

tpsuspend(3c) 関数を使用すると、現在のトランザクションを中断できます。tpsuspend() 関数の呼び出しには、次の文法を使用します。

int
tpsuspend(TPTRANID *t_id,long flags)

次の表は、tpsuspend() 関数の引数を示しています。

tpsuspend( ) 関数の引数

フィールド

説明

*t_id

トランザクション識別子を指すポインタ。

flags

現在使用されていません。将来使用するために予約されたフィールド。

未処理の非同期イベントを持つトランザクションを中断することはできません。トランザクションが中断すると、トランザクションがコミットまたはアボートされるまで、あるいはタイムアウトになるまで、中断前に行った変更はすべて保留状態のまま維持されます。

トランザクションの再開

現在のトランザクションを再開するには、次の文法を使用して tpresume(3c) 関数を呼び出します。

int
tpresume(TPTRANID *t_id,long flags)

次の表は、tpresume() 関数の引数を示しています。

tpresume( ) 関数の引数

フィールド

説明

*t_id

トランザクション識別子を指すポインタ。

flags

現在使用されていません。将来使用するために予約されたフィールド。

トランザクションを中断したプロセス以外のプロセスからトランザクションを再開できますが、制限があります。この制限については、『BEA Tuxedo C リファレンス』 の tpsuspend(3c)tpresume(3c) を参照してください。

例: トランザクションの中断と再開

次のコード例は、あるトランザクションを中断し、別のトランザクションを開始してコミットし、最初のトランザシクョンを再開する方法を示しています。コードを簡単にするために、エラー・チェックは省略してあります。

トランザクションの中断と再開

DEBIT(SVCINFO *s)
{
TPTRANID t;
tpsuspend(&t,TPNOFLAGS); /* 実行中のトランザクションを中断 */

tpbegin(30,TPNOFLAGS); /* 別のトランザクションを開始 */
別のトランザクションで処理を実行
tpcommit(TPNOFLAGS); /* トランザクションをコミット */

tpresume(&t,TPNOFLAGS); /* 最初のトランザクションを再開 */

.
.
.
tpreturn(. . . );
}

 

先頭へ戻る 前のトピックへ 次のトピックへ