メディエーション・ポリシー・パターンにより、メディエーション・ポリシーの実装を単純化できます。
このトピックでは、メディエーション・ポリシーと共に使用するいくつかの基本的なパターンを説明します。
メディエーション・ポリシー処理モデルは、任意の組み合わせのメディエーション・ポリシーの処理結果を定義します。
ただし、いくつかの基本的なルールとパターンに従うことによって、メディエーション・ポリシーの実装を単純化できます。
ルール
各プロパティー・グループに対して、以下のルールを適用します。
パターン 1: デフォルトのメディエーション・ポリシーのみ
モジュール内のすべての動的プロパティーを動的にオーバーライドする場合は、WSRR を管理するときに、すべてのデフォルトのメディエーション・ポリシーを SCA モジュールに付加する必要があります。
パターン 2: 相互排他的なゲート条件
相互排他的なゲート条件がある場合、ランタイムは条件メディエーション・ポリシーのマージを試行しません。
- ゲート条件がない (アタッチメントに条件がない)、単一のデフォルト・メディエーション・ポリシーを使用します。
このデフォルトのメディエーション・ポリシーにはオーバーライドできるすべてのモジュール・プロパティーが含まれ、適用できる条件メディエーション・ポリシーがない場合に使用されます。
- 明確に異なるケースを表すように各ゲート条件を作成します。つまり、ゲート条件が相互に排他的で、選択できる条件付きのメディエーション・ポリシーが最大でも 1 つになるようにします。
例えば、値が InsuranceType = "Gold" のゲート条件がある 1 つのメディエーション・ポリシーと、値が InsuranceType = "Silver" のゲート条件がある別のメディエーション・ポリシーを持つことができます。
特定のメッセージで、InsuranceType は Silver または Gold となり、適切なメディエーション・ポリシーが選択されます。
例: 相互排他的なゲート条件
以下の例は、1 つのモジュールに付加される 3 つのメディエーション・ポリシーを示しています。
2 つのメディエーション・ポリシーにゲート条件があり、1 つのメディエーション・ポリシーにはゲート条件はありません。
ゲート条件がある 2 つのメディエーション・ポリシーは相互排他的です。
実行時に、メッセージの内容により、使用されるメディエーション・ポリシー (およびそれに応じてどのモジュール・プロパティーがオーバーライドできるか) が決定されます。
- InsuranceType = "Gold" の場合、メディエーション・ポリシー P1 が使用されます。
- InsuranceType = "Silver" の場合、メディエーション・ポリシー P2 が使用され、P2 で言及されないプロパティーは、メディエーション・ポリシー P3 から取られます。
- InsuranceType が Gold または Silver のどちらでもない場合、メディエーション・ポリシー P3 が使用されます。
パターン 3: 競合を避けるためのモジュール・プロパティーの分散
相互排他的なゲート条件がない場合、ランタイムは条件メディエーション・ポリシーのマージを試行する場合があります。
マージされる可能性があるすべての条件メディエーション・ポリシーは、固有のモジュール・プロパティーを持つ必要があります。
- ゲート条件がない (アタッチメントに条件がない)、単一のデフォルト・メディエーション・ポリシーを使用します。
このデフォルトのメディエーション・ポリシーは、適用できる条件メディエーション・ポリシーがない場合に使用されます。
- 複数の条件メディエーション・ポリシーを使用できるようにゲート条件を作成しますが、マージされる可能性があるメディエーション・ポリシーは、必ず固有のプロパティーを持つようにしてください。
例えば、値が InsuranceType = "Gold" のゲート条件がある 1 つのメディエーション・ポリシーと、値が InsuranceType = "Silver" のゲート条件がある別のメディエーション・ポリシーと、値が CustomerType = "Student" のゲート条件があるさらに別のメディエーション・ポリシーを持つことができます。
特定のメッセージで、InsuranceType は Silver または Gold となり、適切なメディエーション・ポリシーが使用されます。
ただし、ゲート条件 CustomerType = "Student" と関連付けられているメディエーション・ポリシーは、他の条件メディエーション・ポリシーとマージする必要があります。したがって、それには固有のモジュール・プロパティーが含まれていなければなりません。
例: 競合を避けるためのモジュール・プロパティーの分散
以下の例は、1 つのモジュールに付加される 4 つのメディエーション・ポリシーを示しています。
3 つのメディエーション・ポリシーにゲート条件があり、1 つのメディエーション・ポリシーにはゲート条件はありません。
マージされる可能性がある条件メディエーション・ポリシーには、オーバーラップするモジュール・プロパティーはありません。
実行時に、メッセージの内容により、使用されるメディエーション・ポリシー (およびそれに応じてどのモジュール・プロパティーがオーバーライドできるか) が決定されます。
- InsuranceType = "Gold" の場合、メディエーション・ポリシー P1 が使用されます。
- InsuranceType = "Silver" の場合、メディエーション・ポリシー P2 が使用されます。
- CustomerType = "Student" の場合、メディエーション・ポリシー P3 が使用されます。
- 2 つの条件メディエーション・ポリシーが使用される場合 (P1 と P3、または P2 と P3)、複数回現れるプロパティーはありません。
- P1 と P3 が使用される場合、Property_A と Property_B は P1 に由来し、Property_C は P3 に由来します。
- P2 と P3 が使用される場合、Property_A は P2 に由来し、Property_C は P3 に由来し、Property_B は P4 に由来します。
- 条件メディエーション・ポリシーが使用されない場合、メディエーション・ポリシー P4 が使用されます。
図 2. 競合を避けるためのモジュール・プロパティーの分散