|
|
トランザクションの中断と再開
場合によっては、実行中のトランザクションから一時的にプロセスを削除し、tpbegin() または tpresume() を呼び出して、そのプロセスで別のトランザクションを開始した方がよい場合もあります。たとえば、サーバがデータベースの中央イベント・ログに要求を記録する場合、トランザクションがアボートしてもログ処理をロールバックしたくない場合などです。
BEA Tuxedo システムでは、このような場合にクライアントまたはサーバでトランザクションを中断して再開する tpsuspend(3c) と tpresume(3c) という 2 つの関数が提供されています。この 2 つの関数を使用すると、次の処理を行うことができます。
トランザクションの中断
tpsuspend(3c) 関数を使用すると、現在のトランザクションを中断できます。tpsuspend() 関数の呼び出しには、次の文法を使用します。
int
tpsuspend(TPTRANID *t_id,long flags)
次の表は、tpsuspend() 関数の引数を示しています。
tpsuspend( ) 関数の引数
フィールド |
説明 |
---|---|
*t_id |
トランザクション識別子を指すポインタ。 |
flags |
現在使用されていません。将来使用するために予約されたフィールド。 |
未処理の非同期イベントを持つトランザクションを中断することはできません。トランザクションが中断すると、トランザクションがコミットまたはアボートされるまで、あるいはタイムアウトになるまで、中断前に行った変更はすべて保留状態のまま維持されます。 トランザクションの再開 現在のトランザクションを再開するには、次の文法を使用して tpresume(3c) 関数を呼び出します。 次の表は、tpresume() 関数の引数を示しています。 tpresume( ) 関数の引数
int
tpresume(TPTRANID *t_id,long flags)
フィールド |
説明 |
---|---|
*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(. . . );
}
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|