サーバオブジェクト,またはクライアントアプリケーションに,OTSが提供するポリシーを設定すると,トランザクションコンテキストの暗黙的プロパゲーションを制御できます。
(1) OTSが提供するポリシー
OTSが提供するポリシーには,サーバ側で設定するポリシー(OTSPolicy,InvocationPolicy)と,クライアント側で設定するポリシー(NonTxTargetPolicy)があります。
表3-3 OTSPolicyの値の意味
OTSPolicyの値 | 意味 |
---|---|
ADAPTS | この値のOTSPolicyを設定したサーバは,間接コンテキスト管理を使用してトランザクション処理を開始しているクライアント,および間接コンテキスト管理を使用しないでトランザクション処理を開始しているクライアントのどちらでも呼び出せます。前者のクライアントは,サーバにトランザクションコンテキストを暗黙的にプロパゲーションできます。後者のクライアントは,サーバに通常の呼び出し※をすることができます。 |
FORBIDS (デフォルト値) | この値のOTSPolicyを設定したサーバは,トランザクションコンテキストの暗黙的プロパゲーションを受け入れません。間接コンテキスト管理を使用しないでトランザクション処理を開始しているクライアントの場合,クライアントはサーバに通常の呼び出し※をすることができます。間接コンテキスト管理を使用してトランザクション処理を開始しているクライアントの場合,クライアントに設定されているNonTxTargetPolicyの値によって,次に示すどちらかの動作をします。
|
REQUIRES | この値のOTSPolicyを設定したサーバは,トランザクションコンテキストの暗黙的プロパゲーションが必要です。間接コンテキスト管理を使用してトランザクション処理を開始しているクライアントの場合,クライアントはサーバにトランザクションコンテキストを暗黙的にプロパゲーションします。間接コンテキスト管理を使用しないでトランザクション処理を開始しているクライアントの場合,クライアントがサーバを呼び出したときに,TRANSACTION_REQUIRED例外が発生し,サーバを呼び出せません。 |
表3-4 InvocationPolicyの値の意味
InvocationPolicyの値 | 意味 |
---|---|
EITHER (デフォルト値) | この値のInvocationPolicyを設定したサーバは,中間ルータを介した呼び出し,および介さない呼び出しのどちらでも呼び出せます。 |
SHARED | この値のInvocationPolicyを設定したサーバは,中間ルータを介さない呼び出しが必要です。中間ルータを介した呼び出しを行うと,サーバ呼び出し時にTRANSACTION_MODE例外が発生し,サーバを呼び出せません。 |
UNSHARED | この値のInvocationPolicyを設定したサーバは,中間ルータを介した呼び出しが必要です。中間ルータを介さない呼び出しを行うと,サーバ呼び出し時にTRANSACTION_MODE例外が発生し,サーバを呼び出せません。 |
表3-5 NonTxTargetPolicyの値の意味
NonTxTargetPolicyの値 | 意味 |
---|---|
PERMIT (デフォルト値) | この値のNonTxTargetPolicyを設定したクライアントは,FORBIDSのOTSPolicyが設定されているサーバに対し,呼び出し方法を,自動的に通常の呼び出し※に切り替えます。間接コンテキスト管理を使用してトランザクション処理を開始しているクライアントは,通常の呼び出しに切り替えられ,サーバを呼び出せます。 この呼び出しでは,トランザクションコンテキストが暗黙的にプロパゲーションされないことに注意してください。 |
PREVENT | この値のNonTxTargetPolicyを設定したクライアントは,FORBIDSのOTSPolicyが設定されているサーバに対し,呼び出し方法を,通常の呼び出し※に切り替えません。間接コンテキスト管理を使用してトランザクション処理を開始しているクライアントが,サーバを呼び出すと,INVALID_TRANSACTION例外が発生します。 この値を設定すると,クライアントは,トランザクションコンテキストの暗黙的プロパゲーションができないサーバをチェックすることができます。 |
(2) ポリシーとトランザクションコンテキストの暗黙的プロパゲーションとの関係
(1)で説明したように,OTSPolicyおよびNonTxTargetPolicyを設定すると,サーバ呼び出し時にトランザクションコンテキストの暗黙的プロパゲーションを制御できます。
ポリシーの設定と,サーバ呼び出し時のトランザクションコンテキストの暗黙的プロパゲーションの可否の対応を,次の二つの表に示します。
表3-6 暗黙的プロパゲーションの可否:間接コンテキスト管理を使用してトランザクション処理を開始しているクライアントによる呼び出しの場合
NonTxTargetPolicyの値 | OTSPolicyの値 | ||
---|---|---|---|
ADAPTS | FORBIDS(デフォルト) | REQUIRES | |
PERMIT (デフォルト) | ○ | △ | ○ |
PREVENT | ○ | × (INVALID_TRANSACTION例外) | ○ |
表3-7 暗黙的プロパゲーションの可否:間接コンテキスト管理を使用しないでトランザクション処理を開始しているクライアントによる呼び出しの場合
NonTxTargetPolicyの値 | OTSPolicyの値 | ||
---|---|---|---|
ADAPTS | FORBIDS (デフォルト) | REQUIRES | |
PERMIT (デフォルト) | △ | △ | × (TRANSACTION_REQUIRED例外) |
PREVENT | △ | △ | × (TRANSACTION_REQUIRED例外) |
間接コンテキスト管理を使用してトランザクション処理を開始しているクライアントは,ADAPTS,またはREQUIRESのOTSPolicyが設定されたサーバに,トランザクションコンテキストを暗黙的にプロパゲーションできます。間接コンテキスト管理を使用しないでトランザクション処理を開始しているクライアントは,ADAPTS,またはFORBIDSのOTSPolicyが設定されたサーバに,通常の呼び出し(トランザクションコンテキストを暗黙的にプロパゲーションしない呼び出し)を行うことができます。
(3) トランザクション処理に必要なポリシーの設定
トランザクション処理を行うためには,OTSPolicy,NonTxTargetPolicyを設定する必要があります。
(a) 暗黙的プロパゲーションによるトランザクション処理を行う場合
(b) 明示的プロパゲーションによるトランザクション処理を行う場合
明示的プロパゲーションによるトランザクション処理を行う場合,サーバにFORBIDS(デフォルト)のOTSPolicyを設定してください。また,クライアントにPERMIT(デフォルト)のNonTxTargetPolicyを設定してください。
(4) 設定可能なポリシーの組み合わせ
OTSPolicyとInvocationPolicyの両方を設定する場合,値の組み合わせによって,設定できるものとできないものがあります。OTSPolicyとInvocationPolicyの組み合わせを次の表に示します。
表3-8 設定可能なOTSPolicyとInvocationPolicyの値の組み合わせ
OTSPolicyの値 | InvocationPolicyの値 | |||
---|---|---|---|---|
EITHER | SHARED | UNSHARED | 設定なし | |
ADAPTS | × | ○ | × | ○ |
FORBIDS | × | ○ | × | ○ |
REQUIRES | ○ | ○ | ○ | ○ |
設定なし | × | ○ | × | ○ |
値がSHARED,または設定されていないInvocationPolicyの場合,すべての値のOTSPolicyが設定できます。値がEITHERまたはUNSHAREDのInvocationPolicyの場合,REQUIRESのOTSPolicyだけ設定できます。設定できない組み合わせにすると,InvalidPolicy例外が発生します。