Hitachi

TPBroker Version 5 トランザクショナル分散オブジェクト基盤 TPBroker ユーザーズガイド


3.1.8 ポリシーの設定

サーバオブジェクト,またはクライアントアプリケーションに,OTSが提供するポリシーを設定すると,トランザクションコンテキストの暗黙的プロパゲーションを制御できます。

〈この項の構成〉

(1) OTSが提供するポリシー

OTSが提供するポリシーには,サーバ側で設定するポリシー(OTSPolicy,InvocationPolicy)と,クライアント側で設定するポリシー(NonTxTargetPolicy)があります。

OTSPolicy

OTSPolicyは,サーバ側で設定するポリシーです。OTSPolicyを設定すると,サーバは,トランザクションコンテキストの暗黙的プロパゲーションを必要とするかどうかを,クライアントに宣言できます。OTSPolicyを設定していないサーバは,値がFORBIDS(デフォルト値)のOTSPolicyが設定された場合と同じです。

OTSPolicyには,ADAPTS,FORBIDS,およびREQUIRESの三つの値があります。値の意味を次の表に示します。

表3‒3 OTSPolicyの値の意味

OTSPolicyの値

意味

ADAPTS

この値のOTSPolicyを設定したサーバは,間接コンテキスト管理を使用してトランザクション処理を開始しているクライアント,および間接コンテキスト管理を使用しないでトランザクション処理を開始しているクライアントのどちらでも呼び出せます。前者のクライアントは,サーバにトランザクションコンテキストを暗黙的にプロパゲーションできます。後者のクライアントは,サーバに通常の呼び出しをすることができます。

FORBIDS

(デフォルト値)

この値のOTSPolicyを設定したサーバは,トランザクションコンテキストの暗黙的プロパゲーションを受け入れません。間接コンテキスト管理を使用しないでトランザクション処理を開始しているクライアントの場合,クライアントはサーバに通常の呼び出しをすることができます。間接コンテキスト管理を使用してトランザクション処理を開始しているクライアントの場合,クライアントに設定されているNonTxTargetPolicyの値によって,次に示すどちらかの動作をします。

  • INVALID_TRANSACTION例外が発生し,サーバを呼び出せません。

  • 通常の呼び出しを行います。

REQUIRES

この値のOTSPolicyを設定したサーバは,トランザクションコンテキストの暗黙的プロパゲーションが必要です。間接コンテキスト管理を使用してトランザクション処理を開始しているクライアントの場合,クライアントはサーバにトランザクションコンテキストを暗黙的にプロパゲーションします。間接コンテキスト管理を使用しないでトランザクション処理を開始しているクライアントの場合,クライアントがサーバを呼び出したときに,TRANSACTION_REQUIRED例外が発生し,サーバを呼び出せません。

注※

トランザクションコンテキストを暗黙的にプロパゲーションしない呼び出しです。

InvocationPolicy

InvocationPolicyは,サーバ側で設定するポリシーです。InvocationPolicyを設定すると,サーバは,中間ルータを介した呼び出しを必要とするかどうかを,クライアントに宣言できます。InvocationPolicyを設定していないサーバは,値がEITHER(デフォルト値)のInvocationPolicyが設定された場合と同じです。

InvocationPolicyには,EITHER,SHARED,およびUNSHAREDの三つの値があります。値の意味を次の表に示します。

TPBroker Version 5は,中間ルータを介したサーバ呼び出しをサポートしていません。したがって,TPBroker Version 5で作成するサーバには,InvocationPolicyを設定する必要はありません。

表3‒4 InvocationPolicyの値の意味

InvocationPolicyの値

意味

EITHER

(デフォルト値)

この値のInvocationPolicyを設定したサーバは,中間ルータを介した呼び出し,および介さない呼び出しのどちらでも呼び出せます。

SHARED

この値のInvocationPolicyを設定したサーバは,中間ルータを介さない呼び出しが必要です。中間ルータを介した呼び出しを行うと,サーバ呼び出し時にTRANSACTION_MODE例外が発生し,サーバを呼び出せません。

UNSHARED

この値のInvocationPolicyを設定したサーバは,中間ルータを介した呼び出しが必要です。中間ルータを介さない呼び出しを行うと,サーバ呼び出し時にTRANSACTION_MODE例外が発生し,サーバを呼び出せません。

NonTxTargetPolicy

NonTxTargetPolicyは,クライアント側で設定するポリシーです。NonTxTargetPolicyは,次に示す条件を満たした状況でサーバを呼び出した場合に有効になります。

  • クライアントが,サーバ呼び出し前に,間接コンテキスト管理を使用してトランザクション処理を開始している。

  • サーバに,値がFORBIDSのOTSPolicyが設定されているか,またはOTSPolicyが設定されていない。

NonTxTargetPolicyを設定すると,クライアントは,サーバのOTSPolicy(値はFORBIDS)に従って,トランザクションコンテキストを暗黙的にプロパゲーションする呼び出しから,通常の呼び出し(トランザクションコンテキストを暗黙的にプロパゲーションしない呼び出し)に切り替えるか,切り替えないかを決定できます。NonTxTargetPolicyを設定していないクライアントは,値がPERMIT(デフォルト値)のNonTxTargetPolicyが設定された場合と同じです。

NonTxTargetPolicyには,PERMIT,およびPREVENTの二つの値があります。値の意味を次の表に示します。

表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) 暗黙的プロパゲーションによるトランザクション処理を行う場合

サーバ側の設定(OTSPolicyの設定)

暗黙的プロパゲーションによるトランザクション処理を行う場合,サーバに値がADAPTSまたはREQUIRESのOTSPolicyを設定します。

サーバにADAPTSのOTSPolicyを設定した場合,間接コンテキスト管理を使用しないでトランザクション処理を開始しているクライアントも,サーバを呼び出せます。REQUIRESのOTSPolicyを設定した場合,間接コンテキスト管理を使用してトランザクション処理を開始しているクライアントだけがサーバを呼び出せます。

間接コンテキスト管理を使用しないでトランザクション処理を開始しているクライアントも受け付けたいサーバには,ADAPTSのOTSPolicyを設定してください。間接コンテキスト管理を使用してトランザクション処理を開始しているクライアントだけを受け付けたいサーバには,REQUIRESのOTSPolicyを設定してください。

クライアント側の設定(NonTxTargetPolicyの設定)

クライアントが呼び出すすべてのサーバに,ADAPTSまたはREQUIRESのOTSPolicyを設定している場合,NonTxTargetPolicyを設定する必要はありません。しかし,クライアントが呼び出すサーバの中に,FORBIDSのOTSPolicyを設定しているサーバが存在する可能性がある場合,NonTxTargetPolicyの設定について考慮する必要があります。

トランザクションコンテキストの暗黙的プロパゲーションによる呼び出しだけを行いたいクライアントは,FORBIDSのOTSPolicyを設定しているサーバを呼び出さないよう,PREVENTのNonTxTargetPolicyを設定してください。FORBIDSのOTSPolicyを設定しているサーバに対する呼び出しを,自動的に通常の呼び出しに切り替えたい場合,PERMITのNonTxTargetPolicyを設定してください。

(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例外が発生します。