ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Event Processing開発者ガイド
11gリリース1 (11.1.1.7) for Eclipse
B61654-06
  目次へ移動
目次

前
 
次
 

24 高可用性のためのアプリケーションの開発

この章では、Oracle Event Processingアプリケーションの可用性を向上するために使用できるOracle Event Processingコンポーネントおよび設計パターンについて、および必要なサービス品質を提供するためにOracle Event Processingアプリケーションの高可用性を構成する方法について説明します。

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

24.1 高可用性の理解

この項では、Oracle Event Processingアプリケーションの可用性を向上するために使用できるOracle Event Processingコンポーネントおよび設計パターンについて説明します。

この節の内容は以下のとおりです。

24.1.1 高可用性アーキテクチャ

コンピューティング・リソースのように、Oracle Event Processingサーバーは、データやサービスの損失につながるハードウェアおよびソフトウェアのフォルトの両方に影響を受けやすくなっています。Oracle Event Processingの高可用性オプションは、そのようなフォルトの可能性および影響を共に軽減しようと検索します。

Oracle Event Processingは、アクティブ・スタンバイ高可用性アーキテクチャをサポートします。この方法には、高パフォーマンス、簡素性、およびフェイルオーバー時間の短縮という利点があります。

高可用性を高める必要があるOracle Event Processingアプリケーションは、Oracle Event Processingマルチサーバー・ドメインで稼働している2つ以上のOracle Event Processingサーバー・インスタンスのグループにデプロイされます。Oracle Event Processingは、自動的にグループ内の1つのサーバーをアクティブ・プライマリに選択します。残りのサーバーは、アクティブ・セカンダリとなります。

プライマリ・サーバーおよびセカンダリ・サーバーは、すべて同一の入力イベントを受信するように構成され、それらを並列に処理しますが、プライマリ・サーバーのみがOracle Event Processingアプリケーション・クライアントにイベントを出力します。選択したサービス品質に依存して、セカンダリ・サーバーはメモリー内の問合せを使用してそのような出力イベントをバッファリングし、プライマリ・サーバーは、プライマリ・サーバーが出力済のイベントを使用してセカンダリ・サーバーを最新に保ちます。

図24-1は通常の構成を示します。

図24-1 Oracle Event Processingの高可用性: プライマリ・サーバーおよびセカンダリ・サーバー

図24-1の説明が続きます
「図24-1 Oracle Event Processingの高可用性: プライマリ・サーバーおよびセカンダリ・サーバー」の説明

この項では次について説明します:

24.1.1.1 高可用性のライフサイクルおよびフェイルオーバー

図24-2は、Oracle Event Processingの高可用性ライフサイクルの状態図を示します。この図では、状態名(SECONDARYBECOMING_PRIMARYおよびPRIMARY)はOracle Event Processingの高可用性アダプタのRuntimeMBeanメソッドのgetStateの戻り値に対応します。このような状態はOracle Event Processing専用です。

図24-2 Oracle Event Processingの高可用性ライフサイクルの状態図

図24-2の説明が続きます
「図24-2 Oracle Event Processingの高可用性ライフサイクルの状態図」の説明

初期プライマリとなるサーバーを指定することはできません。初期状態では、マルチサーバー・ドメインで起動する第1サーバーがプライマリになるため、特定の順序でサーバーを起動することによって、プライマリの選択に影響を与えることができます。稼働中の特定のサーバーを強制的にプライマリにすることはできません。プライマリが失敗するとバックアップが機能し、現在のプライマリがフェイルオーバーの起動に失敗しないかぎり、二度と自動的にプライマリになりません。

この項では、Oracle Event Processingの高可用性ライフサイクルを次のような内容で詳細に説明します。

24.1.1.1.1 セカンダリの障害

通常、セカンダリ・サーバーに障害が発生しても図24-3に示すようにOracle Event Processingアプリケーションの動作には影響はありません。選択するサービス品質に関係なくイベントの欠落や重複は発生しません。

図24-3 セカンダリの障害

図24-3の説明が続きます
「図24-3 セカンダリの障害」の説明

24.1.1.1.2 プライマリの障害およびフェイルオーバー

ただし、プライマリ・サーバーで障害が発生した場合、図24-4で示すように、選択するサービス品質に応じて、Oracle Event Processingはイベントの欠落や重複を発生させる可能性があるフェイルオーバーを実行します。

図24-4 プライマリの障害およびフェイルオーバー

図24-4の説明が続きます
「図24-4 プライマリの障害およびフェイルオーバー」の説明

フェイルオーバー中、Oracle Event Processingは自動的に新しいプライマリおよびSECONDARY状態からBECOMING_PRIMARY状態への新しいプライマリの遷移を選択します。選択するサービス品質に依存して、新しいプライマリは構成可能な準備状況のしきい値を満たすまでPRIMARY状態に遷移しません。詳細は、24.1.2項「サービス品質の選択」にある特定のサービス品質オプションを参照してください。

24.1.1.1.3 高可用性マルチサーバー・ドメインの再結合

新しいOracle Event ProcessingサーバーがOracle Event Processing高可用性マルチサーバー・ドメインに追加される場合、または既存の障害が発生したサーバーが再起動する場合、サーバーは、サーバーにデプロイされたすべてのアプリケーションが完全に結合するまで、Oracle Event Processing高可用性デプロイメントと通知グループを完全には結合しません。アプリケーションの種類によって、いつ完全に結合したことが宣言されるかが決定されます。

アプリケーションが完全に同一の出力イベントのシーケンスを既存のセカンダリとして出力する必要がある場合(タイプ1アプリケーション)、一部の有限の期間(warm-up-window-lengthの期間)の入力ストリームを処理することによって、アプリケーションはその内部状態を再構築できます。このwarm-up-window-lengthの時間によって、アプリケーションが完全にOracle Event Processing高可用性デプロイメントと通知グループを結合するのにかかる最短時間が決定されます。

アプリケーションが完全に同一の出力イベントのシーケンスを既存のセカンダリとして出力する必要がない場合(タイプ2アプリケーション)、warm-up-window-lengthの時間は必要にならず、アプリケーションはデプロイされるとすぐにOracle Event Processing高可用性デプロイメントと通知グループを完全に結合します。

詳細は、24.1.3.2.5項「適切なwarm-up-window-length時間の選択」を参照してください。

24.1.1.2 デプロイメント・グループおよび通知グループ

マルチサーバー・ドメイン内のすべてのサーバーは、同一のデプロイメント・グループに属します。このグループは、アプリケーションをデプロイする対象のグループです。Oracle Event Processingの高可用性のために同一のアプリケーションをグループ内のすべてのサーバーにデプロイする必要があります。

デフォルトでは、マルチサーバー・ドメイン内のすべてのサーバーも同一の通知グループに属します。サーバーは、サーバーで障害が発生したとき(およびグループを終了したとき)または動作を再開したとき(およびグループを再結合したとき)を示すメンバーシップ通知用の通知グループと共に、プライマリからの同期通知用の通知グループをリスニングします。

Oracle Event Processingの高可用性アプリケーションのスケールを変更する必要がある場合、ActiveActiveGroupBeanを使用して、すべてのサーバー(プライマリおよびセカンダリ)に広がる単一のデプロイメント・グループの利点を保持する一方で、プライマリ・サーバー・ユニットとして2つ以上のサーバーを機能させることを許可する通知グループを定義できます。

マルチサーバー・ドメインのデプロイメント・グループを作成するためには、Oracle Coherenceベースのクラスタリングを使用する必要があります。デフォルト・グループまたはカスタム・グループのいずれかを使用できます。

詳細は、次を参照してください:

  • 24.1.1.4項「高可用性とスケーラビリティ」

  • 24.1.1.5項「高可用性およびOracle Coherence」

  • 『Oracle Fusion Middleware Oracle Event Processing管理者ガイド』Oracle Coherenceを使用してデフォルト・グループを持つOracle Event Processingマルチサーバー・ドメインを作成する方法に関する項

  • 『Oracle Fusion Middleware Oracle Event Processing管理者ガイド』Oracle Coherenceを使用してカスタム・グループを持つOracle Event Processingマルチサーバー・ドメインを作成する方法に関する項

24.1.1.3 高可用性コンポーネント

Oracle Event Processingの高可用性オプションを実装するには、各入力アダプタおよび高可用性出力アダプタの後、各出力アダプタの前に、高可用性入力アダプタを使用してイベント処理ネットワーク(EPN)を構成します。

図24-5は、定位置にすべての実行可能な高可用性アダプタを持つ通常のEPNを示します。

図24-5 EPN内の高可用性アダプタ

図24-5の説明が続きます
「図24-5 EPN内の高可用性アダプタ」の説明


注意:

簡略化するために、図24-5ではチャネルを示さずプロセッサを1つのみ示します。ただし、EPNは任意で複数の入力ストリームと出力ストリーム、チャネル、複数のプロセッサ、イベントBeanなどと複合化することができます。唯一の制約は、各入力アダプタは高可用性入力アダプタが次にきて、各出力アダプタは高可用性出力アダプタが先行する必要があるということです。同様に、簡略化するために2つのOracle Event Processingサーバーのみのマルチサーバー・ドメインが示されますが、任意の数のセカンダリ・サーバーを持つことができます。


プライマリのオプションの高可用性入力アダプタは、各セカンダリの対応する高可用性入力アダプタと通信し、イベント・タイムスタンプを正規化します。

Oracle Event Processingの高可用性によって、高可用性入力アダプタの1つの種類が提供されます。24.1.1.3.1項「高可用性入力アダプタ」を参照してください。

プライマリの高可用性出力アダプタは、Oracle Event Processingアプリケーションをダウンストリーム・クライアントに接続する出力ストリームにイベントを出力する処理を行います。プライマルの高可用性出力アダプタも対応する各セカンダリの高可用性出力アダプタと通信を行い、選択する高可用性のサービス品質に依存して、セカンダリ出力アダプタに出力イベントのメモリー内問合せをトリミングするように命令することができます。

Oracle Event Processingの高可用性によって、次の高可用性出力アダプタが提供されます。

Oracle Event Processingの高可用性によって、JMSアプリケーションでスケーラビリティを向上するための通知グループのSpring Beanも提供されます。24.1.1.3.5項「ActiveActiveGroupBean」を参照してください。

どのアダプタを選択するかは、選択する高可用性のサービス品質によって決定されます。24.1.2項「サービス品質の選択」を参照してください。

24.1.1.3.1 高可用性入力アダプタ

プライマリOracle Event Processingサーバー上のオプションのOracle Event Processing高可用性入力アダプタは、イベントがアダプタに到着し、イベントに割り当てられた時間値をすべてのセカンダリ・サーバーに転送するとき、時間(ナノ秒)をイベントに割り当てます。これによって、アプリケーションを稼働しているすべてのサーバーが統一された時間値を使用し(および同一の結果を生成し)、分散型クロック同期の必要性がなくなることが保証されます。

時間値は、EPN内の任意のダウンストリーム・チャネルにイベントが到着する前に各イベントに割当てられるため、ダウンストリーム・チャネルは、イベントのチャネル到着時に新しい時間値をイベントに割り当てないようにアプリケーションの時間を使用するように構成する必要があります。

入力イベントは、このアダプタを使用するために各イベントを一意で識別するキーを持つ必要があります。

Oracle Event Processingの高可用性入力アダプタをハートビート・イベントを送信するように構成できます。

Oracle Event Processingの高可用性入力アダプタは、すべての高可用性のサービス品質オプションに適用できます。ただし、高可用性入力アダプタはパフォーマンスのオーバーヘッドを増加するため、一部の高可用性サービス品質オプション(24.1.2.1項「シンプル・フェイルオーバー」および24.1.2.2項「バッファリングを使用するシンプル・フェイルオーバー」など)には適しません。このようなオプションでは、かわりにアプリケーション時間と何らかの着信イベント・プロパティの使用を検討します。

詳細は、次を参照してください:

24.1.1.3.2 バッファリング出力アダプタ

Oracle Event Processingの高可用性バッファリング出力アダプタは、バッファリング型キュー・トリミング方式を実装します。バッファはストリームからの出力イベントのスライディング・ウィンドウです。ウィンドウのサイズはミリ秒単位で測定されます。

Oracle Event Processingの高可用性バッファリング出力アダプタは、シンプル・フェイルオーバーおよび高可用性のサービス品質オプションのバッファリングを使用するシンプル・フェイルオーバーに適用できます。

詳細は、次を参照してください:

24.1.1.3.3 ブロードキャスト出力アダプタ

Oracle Event Processingの高可用性ブロードキャスト出力アダプタは、分散型キュー・トリミング方式を実装します。アクティブ・プライマリ・インスタンスは、メッセージを通知グループ内のアクティブ・セカンダリ・インスタンスにブロードキャストし、キューのローカル表現をトリミングするタイミングを通知します。

Oracle Event Processing高可用性ブロードキャスト出力アダプタは、軽量キュー・トリミングの高可用性のサービス品質オプションに適用できます。

詳細は、次を参照してください:

24.1.1.3.4 相関出力アダプタ

Oracle Event Processingの高可用性相関出力アダプタは、通常はJMSから2つのイベント・ストリームを関連付けます。このアダプタは、イベントのインバウンド・バッファと同一イベント・ストリームのセカンド・ソースに関連付け、構成可能な時間間隔の後で相関関係付けに障害が発生する場合にバッファを出力します。関連付けられたイベントは、キューからトリミングされます。関連付けられたイベントは、順序通りに整理されると仮定されます。

Oracle Event Processingの高可用性相関出力アダプタは、JMS高可用性のサービス品質オプションを使用する正確なリカバリに適用できます。

詳細は、次を参照してください:

24.1.1.3.5 ActiveActiveGroupBean

com.oracle.cep.cluster.hagroups.ActiveActiveGroupBeanは、JMS入力アダプタから入力ストリームをパーティション化することを可能にするSpring Beanです。

このコンポーネントは、JMS高可用性のサービス品質のみを使用する正確なリカバリに適用できます。ただし、Oracle Event Processingアプリケーションのスケーラビリティを向上するために高可用性なしで使用することもできます。

詳細は、次を参照してください:

24.1.1.4 高可用性およびスケーラビリティ

Oracle Event Processingの高可用性アプリケーションのスケールを変更する必要がある場合、ActiveActiveGroupBeanを使用して、すべてのサーバー(プライマリおよびセカンダリ)に広がる単一のデプロイメント・グループの利点を保持する一方で、高可用性ユニットとして2つ以上のサーバーを機能させることを許可する通知グループを定義できます。

図24-6は、最も単純な構成から高可用性、そして高可能性とスケーラビリティの両方へと至る3つのOracle Event Processingアプリケーションのシナリオを示します。

図24-6 高可用性およびスケーラビリティ

図24-6の説明が続きます
「図24-6 高可用性およびスケーラビリティ」の説明

大半のアプリケーションは、高可用性を持たないシングルサーバー・ドメインで起動します。この場合、最も単純なシナリオでは、1つのOracle Event Processingサーバー上で稼働しているOracle Event Processingアプリケーションが入力イベント・ストリームを処理して出力イベントを生成します。

高可用性のシナリオでは、Oracle Event ProcessingアプリケーションはOracle Event Processing高可用性オプションを使用するように構成されています。このアプリケーションは、2つのサーバーから構成されるマルチサーバー・ドメインのデプロイメント・グループにデプロイされます。このシナリオでは、プライマリ・サーバーのみがイベントを出力します。

高可用性とスケーラビリティの両方を持つシナリオでは、Oracle Event Processingの高可用性アプリケーションは、通知グループを定義するためにActiveActiveGroupBeanを使用するように構成されています。各通知グループには、単一の高可用性ユニットとして機能する2つ以上のOracle Event Processingサーバーが含まれます。このシナリオでは、各通知グループ内のプライマリ・サーバーのみがイベントを出力します。通知グループ内のプライマリ・サーバーが万一機能しなくなった場合、Oracle Event Processingの高可用性フェイルオーバーが発生し、その通知グループ内のセカンダリ・サーバーが新しいプライマリを宣言して、構成するOracle Event Processing高可用性のサービス品質にてイベントの出力を再開します。

詳細は、次を参照してください:

24.1.1.5 高可用性およびOracle Coherence

Oracle Event Processingの高可用性オプションは、Oracle Coherenceに依存します。Oracle Coherenceを使用せずにOracle Event Processingの高可用性オプションを実装することはできません。

パフォーマンスのチューニングを検討する場合、Oracle Event Processingアプリケーションに加えて必ずOracle Coherenceの構成を評価します。

詳細は、次を参照してください:

24.1.2 サービス品質の選択

Oracle Event Processingの高可用性を使用することによって、表24-1で一覧表示されている任意のサービス品質オプションを選択できます。欠落イベントおよび複製イベントに対するアプリケーションの許容値と共に期待されるイベント・スループットに適するサービス品質オプションを選択します。プライマリ・サーバーおよびセカンダリ・サーバーのハードウェア要件は、サービス品質がより正確になるほど上がるので注意してください。

表24-1 Oracle Event Processing高可用性のサービス品質

高可用性オプション 欠落イベント? 重複イベント? パフォーマンス・オーバーヘッド

24.1.2.1項「シンプル・フェイルオーバー」


はい(多数)

はい(少数)

ごく少数

24.1.2.2項「バッファリングを使用するシンプル・フェイルオーバー」


はい(少数)脚注1

はい(多数)

24.1.2.3項「軽量キュー・トリミング」


いいえ

はい(少数)

低-中脚注2

24.1.2.4項「JMSによる正確なリカバリ」


いいえ

いいえ


脚注 1  大きさが十分なバッファを構成すれば、欠落イベントは発生しません。

脚注 2  パフォーマンス・オーバーヘッドはチューニング可能です。トリミングの頻度を調整してオーバーヘッドを削減できますが、フェイルオーバー時により多くの複製数が発生します。

24.1.2.1 シンプル・フェイルオーバー

この高可用性のサービス品質は、最低のパフォーマンス・オーバーヘッド(リカバリ時間が速い)および最低のデータ整合性(フェイルオーバー時に欠落イベントと複製イベントの両方の可能性があります)によって特徴付けられます。

プライマリ・サーバーはイベントを出力し、セカンダリ・サーバーはその出力イベントを単に破棄するだけで、出力イベントのバッファリングは行いません。現在のアクティブ・プライマリで障害が発生した場合、通知されると新しいアクティブ・プライマリが選択され、出力イベントの送信を開始します。

フェイルオーバー中には、前のプライマリより前または後で稼働しているかに応じて、新しいプライマリによって多くのイベントが欠落したり複製されたりする場合があります。

フェイルオーバー・ウィンドウ中には、イベントが欠落する場合があります。たとえば、1秒当たり100個のイベントを処理してフェイルオーバーに10秒かかる場合、1000個のイベントが欠落します。

新しいプライマリは、ただちにPRIMARY状態を入力します。BECOMING_PRIMARY状態から新しいプライマリが遷移する前に満たす必要がある構成可能な準備状態のしきい値はありません。

Oracle Event Processingサーバーがマルチサーバー・ドメインに再結合するとき、セカンダリとしてただちに利用可能になります。

この高可用性のサービス品質を実装するには、各出力アダプタの前に高可用性バッファリング出力アダプタを使用して(サイズがゼロのスライディング・ウィンドウを使用して)EPNを構成します。パフォーマンス・オーバーヘッドを削減するには、高可用性入力アダプタを使用せずに一部の着信イベント・プロパティを持つアプリケーション時間を使用します。

詳細は、24.2.1.1項「シンプル・フェイルオーバーの構成方法」を参照してください。

24.1.2.2 バッファリングを使用するシンプル・フェイルオーバー

この高可用性のサービス品質は、低いパフォーマンス・オーバーヘッド(リカバリ時間が速い)および向上したデータ整合性(フェイルオーバー時に欠落イベントはなくても多数の複製イベントの可能性があります)によって特徴付けられます。

プライマリ・サーバーはイベントを出力し、セカンダリ・サーバーはその出力イベントをバッファリングします。現在のアクティブ・プライマリで障害が発生した場合、通知されると新しいアクティブ・プライマリが選択され、出力イベントの送信を開始します。

フェイルオーバー・ウィンドウ中には、イベントが欠落する場合があります。たとえば、1秒当たり100個のイベントを処理してフェイルオーバーに10秒かかる場合、1000個のイベントが欠落します。セカンダリのバッファが大容量の場合、多数の複製が出力される可能性があります。一方、バッファが大容量になるほどメッセージの欠落の可能性は低くなります。

Oracle Event Processingサーバーがマルチサーバー・ドメインに再結合するとき、ご使用のアプリケーションがOracle Event Processing高可用性タイプ1アプリケーションの場合(アプリケーションが既存のセカンダリと完全に同一の出力イベントのシーケンスを出力する必要があります)、セカンダリとして利用できるようになる前にOracle Event Processingの高可用性出力アダプタに構成するwarm-up-window-lengthの時間を待機する必要があります。

この高可用性のサービス品質を実装するには、各出力アダプタの前に高可用性バッファリング出力アダプタを使用して(サイズがゼロより大きいスライディング・ウィンドウを使用して)EPNを構成します。パフォーマンス・オーバーヘッドを削減するには、高可用性入力アダプタを使用せずに一部の着信イベント・プロパティを持つアプリケーション時間を使用します。

詳細は、次を参照してください:

24.1.2.3 軽量キュー・トリミング

この高可用性のサービス品質は、低いパフォーマンス・オーバーヘッド(リカバリ時間が速い)および向上したデータ整合性(フェイルオーバー時に欠落イベントはなくても少数の複製イベントの可能性があります)によって特徴付けられます。

アクティブ・プライマリはセカンダリに通信し、イベントを実際に処理します。これによって、特定の時点でプライマリによって送信されていないイベントのみを含むようにセカンダリは出力イベントのバッファをトリミングできます。イベントは現在のプライマリによって送信された後でのみトリミングされるので、セカンダリによってフェイルオーバーの発生時に任意の出力イベントが欠落しないようにできます。

アクティブ・プライマリがキュー・トリミング・メッセージをアクティブ・セカンダリに送信する頻度は、次のように構成可能です。

  • n個のイベントごと(n>0)

    これによって、フェイルオーバー時に複製された出力イベントの数を最大n個に限定します。

  • nミリ秒ごと(n>0)

キュー・トリミング・アダプタには、アクティブ・プライマリおよびセカンダリの間で統一的にイベントを識別する方法が必要です。お薦めの方法は、イベントを識別するためにアプリケーション時間を使用することですが、一意にイベントを識別する任意のキー値が役に立ちます。

キュー・トリミングの利点は、出力イベントが絶対に欠落しないことです。ただし、通信の必要があるトリミング・メッセージの送信には、アクティブ・プライマリでわずかなパフォーマンス・オーバーヘッドがあります。このオーバーヘッドは、キュー・トリミング・メッセージ頻度の増加に伴い増加します。

フェイルオーバー中には、新しいプライマリがBECOMING_PRIMARY状態に入り、そのイベント・キュー(セカンダリとして累積していく)がフラッシュされるまで、PRIMARY状態には遷移しません。この遷移中には、新しい入力イベントがバッファリングされ、一部の複製イベントが出力される場合があります。

Oracle Event Processingサーバーがマルチサーバー・ドメインに再結合するとき、ご使用のアプリケーションがOracle Event Processing高可用性タイプ1アプリケーションの場合(アプリケーションが既存のセカンダリと完全に同一の出力イベントのシーケンスを出力する必要があります)、セカンダリとして利用できるようになる前にOracle Event Processingの高可用性出力アダプタに構成するwarm-up-window-lengthの時間を待機する必要があります。

この高可用性のサービス品質を実装するには、各入力アダプタおよび高可用性ブロードキャスト出力アダプタの後、各出力アダプタの前に、高可用性入力アダプタを使用してEPNを構成します。

詳細は、24.2.1.3項「軽量キュー・トリミングの構成方法」を参照してください。

24.1.2.4 JMSによる正確なリカバリ

この高可用性のサービス品質は、高パフォーマンス・オーバーヘッド(リカバリ時間が遅い)および最大のデータ整合性(フェイルオーバー時に欠落イベントも複製イベントもありません)によって特徴付けられます。

この高可用性のサービス品質は、JMSの入力アダプタおよび出力アダプタにのみ対応します。

この高可用性のサービス品質では、シングルサーバーのイベント・パスに伴うトランザクションの保証は考慮しませんが、サーバーのセットからの単一の出力は保証します。これを達成するため、セカンダリ・サーバーは、プライマリによってパブリッシュされるイベント・ストリームにJMS経由でリスニングします。図24-7は、この受信イベント・ストリームが、セカンダリが出力キューをトリミングするために使用する信頼できるキュー・トリミング・メッセージの必須ソースであることを示します。JMSが信頼できる転送に構成されている場合、セカンダリで確認されるイベントのストリームは、正確にプライマリによって出力されるイベントのストリームであるため、フェイルオーバーは以前のプライマリによって転送されないイベントを新しいプライマリが正確に出力することを可能にします。

図24-7 JMSによる正確なリカバリ

図24-7の説明が続きます
「図24-7 JMSによる正確なリカバリ」の説明

フェイルオーバー中には、新しいプライマリがBECOMING_PRIMARY状態に入り、そのイベント・キュー(セカンダリとして累積していく)がフラッシュされるまで、PRIMARY状態には遷移しません。この遷移中には、新しい入力イベントがバッファリングされ、複製イベントは出力されません。

Oracle Event Processingサーバーがマルチサーバー・ドメインに再結合するとき、ご使用のアプリケーションがOracle Event Processing高可用性タイプ1アプリケーションの場合(アプリケーションが既存のセカンダリと完全に同一の出力イベントのシーケンスを出力する必要があります)、セカンダリとして利用できるようになる前にOracle Event Processingの高可用性出力アダプタに構成するwarm-up-window-lengthの時間を待機する必要があります。

この高可用性のサービス品質を実装するには、各入力アダプタおよび高可用性相関出力アダプタの後、各出力アダプタの前に、高可用性入力アダプタを使用してEPNを構成します。

スケーラビリティを向上するため、高可用性のサービス品質を持つクラスタ・グループBeanも使用できます。

詳細は、次を参照してください:

24.1.3 高可用性用Oracle Event Processingアプリケーションの設計

Oracle Event Processingの高可用性を宣言的に実装できますが、選択する高可用性のサービス品質から完全に利点を引き出すには、Oracle Event ProcessingアプリケーションがOracle Event Processingの提供する高可用性オプションを利用するように設計する必要があります。

高可用性用Oracle Event Processingアプリケーションを設計するときには、次を考慮してください。

24.1.3.1 プライマリOracle Event Processingの高可用性のユースケース

Oracle Event Processingの高可用性オプションは様々なOracle Event Processingアプリケーション設計に適応させることができますが、通常、Oracle Event Processingの高可用性は次のユースケースを想定して設計されています。

  • アプリケーションは1つ以上の外部システムから入力イベントを受信します。

  • 外部システムは、パブリッシュ/サブスクライブ・スタイルのシステムで、複数のアプリケーションのインスタンスが同時に接続し、同一のメッセージのストリームを受信することを可能にします。

  • アプリケーションは、複数のアプリケーションのコピーが同時に実行される場合、競合が発生しないように外部のシステムを更新しません。

  • アプリケーションは、出力イベントを外部のダウンストリーム・システムに送信します。複数のアプリケーションのインスタンスは、一度にメッセージを送信できるアプリケーションのインスタンスは1つのみですが、ダウンストリーム・システムに同時に接続できます。

このような制約では、次の異なるケースが注目されます。

  • アプリケーションは、障害の発生時に、一部の出力イベントのダウンストリーム・システムへの送信をスキップすることが許可されます。複製も許可されます。

    この場合、次のOracle Event Processing高可用性のサービス品質オプションが適用されます。

  • アプリケーションは、複製イベントをダウンストリーム・システムに送信することを許可されますが、障害の発生時に任意のイベントをスキップすることは禁止されます。

    この場合、次のOracle Event Processing高可用性のサービス品質オプションが適用されます。

  • アプリケーションは、障害の発生中にイベントが送信できない短い一時停止を法として、障害の発生時に完全に同一のメッセージ/イベントのストリームを送信する必要があります。

    この場合、次のOracle Event Processing高可用性のサービス品質オプションが適用されます。

24.1.3.2 高可用性の設計パターン

Oracle Event Processingの高可用性オプションを使用するOracle Event Processingアプリケーションを設計するときには、次の設計パターンを順守します。

24.1.3.2.1 アプリケーションが許容できる最小の高可用性の選択

正確なリカバリの追加コスト(ノードごとのスループットは減少)がアプリケーションに実際に必要になることを確認してください。

24.1.3.2.2 すべての入口/出口ポイントでOracle Event Processing高可用性コンポーネントの使用

各通常入力アダプタの後にOracle Event Processing高可用性入力アダプタを使用する必要があり、各通常出力アダプタの前にOracle Event Processing高可用性出力アダプタを使用する必要があります。

24.1.3.2.3 必要な項目のみ保存

大半のOracle Event Processingシステムは、少数の「充実した」イベントを出力する問合せの対象となる多数の生の入力イベントによって特徴付けられます。通常、このような充実したイベントは数が少なく、かつ価値があるという両方の理由から、それらだけを保存するのが合理的です。

24.1.3.2.4 Oracle CEPアプリケーションの状態の制限

Oracle Event Processingシステムによって、イベントのウィンドウを問い合せることができます。きわめて大きいウィンドウを使用してシステムを構築することは魅力的ですが、障害の発生時に再構築の必要がある状態が増加します。通常、このような技術の高可用性ファシリティは適切に活用されるため、長期状態は分散型キャッシュやデータベースのような安定したストレージに保存されるとみなす方が良さそうです。

24.1.3.2.5 適切なwarm-up-window-length時間の選択

新しいOracle Event ProcessingサーバーがOracle Event Processing高可用性マルチサーバー・ドメインに追加される場合、または既存の障害が発生したサーバーが再起動する場合、サーバーは、サーバーにデプロイされたすべてのアプリケーションが完全に結合するまで、Oracle Event Processing高可用性デプロイメントと通知グループを完全には結合しません。アプリケーションの種類によって、いつ完全に結合したことが宣言されるかが決定されます。

Oracle Event Processingの高可用性アプリケーションは、表24-2で示すように、タイプ1またはタイプ2のアプリケーションとして記述されます。

表24-2 Oracle Event Processingの高可用性アプリケーションの種類

アプリケーション・タイプ 出力イベントの完全に同一のシーケンスを生成する必要があるか? 有限の期間内に入力ストリームを処理することによって内部状態を再構築できる必要があるか? 完全に結合する前にこの期間を待機する必要があるか?

タイプ1

はい

はい

はい

タイプ2

いいえ

いいえ

いいえ


詳細は、24.1.1.1.3項「高可用性マルチサーバー・ドメインの再結合」を参照してください。

24.1.3.2.6 タイプ1アプリケーション

タイプ1アプリケーションは、Oracle Event Processing高可用性デプロイメントおよび通知グループに完全に結合すると、新しいセカンダリが既存のセカンダリと完全に同一の出力イベントのシーケンスを生成するように要求します。

タイプ1アプリケーションは、アプリケーションを実行している他のセカンダリと完全に同一の出力イベントのストリームを生成した後で、有限の期間(warm-up-window-lengthの時間)にその入力ストリームを処理することによって、内部状態を再構築する必要があります。

warm-up-window-lengthの時間は、Oracle Event Processing高可用性出力アダプタ上で構成されます。warm-up-window-lengthの時間の長さは、秒または分単位で指定されます。たとえば、アプリケーションに5分、7分、15分の範囲をベースとするウィンドウを持つOracle CQL問合せが含まれる場合、最小のwarm-up-window-length時間は15分(最大の範囲をベースとするウィンドウ・サイズ)となります。Oracleは、必要な状態が完全に利用可能であることを保証するために数分の値を持つ最大ウィンドウ長もお薦めします。そのため先の例では17分または20分がwarm-up-window-length時間に適した長さとなります。

Oracle Event Processingサーバーは、warm-up-window-lengthの期間中はシステム時間を使用するため、処理中のイベントに関連したアプリケーション時間には直接関連付けられません。

タイプ1アプリケーションは、有限の期間中に発生したイベントのみを対象とします。すべての範囲をベースとするOracle CQLウィンドウは、warm-up-window-length時間よりも短縮する必要があり、タプル・ベースのウィンドウも時間によって条件を付けられる必要があります。たとえば、アプリケーションは、直近の10個のイベントが直近の5分間に発生した場合、それらのイベントのみを考慮します。このプロパティを持たないアプリケーションは、タイプ1アプリケーションではありえずwarm-up-window-lengthの期間を使用できません。たとえば、時間の条件を持たないタプル・ベースでパーティション化されたウィンドウを使用するアプリケーションは、任意の時間量がウィンドウの状態の再構築に必要となるためwarm-up-window-lengthを使用できません。

タイプ1アプリケーションがOracle Event Processingの高可用性ブロードキャスト出力アダプタを使用する場合、一意のアプリケーション専用キーまたはアプリケーション時間のようなモノトニックなキーを使用することによって、イベントをトリミングできます。アプリケーション時間を使用してイベントをトリミングすることは、出力イベントの生成が失敗する可能性があるアプリケーションにおいて、堅牢性が増すと共に不具合への脆弱性が低下するためお薦めです。

詳細は、次を参照してください:

24.1.3.2.7 タイプ2アプリケーション

タイプ2アプリケーションは、Oracle Event Processing高可用性デプロイメントおよび通知グループに完全に結合すると、新しいセカンダリが既存のセカンダリと完全に同一の出力イベントのシーケンスを生成するように要求しません。新しいクラスタ・メンバーが、入力イベントの処理を開始する時点に関して有効な出力イベントを生成するように要求するのみです。

タイプ2アプリケーションはwarm-up-window-length期間を要求しません。

大半のアプリケーションは、タイプ2アプリケーションとなります。アプリケーションが任意の時点で(プライマリOracle Event Processingサーバー上で)起動し、その時点で入力ストリームからイベントの処理を開始して、有効な出力イベントを生成することが多くあります。言い換えれば、アプリケーションの起動中は入力ストリームが一時停止されず、入力イベントは常に生成されて受信します。多くの場合、セカンダリ・ノードを想定することは合理的です。このノードは同一の動作を行い、若干異なる時点では、若干のタイミングの違いのためにプライマリによって生成されるイベントと必ずしも同一にはなりませんが、アプリケーションの観点から有効な出力イベントを生成します。たとえば、市場が開いている間のみ実行する経理用アプリケーションは、次のようにタイプ2アプリケーションとして動作する可能性があります。すべてのサーバーが市場が開く前に起動し、市場のデータ・ストリームと同一の時点で受信イベントの処理を開始します。複数のセカンダリは障害に対する保護のために実行され、市場が開いている間はセカンダリの数が十分であるかぎり、障害が発生するセカンダリを再起動する必要はなく、さらにセカンダリを追加する必要もないためどのセカンダリも状態をリカバーする必要がありません。

24.1.3.2.8 アプリケーションが多重呼出し不変であることの保証

異なるサーバー上でアプリケーションの2つのコピーを実行でき、それらが共有されたキャッシュやデータベースで競合しないようにする必要があります。外部のリレーション(キャッシュや表など)を使用する場合、Oracle Event Processingサーバーがクラスタに再結合するとき、アプリケーションが以前と同一のキャッシュや表にアクセスすることを保証する必要があります: 同一の外部リレーションに対してもう一度結合する必要があります。サーバー上のデータ・ソースは変更されてはならず、データは必ず同一のデータ・ソースから抽出する必要があります。

24.1.3.2.9 外部のソース・イベント・アイデンティティ

多数の高可用性ソリューションは、異なるサーバー間でイベントが相関関係を持つことを必要とし、そのためにはイベントが普遍的に識別可能である必要があります。これを行う最善の方法は、イベントをシードするために、これを提供するOracle Event Processingシステムに頼るのではなく、外部情報(タイムスタンプが望ましい)を使用することです。

詳細は、24.1.3.3.6項「アプリケーション時間の優先」を参照してください。

24.1.3.2.10 イベント順序の重要性の理解

キュー・トリミングを使用するOracle Event Processing高可用性のサービス品質オプションでは、プライマリおよびセカンダリのサーバーが同一の出力イベントを生成するだけでなく、完全に同一の順序で出力イベントを生成する必要があります。

プライマリおよびセカンダリのサーバーは、キュー・トリミングおよび同等ベースのイベント識別子(つまり、モノトニックではないイベント識別子のことで、継続的に増加しないイベント識別子)を使用するOracle Event Processing高可用性のサービス品質オプションを選択する場合、同一の出力イベントを完全に同一の順序で生成する必要があります。この場合、異なる順序で出力イベントを生成すると、障害の発生時に欠落した出力イベントまたは不要な複製出力イベントのいずれかにつながります。

図24-8で示される出力イベント・ストリームを検討してください。プライマリは、出力イベントab、およびcを持ちます。イベントcを出力後、プライマリはセカンダリにキュー・トリミング・メッセージを送信します。

図24-8 イベント順序

図24-8の説明が続きます
「図24-8 イベント順序」の説明

セカンダリは、イベントc自体を含むイベントcの前に生成されたキュー内のすべてのイベントをトリミングします。この場合、イベント・セットは{a, b, e, d, c}となり、これらはプライマリがイベントdおよびeをまだ出力していないため適切ではありません。イベントcのトリミング・メッセージの処理後にフェイルオーバーが発生する場合、イベントは失われます。

イベント順序を管理するには、次の設計パターンを検討してください。

24.1.3.2.11 確定的動作の優先

複数のインスタンス上で実行される場合、アプリケーションが同一の順序でイベントを生成するためには、確定している必要があります。アプリケーションは次の要素に依存させないでください。

  • 異なるマシン上に異なる結果を返す可能性がある乱数ジェネレータ。

  • System.getTimeMillisまたはSystem.nanoTimeなどのメソッド。これらはシステム・クロックが同期されていないため、異なるマシン上で異なる結果を返す可能性があります。

24.1.3.2.12 マルチスレッドの回避

スレッド・スケジューリング・アルゴリズムは時間への依存度がきわめて高いため、マルチスレッドはアプリケーション内で非確定的なソースとなります。つまり、異なるスレッドは異なるマシン上で異なる時間でスケジューリングすることができます。

たとえば、複数のスレッドがOracle Event Processingの高可用性アダプタに並列にイベントを送信するEPNを作成しないでください。そのようなチャネルがOracle Event Processingの高可用性アダプタのイベント・ソースの場合、イベントが異なるスレッドごとに並列にアダプタに送信されるようになり、イベント順序を非確定的にすることができる可能性があります。

避ける必要があるチャネル構成に関する詳細は、次を参照してください。

24.1.3.2.13 モノトニックなイベント識別子の優先

イベント識別子はモノトニックまたは非モノトニックにできます。

モノトニックな識別子は、継続的に増加する識別子です(時間値など)。

非モノトニックな識別子は、継続的に増加せず、重複を含む可能性があります。

通常、モノトニックなイベント識別子を使用してOracle Event Processingアプリケーションを設計する必要があります。モノトニックなイベント識別子を使用すると、Oracle Event Processingの高可用性アダプタは順序通りでないイベントを生成する可能性があるアプリケーションを処理できます。

24.1.3.2.14 高可用性を考慮したOracle CQL問合せの記述

Oracle Event Processingの高可用性を使用するとき、Oracle CQLの問合せの使用方法がすべてサポートされるわけではありません。この制約を解決するには、Oracle CQLの問合せを再定義する必要があります。

詳細は、24.1.3.3項「Oracle CQLの問合せの制約」を参照してください。

24.1.3.2.15 サーバーのカップリングの回避

Oracle Event Processingシステムの最もパフォーマンスが高い高可用性は、サーバー間の調整を必要とせずにサーバーが実行できるときです。通常、共有状態が存在せず、ダウンストリーム・システムが複製を許容する場合にこれは達成できます。高可用性のレベルを上げることは、ダウンストリーム・システムが確認するイベントのストリームの忠実度を上げることを目標としますが、このように忠実度を上げることはパフォーマンスのペナルティを伴います。

24.1.3.2.16 サーバー・リカバリの計画

セカンダリ・サーバーがマルチサーバー・ドメインに再結合するとき、24.1.3.2.5項「適切なwarm-up-window-length時間の選択」で説明されているとおり、現在のプライマリおよびアクティブ・セカンダリの状態と一致するようにサーバーはOracle Event Processingアプリケーションの状態を再構築する時間が必要になります。

マルチサーバー・ドメインに再結合した後に、セカンダリ・サーバーがアクティブ・セカンダリとして利用可能になるためにかかる時間は、要求するアクティブ・セカンダリの数における要因となります。

準備完了前にセカンダリが新しいプライマリになることを宣言される場合、セカンダリは例外をスローします。

24.1.3.3 Oracle CQLの問合せの制約

Oracle Event Processingの高可用性オプションを使用するOracle Event ProcessingアプリケーションでOracle CQLの問合せを記述するときは、次の制約に従ってください。

Oracle CQLの詳細は、『Oracle Fusion Middleware Oracle Event Processing CQL言語リファレンス』を参照してください。

24.1.3.3.1 範囲ベースのウィンドウ

タイプ1アプリケーション(アプリケーションは既存のセカンダリと完全に同一の出力イベントのシーケンスを生成する必要があります)では、すべての範囲ベースのOracle CQLウィンドウは、warm-up-window-lengthの時間よりも短くする必要があります。24.1.3.2.5項「適切なwarm-up-window-length時間の選択」を参照してください。

チャネルは、Oracle CQLの問合せが範囲ベースのウィンドウを含む場合にアプリケーション時間を使用する必要があります。24.1.3.3.6項「アプリケーション時間の優先」を参照してください。

詳細は、『Oracle Fusion Middleware Oracle Event Processing CQL言語リファレンス』の範囲ベースのストリームからリレーションへのウィンドウ演算子に関する項を参照してください。

24.1.3.3.2 タプル・ベースのウィンドウ

タイプ1アプリケーション(アプリケーションは既存のセカンダリと完全に同一の出力イベントのシーケンスを生成する必要があります)では、すべてのタプル・ベースのウィンドウは、時間によって条件が付けられる必要があります。24.1.3.2.5項「適切なwarm-up-window-length時間の選択」を参照してください。

詳細は、『Oracle Fusion Middleware Oracle Event Processing CQL言語リファレンス』のタプル・ベースのストリームからリレーションへのウィンドウ演算子に関する項を参照してください。

24.1.3.3.3 パーティション化されたウィンドウ

パーティション化されたウィンドウを避けることを検討します。 パーティションが再構築できない場合があります。パーティション化されたウィンドウを使用する場合、Oracle Event Processingサーバーの時間がパーティションを再構築するのに十分な長さとなるようにwarm-up-window-lengthを構成します。24.1.3.2.5項「適切なwarm-up-window-length時間の選択」を参照してください。

詳細は、『Oracle Fusion Middleware Oracle Event Processing CQL言語リファレンス』のパーティション化されたストリームからリレーションへのウィンドウ演算子に関する項を参照してください。

24.1.3.3.4 スライディング・ウィンドウ

Oracle CQLの問合せは、マルチサーバー・ドメインに結合する新しいノードが既存ノードと完全に同一の出力イベントを生成することが期待される場合、スライディング・ウィンドウを使用しません。

詳細は、次を参照してください:

  • 24.1.1.1.3項「高可用性マルチサーバー・ドメインの再結合」

  • 『Oracle Fusion Middleware Oracle Event Processing CQL言語リファレンス』のS[range T1 slide T2]に関する項

  • 『Oracle Fusion Middleware Oracle Event Processing CQL言語リファレンス』のS [rows N1 slide N2]に関する項

  • 『Oracle Fusion Middleware Oracle Event Processing CQL言語リファレンス』のS [partition by A1,..., Ak rows N range T1 slide T2]に関する項

24.1.3.3.5 DURATION句および非イベント検出

Oracle CQLの問合せが非イベント検出のDURATION句を含む場合、アプリケーション時間を使用する必要があります。

詳細は、次を参照してください:

24.1.3.3.6 アプリケーション時間の優先

Oracle Event Processingでは、各イベントはイベントの発生時点で関連付けられます。Oracle CQLは次の2種類を認識します。

  • アプリケーション時間: イベントがOracle CQLプロセッサに入る前に、アプリケーションによってOracle CQLの外で各イベントに割り当てられた時間値です。

  • システム時間: System.nanoTime()を必ずコールすることによって、Oracle CQLプロセッサに到着時にイベントに関連付けられる時間値です。

アプリケーション時間は、通常、アプリケーションの高可用性のために必要な最善の選択です。アプリケーション時間は、Oracle Event Processingにイベントが送信される前にイベントに関連付けられるため、アクティブなプライマリおよびセカンダリのインスタンスの全体に渡って整合性があります。一方、システム時間は、システム・クロックが同期されていないことによって、イベントに関連付けられた時間値が各インスタンスで異なる可能性があるためアプリケーションのインスタンスに異なる結果を生成させます。

Oracle CQLの問合せが時間ベースのウィンドウを使用しないアプリケーションにシステム時間を使用できます。イベント・ベースのウィンドウのみ使用するアプリケーションは、受信時間ではなくイベントを受信した順番に依存するためこの場合はシステム時間を使用することができます。

時間ベースのウィンドウを使用するOracle CQLの問合せに関してシステム時間を使用する必要がある場合は、特別なOracle Event Processingの高可用性入力アダプタを使用する必要があります。このアダプタは、受信イベントを補足し、プライマリおよびセカンダリのインスタンス全体に渡る統一的な時間を割り当てます。

24.2 高可用性の構成

この項では、フェイルオーバー、リカバリおよびキュー・トリミングの構成、および高可用性アダプタの構成に関する情報など、必要なサービス品質を提供するためにOracle Event Processingアプリケーションの高可用性を構成する方法について説明します。

この節の内容は以下のとおりです。

24.2.1 高可用性のサービス品質の構成

EPNアセンブリ・ファイルおよびコンポーネント構成ファイルで、Oracle Event Processingの高可用性のサービス品質を構成します。このような構成ファイルに関する一般情報は、次を参照してください。


注意:

Oracle Event Processingの高可用性の構成に変更を加えた後は、Oracle Event Processingアプリケーションを再デプロイする必要があります。23.5項「Oracle Event Processingのデプロイ」を参照してください。


この項では次について説明します:

スケーラビリティ用Oracle Event Processingの高可用性アプリケーションの構成に関する詳細は第25章「スケーラブルなアプリケーションの開発」を参照してください。

24.2.1.1 シンプル・フェイルオーバーの構成方法

スライディング・ウィンドウのサイズをゼロ(0)に設定して、Oracle Event Processingバッファリング出力アダプタを使用してシンプル・フェイルオーバーを構成します。

この手順は、図24-9で示すEPNの例から始まり、シンプル・フェイルオーバー用に構成するために必要なコンポーネントを加えていきます。例24-1は対応するEPNアセンブリ・ファイルを示し、例24-2は対応するコンポーネント構成ファイルを示します。

このOracle Event Processingの高可用性のサービス品質に関する詳細は、24.1.2.1項「シンプル・フェイルオーバー」を参照してください。

図24-9 シンプル・フェイルオーバーのEPN

図24-9の説明が続きます
「図24-9 シンプル・フェイルオーバーのEPN」の説明

例24-1 シンプル・フェイルオーバーのEPNアセンブリ・ファイル

<?xml version="1.0" encoding="UTF-8"?>
<beans ...>

    <wlevs:event-type-repository>
        <wlevs:event-type type-name="HelloWorldEvent">
            <wlevs:class>com.bea.wlevs.event.example.helloworld.HelloWorldEvent</wlevs:class>
        </wlevs:event-type>
    </wlevs:event-type-repository>

    <wlevs:adapter id="helloworldAdapter" 
        class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter" >
        <wlevs:instance-property name="message" value="HelloWorld - the current time is:"/>
    </wlevs:adapter>

    <wlevs:channel id="helloworldInputChannel" event-type="HelloWorldEvent" >
        <wlevs:listener ref="helloworldProcessor"/>
        <wlevs:source ref="helloworldAdapter"/>
    </wlevs:channel>

    <wlevs:processor id="helloworldProcessor" />
    
    <wlevs:channel id="helloworldOutputChannel" event-type="HelloWorldEvent" advertise="true">
        <wlevs:listener>
            <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
        </wlevs:listener>
        <wlevs:source ref="helloworldProcessor"/>
    </wlevs:channel>

</beans>

例24-2 シンプル・フェイルオーバーのコンポーネント構成アセンブリ・ファイル

<?xml version="1.0" encoding="UTF-8"?>
<wlevs:config 
        xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
        xmlns:ha="http://www.oracle.com/ns/cep/config/cluster">
    <processor>
        <name>helloworldProcessor</name>
        <rules>
            <query id="helloworldRule">
                <![CDATA[ select * from helloworldInputChannel [Now] ]]>
            </query>
        </rules>
    </processor>
</wlevs:config>

シンプル・フェイルオーバーを構成するには:

  1. Oracle Coherenceを使用してマルチ・サーバー・ドメインを作成します。

    詳細は、次を参照してください:

    • 『Oracle Fusion Middleware Oracle Event Processing管理者ガイド』Oracle Coherenceを使用してデフォルト・グループを持つOracle Event Processingマルチサーバー・ドメインを作成する方法に関する項

    • 『Oracle Fusion Middleware Oracle Event Processing管理者ガイド』Oracle Coherenceを使用してカスタム・グループを持つOracle Event Processingマルチサーバー・ドメインを作成する方法に関する項

  2. Oracle Event Processingアプリケーションを作成します。

    詳細は、5.2項「Oracle Event Processingプロジェクトの作成」を参照してください。

  3. MANIFEST.MFファイルを編集し、次のImport-Packageエントリを追加します。

    • com.bea.wlevs.ede.api.cluster

    • com.oracle.cep.cluster.hagroups

    • com.oracle.cep.cluster.ha.adapter

    • com.oracle.cep.cluster.ha.api

    詳細は、5.7.2項「Oracle Event ProcessingプロジェクトへのOSGiバンドルの追加方法」を参照してください。

  4. Oracle Event ProcessingアプリケーションのEPNアセンブリ・ファイルを構成し、例24-3に示すように、Oracle Event Processingの高可用性バッファリング出力アダプタを追加します。

    • チャネルhelloworldOutputChannelの後に、providerha-bufferingに設定したwlevs:adapter要素を追加します。

    • idごとにha-bufferingアダプタを参照するように、チャネルhelloworldOutputChannelwlevs:listener要素を更新します。

    • wlevs:listener要素を、HelloWorldBeanクラスを参照するha-bufferingアダプタに追加します。

    例24-3 シンプル・フェイルオーバーのEPNアセンブリ・ファイル: バッファリング出力アダプタ

    <?xml version="1.0" encoding="UTF-8"?>
    <beans ...>
    
        <wlevs:event-type-repository>
            <wlevs:event-type type-name="HelloWorldEvent">
                <wlevs:class>com.bea.wlevs.event.example.helloworld.HelloWorldEvent</wlevs:class>
            </wlevs:event-type>
        </wlevs:event-type-repository>
    
        <wlevs:adapter id="helloworldAdapter" 
            class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter" >
            <wlevs:instance-property name="message" value="HelloWorld - the current time is:"/>
        </wlevs:adapter>
    
        <wlevs:channel id="helloworldInputChannel" event-type="HelloWorldEvent" >
            <wlevs:listener ref="helloworldProcessor"/>
        </wlevs:channel>
    
        <wlevs:processor id="helloworldProcessor" />
    
        <wlevs:channel id="helloworldOutputChannel" event-type="HelloWorldEvent" advertise="true">
            <wlevs:listener ref="myHaSlidingWindowAdapter"/>
            <wlevs:source ref="helloworldProcessor"/>
        </wlevs:channel>
    
        <wlevs:adapter id="myHaSlidingWindowAdapter" provider="ha-buffering" >
            <wlevs:listener>
                <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
            </wlevs:listener>
        </wlevs:adapter>
    
    </beans>
    
  5. オプションで、入力アダプタ(helloworldInputChannel)からのチャネル・ダウンストリームを構成し、例24-4で示されるように適切なイベント・プロパティに基づいてアプリケーションのタイムスタンプを構成します。

    シンプル・フェイルオーバーの場合、イベントはサーバー間で相関関係を持たないためシステムのタイムスタンプを使用できます。ただし、アプリケーションのタイムスタンプが使用されない場合、若干異なる結果がバッファから出力される可能性があります。

    この例では、イベント・プロパティarrivalTimeが使用されます。

    wlevs:expressionをこのイベント・プロパティに設定する必要があります。

    例24-4 アプリケーション・タイムスタンプの構成

    ...
        <wlevs:channel id="helloworldInputChannel" event-type="HelloWorldEvent" >
            <wlevs:listener ref="helloworldProcessor"/>
            <wlevs:source ref="myHaInputAdapter"/>
            <wlevs:application-timestamped>
                <wlevs:expression>arrivalTime</wlevs:expression>
            </wlevs:application-timestamped>
        </wlevs:channel>
    ...
    
  6. Oracle Event Processingの高可用性バッファリング出力アダプタを構成します。

    インスタンス・プロパティwindowLengthを、例24-5で示すようにゼロ(0)に設定します。

    例24-5 バッファリング出力アダプタにおけるwindowLengthの構成

    ...
        <wlevs:adapter id="myHaSlidingWindowAdapter" provider="ha-buffering" >
            <wlevs:listener>
                <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
            </wlevs:listener>
            <wlevs:instance-property name="windowLength" value="0"/>
        </wlevs:adapter>
    ...
    

    詳細は、24.2.2.2.1項「バッファリング出力アダプタのEPNアセンブリ・ファイルの構成」を参照してください。

  7. オプションで、コンポーネント構成ファイルを例24-6で示すように、Oracle Event Processingの高可用性バッファリング出力アダプタを含むように構成します。

    例24-6 高可用性アダプタを使用したシンプル・フェイルオーバーのコンポーネント構成ファイル

    <?xml version="1.0" encoding="UTF-8"?>
    <wlevs:config 
            xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
            xmlns:ha="http://www.oracle.com/ns/cep/config/cluster">
        <processor>
            <name>helloworldProcessor</name>
            <rules>
                <query id="helloworldRule">
                    <![CDATA[ select * from helloworldInputChannel [Now] ]]>
                </query>
            </rules>
        </processor>
    
        <ha:ha-buffering-adapter >
            <name>myHaSlidingWindowAdapter</name>
            <window-length>0</window-length>
        </ha:ha-buffering-adapter >
    
    </wlevs:config>
    

    詳細は、次を参照してください:

  8. ステップ1で作成したデプロイメント・グループにアプリケーションをデプロイします。

    詳細は、23.5項「Oracle Event Processingアプリケーションのデプロイ」を参照してください。

    Oracle Event Processingは、Oracle Event Processingサーバーのいずれかをプライマリとして自動的に選択します。

24.2.1.2 バッファリングを使用するシンプル・フェイルオーバーの構成方法

スライディング・ウィンドウのサイズをゼロ(0)より大きく設定して、Oracle Event Processingバッファリング出力アダプタを使用してシンプル・フェイルオーバーを構成します。

この手順は、図24-10で示すEPNの例から始まり、バッファリングを使用するシンプル・フェイルオーバー用に構成するために必要なコンポーネントを加えていきます。例24-7は対応するEPNアセンブリ・ファイルを示し、例24-8は対応するコンポーネント構成ファイルを示します。

このOracle Event Processingの高可用性のサービス品質に関する詳細は、24.1.2.2項「バッファリングによるシンプル・フェイルオーバー」を参照してください。

図24-10 バッファリングEPNを使用するシンプル・フェイルオーバー

図24-10の説明が続きます
「図24-10 バッファリングEPNを使用シンプル・フェイルオーバー」の説明

例24-7 バッファリングEPNアセンブリ・ファイルを使用するシンプル・フェイルオーバー

<?xml version="1.0" encoding="UTF-8"?>
<beans ...>

    <wlevs:event-type-repository>
        <wlevs:event-type type-name="HelloWorldEvent">
            <wlevs:class>com.bea.wlevs.event.example.helloworld.HelloWorldEvent</wlevs:class>
        </wlevs:event-type>
    </wlevs:event-type-repository>

    <wlevs:adapter id="helloworldAdapter" 
        class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter" >
        <wlevs:instance-property name="message" value="HelloWorld - the current time is:"/>
    </wlevs:adapter>

    <wlevs:channel id="helloworldInputChannel" event-type="HelloWorldEvent" >
        <wlevs:listener ref="helloworldProcessor"/>
        <wlevs:source ref="helloworldAdapter"/>
    </wlevs:channel>

    <wlevs:processor id="helloworldProcessor" />
    
    <wlevs:channel id="helloworldOutputChannel" 
        event-type="HelloWorldEvent" advertise="true">
        <wlevs:listener>
            <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
        </wlevs:listener>
        <wlevs:source ref="helloworldProcessor"/>
    </wlevs:channel>

</beans>

例24-8 バッファリング・コンポーネント構成アセンブリ・ファイルを使用するシンプル・フェイルオーバー

<?xml version="1.0" encoding="UTF-8"?>
<wlevs:config 
        xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
        xmlns:ha="http://www.oracle.com/ns/cep/config/cluster">
    <processor>
        <name>helloworldProcessor</name>
        <rules>
            <query id="helloworldRule">
                <![CDATA[ select * from helloworldInputChannel [Now] ]]>
            </query>
        </rules>
    </processor>
</wlevs:config>

バッファリングを使用してシンプル・フェイルオーバーを構成するには:

  1. Oracle Coherenceを使用してマルチ・サーバー・ドメインを作成します。

    詳細は、次を参照してください:

    • 『Oracle Fusion Middleware Oracle Event Processing管理者ガイド』Oracle Coherenceを使用してデフォルト・グループを持つOracle Event Processingマルチサーバー・ドメインを作成する方法に関する項

    • 『Oracle Fusion Middleware Oracle Event Processing管理者ガイド』Oracle Coherenceを使用してカスタム・グループを持つOracle Event Processingマルチサーバー・ドメインを作成する方法に関する項

  2. Oracle Event Processingアプリケーションを作成します。

    詳細は、5.2項「Oracle Event Processingプロジェクトの作成」を参照してください。

  3. MANIFEST.MFファイルを編集し、次のImport-Packageエントリを追加します。

    • com.bea.wlevs.ede.api.cluster

    • com.oracle.cep.cluster.hagroups

    • com.oracle.cep.cluster.ha.adapter

    • com.oracle.cep.cluster.ha.api

    詳細は、5.7.2項「Oracle Event ProcessingプロジェクトへのOSGiバンドルの追加方法」を参照してください。

  4. Oracle Event ProcessingアプリケーションのEPNアセンブリ・ファイルを構成し、例24-3に示すように、Oracle Event Processingの高可用性バッファリング出力アダプタを追加します。

    • チャネルhelloworldOutputChannelの後に、providerha-bufferingに設定したwlevs:adapter要素を追加します。

    • idごとにha-bufferingアダプタを参照するように、チャネルhelloworldOutputChannelwlevs:listener要素を更新します。

    • wlevs:listener要素を、HelloWorldBeanクラスを参照するha-bufferingアダプタに追加します。

    例24-9 シンプル・フェイルオーバーのEPNアセンブリ・ファイル: バッファリング出力アダプタ

    <?xml version="1.0" encoding="UTF-8"?>
    <beans ...>
    
        <wlevs:event-type-repository>
            <wlevs:event-type type-name="HelloWorldEvent">
                <wlevs:class>com.bea.wlevs.event.example.helloworld.HelloWorldEvent</wlevs:class>
            </wlevs:event-type>
        </wlevs:event-type-repository>
    
        <wlevs:adapter id="helloworldAdapter" 
            class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter" >
            <wlevs:instance-property name="message" value="HelloWorld - the current time is:"/>
        </wlevs:adapter>
    
        <wlevs:channel id="helloworldInputChannel" event-type="HelloWorldEvent" >
            <wlevs:listener ref="helloworldProcessor"/>
        </wlevs:channel>
    
        <wlevs:processor id="helloworldProcessor" />
    
        <wlevs:channel id="helloworldOutputChannel" event-type="HelloWorldEvent" 
            advertise="true">
            <wlevs:listener ref="myHaSlidingWindowAdapter"/>
            <wlevs:source ref="helloworldProcessor"/>
        </wlevs:channel>
    
        <wlevs:adapter id="myHaSlidingWindowAdapter" provider="ha-buffering" >
            <wlevs:listener>
                <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
            </wlevs:listener>
        </wlevs:adapter>
    
    </beans>
    
  5. オプションで、入力アダプタ(helloworldInputChannel)からのチャネル・ダウンストリームを構成し、例24-10で示されるように適切なイベント・プロパティに基づいてアプリケーションのタイムスタンプを構成します。

    バッファリングを使用するシンプル・フェイルオーバーの場合、イベントはサーバー間で相関関係を持たないため、システムのタイムスタンプを使用できます。ただし、アプリケーションのタイムスタンプが使用されない場合、若干異なる結果がバッファから出力される可能性があります。

    この例では、イベント・プロパティarrivalTimeが使用されます。

    wlevs:expressionをこのイベント・プロパティに設定する必要があります。

    例24-10 アプリケーション・タイムスタンプの構成

    ...
        <wlevs:channel id="helloworldInputChannel" event-type="HelloWorldEvent" >
            <wlevs:listener ref="helloworldProcessor"/>
            <wlevs:source ref="myHaInputAdapter"/>
            <wlevs:application-timestamped>
                <wlevs:expression>arrivalTime</wlevs:expression>
            </wlevs:application-timestamped>
        </wlevs:channel>
    ...
    
  6. Oracle Event Processingの高可用性バッファリング出力アダプタを構成します。

    インスタンス・プロパティwindowLengthを、例24-11で示すようにゼロ(0)より大きい値に設定します。

    例24-11 バッファリング出力アダプタにおけるwindowLengthの構成

    ...
        <wlevs:adapter id="myHaSlidingWindowAdapter" provider="ha-buffering" >
            <wlevs:listener>
                <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
            </wlevs:listener>
            <wlevs:instance-property name="windowLength" value="15000"/>
        </wlevs:adapter>
    ...
    

    詳細は、24.2.2.2.1項「バッファリング出力アダプタのEPNアセンブリ・ファイルの構成」を参照してください。

  7. オプションで、コンポーネント構成ファイルを例24-12で示すように、Oracle Event Processingの高可用性バッファリング出力アダプタを含むように構成します。

    例24-12 バッファリング・コンポーネント構成ファイルを使用するシンプル・フェイルオーバー

    <?xml version="1.0" encoding="UTF-8"?>
    <wlevs:config 
            xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
            xmlns:ha="http://www.oracle.com/ns/cep/config/cluster">
        <processor>
            <name>helloworldProcessor</name>
            <rules>
                <query id="helloworldRule">
                    <![CDATA[ select * from helloworldInputChannel [Now] ]]>
                </query>
            </rules>
        </processor>
    
        <ha:ha-buffering-adapter >
            <name>myHaSlidingWindowAdapter</name>
            <window-length>15000</window-length>
        </ha:ha-buffering-adapter >
    
    </wlevs:config>
    

    詳細は、次を参照してください:

  8. アプリケーションが、Oracle Event Processingの高可用性タイプ1アプリケーション(アプリケーションは既存のセカンダリと完全に同一の出力イベントのシーケンスを生成する必要があります)である場合、バッファリング出力アダプタのwarm-up-window-lengthを構成します。

    詳細は、次を参照してください:

  9. ステップ1で作成したデプロイメント・グループにアプリケーションをデプロイします。

    詳細は、23.5項「Oracle Event Processingアプリケーションのデプロイ」を参照してください。

    Oracle Event Processingは、Oracle Event Processingサーバーのいずれかをプライマリとして自動的に選択します。

24.2.1.3 軽量キュー・トリミングの構成方法

Oracle Event Processingの高可用性入力アダプタおよびブロードキャスト出力アダプタを使用して、軽量キュー・トリミングを構成します。

この手順は、図24-11で示すEPNの例から始まり、軽量キュー・トリミング用に構成するために必要なコンポーネントを加えていきます。例24-13は対応するEPNアセンブリ・ファイルを示し、例24-14は対応するコンポーネント構成ファイルを示します。

このOracle Event Processingの高可用性のサービス品質に関する詳細は、24.1.2.3項「軽量キュー・トリミング」を参照してください。

図24-11 軽量キュー・トリミングのEPN

図24-11の説明が続きます
「図24-11 軽量キュー・トリミングのEPN」の説明

例24-13 軽量キュー・トリミングのEPNアセンブリ・ファイル

<?xml version="1.0" encoding="UTF-8"?>
<beans ...>

    <wlevs:event-type-repository>
        <wlevs:event-type type-name="HelloWorldEvent">
            <wlevs:class>com.bea.wlevs.event.example.helloworld.HelloWorldEvent</wlevs:class>
        </wlevs:event-type>
    </wlevs:event-type-repository>

    <wlevs:adapter id="helloworldAdapter" 
        class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter" >
        <wlevs:instance-property name="message" value="HelloWorld - the current time is:"/>
    </wlevs:adapter>

    <wlevs:channel id="helloworldInputChannel" event-type="HelloWorldEvent" >
        <wlevs:listener ref="helloworldProcessor"/>
        <wlevs:source ref="helloworldAdapter"/>
    </wlevs:channel>

    <wlevs:processor id="helloworldProcessor" />
    
    <wlevs:channel id="helloworldOutputChannel" event-type="HelloWorldEvent" 
        advertise="true">
        <wlevs:listener>
            <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
        </wlevs:listener>
        <wlevs:source ref="helloworldProcessor"/>
    </wlevs:channel>

</beans>

例24-14 軽量キュー・トリミングのコンポーネント構成アセンブリ・ファイル

<?xml version="1.0" encoding="UTF-8"?>
<wlevs:config 
        xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
        xmlns:ha="http://www.oracle.com/ns/cep/config/cluster">
    <processor>
        <name>helloworldProcessor</name>
        <rules>
            <query id="helloworldRule">
                <![CDATA[ select * from helloworldInputChannel [Now] ]]>
            </query>
        </rules>
    </processor>
</wlevs:config>

軽量キュー・トリミングを構成するには:

  1. Oracle Coherenceを使用してマルチ・サーバー・ドメインを作成します。

    詳細は、次を参照してください:

    • 『Oracle Fusion Middleware Oracle Event Processing管理者ガイド』Oracle Coherenceを使用してデフォルト・グループを持つOracle Event Processingマルチサーバー・ドメインを作成する方法に関する項

    • 『Oracle Fusion Middleware Oracle Event Processing管理者ガイド』Oracle Coherenceを使用してカスタム・グループを持つOracle Event Processingマルチサーバー・ドメインを作成する方法に関する項

  2. Oracle Event Processingアプリケーションを作成します。

    詳細は、5.2項「Oracle Event Processingプロジェクトの作成」を参照してください。

  3. MANIFEST.MFファイルを編集し、次のImport-Packageエントリを追加します。

    • com.bea.wlevs.ede.api.cluster

    • com.oracle.cep.cluster.hagroups

    • com.oracle.cep.cluster.ha.adapter

    • com.oracle.cep.cluster.ha.api

    詳細は、5.7.2項「Oracle Event ProcessingプロジェクトへのOSGiバンドルの追加方法」を参照してください。

  4. Oracle Event ProcessingアプリケーションのEPNアセンブリ・ファイルを構成し、例24-15に示すように、Oracle Event Processingの高可用性入力アダプタを追加します。

    • 通常の入力アダプタhelloworldAdapterの後に、providerha-inboundに設定したwlevs:adapter要素を追加します。

    • wlevs:listener要素を、idごとにha-inboundアダプタを参照する通常の入力アダプタhelloworldAdapterに追加します。

    • wlevs:source要素を、idごとにha-inboundアダプタを参照するhelloworldInputChannelに追加します。

    例24-15 軽量キュー・トリミングのEPNアセンブリ・ファイル: 高可用性入力アダプタ

    <?xml version="1.0" encoding="UTF-8"?>
    <beans ...>
    
        <wlevs:event-type-repository>
            <wlevs:event-type type-name="HelloWorldEvent">
                <wlevs:class>com.bea.wlevs.event.example.helloworld.HelloWorldEvent</wlevs:class>
            </wlevs:event-type>
        </wlevs:event-type-repository>
    
        <wlevs:adapter id="helloworldAdapter" 
            class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter" >
            <wlevs:instance-property name="message" value="HelloWorld - the current time is:"/>
            <wlevs:listener ref="myHaInputAdapter"/>
        </wlevs:adapter>
    
        <wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
        </wlevs:adapter>
    
        <wlevs:channel id="helloworldInputChannel" event-type="HelloWorldEvent" >
            <wlevs:listener ref="helloworldProcessor"/>
            <wlevs:source ref="myHaInputAdapter"/>
        </wlevs:channel>
    
        <wlevs:processor id="helloworldProcessor" />
    
        <wlevs:channel id="helloworldOutputChannel" event-type="HelloWorldEvent" 
            advertise="true">
            <wlevs:listener>
                <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
            </wlevs:listener>
            <wlevs:source ref="helloworldProcessor"/>
        </wlevs:channel>
    
    </beans>
    
  5. Oracle Event ProcessingアプリケーションのEPNアセンブリ・ファイルを構成し、例24-16に示すように、Oracle Event Processingの高可用性ブロードキャスト出力アダプタを追加します。

    • チャネルhelloworldOutputChannelの後に、providerha-broadcastに設定したwlevs:adapter要素を追加します。

    • idごとにha-broadcastアダプタを参照するように、チャネルhelloworldOutputChannelwlevs:listener要素を更新します。

    • wlevs:listener要素を、HelloWorldBeanクラスを参照するha-broadcastアダプタに追加します。

    例24-16 軽量キュー・トリミングのEPNアセンブリ・ファイル: ブロードキャスト出力アダプタ

    <?xml version="1.0" encoding="UTF-8"?>
    <beans ...>
    
        <wlevs:event-type-repository>
            <wlevs:event-type type-name="HelloWorldEvent">
                <wlevs:class>com.bea.wlevs.event.example.helloworld.HelloWorldEvent</wlevs:class>
            </wlevs:event-type>
        </wlevs:event-type-repository>
    
        <wlevs:adapter id="helloworldAdapter" 
            class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter" >
            <wlevs:instance-property name="message" value="HelloWorld - the current time is:"/>
            <wlevs:listener ref="myHaInputAdapter"/>
        </wlevs:adapter>
    
        <wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
        </wlevs:adapter>
    
        <wlevs:channel id="helloworldInputChannel" event-type="HelloWorldEvent" >
            <wlevs:listener ref="helloworldProcessor"/>
            <wlevs:source ref="myHaInputAdapter"/>
        </wlevs:channel>
    
        <wlevs:processor id="helloworldProcessor" />
    
        <wlevs:channel id="helloworldOutputChannel" event-type="HelloWorldEvent" 
            advertise="true">
            <wlevs:listener ref="myHaBroadcastAdapter"/>
            <wlevs:source ref="helloworldProcessor"/>
        </wlevs:channel>
    
        <wlevs:adapter id="myHaBroadcastAdapter" provider="ha-broadcast" >
            <wlevs:listener>
                <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
            </wlevs:listener>
        </wlevs:adapter>
    
    </beans>
    
  6. Oracle Event Processingの高可用性入力アダプタを構成します。

    次の例の構成を検討します。

    詳細は、24.2.2.1.1項「高可用性入力アダプタのEPNアセンブリ・ファイルの構成」を参照してください。

    例24-17 高可用性入力アダプタ: デフォルト構成

    この例は、すべてのデフォルトを使用した高可用性入力アダプタの構成を示します。必須キーはすべてのイベント・プロパティに基づいており、高可用性入力アダプタが時間値を割り当てる対象のイベント・プロパティは、arrivalTimeという名前のイベント・プロパティです。

    ...
        <wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
            <wlevs:instance-property name="timeProperty" value="arrivalTime"/>
        </wlevs:adapter>
    ...
    

    例24-18 高可用性入力アダプタ: タプル・イベント

    この例は、すべてのデフォルトを使用した高可用性入力アダプタの構成を示します。必須キーはすべてのイベント・プロパティに基づいており、高可用性入力アダプタが時間値を割り当てる対象のイベント・プロパティは、arrivalTimeという名前のイベント・プロパティです。イベントはタプル・ベースのイベントであるため、eventTypeプロパティを使用してイベント型(MyEventType)を指定する必要があります。

    ...
        <wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
            <wlevs:instance-property name="timeProperty" value="arrivalTime"/>
            <wlevs:instance-property name="eventType" value="MyEventType"/>
        </wlevs:adapter>
    ...
    

    例24-19 高可用性入力アダプタ: 1つのイベント・プロパティのキー

    この例は、高可用性入力アダプタの構成を示します。ここでは、必須キーはイベント・プロパティ(idという名前)に基づいており、高可用性入力アダプタが時間値を割り当てる対象のイベント・プロパティは、arrivalTimeという名前のイベント・プロパティです。

    ...
        <wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
            <wlevs:instance-property name="keyProperties" value="id"/>
            <wlevs:instance-property name="timeProperty" value="arrivalTime"/>
        </wlevs:adapter>
    ...
    

    例24-20 高可用性入力アダプタ: 複数のイベント・プロパティのキー

    この例は、高可用性入力アダプタの構成を示します。ここでは、必須キーは1つ以上のイベント・プロパティ(orderIDおよびaccountIDプロパティ)に基づいており、高可用性入力アダプタが時間値を割り当てる対象のイベント・プロパティは、arrivalTimeという名前のイベント・プロパティです。複合キーのJavaクラス(com.acme.MyCompoundKeyClass)は必須で、その実装は例24-21で示されます。hashCodeおよびequalsメソッドが必要になります。keyClassを指定するとき、keyPropertiesインスタンス・プロパティは無視されます。Oracle Event Processingは、複合キーがkeyClass内のすべてのゲッター・メソッドに基づくと仮定します。

    ...
        <wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
            <wlevs:instance-property name="timeProperty" value="arrivalTime"/>
            <wlevs:instance-property name="keyClass" value="com.acme.MyCompoundKeyClass"/>
        </wlevs:adapter>
    ...
    

    例24-21 MyCompoundKeyClassの実装

    package com.acme;
    
    public class MyCompoundKeyClass {
        private int orderID;
        private int accountID;
    
        public MyCompoundKeyClass() {}
    
        public int getOrderID() {
            return orderID;
        }
        public setOrderID(int orderID) {
            this.orderID = orderID;
        }
        public int getAccountID() {
            return accountID;
        }
        public setOrderID(int accountID) {
            this.accountID = accountID;
        }
    
        public int hashCode() {
        int hash = 1;
        hash = hash * 31 + orderID.hashCode();
        hash = hash * 31 + (accountID == null ? 0 : accountID.hashCode());
        return hash;
        }
    
        public boolean equals(Object obj) {
            if (obj == this) return true;
            if (obj == null) return false;
            if (!(obj instanceof MyCompoundKeyClass)) return false;
            MyCompoundKeyClass k = (MyCompoundKeyClass) obj;
            return k.accountID == accountID && k.orderID == orderID;
        }
    }
    
  7. 入力アダプタ(helloworldInputChannel)からのチャネル・ダウンストリームを構成し、例24-22で示される高可用性入力アダプタのtimeProperty設定に基づいて、アプリケーションのタイムスタンプを構成します。

    wlevs:expressiontimePropertyの値に設定する必要があります。

    例24-22 アプリケーション・タイムスタンプの構成

    ...
        <wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
            <wlevs:instance-property name="keyProperties" value="id"/>
            <wlevs:instance-property name="eventType" value="HelloWorldEvent"/>
            <wlevs:instance-property name="timeProperty" value="arrivalTime"/>
        </wlevs:adapter>
    
        <wlevs:channel id="helloworldInputChannel" event-type="HelloWorldEvent" >
            <wlevs:listener ref="helloworldProcessor"/>
            <wlevs:source ref="myHaInputAdapter"/>
            <wlevs:application-timestamped>
                <wlevs:expression>arrivalTime</wlevs:expression>
            </wlevs:application-timestamped>
        </wlevs:channel>
    ...
    
  8. Oracle Event Processingの高可用性ブロードキャスト出力アダプタを構成します。

    次の例の構成を検討します。

    詳細は、24.2.2.3.1項「ブロードキャスト出力アダプタのEPNアセンブリ・ファイルの構成」を参照してください。

    例24-23 ブロードキャスト出力アダプタ: デフォルト構成

    この例は、すべてのデフォルトを使用したブロードキャスト出力アダプタの構成を示します。必須キーはすべてのイベント・プロパティに基づいており、キーの値は非モノトニック(継続的に増加しません)かつ全体順序(一意)です。

    ...
        <wlevs:adapter id="myHaSlidingWindowAdapter" provider="ha-broadcast" >
            <wlevs:listener>
                <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
            </wlevs:listener>
        </wlevs:adapter>
    ...
    

    例24-24 ブロードキャスト出力アダプタ: 1つのイベント・プロパティのキー

    この例は、ブロードキャスト出力アダプタの構成を示します。ここでは、必須キーはイベント・プロパティ(timePropertyという名前)に基づいており、キーの値はモノトニック(継続的に増加します)かつ全体順序ではありません(一意ではありません)。

    ...
        <wlevs:adapter id="myHaSlidingWindowAdapter" provider="ha-broadcast" >
            <wlevs:listener>
                <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
            </wlevs:listener>
            <wlevs:instance-property name="keyProperties" value="timeProperty"/>
            <wlevs:instance-property name="monotonic" value="true"/>
            <wlevs:instance-property name="totalOrder" value="false"/>
        </wlevs:adapter>
    ...
    

    例24-25 ブロードキャスト出力アダプタ: 複数のイベント・プロパティのキー

    この例は、ブロードキャスト出力アダプタの構成を示します。ここでは、必須キーは1つ以上のイベント・プロパティ(timePropertyおよびaccountIDプロパティ)に基づいており、キーの値はモノトニック(継続的に増加します)かつ全体順序(一意)です。複合キーのJavaクラス(com.acme.MyCompoundKeyClass)は必須で、その実装は例24-26で示されます。hashCodeおよびequalsメソッドが必要になります。keyClassを指定するとき、keyPropertiesインスタンス・プロパティは無視されます。Oracle Event Processingは、複合キーがkeyClass内のすべてのゲッター・メソッドに基づくと仮定します。

    ...
        <wlevs:adapter id="myHaSlidingWindowAdapter" provider="ha-broadcast" >
            <wlevs:listener>
                <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
            </wlevs:listener>
            <wlevs:instance-property name="keyClass" value="com.acme.MyCompoundKeyClass"/>
            <wlevs:instance-property name="monotonic" value="true"/>
            <wlevs:instance-property name="totalOrder" value="true"/>
        </wlevs:adapter>
    ...
    

    例24-26 MyCompoundKeyClassの実装

    package com.acme;
    
    public class MyCompoundKeyClass {
        private int timeProperty;
        private int accountID;
    
        public MyCompoundKeyClass() {}
    
        public int getTimeProperty() {
            return orderID;
        }
        public setTimeProperty(int timeProperty) {
            this.timeProperty = timeProperty;
        }
        public int getAccountID() {
            return accountID;
        }
        public setOrderID(int accountID) {
            this.accountID = accountID;
        }
    
        public int hashCode() {
        int hash = 1;
        hash = hash * 31 + timeProperty.hashCode();
        hash = hash * 31 + (accountID == null ? 0 : accountID.hashCode());
        return hash;
        }
    
        public boolean equals(Object obj) {
            if (obj == this) return true;
            if (obj == null) return false;
            if (!(obj instanceof MyCompoundKeyClass)) return false;
            MyCompoundKeyClass k = (MyCompoundKeyClass) obj;
            return k.accountID == accountID && k.orderID == orderID;
        }
    }
    
  9. オプションで、コンポーネント構成ファイルを例24-27で示すように、Oracle Event Processingの高可用性入力アダプタおよびバッファリング出力アダプタを含むように構成します。

    例24-27 軽量キュー・トリミングのコンポーネント構成ファイル

    <?xml version="1.0" encoding="UTF-8"?>
    <wlevs:config 
            xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
            xmlns:ha="http://www.oracle.com/ns/cep/config/cluster">
        <processor>
            <name>helloworldProcessor</name>
            <rules>
                <query id="helloworldRule">
                    <![CDATA[ select * from helloworldInputChannel [Now] ]]>
                </query>
            </rules>
        </processor>
    
        <ha:ha-inbound-adapter>
            <name>myHaInputAdapter</name>
        </ha:ha-inbound-adapter>
     
        <ha:ha-broadcast-adapter>
            <name>myHaBroadcastAdapter</name>
            <trimming-interval units="events">10</trimming-interval>
        </ha:ha-broadcast-adapter>
    
    </wlevs:config>
    

    詳細は、次を参照してください:

  10. アプリケーションが、Oracle Event Processingの高可用性タイプ1アプリケーション(アプリケーションは既存のセカンダリと完全に同一の出力イベントのシーケンスを生成する必要があります)である場合、ブロードキャスト出力アダプタのwarm-up-window-lengthを構成します。

    詳細は、次を参照してください:

  11. ステップ1で作成したデプロイメント・グループにアプリケーションをデプロイします。

    詳細は、23.5項「Oracle Event Processingアプリケーションのデプロイ」を参照してください。

    Oracle Event Processingは、Oracle Event Processingサーバーのいずれかをプライマリとして自動的に選択します。

24.2.1.4 JMSによる正確なリカバリの構成方法

Oracle Event Processingの高可用性入力アダプタおよび相関出力アダプタを使用して、JMSによる正確なリカバリを構成します。

この手順では、図24-12が示すEPNの例を作成する方法を説明します。例24-28は対応するEPNアセンブリ・ファイルを示し、例24-29は対応するコンポーネント構成ファイルを示します。

このOracle Event Processingの高可用性のサービス品質に関する詳細は、24.1.2.4項「JMSによる正確なリカバリ」を参照してください。


注意:

正確なリカバリのためにJMSアダプタによって使用されるJMS宛先は、キューではなくトピックである必要があります。


図24-12 JMSのEPNによる正確なリカバリ

図24-12の説明が続きます
「図24-12 JMSのEPNによる正確なリカバリ」の説明

例24-28 JMS EPNアセンブリ・ファイルを使用して精度の高いリカバリ

<?xml version="1.0" encoding="UTF-8"?>
<beans ... >

    <wlevs:event-type-repository>
        <wlevs:event-type type-name="StockTick">
            <wlevs:properties>
                <wlevs:property name="lastPrice" type="double" />
                <wlevs:property name="symbol" type="char" />
            </wlevs:properties>
        </wlevs:event-type>
    </wlevs:event-type-repository>

    <wlevs:adapter id="JMSInboundAdapter" provider="jms-inbound">
        <wlevs:listener ref="myHaInputAdapter"/>
    </wlevs:adapter>

    <wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
        <wlevs:instance-property name="keyProperties" value="sequenceNo"/>
        <wlevs:instance-property name="timeProperty" value="inboundTime"/>
    </wlevs:adapter>

    <wlevs:channel id="channel1" event-type="StockTick">
        <wlevs:listener ref="processor1" />
        <wlevs:source ref="myHaInputAdapter"/>
        <wlevs:application-timestamped>
            <wlevs:expression>inboundTime</wlevs:expression>
        </wlevs:application-timestamped>
    </wlevs:channel>

    <wlevs:processor id="processor1">
        <wlevs:listener ref="channel2" />
    </wlevs:processor>

    <wlevs:adapter id="myHaCorrelatingAdapter" provider="ha-correlating" >
        <wlevs:instance-property name="correlatedSource" ref="clusterCorrelatingOutstream"/> 
        <wlevs:instance-property name="failOverDelay" value="2000"/> 
        <wlevs:listener ref="JMSOutboundAdapter"/>
    </wlevs:adapter>

    <wlevs:channel id="channel2" event-type="StockTick">
        <wlevs:listener ref="myHaCorrelatingAdapter" />
    </wlevs:channel>

    <wlevs:adapter id="JMSOutboundAdapter" provider="jms-outbound">
    </wlevs:adapter>

    <wlevs:adapter id="JMSInboundAdapter2" provider="jms-inbound">
    </wlevs:adapter>

    <wlevs:channel id="clusterCorrelatingOutstream" event-type="StockTick" advertise="true">
        <wlevs:source ref="JMSInboundAdapter2"/>
    </wlevs:channel> 
</beans>

例24-29 JMSコンポーネント構成アセンブリ・ファイルを使用して精度の高いリカバリ

<?xml version="1.0" encoding="UTF-8"?>
<wlevs:config 
        xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
        xmlns:ha="http://www.oracle.com/ns/cep/config/cluster">
    <processor>
        <name>processor1</name>
        <rules>
            <query id="helloworldRule">
                <![CDATA[ select * from channel1 [Now] ]]>
            </query>
        </rules>
    </processor>
</wlevs:config>

JMSによる正確なリカバリを構成するには:

  1. Oracle Coherenceを使用してマルチ・サーバー・ドメインを作成します。

    詳細は、次を参照してください:

    • 『Oracle Fusion Middleware Oracle Event Processing管理者ガイド』Oracle Coherenceを使用してデフォルト・グループを持つOracle Event Processingマルチサーバー・ドメインを作成する方法に関する項

    • 『Oracle Fusion Middleware Oracle Event Processing管理者ガイド』Oracle Coherenceを使用してカスタム・グループを持つOracle Event Processingマルチサーバー・ドメインを作成する方法に関する項

  2. Oracle Event Processingアプリケーションを作成します。

    詳細は、5.2項「Oracle Event Processingプロジェクトの作成」を参照してください。

  3. MANIFEST.MFファイルを編集し、次のImport-Packageエントリを追加します。

    • com.bea.wlevs.ede.api.cluster

    • com.oracle.cep.cluster.hagroups

    • com.oracle.cep.cluster.ha.adapter

    • com.oracle.cep.cluster.ha.api

    詳細は、5.7.2項「Oracle Event ProcessingプロジェクトへのOSGiバンドルの追加方法」を参照してください。

  4. Oracle Event ProcessingアプリケーションのEPNアセンブリ・ファイルを構成し、例24-30に示すように、Oracle Event Processingの高可用性入力アダプタを追加します。

    • 通常の入力アダプタJMSInboundAdapterの後に、providerha-inboundに設定したwlevs:adapter要素を追加します。

    • wlevs:listener要素を、idごとにha-inboundアダプタを参照する通常の入力アダプタJMSInboundAdapterに追加します。

    • wlevs:source要素を、idごとにha-inboundアダプタを参照するチャネルchannel1に追加します。

    例24-30 JMSのEPNアセンブリ・ファイルによる正確なリカバリ: 高可用性入力アダプタ

    <?xml version="1.0" encoding="UTF-8"?>
    <beans ...>
    
        <wlevs:event-type-repository>
            <wlevs:event-type type-name="StockTick">
                <wlevs:properties>
                    <wlevs:property name="lastPrice" type="double" />
                    <wlevs:property name="symbol" type="char" />
                </wlevs:properties>
            </wlevs:event-type>
        </wlevs:event-type-repository>
    
        <wlevs:adapter id="JMSInboundAdapter" provider="jms-inbound">
            <wlevs:listener ref="myHaInputAdapter"/>
        </wlevs:adapter>
    
        <wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
        </wlevs:adapter>
    
        <wlevs:channel id="channel1" event-type="StockTick">
            <wlevs:listener ref="processor1" />
            <wlevs:source ref="myHaInputAdapter"/>
        </wlevs:channel>
    
    ...
    
    </beans>
    
  5. Oracle Event ProcessingアプリケーションのEPNアセンブリ・ファイルを構成し、例24-31に示すように、Oracle Event Processingの高可用性相関出力アダプタを追加します。

    • チャネルchannel2の後に、providerha-correlatingに設定したwlevs:adapter要素を追加します。

    • idごとにha-correlatingアダプタを参照するように、チャネルchannel2wlevs:listener要素を更新します。

    • wlevs:listener要素を、JMSOutboundAdapterクラスを参照するha-correlatingアダプタに追加します。

    例24-31 JMSのEPNアセンブリ・ファイルによる正確なリカバリ: 相関出力アダプタ

    <?xml version="1.0" encoding="UTF-8"?>
    <beans ...>
    
        <wlevs:event-type-repository>
            <wlevs:event-type type-name="StockTick">
                <wlevs:properties>
                    <wlevs:property name="lastPrice" type="double" />
                    <wlevs:property name="symbol" type="char" />
                </wlevs:properties>
            </wlevs:event-type>
        </wlevs:event-type-repository>
    
        <wlevs:adapter id="JMSInboundAdapter" provider="jms-inbound">
            <wlevs:listener ref="myHaInputAdapter"/>
        </wlevs:adapter>
    
        <wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
        </wlevs:adapter>
    
        <wlevs:channel id="channel1" event-type="StockTick">
            <wlevs:listener ref="processor1" />
            <wlevs:source ref="myHaInputAdapter"/>
        </wlevs:channel>
    
        <wlevs:processor id="processor1">
            <wlevs:listener ref="channel2" />
        </wlevs:processor>
    
        <wlevs:channel id="channel2" event-type="StockTick">
            <wlevs:listener ref="myHaCorrelatingAdapter" />
        </wlevs:channel>
    
        <wlevs:adapter id="myHaCorrelatingAdapter" provider="ha-correlating" >
            <wlevs:listener ref="JMSOutboundAdapter"/>
        </wlevs:adapter>
    
        <wlevs:adapter id="JMSOutboundAdapter" provider="jms-outbound">
        </wlevs:adapter>
    
    ...
    
    </beans>
    
  6. Oracle Event Processingの高可用性入力アダプタを構成します。

    次の例の構成を検討します。

    詳細は、24.2.2.1.1項「高可用性入力アダプタのEPNアセンブリ・ファイルの構成」を参照してください。

    例24-32 高可用性入力アダプタ: デフォルト構成

    この例は、すべてのデフォルトを使用した高可用性入力アダプタの構成を示します。必須キーはすべてのイベント・プロパティに基づいており、高可用性入力アダプタが時間値を割り当てる対象のイベント・プロパティは、arrivalTimeという名前のイベント・プロパティです。

    ...
        <wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
            <wlevs:instance-property name="timeProperty" value="arrivalTime"/>
        </wlevs:adapter>
    ...
    

    例24-33 高可用性入力アダプタ: タプル・イベント

    この例は、すべてのデフォルトを使用した高可用性入力アダプタの構成を示します。必須キーはすべてのイベント・プロパティに基づいており、高可用性入力アダプタが時間値を割り当てる対象のイベント・プロパティは、arrivalTimeという名前のイベント・プロパティです。イベントはタプル・ベースのイベントであるため、eventTypeプロパティを使用してイベント型(MyEventType)を指定する必要があります。

    ...
        <wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
            <wlevs:instance-property name="timeProperty" value="arrivalTime"/>
            <wlevs:instance-property name="eventType" value="MyEventType"/>
        </wlevs:adapter>
    ...
    

    例24-34 高可用性入力アダプタ: 1つのイベント・プロパティのキー

    この例は、高可用性入力アダプタの構成を示します。ここでは、必須キーはイベント・プロパティ(sequenceNoという名前)に基づいており、高可用性入力アダプタが時間値を割り当てる対象のイベント・プロパティは、inboundTimeという名前のイベント・プロパティです。

    ...
        <wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
            <wlevs:instance-property name="keyProperties" value="sequenceNo"/>
            <wlevs:instance-property name="timeProperty" value="inboundTime"/>
        </wlevs:adapter>
    ...
    

    例24-35 高可用性入力アダプタ: 複数のイベント・プロパティのキー

    この例は、高可用性入力アダプタの構成を示します。ここでは、必須キーは1つ以上のイベント・プロパティ(orderIDおよびaccountIDプロパティ)に基づいており、高可用性入力アダプタが時間値を割り当てる対象のイベント・プロパティは、arrivalTimeという名前のイベント・プロパティです。複合キーのJavaクラス(com.acme.MyCompoundKeyClass)は必須で、その実装は例24-36で示されます。hashCodeおよびequalsメソッドが必要になります。keyClassを指定するとき、keyPropertiesインスタンス・プロパティは無視されます。Oracle Event Processingは、複合キーがkeyClass内のすべてのゲッター・メソッドに基づくと仮定します。

    ...
        <wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
            <wlevs:instance-property name="timeProperty" value="arrivalTime"/>
            <wlevs:instance-property name="keyClass" value="com.acme.MyCompoundKeyClass"/>
        </wlevs:adapter>
    ...
    

    例24-36 MyCompoundKeyClassの実装

    package com.acme;
    
    public class MyCompoundKeyClass {
        private int orderID;
        private int accountID;
    
        public MyCompoundKeyClass() {}
    
        public int getOrderID() {
            return orderID;
        }
        public setOrderID(int orderID) {
            this.orderID = orderID;
        }
        public int getAccountID() {
            return accountID;
        }
        public setOrderID(int accountID) {
            this.accountID = accountID;
        }
    
        public int hashCode() {
        int hash = 1;
        hash = hash * 31 + orderID.hashCode();
        hash = hash * 31 + (accountID == null ? 0 : accountID.hashCode());
        return hash;
        }
    
        public boolean equals(Object obj) {
            if (obj == this) return true;
            if (obj == null) return false;
            if (!(obj instanceof MyCompoundKeyClass)) return false;
            MyCompoundKeyClass k = (MyCompoundKeyClass) obj;
            return k.accountID == accountID && k.orderID == orderID;
        }
    }
    
  7. 入力アダプタ(channel1)からのチャネル・ダウンストリームを構成し、例24-37で示される高可用性入力アダプタのtimeProperty設定に基づいて、アプリケーションのタイムスタンプを構成します。

    wlevs:expressiontimePropertyの値に設定する必要があります。

    例24-37 アプリケーション・タイムスタンプの構成

    ...
        <wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
            <wlevs:instance-property name="eventType" value="HelloWorldEvent"/>
            <wlevs:instance-property name="keyProperties" value="sequenceNo"/>
            <wlevs:instance-property name="timeProperty" value="inboundTime"/>
        </wlevs:adapter>
    
        <wlevs:channel id="channel1" event-type="StockTick">
            <wlevs:listener ref="processor1" />
            <wlevs:source ref="myHaInputAdapter"/>
            <wlevs:application-timestamped>
                <wlevs:expression>inboundTime</wlevs:expression>
            </wlevs:application-timestamped>
        </wlevs:channel>
    ...
    
  8. Oracle Event Processingの高可用性相関出力アダプタfailOverDelayを構成します。

    例24-38は、相関出力アダプタの構成を示し、ここではfailOverDelayが2000ミリ秒になっています。

    例24-38 相関出力アダプタの構成: failOverDelay

    ...
        <wlevs:adapter id="myHaCorrelatingAdapter" provider="ha-correlating" >
            <wlevs:listener ref="JMSOutboundAdapter"/>
            <wlevs:instance-property name="failOverDelay" value="2000"/>
        </wlevs:adapter>
    ...
    

    詳細は、24.2.2.4.1項「相関出力アダプタのEPNアセンブリ・ファイルの構成」を参照してください。

  9. 2番目の通常JMS入力アダプタを作成します。

    例24-39は、JMSInboundAdapter2という名前のJMSアダプタを示します。

    例24-39 インバウンドJMSアダプタのアセンブリ・ファイル

    ...
        <wlevs:adapter id="JMSInboundAdapter2" provider="jms-inbound">
        </wlevs:adapter>
    ...
    

    このJMS入力アダプタは、1番目のJMS入力アダプタ(JMSInboundAdapterなど)と同一となるように構成する必要があります。例24-40は、両方のJMS入力アダプタのコンポーネント構成ファイルを示します。両アダプタは、同一のプロバイダを含む完全に同一の構成になる必要があります。

    例24-40 インバウンドJMSアダプタのコンポーネント構成ファイル

    <?xml version="1.0" encoding="UTF-8"?>
    <wlevs:config 
            xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
            xmlns:ha="http://www.oracle.com/ns/cep/config/cluster">
        ...
        <jms-adapter>
            <name>JMSInboundAdapter</name>
            <jndi-provider-url>t3://localhost:7001</jndi-provider-url>
            <destination-jndi-name>./Topic1</destination-jndi-name>
            <user>weblogic</user>
            <password>weblogic</password>
            <work-manager>JettyWorkManager</work-manager>
            <concurrent-consumers>1</concurrent-consumers>
        </jms-adapter>
    
        <jms-adapter>
            <name>JMSInboundAdapter2</name>
            <jndi-provider-url>t3://localhost:7001</jndi-provider-url>
            <destination-jndi-name>./Topic1</destination-jndi-name>
            <user>weblogic</user>
            <password>weblogic</password>
            <work-manager>JettyWorkManager</work-manager>
            <concurrent-consumers>1</concurrent-consumers>
        </jms-adapter>
        ...
    </wlevs:config>
    
  10. 相関ソースとして機能するチャネルを作成します。

    ソースとして2番目の通常JMS入力アダプタを持つこのチャネルを構成する必要があります。

    例24-41は、ソースがJMSInboundAdapter2clusterCorrelatingOutstreamという名前の相関ソースを示します。

    例24-41 相関ソースの作成

    ...
        <wlevs:adapter id="JMSInboundAdapter2" provider="jms-inbound">
        </wlevs:adapter>
    
        <wlevs:channel id="clusterCorrelatingOutstream" event-type="StockTick" advertise="true">
            <wlevs:source ref="JMSInboundAdapter2"/>
        </wlevs:channel> 
    
  11. correlatedSourceを持つOracle Event Processingの高可用性相関出力アダプタを構成します。

    例24-38は、相関出力アダプタの構成を示し、ここではcorrelatedSourceclusterCorrelatingOutstreamになっています。

    例24-42 相関出力アダプタ: correlatedSource

    ...
        <wlevs:adapter id="myHaCorrelatingAdapter" provider="ha-correlating" >
            <wlevs:listener ref="JMSOutboundAdapter"/>
            <wlevs:instance-property name="failOverDelay" value="2000"/>
            <wlevs:instance-property name="correlatedSource" value="clusterCorrelatingOutstream"/>
        </wlevs:adapter>
    ...
    

    詳細は、24.2.2.4.1項「相関出力アダプタのEPNアセンブリ・ファイルの構成」を参照してください。

  12. アプリケーションが、Oracle Event Processingの高可用性タイプ1アプリケーション(アプリケーションは既存のセカンダリと完全に同一の出力イベントのシーケンスを生成する必要があります)である場合、相関出力アダプタのwarm-up-window-lengthを構成します。

    詳細は、次を参照してください:

  13. コンポーネント構成ファイルを構成し、例24-43で示すように、インバウンドJMSアダプタおよびアウトバウンドJMSアダプタのsession-transactedを有効にします。

    例24-43 インバウンド/アウトバウンドJMSアダプタのコンポーネント構成ファイル

    <?xml version="1.0" encoding="UTF-8"?>
    <wlevs:config 
            xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
            xmlns:ha="http://www.oracle.com/ns/cep/config/cluster">
        ...
        <jms-adapter>
            <name>JMSInboundAdapter</name>
            <jndi-provider-url>t3://localhost:7001</jndi-provider-url>
            <destination-jndi-name>./Topic1</destination-jndi-name>
            <user>weblogic</user>
            <password>weblogic</password>
            <work-manager>JettyWorkManager</work-manager>
            <concurrent-consumers>1</concurrent-consumers>
            <session-transacted>true</session-transacted>
        </jms-adapter>
    
        <jms-adapter>
            <name>JMSInboundAdapter2</name>
            <jndi-provider-url>t3://localhost:7001</jndi-provider-url>
            <destination-jndi-name>./Topic1</destination-jndi-name>
            <user>weblogic</user>
            <password>weblogic</password>
            <work-manager>JettyWorkManager</work-manager>
            <concurrent-consumers>1</concurrent-consumers>
            <session-transacted>true</session-transacted>
        </jms-adapter>
        ...
        <jms-adapter>
            <name>JMSOutboundAdapter</name>
            <event-type>JMSEvent</event-type>
            <jndi-provider-url>t3://localhost:7001</jndi-provider-url>
            <destination-jndi-name>Topic1</destination-jndi-name>
            <delivery-mode>nonpersistent</delivery-mode>
            <session-transacted>true</session-transacted>
        </jms-adapter>
        ...
    </wlevs:config>
    
  14. オプションで、コンポーネント構成ファイルを例24-27で示すように、Oracle Event Processingの高可用性入力アダプタおよび相関出力アダプタを含むように構成します。

    例24-44 高可用性入力/出力アダプタのコンポーネント構成ファイル

    <?xml version="1.0" encoding="UTF-8"?>
    <wlevs:config 
            xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
            xmlns:ha="http://www.oracle.com/ns/cep/config/cluster">
        ...
        <ha:ha-inbound-adapter>
            <name>myHaInputAdapter</name>
        </ha:ha-inbound-adapter>
        ...
        <ha:ha-correlating-adapter>
            <name>myHaBroadcastAdapter</name>
            <fail-over-delay>2000</fail-over-delay>
        </ha:ha-correlating-adapter>
        ...
    </wlevs:config>
    

    詳細は、次を参照してください:

  15. オプションで、ActiveActiveGroupBeanをEPNに追加し、スケーラビリティを向上します。

    詳細は、25.2.2項「ActiveActiveGroupBeanによるスケーラビリティの構成」を参照してください。

  16. ステップ1で作成したデプロイメント・グループにアプリケーションをデプロイします。

    詳細は、23.5項「Oracle Event Processingアプリケーションのデプロイ」を参照してください。

    Oracle Event Processingは、Oracle Event Processingサーバーのいずれかをプライマリとして自動的に選択します。

24.2.2 高可用性アダプタの構成

チャネルやプロセッサなどのEPN内の他のコンポーネントを構成する方法と同様に、EPNアセンブリ・ファイルおよびコンポーネント構成ファイルでOracle Event Processingの高可用性アダプタを構成します。このような構成ファイルに関する一般情報は、次を参照してください。


注意:

Oracle Event Processingの高可用性の構成に変更を加えた後は、Oracle Event Processingアプリケーションを再デプロイする必要があります。23.5項「Oracle Event Processingのデプロイ」を参照してください。


この項では、Oracle Event Processingの高可用性アダプタのそれぞれに関する構成可能なオプションを次のような内容で説明します。

24.2.2.1 高可用性入力アダプタの構成方法

Oracle Event Processingの高可用性ブロードキャスト入力アダプタは、BroadcastInputAdapterによって実装されます。

この項では、Oracle Event Processingの高可用性入力アダプタの構成方法を次のような内容で説明します。

詳細は、24.1.1.3.1項「高可用性入力アダプタ」を参照してください。

24.2.2.1.1 高可用性入力アダプタのEPNアセンブリ・ファイルの構成

Oracle Event Processingの高可用性入力アダプタを宣言するためのルート要素は、例24-45で示されるように、provider要素をha-inboundに設定したwlevs:adapterです。例24-45で示されるように、実際の入力アダプタでOracle Event Processingの高可用性入力アダプタのwlevs:listener要素を指定します。

例24-45 高可用性入力アダプタのEPNアセンブリ・ファイル

<wlevs:adapter id="jmsAdapter" provider="jms-inbound"
    <wlevs:listener ref="myHaInputAdapter"/>      
</wlevs:adapter>

<wlevs:adapter id="myHaInputAdapter" provider="ha-inbound">
    <wlevs:instance-property name="keyProperties" value="id"/>
    <wlevs:instance-property name="timeProperty" value="arrivalTime"/>
    <wlevs:instance-property name="eventType" value="MyEventType"/>
</wlevs:adapter>

<wlevs:channel id="inputChannel" event-type="MyEventType ">
    <wlevs:source ref="myHaInputAdapter"/>
    <wlevs:application-timestamped>
        <wlevs:expression>arrivalTime</wlevs:expression>
    </wlevs:application-timestamped>
</wlevs:channel>

表24-3は、Oracle Event Processingの高可用性入力アダプタに構成できるwlevs:adapterの追加子要素を説明します。

表24-3 高可用性入力アダプタ用wlevs:adapterの子要素

子要素 説明

wlevs:instance-property

表24-4で説明するように、instance-property要素のnameおよびvalue属性を1つ以上指定します。


表24-4は、Oracle Event Processingの高可用性入力アダプタがサポートするインスタンス・プロパティを一覧表示しています。

表24-4 高可用性入力アダプタのインスタンス・プロパティ

名前

timeProperty

高可用性入力アダプタが時間値を割り当てる対象のイベント・プロパティ名を指定します。

これは、例24-45で示すように高可用性入力アダプタの接続対象となる、ダウンストリームEPNコンポーネントのwlevs:application-timestamped要素で使用するプロパティと同一です。

keyProperties

Oracle Event Processingの高可用性入力アダプタがイベント・インスタンスを識別するために使用する、1つ以上のイベント・プロパティのスペースで区切られたリストを指定します。

1つ以上のプロパティを指定する場合は、keyClassを指定する必要があります。

デフォルト: すべてのイベント・プロパティ。

keyClass

複合キーとして使用されるJavaクラスの完全修飾なクラス名を指定します。

デフォルトでは、keyProperties設定が使用されない場合、keyClass内のすべてのJavaBeanプロパティがkeyPropertiesとなるように仮定されます。

eventType

Oracle Event Processingの高可用性入力アダプタが実際の入力アダプタから受信するイベントの種類名を指定します。これは、例24-45で示すように高可用性入力アダプタの接続対象となる、ダウンストリームEPNコンポーネントで使用するイベント型と同一です。

タプル・イベントの場合、このプロパティは必須です。

すべての他のJavaクラス・ベースのイベント型の場合、このプロパティはオプションです。

詳細は、9.1項「Oracle Event Processingイベント・タイプの概要」を参照してください。


24.2.2.1.2 高可用性入力アダプタのコンポーネント構成ファイルの構成

Oracle Event Processingの高可用性入力アダプタの構成用ルート要素は、ha-inbound-adapterです。特定のアダプタのnameの子要素は、このアダプタを例24-50で示すように宣言するEPNアセンブリ・ファイルにおいて対応するwlevs:adapter要素のid属性に一致する必要があります。

例24-46 高可用性入力アダプタのコンポーネント構成ファイル

<ha:ha-inbound-adapter>
    <name>myHaInputAdapter</name>
    <heartbeat units="millis">1000</heartbeat>
    <batch-size>10</batch-size>
</ha:ha-inbound-adapter>

表24-5は、Oracle Event Processingの高可用性入力アダプタに構成できるha-inbound-adapterの追加子要素を説明します。

表24-5 高可用性入力アダプタ用ha-inbound-adapterの子要素

子要素 説明

heartbeat

unitsの整数の数として時間を進めるためのハートビート・イベントを生成する前に、Oracle Event Processingの高可用性入力アダプタが待機できる時間の長さを指定します。

units属性の有効な値:

  • nanos: 指定されたナノ秒数を待機します。

  • millis: 指定されたミリ秒数を待機します。

  • secs: 指定された秒数を待機します。

デフォルト: ハートビートが送信されません。

batch-size

プライマリがセカンダリにブロードキャストする各タイミング・メッセージにおいてイベント数を指定します。nの値は、n{key, time}のペアが各メッセージに送信されるという意味になります。このプロパティをパフォーマンスの調整に使用できます(27.2.3項「高可用性入力アダプタの構成」を参照)。

デフォルト: 1 (バッチを無効化)。


24.2.2.2 バッファリング出力アダプタの構成方法

Oracle Event Processingの高可用性バッファリング出力アダプタは、SlidingWindowQueueTrimmingAdapterによって実装されます。

この項では、Oracle Event Processingの高可用性バッファリング出力アダプタの構成方法を次のような内容で説明します。

詳細は、24.1.1.3.2項「バッファリング出力アダプタ」を参照してください。

24.2.2.2.1 バッファリング出力アダプタのEPNアセンブリ・ファイルの構成

Oracle Event Processingの高可用性バッファリング出力アダプタを宣言するためのルート要素は、例24-47で示されるように、provider要素をha-bufferingに設定したwlevs:adapterです。

例24-47 バッファリング出力アダプタのEPNアセンブリ・ファイル

<wlevs:adapter id="mySlidingWindowingAdapter" provider ="ha-buffering">
    <wlevs:listener>
        <bean class="com.bea.wlevs.example.cluster.ClusterAdapterBean"/>
    </wlevs:listener>
    <wlevs:instance-property name="windowLength" value="15000"/>
</wlevs:adapter>

表24-6は、Oracle Event Processingの高可用性バッファリング出力アダプタに構成できるwlevs:adapterの追加子要素を説明します。

表24-6 バッファリング出力アダプタ用wlevs:adapterの子要素

子要素 説明

wlevs:listener

Oracle Event Processingの高可用性バッファリング出力アダプタから、通常の出力アダプタのダウンストリームを指定します。

wlevs:instance-property

表24-7で説明するように、instance-property要素のnameおよびvalue属性を1つ以上指定します。


表24-7は、Oracle Event Processingの高可用性バッファリング出力アダプタがサポートするインスタンス・プロパティを一覧表示しています。

表24-7 バッファリング出力アダプタのインスタンス・プロパティ

名前

windowLength

スライディング・ウィンドウのサイズを整数のミリ秒で指定します。

デフォルト: 15000


24.2.2.2.2 バッファリング出力アダプタ・コンポーネント構成ファイルの構成

Oracle Event Processingの高可用性バッファリング出力アダプタの構成用ルート要素は、ha-buffering-adapterです。特定のアダプタのnameの子要素は、このアダプタを例24-48で示すように宣言するEPNアセンブリ・ファイルにおいて対応するwlevs:adapter要素のid属性に一致する必要があります。

例24-48 バッファリング出力アダプタのコンポーネント構成ファイル

<ha:ha-buffering-adapter >
    <name>mySlidingWindowingAdapter</name>
    <window-length>15000</window-length>
    <warm-up-window-length units="minutes">6</warm-up-window-length>
</ha:ha-buffering-adapter >

表24-8は、Oracle Event Processingの高可用性バッファリング出力アダプタに構成できるha-buffering-adapterの追加子要素を説明します。

表24-8 バッファリング出力アダプタ用ha-buffering-adapterの子要素

子要素 説明

window-length

スライディング・ウィンドウのサイズを整数のミリ秒で指定します。

デフォルト: 15000

warm-up-window-length

以前に失敗したセカンダリの再起動後または新しいセカンダリがunitsの整数の数として追加された後、アプリケーションが状態を再構築するのにかかる時間の長さを指定します。

units属性の有効な値:

  • seconds: 指定された秒数を待機します。

  • minutes: 指定された分数を待機します。

デフォルト: unitssecondsです。

詳細は、24.1.3.2.5項「適切なwarm-up-window-length時間の選択」を参照してください。


24.2.2.3 ブロードキャスト出力アダプタの構成方法

Oracle Event Processingの高可用性ブロードキャスト出力アダプタは、クラスGroupBroadcastQueueTrimmingAdapterによって実装されます。

この項では、Oracle Event Processingの高可用性ブロードキャスト出力アダプタの構成方法を次のような内容で説明します。

詳細は、24.1.1.3.3項「ブロードキャスト出力アダプタ」を参照してください。

24.2.2.3.1 ブロードキャスト出力アダプタのEPNアセンブリ・ファイルの構成

Oracle Event Processingの高可用性ブロードキャスト出力アダプタを宣言するためのルート要素は、例24-49で示されるように、provider要素をha-broadcastに設定したwlevs:adapterです。

例24-49 ブロードキャスト出力アダプタのEPNアセンブリ・ファイル

<wlevs:adapter id="myBroadcastAdapter" provider="ha-broadcast">
    <wlevs:listener ref="actualAdapter"/>
    <wlevs:instance-property name="keyProperties" value="time"/>
    <wlevs:instance-property name="monotonic" value="true"/>
</wlevs:adapter>

表24-9は、Oracle Event Processingの高可用性ブロードキャスト出力アダプタに構成できるwlevs:adapterの追加子要素を説明します。

表24-9 ブロードキャスト出力アダプタ用wlevs:adapterの子要素

子要素 説明

wlevs:listener

Oracle Event Processingの高可用性ブロードキャスト出力アダプタから、通常の出力アダプタのダウンストリームを指定します。

wlevs:instance-property

表24-10で説明するように、instance-property要素のnameおよびvalue属性を1つ以上指定します。


表24-10は、Oracle Event Processingの高可用性ブロードキャスト出力アダプタがサポートするインスタンス・プロパティを一覧表示しています。

表24-10 ブロードキャスト出力アダプタのインスタンス・プロパティ

名前

keyProperties

Oracle Event Processingの高可用性ブロードキャスト出力アダプタがイベント・インスタンスを識別するために使用する、1つ以上のイベント・プロパティのスペースで区切られたリストを指定します。

1つ以上のプロパティを指定する場合は、keyClassを指定する必要があります。

デフォルト: すべてのイベント・プロパティ。

keyClass

複合キーとして使用されるJavaクラスの完全修飾なクラス名を指定します。

デフォルトでは、keyProperties設定が使用されない場合、keyClass内のすべてのJavaBeanプロパティがkeyPropertiesとなるように仮定されます。

複合キーは、monotonicおよびtotalOrderになることがあります。

monotonic

キーの値が(時間値のように)常に増加するかどうかを指定します。

有効な値:

  • true: キーは常に増加します。

  • false: キーは常に増加しません。

デフォルト: false

totalOrder

イベント・キーが一意であるかどうか指定します。インスタンス・プロパティmonotonictrueに設定されている場合のみ適用できます。

有効な値:

  • true: イベント・キーは一意です。

  • false: イベント・キーは一意ではありません。

デフォルト: true


24.2.2.3.2 ブロードキャスト出力アダプタのコンポーネント構成ファイルの構成

Oracle Event Processingの高可用性ブロードキャスト出力アダプタの構成用ルート要素は、ha-broadcast-adapterです。特定のアダプタのnameの子要素は、このアダプタを例24-50で示すように宣言するEPNアセンブリ・ファイルにおいて対応するwlevs:adapter要素のid属性に一致する必要があります。

例24-50 ブロードキャスト出力アダプタのコンポーネント構成ファイル

<ha:ha-broadcast-adapter>
    <name>myBroadcastAdapter</name>
    <trimming-interval units="events">10</trimming-interval>
    <warm-up-window-length units="minutes">6</warm-up-window-length>
</ha:ha-broadcast-adapter>

表24-11は、Oracle Event Processingの高可用性ブロードキャスト出力アダプタに構成できるha-broadcast-adapterの追加子要素を説明します。

表24-11 ブロードキャスト出力アダプタ用ha-broadcast-adapterの子要素

子要素 説明

trimming-interval

トリミング・メッセージがunitsの整数の数としてブロードキャストされる間隔を指定します。このプロパティをパフォーマンスの調整に使用できます(27.2.4項「ブロードキャスト出力アダプタの構成」を参照)。

units属性の有効な値:

  • events: 指定されたミリ秒数の後に、トリミング・メッセージをブロードキャストします。

  • millis: 指定されたイベント数の処理後に、トリミング・メッセージをブロードキャストします。

デフォルト: unitseventsです。

warm-up-window-length

以前に失敗したセカンダリの再起動後または新しいセカンダリがunitsの整数の数として追加された後、アプリケーションが状態を再構築するのにかかる時間の長さを指定します。

units属性の有効な値:

  • seconds: 指定された秒数を待機します。

  • minutes: 指定された分数を待機します。

デフォルト: unitssecondsです。

詳細は、24.1.3.2.5項「適切なwarm-up-window-length時間の選択」を参照してください。


24.2.2.4 相関出力アダプタの構成方法

Oracle Event Processingの高可用性相関出力アダプタは、クラスCorrelatedQueueTrimmingAdapterによって実装されます。

この項では、Oracle Event Processingの高可用性相関出力アダプタの構成方法を次のような内容で説明します。

詳細は、24.1.1.3.4項「相関出力アダプタ」を参照してください。

24.2.2.4.1 相関出力アダプタのEPNアセンブリ・ファイルの構成

Oracle Event Processingの高可用性相関出力アダプタを宣言するためのルート要素は、例24-51で示されるように、provider要素をha-correlatingに設定したwlevs:adapterです。

例24-51 相関出力アダプタのEPNアセンブリ・ファイル

<wlevs:adapter id="myCorrelatingAdapter" provider="ha-correlating">
    <wlevs:listener>
        <bean class="com.bea.wlevs.example.cluster.ClusterAdapterBean"/>
    </wlevs:listener>
    <wlevs:instance-property name="correlatedSource" ref="clusterCorrOutstream"/>
    <wlevs:instance-property name="failOverDelay" value="2000"/>
</wlevs:adapter>

表24-12は、Oracle Event Processingの高可用性相関出力アダプタに構成できるwlevs:adapterの追加子要素を説明します。

表24-12 相関出力アダプタ用wlevs:adapterの子要素

子要素 説明

wlevs:listener

Oracle Event Processingの高可用性バッファリング出力アダプタから、通常の出力アダプタのダウンストリームを指定します。

wlevs:instance-property

表24-13で説明するように、instance-property要素のnameおよびvalue属性を1つ以上指定します。


表24-13は、Oracle Event Processingの高可用性相関出力アダプタがサポートするインスタンス・プロパティを一覧表示しています。

表24-13 相関出力アダプタのインスタンス・プロパティ

名前

correlatedSource

相関対象のイベント・ソースを指定します。このソースから参照されるイベントは、トリミング・キューからパージされます。フェイルオーバーときにキュー内に留まるイベントは再生されます。

failOverDelay

フェイルオーバー後に相関関係が再起動される速さを決定するために使用される、遅延タイムアウトをミリ秒単位で指定します。

デフォルト: 0ミリ秒。


24.2.2.4.2 相関出力アダプタのコンポーネント構成ファイルの構成

Oracle Event Processingの高可用性相関出力アダプタの構成用ルート要素は、ha-correlating-adapterです。特定のアダプタのnameの子要素は、このアダプタを例24-52で示すように宣言するEPNアセンブリ・ファイルにおいて対応するwlevs:adapter要素のid属性に一致する必要があります。

例24-52 相関出力アダプタのコンポーネント構成ファイル

<ha:ha-correlating-adapter>
    <name>myCorrelatingAdapter</name>
    <window-length>15000</window-length>
    <warm-up-window-length units="minutes">6</warm-up-window-length>
</ha:ha-correlating-adapter>

表24-14は、Oracle Event Processingの高可用性相関出力アダプタに構成できるha-broadcast-adapterの追加子要素を説明します。

表24-14 相関出力アダプタ用ha-correlating-adapterの子要素

子要素 説明

fail-over-delay

フェイルオーバー後に相関関係が再起動される速さを決定するために使用される、遅延タイムアウトをミリ秒単位で指定します。

デフォルト: 0ミリ秒。

warm-up-window-length

以前に失敗したセカンダリの再起動後または新しいセカンダリがunitsの整数の数として追加された後、アプリケーションが状態を再構築するのにかかる時間の長さを指定します。

units属性の有効な値:

  • seconds: 指定された秒数を待機します。

  • minutes: 指定された分数を待機します。

デフォルト: unitssecondsです。

詳細は、24.1.3.2.5項「適切なwarm-up-window-length時間の選択」を参照してください。