カプセル化されたアサーション

カプセル化されたアサーションでは、任意のポリシー フラグメントを、入力値を受け入れて出力値を設定する自己完結型のアサーションに変換できます。 これらのカプセル化されたアサーションを任意のアサーション パレットに配置することができます。 それらを任意の通常のアサーションとして操作することができます。サービス ポリシー内でそれらを追加、削除、または無効にできます。 ポリシー内でそれらを上下に移動します。
gateway92
カプセル化されたアサーションでは、任意のポリシー フラグメントを、入力値を受け入れて出力値を設定する自己完結型のアサーションに変換できます。 これらのカプセル化されたアサーションを任意のアサーション パレットに配置することができます。 それらを任意の通常のアサーションとして操作することができます。サービス ポリシー内でそれらを追加、削除、または無効にできます。 ポリシー内でそれらを上下に移動します。
(1)作成したカプセル化されたアサーションは、慎重に追跡して、ポリシー作成者が Gateway のドキュメントを調べたり、サポートに連絡する必要が生じた場合に起こる可能性がある取り違えを防止します。 (2) Policy Manager の外部で作成されるカプセル化されたアサーション(たとえば、メトリックのリレーの詳細については、「クラスタ プロパティの使用」を参照)。
カプセル化されたアサーションとポリシー フラグメントの比較
カプセル化されたアサーションは、表面的にはポリシー アサーションと同様に動作しますが、機能上の観点からはポリシー フラグメントにより類似しています。 それぞれのカプセル化されたアサーションは、基礎としてポリシー フラグメントを使用しているという事実が、これを裏付けています。定義済みのフラグメントが存在しないと、カプセル化されたアサーションは作成できません。
カプセル化されたアサーションとポリシー フラグメントは、共に以下の特徴があります。
  • 両方とも、モジュールとしての使用とポリシーの再利用を可能にしています。
  • 両方とも、既存のポリシー アサーションを利用します。
  • 両方とも、同様なランタイム動作で入力を受け入れ、出力を生成します。
  • 両方とも、事前定義済みのロールおよび権限を使用して、これらのエンティティの作成およびアクセスが可能なユーザを制御します。
    • ポリシー フラグメントでは、「Manage <
      フラグメント名
      >」ロールがフラグメントへのアクセス権を持つユーザを制御します。
    • カプセル化されたアサーションでは、「Manage Encapsulated Assertion」ロールがカプセル化されたアサーションを設定できるユーザを制御します。 ポリシー内でこのアサーションを使用する必要があるポリシー作成者は、新規アサーションの作成権限がない場合でも、それらを追加できます。
ただし、下の表に示すように、2 つの間には顕著な違いがあります。
カプセル化されたアサーション
ポリシー フラグメント
カプセル化されたアサーションの作成者は、使用された基礎となるポリシー フラグメントを表示できますが、これはポリシー作成者からは非表示です。
ポリシー フラグメントのユーザ(つまりポリシー作成者)は、フラグメントを展開してその中のアサーションを表示できます。
カプセル化されたアサーションを使用したポリシーでの検証速度への影響はありません。 これは基礎となるポリシー フラグメントが検証中に展開されないためです。
多数のポリシー フラグメントまたは大きなポリシー フラグメントがポリシーに挿入された場合、検証速度が影響を受ける可能性があります。 これは、フラグメントが検証中に常に展開されるためです。
アサーション パレット内に独自のエントリとして個別に表示されます。名前、説明、およびアイコンは設定可能です。
Include Policy Fragments アサーションを使用してのみ、ポリシーに追加できます。 説明またはアイコンはありません。
独自の「ポリシー コンテキスト」で実行されるため、独自のローカル コンテキスト変数を使用することができ、親ポリシーのコンテキスト変数と競合することがありません。
リクエストおよび応答自身はプライベート スコープを持ちません。コンテキスト変数のみ、プライベート スコープがあります。 カプセル化されたアサーションに対するリクエストおよび応答は、実際のデフォルト リクエストおよび応答を指しています。
親ポリシーの部分として実行され、親と同じコンテキスト変数を使用します。
入力パラメータと出力結果を介して、親ポリシーとのコンテキスト変数の共有を制御するメカニズムがあります。
共有のための特別なメカニズムはありません。ポリシー フラグメントは、ポリシーに手動でアサーションを挿入したかのように動作します。
カプセル化されたアサーションを使用するために、基礎となるポリシー フラグメントへの許可を与える必要はありません。 ポリシーを編集する許可を持つすべてのユーザが、すべてのカプセル化されたアサーションを使用できます。
ポリシー フラグメントを使用できるようにするためには、「Manage <ポリシー>」ロールを使用して事前に権限が明示的に付与される必要があります。
コンテキスト変数の可視性
カプセル化されたアサーションの親サービス ポリシーと基礎となるポリシー フラグメント(基盤ポリシー)との間のコンテキスト変数の可視性の理解:
  • 親サービス ポリシーで設定されたコンテキスト変数は、カプセル化されたアサーションの基盤ポリシーに認識されません。
  • カプセル化されたアサーションの基盤ポリシー内で設定されたコンテキスト変数は、そのカプセル化されたアサーションのみにローカルです。 これらの変数は、後で親ポリシーに認識されません。
  • カプセル化されたアサーションの入出力引数は、親ポリシーおよび基盤ポリシーの両方で認識されます。
値が親ポリシーに渡される仕組みの理解
カプセル化されたアサーションの基盤ポリシー内で設定されたコンテキスト変数の場合、入力引数として定義されていないことを確認します。 これにより、これらのコンテキスト変数の値がカプセル化されたアサーションの入力によって上書きされる可能性があります。
カプセル化されたアサーションの各インスタンスは、親ポリシーのコンテキストから独立している独自の「ポリシー コンテキスト」で実行されます。 アサーションおよびその親の間で値がどのように渡されるかを理解することは重要です。 以下の例では、すべての値がコンテキスト変数を使用して渡されます。
カプセル化されたアサーションを作成する場合、一連の入力および出力を定義できます。 入力については、データ型を選択し、インターフェース上でのその入力の可視性を指定します。 これらの選択によって、値が親ポリシーに渡される方法が決まります。
例 #1: メッセージ入力がプロパティ ダイアログ ボックスに表示される
以下の入力定義を持つカプセル化されたアサーション「ABC アサーション」があります。
Input Name:
foobar
Input Type:
Message
Show in assertion properties dialog:
オン
親ポリシーに、以下が含まれています。
Variable Name:
fromParent
Data Type:
Message
Content-Type:
text/plain
Expression:
"Hi there!"
  • ABC アサーション
foobar:
ドロップダウン リストから「fromParent」を選択します
ABC アサーションが実行されると、次のコンテキスト変数が基礎となるポリシー フラグメントに認識されます。
  • 「Message」型の
    foobar
    (親ポリシーのコンテキスト内の
    fromParent
    変数へのエイリアスとなります)
変数
foobar
が ABC アサーション内で変更されると、これらの変更は
fromParent
変数に反映されます。 (たとえば、Route via HTTP(S) アサーションを使用して content-type を変更した場合)。
例 #2: プロパティ ダイアログ ボックスに表示されない文字列入力
カプセル化されたアサーション「ABC アサーション」には次の入力定義があります。
Input Name:
widget
Input Type:
String
Show in assertion properties dialog:
オフ
親ポリシーには、以下が含まれています。
Variable Name:
widget
Data Type:
String
Content-Type:
text/plain
Expression:
"Pass it along!"
  • ABC アサーション
唯一の入力(「widget」)がインターフェースで非表示であるため、このアサーションに使用可能なプロパティはありません。 ABC アサーション上で[View Info]オプションを実行すると、単一の変数
widget
が使用され、設定済みの変数がないことが示されます。 親ポリシー内のこのインスタンスの ABC アサーションのポリシー XML には、「widget」パラメータが含まれません。
ABC アサーションが実行されると、次のコンテキスト変数が基礎となるポリシー フラグメントに認識されます。
  • 「String」型の
    widget
    (親ポリシーのコンテキスト内の widget 変数へのエイリアスとなります)
変数
widget
が ABC アサーション内で変更されると、これらの変更は ABC アサーションの終了後に親コンテキストの
widget
変数に反映されます。
例 #3: 文字列入力がプロパティ ダイアログ ボックスで表示される
この例は、プロパティ ダイアログ ボックス内の入力の表示の影響を示すことを除き、#2 に類似しています。
Input Name:
widget
Input Type:
String
Show in assertion properties dialog:
オン
親ポリシーには、以下が含まれています。
Variable Name:
widget
Data Type:
String
Content-Type:
text/xml; charset=utf-8
Expression:
"Don't pass it along!"
  • ABC アサーション
アサーション プロパティで、
widget
フィールドに「
This is my value!
」と入力します。 プロパティにこの値を入力すると、値「This is my value!」を持つパラメータ「widget」が親ポリシー内の ABC アサーション インスタンスに格納されます。
実行時に、ABC アサーションが呼び出されるごとに、値「This is my value!」が子ポリシー コンテキスト内の新しい
widget
コンテキスト変数にコピーされてから、基礎となるポリシー フラグメントが実行されます。
ABC アサーション上で[View Info]オプションを実行すると、使用されている、または設定されている変数は何も表示されません。 ただし、親ポリシー内のこのインスタンスの ABC アサーションのポリシー XML には、パラメータ
widget="This is my value!"
が含まれます。
ヒント:
ポリシー XML は、アサーションをコピーし、それを任意のテキスト エディタへ貼り付けることにより表示できます。
ABC アサーションが実行されるときは、親コンテキスト内の
widget
コンテキスト変数は無視され、新しい
widget
コンテキスト変数が、値「This is my value!」で子コンテキストに作成されます (これは、「メッセージ」データ型の
foobar
 への変更が、親の  
fromParent
 変数に反映される例 1 と対照的です)。
カプセル化されたアサーションをロールで使用可能にする
カプセル化されたアサーションがアサーション パレットで表示されるようにするには、以下の権限を持つロールが必要です。
  • すべてのカプセル化されたアサーションに対する読み取り
および、次のいずれか:
  • すべてのアサーションの読み取り
または、そのロールにすべてのアサーションへの許可を与えることが望ましくない場合は
  • name=com.l7tech.policy.assertion.EncapsulatedAssertion が指定されたアサーション読み取り
基礎となるポリシー フラグメントが表示されるようにする場合(オプション)
  • 「policy fragment」タイプのすべてのポリシーの読み取り
ポリシー フラグメントへの読み取りアクセスがない場合でも、カプセル化されたアサーションは正しく動作します。 ユーザは基礎となるポリシー フラグメントを表示できないだけです。
事前定義済みロール「Manage Encapsulated Assertions」はこのアクセス権を提供します。 カスタム ロールを使用している場合は、必ず上記の条件に合致するようにしてください。
カプセル化されたアサーションの使用
以下の表からタスクを選択します。
タスク
参照先
新しいカプセル化されたアサーションを作成する
カプセル化されたアサーションをシステムから削除する
カプセル化されたアサーションを編集する
カプセル化されたアサーションでデバッグ追跡を有効化する
ポリシーにカプセル化されたアサーションを追加する
カプセル化されたアサーションをポリシーから削除する
ポリシー内のカプセル化されたアサーションを無効化する
ポリシー内でカプセル化されたアサーションの位置を変更する
Policy Manager インターフェースの「[Assertions]ツールバー
カプセル化されたアサーションがポリシーに追加されると、入力値(定義した場合)を受け取るためにプロパティ ダイアログ ボックスが表示されます。 ただし、入力フィールドが「Message」型または「XML Element」型である場合、プロパティ ダイアログ ボックスは自動的に開きません。 この場合、ダイアログ ボックスを手動で開きます。