この付録では、Oracle SOA Suite for healthcare integrationがインタフェース順序付けを使用してメッセージのエンドツーエンドの先入れ先出し(FIFO)処理を実行する方法について説明します。
この付録の内容は次のとおりです。
Oracle SOA Suite for healthcare integrationのメッセージ処理は、特定の広いレベルのステップで実行されます。
Oracle Healthcareインバウンド・コンポーネントがエンドポイントからメッセージを受信し、同等のXMLメッセージをSOAコンポジットに配信します。
コンポジットは必要な変換があれば実行し、メッセージのターゲット・エンドポイントを判別して、同一または変換済のメッセージをOracle Healthcareエンジンにルーティングします。
次に、Oracle Healthcareアウトバウンド・コンポーネントがメッセージをターゲット・エンドポイントに配信します。
Oracle SOA Suite for healthcare integrationでは、次のアプローチを使用してメッセージのFIFO処理を実行できます。
コンポーネント順序付け
このアプローチでは、3つのコンポーネント(Oracle Healthcareインバウンド・コンポーネント、コンポジット、Oracle Healthcareアウトバウンド・コンポーネント)すべての境界線を越えてメッセージの順序を保持することによってFIFOを達成します。
インタフェース順序付け
このアプローチでは、複数のレイヤーにわたるメッセージを相互に関連付け、配信ポイントにおける順序付けをターゲット・エンドポイントに適用することによって、複数のエンドポイントにわたってFIFOを達成します。
たとえば、インバウンドOracle Healthcareエンドポイントで20件のメッセージが順に受信された場合、各メッセージがシステムに到着したときにタイムスタンプが付けられ、順序どおりに処理されるようにそれらのメッセージがエンジンに送信されます。エンジンによって順序内のメッセージが処理され、タイムスタンプに基づいて配信されるようにそれらのメッセージがアウトバウンド・エンドポイントに送信されます。つまり、インバウンド・エンドポイントに到着したメッセージは最初にアウトバウンド・エンドポイントから配信されます。
なんらかの理由で処理に時間がかかっていたりエラーが発生したために早いタイムスタンプが付いたメッセージが停滞している場合、遅いタイムスタンプが付いた他のメッセージが処理されますが、アウトバウンド・エンドポイントでは順序どおりにキューに配置されます。これらのメッセージは、早いタイムスタンプの付いた(停滞している)メッセージが正常に処理されてアウトバウンド・エンドポイントから配信されるまで、アウトバウンド・エンドポイントから配信されません。メッセージでエラーが発生した場合は、再発行を試みるか、キュー内で待機している処理済メッセージを配信できるように順序付けされたエンドポイント・ダッシュボードからメッセージを削除できます。
注意:
インバウンド・メッセージの場合、エンドツーエンドのインタフェース順序付けを使用するエンドポイントの「一時停止」/「再開」ボタンは無効になります。
このアプローチによって、順序付けチェックポイントの数が減るうえ、順序管理が単一ポイントで行われ、システムのパフォーマンスとスケーラビリティが向上します。
注意:
インバウンドの場合、アプリケーション・メッセージが正常に作成された後でなんらかの障害が発生すると、再発行のためにXMLペイロードが保持され、アプリケーション・メッセージの再発行オプションが有効になります。アプリケーション・メッセージが作成されていない場合は、ワイヤ・メッセージを再発行する必要があります。
アウトバウンドの場合、XMLからネイティブ形式への変換が正常に完了すると、XMLペイロードは保持されません。ただし、XMLからネイティブへの変換が失敗した場合は、再発行できるようにXMLペイロードが保持されます。
Oracle SOA Suite for healthcare integrationでインタフェース順序付けを有効にするには、エンドポイント・レベルおよびコンポジット・レベルでいくつかの構成を実行する必要があります。
エンドポイント・レベルでメッセージのインタフェース順序付けを構成するには、トランスポート・プロトコル構成で「インタフェース順序付け」チェック・ボックスを選択します。
インタフェース順序付けを構成するには:
図D-1に、インタフェース順序付けを構成するための「トランスポート・プロトコル・パラメータ」ダイアログ・ボックスを示します。
この構成は、エンドポイントで受信されたインバウンド・メッセージにのみ影響します。メッセージの配信先のエンドポイントは、インタフェース順序付けのために構成する必要はありません。
エンドポイント・レベルでインタフェース順序付けを構成すると、このエンドポイントで受信されるメッセージにはインタフェース順序付けのマークが付き、インタフェース順序付け固有のヘッダーが内部デリバリ・チャネルおよびコンポジットに配信されます。
注意:
インタフェース順序付けでは、コンポジットでメッセージが処理される順序は保証されません。このアプローチで保証されるのは、メッセージがリモート・エンドポイントに順番に配信されるということのみです。
(インバウンド・メッセージとアウトバウンド・メッセージとの)相関を実現するには、インタフェース順序付けのメッセージを処理するコンポジットが、次の追加ヘッダーを処理および移入する必要があります。
トランスポート・レイヤーとエンジン・レイヤーの間の相関を確立するには、インバウンド・メッセージ・ヘッダーのINTERFACE_SEQUENCE_ID
(ファブリックの場合はhc.interfaceSequenceId
)ヘッダーをアウトバウンド・メッセージ・ヘッダーにコピーする必要があります。
1つのインバウンド・メッセージが複数のエンドポイントに配信されるファンアウト(ブロードキャスト)の場合は、コンポジットがファンアウトに関連する各アウトバウンド・メッセージにINTERFACE_GROUP_COUNT
ヘッダーを移入する必要があります。
たとえば、1つのメッセージを2つのエンドポイントにエンキューする場合、エンキューされたメッセージのヘッダーINTERFACE_GROUP_COUNT
(ファブリックの場合はhc.interfaceGroupCount
)の値はどちらも2
に設定されている必要があります。
ファンアウト・メッセージを同じアウトバウンド・エンドポイントに送信する場合、JMS専用プロパティのINTERFACE_GROUP_POSITION
を使用して、同じターゲット・エンドポイントに送信される複数のインタフェース・アウトバウンド・メッセージの順序を保持する必要があります。メッセージは、指定された位置値に基づいて配信されます。ただし、アウトバウンド側でインメモリー統合を行う場合、メッセージがOracle Healthcareに到着する順序がメッセージ配信で使用されます。
コンポジットが特定のメッセージをフィルタ処理する必要がある場合、メッセージがスキップされたことを示す通知を順序付けフレームワークに送信する必要があります。
これを達成するには、INTERFACE_SEQUENCE_DISCARD_ID
(ファブリックの場合はhc.interfaceSequenceDiscardId
)ヘッダー・セットを元のメッセージのINTERFACE_SEQUENCE_ID
ヘッダーの値に設定して、Oracle HealthcareアダプタまたはJMSキューにシグナルを送信します。
Oracle Healthcareには、インタフェース順序付けされたメッセージの状態をダッシュボードで表示する機能があります。図D-2に、メッセージの順序状態を示します。
ダッシュボードには、次の順序状態が表示されます。
ダッシュボードでメッセージの順序状態がRouting
になっている場合、そのメッセージがすでにバックエンドに配信されたことを示しています。この場合、B2B_SEQUENCE_MANAGER
表のインバウンド・メッセージの行に、ROUTING
の値が表示されます。バックエンドに配信されたメッセージには新しいヘッダーが付きます。
hc.interfaceSequenceId
(ファブリックの場合)
INTERFACE_SEQUENCE_ID
(JMSの場合)
ダッシュボードでメッセージの順序状態がOutbound_Processing
になっている場合、そのメッセージがバックエンドから受信されて、アウトバウンド処理中であることを示しています。この場合、メッセージがバックエンドに配信された後、メッセージにINTERFACE_SEQUENCE_ID
ヘッダーが含まれるかどうかが評価され、インタフェース順序付けされたメッセージであるかどうかが判別されます。メッセージにヘッダーが含まれる場合、続いてファンアウトが可能かどうかを特定するためにINTERFACE_GROUP_COUNT
ヘッダーが読み取られ、メッセージ順序の状態にOutbound_Processing
というマークが付きます。
エラーが発生した場合、インタフェース順序付けされたメッセージを再発行または破棄できます。
インバウンド・メッセージ処理でエラーが発生した場合、そのメッセージが失敗したことがダッシュボードに示されます。この場合、ワイヤ・メッセージを再発行できます。
アウトバウンド処理でエラーが発生した場合は、ペイロードが保持されるため、アプリケーション・メッセージを再発行できます。
また、ターゲットへのすべてのメッセージが使用可能になった後は、(ダッシュボードに表示されている)アウトバウンド・メッセージを破棄することもできます。インバウンド・エンドポイント・ダッシュボードで、ソースからインバウンド・メッセージを破棄することもできます。これによって、同じ順序内でターゲットに送信されるアウトバウンド・メッセージはすべて破棄されます。生成されるエラー・メッセージには、破棄されたすべてのメッセージの情報が含まれています。