3.7.2.4.5 制限

このメソッドがコールされたときにオブジェクトがトランザクションに関与する場合、オブジェクトが呼び出された理由に基づいて、実行可能な処理のタイプが制約されます。オブジェクトがトランザクションに関与していた場合、アクティブ化ポリシーがtransactionで、呼出しのreasonコードは以下のいずれかです。

DR_TRANS_ABORTED
このメソッドでは、CORBAオブジェクトを呼び出せません。tpcall()は許可されません。トランザクションを一時停止したり開始したりすることはできません。
DR_TRANS_COMMITTING
このメソッドでは、CORBAオブジェクトを呼び出せません。tpcall()は許可されません。トランザクションを一時停止したり開始したりすることはできません。

こうした制約がある理由は、トランザクション・バウンドのアクティブ化ポリシーを設定されたオブジェクトの非アクティブ化が、トランザクションのトランザクション・マネージャからTPフレームワークに対する呼出しによって制御されるからです。reasonコードDR_TRANS_COMMITTINGで呼出しが行われた場合、トランザクション・マネージャは2フェーズ・コミットのフェーズ1(準備)を実行しています。この段階では、トランザクションを一時停止する呼び出し、または新しいトランザクションを開始する呼出しを行うことはできません。別のプロセス内のCORBAオブジェクトを呼び出すにはそのプロセスがトランザクションに参加する必要があり、トランザクション・マネージャはすでに準備フェーズを実行しているので、この呼出しを行うとエラーが発生します 1 。トランザクションに関与していないCORBAオブジェクトを呼び出すには、そのトランザクションを一時停止する必要があるので、これもエラーの原因となります。同じことはtpcall()にもあてはまります。

同様に、reasonコードDR_TRANS_ABORTEDでの呼出しが行われた場合、トランザクション・マネージャはすでに中止中です。トランザクション・マネージャが中断中の場合、トランザクションを一時停止したり、新しいトランザクションを開始したりすることはできません。この制約は、DR_TRANS_COMMITTINGに関しても適用されます。