E インタフェース順序付け

この付録では、Oracle SOA Suite for healthcare integrationがインタフェース順序付けを使用してメッセージのエンドツーエンドの先入れ先出し(FIFO)処理を実行する方法について説明します。

この付録の内容は次のとおりです。

E.1 概要

Oracle SOA Suite for healthcare integrationのメッセージ処理は、特定の広いレベルのステップで実行されます。

  1. Oracle Healthcareインバウンド・コンポーネントがエンドポイントからメッセージを受信し、同等のXMLメッセージをSOAコンポジットに配信します。

  2. コンポジットは必要な変換があれば実行し、メッセージのターゲット・エンドポイントを判別して、同一または変換済のメッセージをOracle Healthcareエンジンにルーティングします。

  3. 次に、Oracle Healthcareアウトバウンド・コンポーネントがメッセージをターゲット・エンドポイントに配信します。

Oracle SOA Suite for healthcare integrationでは、次のアプローチを使用してメッセージのFIFO処理を実行できます。

コンポーネント順序付け

このアプローチでは、3つのコンポーネント(Oracle Healthcareインバウンド・コンポーネント、コンポジット、Oracle Healthcareアウトバウンド・コンポーネント)すべての境界線を越えてメッセージの順序を保持することによってFIFOを達成します。

インタフェース順序付け

このアプローチでは、複数のレイヤーにわたるメッセージを相互に関連付け、配信ポイントにおける順序付けをターゲット・エンドポイントに適用することによって、複数のエンドポイントにわたってFIFOを達成します。

たとえば、インバウンドOracle Healthcareエンドポイントで20件のメッセージが順に受信された場合、各メッセージがシステムに到着したときにタイムスタンプが付けられ、順序どおりに処理されるようにそれらのメッセージがエンジンに送信されます。エンジンによって順序内のメッセージが処理され、タイムスタンプに基づいて配信されるようにそれらのメッセージがアウトバウンド・エンドポイントに送信されます。つまり、インバウンド・エンドポイントに到着したメッセージは最初にアウトバウンド・エンドポイントから配信されます。

なんらかの理由で処理に時間がかかっていたりエラーが発生したために早いタイムスタンプが付いたメッセージが停滞している場合、遅いタイムスタンプが付いた他のメッセージが処理されますが、アウトバウンド・エンドポイントでは順序どおりにキューに配置されます。これらのメッセージは、早いタイムスタンプの付いた(停滞している)メッセージが正常に処理されてアウトバウンド・エンドポイントから配信されるまで、アウトバウンド・エンドポイントから配信されません。メッセージでエラーが発生した場合は、再発行を試みるか、キュー内で待機している処理済メッセージを配信できるように順序付けされたエンドポイント・ダッシュボードからメッセージを削除できます。

ノート:

インバウンド・メッセージの場合、エンドツーエンドのインタフェース順序付けを使用するエンドポイントの「一時停止」/「再開」ボタンは無効になります。

このアプローチによって、順序付けチェックポイントの数が減るうえ、順序管理が単一ポイントで行われ、システムのパフォーマンスとスケーラビリティが向上します。

ノート:

インバウンドの場合、アプリケーション・メッセージが正常に作成された後でなんらかの障害が発生すると、再発行のためにXMLペイロードが保持され、アプリケーション・メッセージの再発行オプションが有効になります。アプリケーション・メッセージが作成されていない場合は、ワイヤ・メッセージを再発行する必要があります。

アウトバウンドの場合、XMLからネイティブ形式への変換が正常に完了すると、XMLペイロードは保持されません。ただし、XMLからネイティブへの変換が失敗した場合は、再発行できるようにXMLペイロードが保持されます。

E.2 インタフェース順序付けのための構成に関する考慮事項

Oracle SOA Suite for healthcare integrationでインタフェース順序付けを有効にするには、エンドポイント・レベルおよびコンポジット・レベルでいくつかの構成を実行する必要があります。

E.2.1 エンドポイント・レベルでのインタフェース順序付けの構成

エンドポイント・レベルでメッセージのインタフェース順序付けを構成するには、トランスポート・プロトコル構成で「インタフェース順序付け」チェック・ボックスを選択します。

インタフェース順序付けを構成するには:

  1. Oracle SOA Suite for healthcare integrationコンソールで、インタフェース順序付けを構成するエンドポイントを開きます。
  2. 「トランスポートの詳細」ボタンをクリックして、「トランスポート・プロトコル・パラメータ」ダイアログ・ボックスを表示します。
  3. 「詳細」タブをクリックします。
  4. 「順序付けモード」を選択します。
  5. 「インタフェース順序付け」チェック・ボックスを選択します。
  6. 「OK」をクリックし、エンドポイント・ページで「適用」をクリックします。

図E-1に、インタフェース順序付けを構成するための「トランスポート・プロトコル・パラメータ」ダイアログ・ボックスを示します。

図E-1 インタフェース順序付け

図E-1の説明が続きます
「図E-1 インタフェース順序付け」の説明

この構成は、エンドポイントで受信されたインバウンド・メッセージにのみ影響します。メッセージの配信先のエンドポイントは、インタフェース順序付けのために構成する必要はありません。

エンドポイント・レベルでインタフェース順序付けを構成すると、このエンドポイントで受信されるメッセージにはインタフェース順序付けのマークが付き、インタフェース順序付け固有のヘッダーが内部デリバリ・チャネルおよびコンポジットに配信されます。

ノート:

インタフェース順序付けでは、コンポジットでメッセージが処理される順序は保証されません。このアプローチで保証されるのは、メッセージがリモート・エンドポイントに順番に配信されるということのみです。

E.2.2 コンポジット・レベルでのインタフェース順序付けの構成

(インバウンド・メッセージとアウトバウンド・メッセージとの)相関を実現するには、インタフェース順序付けのメッセージを処理するコンポジットが、次の追加ヘッダーを処理および移入する必要があります。

  • トランスポート・レイヤーとエンジン・レイヤーの間の相関を確立するには、インバウンド・メッセージ・ヘッダーの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キューにシグナルを送信します。

E.2.3 順序メッセージの状態の理解

Oracle Healthcareには、インタフェース順序付けされたメッセージの状態をダッシュボードで表示する機能があります。図E-2に、メッセージの順序状態を示します。

図E-2 順序メッセージの状態

図E-2の説明が続きます
「図E-2 順序メッセージの状態」の説明

ダッシュボードには、次の順序状態が表示されます。

E.2.3.1 ルーティング

ダッシュボードでメッセージの順序状態がRoutingになっている場合、そのメッセージがすでにバックエンドに配信されたことを示しています。この場合、B2B_SEQUENCE_MANAGER表のインバウンド・メッセージの行に、ROUTINGの値が表示されます。バックエンドに配信されたメッセージには新しいヘッダーが付きます。

  • hc.interfaceSequenceId (ファブリックの場合)

  • INTERFACE_SEQUENCE_ID (JMSの場合)

E.2.3.2 Outbound_Processing

ダッシュボードでメッセージの順序状態がOutbound_Processingになっている場合、そのメッセージがバックエンドから受信されて、アウトバウンド処理中であることを示しています。この場合、メッセージがバックエンドに配信された後、メッセージにINTERFACE_SEQUENCE_IDヘッダーが含まれるかどうかが評価され、インタフェース順序付けされたメッセージであるかどうかが判別されます。メッセージにヘッダーが含まれる場合、続いてファンアウトが可能かどうかを特定するためにINTERFACE_GROUP_COUNTヘッダーが読み取られ、メッセージ順序の状態にOutbound_Processingというマークが付きます。

E.2.4 インタフェース順序付けされたメッセージの再発行または破棄

エラーが発生した場合、インタフェース順序付けされたメッセージを再発行または破棄できます。

  • インバウンド・メッセージ処理でエラーが発生した場合、そのメッセージが失敗したことがダッシュボードに示されます。この場合、ワイヤ・メッセージを再発行できます。

  • アウトバウンド処理でエラーが発生した場合は、ペイロードが保持されるため、アプリケーション・メッセージを再発行できます。

  • また、ターゲットへのすべてのメッセージが使用可能になった後は、(ダッシュボードに表示されている)アウトバウンド・メッセージを破棄することもできます。インバウンド・エンドポイント・ダッシュボードで、ソースからインバウンド・メッセージを破棄することもできます。これによって、同じ順序内でターゲットに送信されるアウトバウンド・メッセージはすべて破棄されます。生成されるエラー・メッセージには、破棄されたすべてのメッセージの情報が含まれています。