この付録では、高可用性環境で最小の下位レイヤー・プロトコル(MLLP)を使用する場合にOracle SOA Suite for healthcare integrationアプリケーションを実装する方法について説明します。
この付録の内容は次のトピックを含みます:
Oracle SOA Suite for healthcare integrationの高可用性は、WebLogic Server、Oracle DatabaseおよびOracle SOA Suiteの高可用性機能を介して処理されます。Oracle SOA Suite for healthcare integrationの高可用性を構成するには、Oracle Enterprise ManagerでOracle B2Bプロパティを追加します。これらのプロパティを使用すると、healthcare integrationプロジェクトの高可用性を有効にし、クラスタ内のサーバーのタイムアウトおよびハートビート間隔を指定できます。
Oracle SOA Suite for healthcare integrationでMLLPに対して現在サポートされている機能(メッセージ順序付けを含む)はすべて、高可用性環境でもサポートされています。
クラスタ環境においては、最初に起動して初期化したヘルスケア統合インスタンスが、MLLPトラフィックを処理するインスタンスとなります。MLLPトラフィックを処理するインスタンスに障害が発生した場合、クラスタ内の非アクティブなインスタンスがアクティブになり、構成済のタイムアウト期間内にMLLPトラフィックを処理する役割を引き継ぎます。ヘルスケア統合のメッセージ処理はトランザクションであるため、障害の発生したインスタンスからの送信中メッセージはすべてリカバリされます。このため、フェイルオーバー中にメッセージが失われることはありません。
障害の発生したインスタンスが完全に使用不可能になった場合、現在アクティブになっている2番目のインスタンスが、引き続き、高可用性処理専用に作成されたアウトバウンド配信キューとの間でのメッセージ送受信を行います。最初のインスタンスが再び使用可能になった場合、2番目のインスタンスが引き続きMLLPトラフィックを処理します。
クラスタ内のアクティブなノードに障害が発生した場合、ロード・バランサがフェイルオーバー・デバイスとして使用されます。これは、Oracle SOA Suite for healthcare integrationがクラスタ環境に実装されている場合、インバウンドMLLPトラフィックに対して必要になります。エンドポイントおよび外部システムは、ロード・バランサのIPアドレスを宛先接続として使用します。つまり、すべての接続は1つのアクティブ・ノードで確立され、メッセージ処理はクラスタ内のすべてのノードで実行されます。healthcare integrationインスタンス間で均等にメッセージが配信されるようにロード・バランサを構成できますが、接続を確立するのは、指定されたアクティブ・インスタンスのみです。ロード・バランサでCookieベースまたはアクティブな永続接続を使用すると、MLLPサーバーで予期しない動作が発生する可能性があります。デフォルトを非永続接続に設定し、接続の損失を回避するための永続性設定についてロード・バランサのドキュメントで確認することをお薦めします。
アクティブなサーバーとは、MLLPを使用してエンドポイントとの間でメッセージを送受信できる、クラスタ内の唯一のサーバーです。ただし、メッセージ処理はクラスタ内のすべてのサーバーによって行われます。たとえば、アウトバウンドの場合、メッセージはクラスタ内のすべてのサーバーにより送信されるように準備されますが、実際の送信はアクティブ・サーバーによってのみ行われます。これは、インバウンドの場合も同じです。
これは、Oracle Weblogic ServerのJMSキューに対する機能です。デフォルトの構成では、同じUOOに属するすべてのメッセージは特定のサーバーに関連付けられています。UOOは、Oracle Weblogic ServerでJMS内のメッセージを順序付けするために使用されます。このため、UOOを使用する場合、そのUOOと関連付けられているJMSキューがアクティブになってメッセージを受信する必要があります。これを実現するには、サーバー全体の移行を使用します。
注意: HA環境でUOOを使用する場合は、サーバー移行を有効にする必要があります。 |
Oracle SOA Suite for healthcare integrationは、次のコンポーネントに依存しています。
Oracle SOAデータベース(メッセージおよびメッセージ状態の永続性に関連)
メタデータ・サービス(MDS)リポジトリ(インスタンス・メタデータに関連)
Oracle SOA Suite for healthcare integrationを有効にするには、Oracle Enterprise Managerで特定のB2Bプロパティを定義する必要があります。これらのプロパティを使用すると、healthcare integrationの高可用性を有効にし、サーバーのタイムアウトおよびPing間隔を定義できます。
ヘルスケア統合のMLLP高可用性を有効にするには
Oracle Enterprise Managerにログオンします。
URLは、http://hostname:port/emです。
ここで、hostnameはWebLogic Serverが実行されているコンピュータの名前で、portはWebLogic Serverがリスニングしているポート番号です。
左側のナビゲーション・パネルで、「SOA」ノードを開き、「soa-infra」を選択します。
「SOAインフラストラクチャ」メニューをクリックして、「SOA管理」→「B2Bサーバー・プロパティ」を選択します。
B2Bサーバー・プロパティ・ページで、「詳細B2B構成プロパティ」をクリックします。
システムMBeanブラウザ・ページが表示されます。
「操作」タブをクリックし、「addProperty」をクリックします。
「パラメータ」表の「値」列で、key列にb2b.HAInstanceを入力し、value列にtrueを入力します。
「呼出し」をクリックします。
新しいプロパティが保存されます。
前述の手順を使用して、b2b.MLLP_HA_Modeという名前の新しいプロパティを作成し、値をtrueに設定します。
次のオプション・プロパティを定義できます。これらが定義されていない場合は、デフォルト値が使用されます。
プロパティ | 説明 |
---|---|
b2b.HAMaxElapsedTimeout | 元のインスタンスに障害が発生した後、次のアクティブ・インスタンスがMLLPトラフィックを処理する役割を引き継ぐまでの時間(分単位)。デフォルト値は2分であり、2は使用できる最小値でもあります。 |
b2b.HAHeartBeatPing | サーバーが動作しているかどうかを判別するためのPingを実行する時間間隔(分単位)。デフォルト値は1分であり、1は使用できる最小値でもあります。 |
b2b.transportDispatcherThreadCount | 高可用性モードで使用するMLLPディスパッチャ・スレッドの数。これは順序付けされていないメッセージに対してのみ使用され、JMSリソースと組み合せて使用されます。 |
b2b.transportDispatcherThreadSleepTime | MLLPディスパッチャ・スレッドがメッセージ処理後にスリープする時間(ミリ秒単位)。 |
b2b.MaxTimeinAcquiredState | フェイルオーバー中、メッセージが処理を再開するまでにACQUIRED状態を保持する時間(分単位)。 |
b2b.AcquiredStatePollingInterval | ACQUIRED状態にあるメッセージが再びポーリングされるまでの時間(分単位)。 |
b2b.SingleTransactionAtInbound | インバウンドMLLP HAの場合、ワイヤ・メッセージがデータベースにコミットされてからイベントがイベント・キューにエンキューされるまでにサーバーがクラッシュした場合、サーバーは順序マネージャ表内に永続的に停滞し、処理されません。これによって、順序付けにおけるインバウンド・メッセージ・フローがブロックされます。
MLLP HAの場合のみ、 |
プロパティの追加が完了したら、「戻る」をクリックします。
高可用性プロパティを定義した後は、「属性」タブでそれらを表示できます。プロパティを表示するには、「属性」タブをクリックし、「プロパティ」をクリックします。「値」表の「要素」ノードを開くと、プロパティの名前と値が表示されます。