Oracle® Fusion Middleware Oracle Event Processing開発者ガイド 11gリリース1 (11.1.1.7) for Eclipse B61654-06 |
|
![]() 前 |
![]() 次 |
この章では、増加するイベント・ロードに従ってOracle Event Processingアプリケーションをスケールするために使用できるコンポーネントおよび設計パターンについて、およびイベントのパーティション化の設定に関する情報など、Oracle Event Processingアプリケーションのスケーラビリティの構成方法について説明します。
この章の内容は次のとおりです。
この項では、増加するイベント・ロードに従ってOracle Event Processingアプリケーションをスケールするために使用できるコンポーネントおよび設計パターンについて説明します。
この節の内容は以下のとおりです。
Oracle Event Processingは、増加するイベント・ロードに従ってOracle Event Processingアプリケーションをスケールするためのオプションを提供します。
一般的に、イベントの到着時またはイベント処理ネットワーク(EPN)内で、またはその両方で入力イベント・ストリームをパーティション化し、イベントの並列処理ができるようにアプリケーションを設計できます。
イベント処理順序のできるだけ早い段階でスケーラビリティと並列処理を実行する必要があります。たとえば、通常、アプリケーションが依存する低ボリュームイベント、高価値のイベントを抽出するために、高ボリュームと低ボリュームのイベントを並列処理します。
Oracle Event Processingは、25.1.2項「スケーラビリティ・コンポーネント」の説明に従って使用できる、様々なスケーラビリティ・コンポーネントを提供します。
Oracle Event Processingでは、Oracle Event Processingアプリケーションのスケーラビリティの向上に使用できる次のコンポーネントを提供します。
com.bea.wlevs.channel.EventPartitioner
は、図25-1に示すように、出力イベント・シンク間でチャネルのイベントをパーティション化するメカニズムを提供します。
この項では次について説明します:
詳細は、25.2.1項「チャネルEventPartitionerでのスケーラビリティの構成」を参照してください。
Oracle Event Processingでは、チャネルで使用するよう構成可能な、デフォルトのイベント・プロパティ・ベースのEventPartitioner
を提供しています。
デフォルトのEventPartitioner
を使用するようチャネルを構成する場合、チャネルがイベントをパーティション化するイベント・プロパティ名を指定します。デフォルトのEventPartitioner
では、イベント・プロパティ値のObject.hashCode()
を内部ハッシュ関数への入力として使用し、ハッシュ・キーを計算します。hashkey % number-of-listeners
はイベントを受信するリスナーの計算に使用されます。このアルゴリズムは、新規アイテムを配置するバケットを計算する、HashMap
で使用するものと同じアルゴリズムに基づいています。実際には、同じイベント・プロパティ値のイベントは、同じリスナーに送信されます。
注意: デフォルトのイベント・プロパティ・ベースの |
オプションで、チャネルのリスナーへのイベントのディスパッチ方法をカスタマイズするのではなく、独自のイベント・パーティショナ・インスタンスを作成し、チャネルで使用するよう構成することができます。
詳細は、次を参照してください:
デフォルトでは、Oracle Event Processingサーバーは、デプロイメントの際に各イベント・パーティショナを初期化し、EventPartitioner
メソッドactivateConfiguration
が ActivatableBean.afterConfigurationActive
の前、およびEventPartitioner
クラスのpartition
メソッドの起動前に起動することによる再デプロイメントの際にはイベント・パーティショナを再初期化します。
表25-1では、イベント・パーティショナ・チャネルで使用可能なスレッド・オプションが一覧表示されています。
表25-1 イベント・パーティショナ・チャネルのスレッド・オプション
スレッド割当先 | 説明 | 使用するタイミング |
---|---|---|
チャネル |
|
外部メッセージ形式の内部イベント形式への変換が容易である場合、通常は適用されます。 マルチスレッドをチャネル粒度で制御します。ボリュームが異なるため、一部のチャネルでは他のチャネルより必要なスレッド数が多くなる場合があります。 |
アダプタ |
|
外部メッセージ形式の内部イベント形式への変換が難しい場合、通常は推奨されます。 この手法は、アダプタがマルチスレッドであり、インバウンド・イベント・レートが高く、複数スレッドをインバウンド処理のスケールに使用できない場合にアダプタがボトルネックになる場合に最適です。 |
注意: どちらの手法でも、イベント順序は保証されません。複数スレッドは随時使用されます。 |
イベント・パーティショナを使用するようにチャネルを構成する場合、次の制限事項を考慮します。
イベント・パーティショナでチャネルを構成した場合、バッチ処理はサポートされていません。
詳細は、10.1.6項「バッチ処理チャネル」を参照してください。
com.oracle.cep.cluster.hagroups.ActiveActiveGroupBean
を使用して、ActiveActiveGroupBean
で作成された通知グループによって、Oracle Event Processingアプリケーションの受信JMSストリームをパーティション化できます。
例25-1で示すように、ActiveActiveGroupBean
をEPNアセンブリ・ファイルに追加します。
例25-1 ActiveActiveGroupBeanのbean要素
<bean id="clusterAdapter" class="com.oracle.cep.cluster.hagroups.ActiveActiveGroupBean"> </bean>
デフォルトでは、ActiveActiveGroupBean
は次の名前の通知グループを作成します。
ActiveActiveGroupBean_X
X
は文字列です。
実行時に、ActiveActiveGroupBean
は、Oracle Event Processingサーバーに定義された既存のグループをスキャンし、次のデフォルトのパターン一致を適用します。
ActiveActiveGroupBean_\\w+
一致が見つかったら、その名前の通知グループを作成します。
オプションで、25.2.2.3項「ActiveActiveGroupBeanグループ・パターン一致の構成方法」の説明に従って、独自のクラスタ・グループ・パターン一致を定義できます。
この項では次について説明します:
25.1.2.2.1項「高可用性なしのActiveActiveGroupBeanを使用したOracle Event Processingアプリケーションのスケーラビリティ」
25.1.2.2.2項「高可用性のあるActiveActiveGroupBeanを使用したOracle Event Processingアプリケーションのスケーラビリティ」
詳細は、次を参照してください:
ActiveActiveGroupBean
を使用して、高可用性に対して構成されていないOracle Event Processingアプリケーション内のセレクタによって、受信JMSイベント・ストリームをパーティション化できます。
図25-2で示すように、マルチサーバー・ドメインを考慮してください。
図25-2 高可用性なしのOracle Event Processing ActiveActiveGroupBean
このスケーラビリティ・シナリオでは、各サーバー(ホスト1のActiveActiveGroupBean_group1
、ホスト2のActiveActiveGroupBean_group2
など)のOracle Event Processingサーバーconfig.xml
でクラスタ・グループを定義し、Oracle Event ProcessingアプリケーションにActiveActiveGroupBean
のインスタンスを追加して、これらのクラスタ・グループに基づく通知グループを定義します。
各通知グループは、異なるJMSセレクタにバインドされています。Oracle Event Processingアプリケーションにあるコンポーネント構成ファイルの構成は、例25-2で示すように、jms-adapter
の構成と同じです。
例25-2 共通jms-adapterセレクタの定義
<jms-adapter> <message-selector>${CONDITION}</message-selector> <bindings> <group-binding group-id="ActiveActiveGroupBean_group1"> <param id="CONDITION">acctid > 400</param> </group-binding> <group-binding group-id="ActiveActiveGroupBean_group2"> <param id="CONDITION">acctid BETWEEN 301 AND 400</param> </group-binding> <group-binding group-id="ActiveActiveGroupBean_group3"> <param id="CONDITION">acctid BETWEEN 201 AND 300</param> </group-binding> <group-binding group-id="ActiveActiveGroupBean_group4"> <param id="CONDITION">acctid <= 200</param> </group-binding> </bindings> </jms-adapter>
実行時に、各Oracle Event Processingサーバーにある各Oracle Event Processingアプリケーション・インスタンスのActiveActiveGroupBean
インスタンスは、ActiveActiveGroupBean_
クラスタ・グループを検索し、それに基づいて通信グループを作成します。その後、Oracle Event Processingアプリケーション自体は、その通知グループと一致するgroup-id
に対応するmessage-selector
に構成します。これにより、App1の各インスタンスが同時にメッセージの合計数のサブセットを処理するようにJMSトピックはパーティション化されます。
詳細は、25.2.2.1項「Oracle Event Processing高可用性なしのJMSアプリケーションでスケーラビリティを構成する方法」を参照してください。
セレクタによる受信JMSイベント・ストリームのパーティション化に加えて、ActiveActiveGroupBean
を使用して、単一の高可用性のある単位として2つ以上のOracle Event Processingサーバーを構成できます。
図25-3で示すように、Oracle Event Processing高可用性アプリケーションがデプロイされたマルチサーバー・ドメインを考慮してください。
図25-3 高可用性のあるOracle Event Processing ActiveActiveGroupBean
このシナリオでは、ホスト1およびホスト2に同じActiveActiveGroupBean_
クラスタ・グループ(ActiveActiveGroupBean_group1
)を作成し、ホスト3およびホスト4に同じActiveActiveGroupBean_
クラスタ・グループ(ActiveActiveGroupBean_group2
)を作成します。
実行時に、各Oracle Event Processingサーバーにある各Oracle Event Processingアプリケーション・インスタンスのActiveActiveGroupBean
インスタンスは、ActiveActiveGroupBean_
クラスタ・グループを検索し、それに基づいて通信グループを作成します。ホスト1およびホスト2両方が1つの通知グループ(ActiveActiveGroupBean_group1
)に属し、ホスト3およびホスト4両方が別の通信グループ(ActiveActiveGroupBean_group2
)に属します。
各Oracle Event Processingアプリケーション自体は、通知グループと一致するgroup-id
に対応するmessage-selector
に構成します。これにより、App1の各インスタンスが同時にメッセージの合計数のサブセットを処理するようにJMSトピックはパーティション化されます。
2つ以上のOracle Event Processingサーバーが同じ通知グループに属する場合、ActiveActiveGroupBean
によって、各通信グループのプライマリ・サーバー-のみがイベントを出力するようにします。特定の通知グループ内でプライマリ・サーバーが停止した場合、Oracle Event Processing高可用性フェイルオーバーが発生し、その通知グループのいずれかのセカンダリ・サーバーが新しいプライマリ・サーバーとして宣言され、構成したOracle Event Processing高可用性のサービス品質に応じてイベントの出力を再開します。
詳細は、25.2.2.2項「Oracle Event Processing高可用性のあるJMSアプリケーションでスケーラビリティを構成する方法」を参照してください。
この項では、イベントのパーティション化の設定に関する情報など、Oracle Event Processingアプリケーションのスケーラビリティの構成方法について説明します。
この節の内容は以下のとおりです。
この項では、図25-4に示すように、Oracle Event Processingイベント・パーティショナでチャネルを構成する次の方法について説明します。
この例では、inbound
アダプタから、例25-3で定義されているタイプPriceEvent
のイベントが送信されると想定します。
例25-3 イベント・タイプPriceEventの定義
<wlevs:event-type-repository> <wlevs:event-type type-name="PriceEvent"> <wlevs:properties> <wlevs:property name="symbol" type="char" /> <wlevs:property name="price" type="long" /> </wlevs:properties> </wlevs:event-type> </wlevs:event-type-repository>
詳細は、25.1.2.1項「EventPartitioner」を参照してください。
デフォルト・イベントのプロパティ・ベースのイベント・パーティショナを使用するようチャネルを構成できます。着信イベントが到着するたびに、チャネルはリスナーを選択し、各リスナーに各イベントをブロードキャストするかわりに、そのリスナーにイベントをディスパッチします。
オプションで、独自のEventPartitioner
クラスを実装し、25.2.1.2項「カスタム・チャネルEventPartitionerでのスケーラビリティの構成方法」に示すとおり、チャネルのリスナーへのイベントのディスパッチ方法をカスタマイズできます。
デフォルト・チャネルEventPartitionerでスケーラビリティを構成する手順:
EPNにチャネルを追加します。
図25-4では、チャネルはEventPartitionerChannel
です。
詳細は、第10章「チャネルを使用したEPNステージの接続」を参照してください。
チャネルをアップストリーム・アダプタに接続します。
図25-4では、アップストリーム・アダプタはinbound
です。
詳細は、7.4.2項「ノードの接続」を参照してください。
チャネルを複数のリスナーに接続します。
図25-4では、チャネルはOracle CQLプロセッサprocessor1
、processor2
およびprocessor3
に接続されます。
詳細は、7.4.2項「ノードの接続」を参照してください。
partitionByEventProperty
のインスタンス・プロパティをチャネル要素に追加するようにEPNアセンブリ・ファイルを編集します。
このinstance-property
のvalue
はチャネルがイベントをパーティション化するイベント・プロパティの名前です。
この例では、チャネルはイベント・プロパティsymbol
別にイベントをパーティション化します。
...
<wlevs:channel id="EventPartitionerChannel" event-type="PriceEvent">
<wlevs:instance-property name="partitionByEventProperty" value="symbol" />
<wlevs:listener ref="processor1" />
<wlevs:listener ref="processor2" />
<wlevs:listener ref="processor3" />
<wlevs:source ref="inbound" />
</wlevs:channel>
...
詳細は、25.1.2.1.1項「EventPartitionerの実装」を参照してください。
25.1.2.1.3項「EventPartitionerスレッド」の説明のとおり、Oracle Event Processingによるスレッドの割当方法を決定します。
チャネルでスレッドを割り当てる場合:
EPNアセンブリ・ファイルを編集し、max-threads
をリスナー数に設定するようチャネルを構成します。
...
<wlevs:channel id="EventPartitionerChannel" event-type="PriceEvent" max-threads="3" >
<wlevs:instance-property name="eventPartitioner" value="true" />
<wlevs:listener ref="processor1" />
<wlevs:listener ref="processor2" />
<wlevs:listener ref="processor3" />
<wlevs:source ref="inbound" />
</wlevs:channel>
...
アップストリーム・アダプタでスレッドを割り当てる場合:
EPNアセンブリ・ファイルを編集し、max-threads
を0に設定するようチャネルを構成します。
...
<wlevs:channel id="EventPartitionerChannel" event-type="PriceEvent" max-threads="0" >
<wlevs:instance-property name="eventPartitioner" value="true" />
<wlevs:listener ref="processor1" />
<wlevs:listener ref="processor2" />
<wlevs:listener ref="processor3" />
<wlevs:source ref="inbound" />
</wlevs:channel>
...
Oracle Event Processingサーバーconfig.xml
ファイルを編集し、work-manager
要素を追加します。
このワーク・マネージャが(他のアダプタおよびJettyなど)複数のコンポーネントで共有されている場合、min-threads-constraint
およびmax-threads-constraint
要素をそれぞれリスナー数より大きい値に設定します。
このワーク・マネージャが複数のコンポーネントで共有されていない場合(つまり、この構成のアップストリーム・アダプタ専用の場合)、min-threads-constraint
および max-threads-constraint
要素をリスナー数と同じ値に設定します。
... <work-manager> <name>adapterWorkManager</name> <min-threads-constraint>3</min-threads-constraint> <max-threads-constraint>3</max-threads-constraint> </work-manager> ...
詳細は、F.45項「work-manager」を参照してください。
コンポーネント構成ファイルを編集し、このwork-manager
でアップストリーム・アダプタを構成します。
... <adapter> <name>inbound</name> <work-manager-name>adapterWorkManager</work-manager-name> ... </adapter> ...
アプリケーションをアセンブルし、デプロイします。
詳細は、第23章「Oracle Event Processingアプリケーションのアセンブルとデプロイ」を参照してください。
実行時は、チャネルではデフォルト・イベント・プロパティ・ベースのEventPartitioner
が使用され、それぞれの着信イベントのリスナーへのディスパッチ方法が決定されます。
独自のEventPartitioner
クラスを実装すると、チャネルによるリスナーへのイベントのディスパッチ方法をカスタマイズできます。
25.2.1.1項「デフォルト・チャネルEventPartitionerでのスケーラビリティの構成方法」の説明のとおり、オプションで、デフォルトのイベント・プロパティ・ベースのEventPartitioner
を使用できます。
カスタム・チャネルEventPartitionerでスケーラビリティを構成する手順:
Oracle Event Processing IDE for Eclipseを使用して、Oracle Event Processingプロジェクトを開きます。
詳細は、5.2項「Oracle Event Processingプロジェクトの作成」を参照してください。
MANIFEST.MF
を編集し、パッケージcom.bea.wlevs.channel
をインポートします。
詳細は、5.7.5項「パッケージのインポート方法」を参照してください。
プロジェクトのsrc
フォルダを右クリックし、「新規」>「クラス」を選択します。
図25-5に示すように、「新規Javaクラス」ダイアログが表示されます。
表25-2に示すように、「新規Javaクラス」ダイアログを構成します。
「終了」をクリックします。
例25-4に示すように、新規EventPartitioner
クラスが作成されます。
例25-4 EventPartitionerクラス
package com.acme; import com.bea.wlevs.channel.EventPartitioner; import com.bea.wlevs.ede.api.EventProcessingException; import com.bea.wlevs.ede.api.EventType; public class MyEventPartitioner implements EventPartitioner { @Override public void activateConfiguration(int arg0, EventType arg1) { // TODO Auto-generated method stub } @Override public int partition(Object arg0) throws EventProcessingException { // TODO Auto-generated method stub return 0; } }
例25-5に示すように、EventPartitioner
の実装を完了します。
例25-5 EventPartitionerクラスの実装
package com.acme; import com.bea.wlevs.channel.EventPartitioner; import com.bea.wlevs.ede.api.EventProcessingException; import com.bea.wlevs.ede.api.EventType; public class MyEventPartitioner implements EventPartitioner { private final EventType eventType; private int numberOfPartitions; @Override public void activateConfiguration(int numberOfPartitions, EventType eventType) { this.numberOfPartitions = numberOfPartitions; this.eventType = eventType; } @Override public int partition(Object event) throws EventProcessingException { int dispatchToListener = 0; ... // Your implementation. return dispatchToListener; } }
activateConfiguration
メソッドは、ActivatableBean.afterConfigurationActive
の前、およびEventPartitioner
クラスのpartition
メソッドの起動前にOracle Event Processingサーバーが起動するコールバックです。
このEventPartitioner
をチャネルと関連付ける場合、チャネルがイベントを受信するたびに、EventPartitioner
クラスのpartition
メソッドが起動されます。
partition
メソッドは、チャネルによるイベントのディスパッチ先であるリスナーの索引を返す必要があります。索引は0
からnumberOfPartitions - 1
の間のint
である必要があります。
EPNにチャネルを追加します。
図25-4では、チャネルはEventPartitionerChannel
です。
詳細は、第10章「チャネルを使用したEPNステージの接続」を参照してください。
チャネルをアップストリーム・アダプタに接続します。
図25-4では、アップストリーム・アダプタはinbound
です。
詳細は、7.4.2項「ノードの接続」を参照してください。
チャネルを複数のリスナーに接続します。
図25-4では、チャネルはOracle CQLプロセッサprocessor1
、processor2
およびprocessor3
に接続されます。
チャネルでロード・バランシングを実行する場合、各リスナーは同じである必要があります。
詳細は、次を参照してください:
eventPartitioner
のインスタンス・プロパティをチャネル要素に追加するようにEPNアセンブリ・ファイルを編集します。
このinstance-property
のvalue
はチャネルがイベントをパーティション化するためのEventPartitioner
インスタンスの完全修飾クラス名です。
このクラスはOracle Event Processingアプリケーション・クラス・パスにある必要があります。
この例では、チャネルはEventPartitioner
インスタンスcom.acme.MyEventPartitioner
を使用してイベントをパーティション化します。
...
<wlevs:channel id="EventPartitionerChannel" event-type="PriceEvent" max-threads="0" >
<wlevs:instance-property name="eventPartitioner" value="com.acme.MyEventPartitioner" />
<wlevs:listener ref="filterFanoutProcessor1" />
<wlevs:listener ref="filterFanoutProcessor2" />
<wlevs:listener ref="filterFanoutProcessor3" />
<wlevs:source ref="PriceAdapter" />
</wlevs:channel>
...
25.1.2.1.3項「EventPartitionerスレッド」の説明のとおり、Oracle Event Processingによるスレッドの割当方法を決定します。
チャネルでスレッドを割り当てる場合:
EPNアセンブリ・ファイルを編集し、max-threads
をリスナー数に設定するようチャネルを構成します。
...
<wlevs:channel id="EventPartitionerChannel" event-type="PriceEvent" max-threads="3" >
<wlevs:instance-property name="eventPartitioner" value="true" />
<wlevs:listener ref="processor1" />
<wlevs:listener ref="processor2" />
<wlevs:listener ref="processor3" />
<wlevs:source ref="inbound" />
</wlevs:channel>
...
アップストリーム・アダプタでスレッドを割り当てる場合:
EPNアセンブリ・ファイルを編集し、max-threads
を0に設定するようチャネルを構成します。
...
<wlevs:channel id="EventPartitionerChannel" event-type="PriceEvent" max-threads="0" >
<wlevs:instance-property name="eventPartitioner" value="true" />
<wlevs:listener ref="processor1" />
<wlevs:listener ref="processor2" />
<wlevs:listener ref="processor3" />
<wlevs:source ref="inbound" />
</wlevs:channel>
...
Oracle Event Processingサーバーconfig.xml
ファイルを編集し、work-manager
要素を追加します。
このワーク・マネージャが(他のアダプタおよびJettyなど)複数のコンポーネントで共有されている場合、min-threads-constraint
およびmax-threads-constraint
要素をそれぞれリスナー数より大きい値に設定します。
このワーク・マネージャが複数のコンポーネントで共有されていない場合(つまり、この構成のアップストリーム・アダプタ専用の場合)、min-threads-constraint
および max-threads-constraint
要素をリスナー数と同じ値に設定します。
... <work-manager> <name>adapterWorkManager</name> <min-threads-constraint>3</min-threads-constraint> <max-threads-constraint>3</max-threads-constraint> </work-manager> ...
詳細は、F.45項「work-manager」を参照してください。
コンポーネント構成ファイルを編集し、このwork-manager
でアップストリーム・アダプタを構成します。
... <adapter> <name>inbound</name> <work-manager-name>adapterWorkManager</work-manager-name> ... </adapter> ...
アプリケーションをアセンブルし、デプロイします。
詳細は、第23章「Oracle Event Processingアプリケーションのアセンブルとデプロイ」を参照してください。
実行時は、チャネルではEventPartitioner
が使用され、それぞれの着信イベントのリスナーへのディスパッチ方法が決定されます。
この項では、セレクタで受信JMSイベント・ストリームをパーティションするためにActiveActiveGroupBean
を使用するようにOracle Event Processingアプリケーションを構成する方法について説明します。次の項が含まれます。
25.2.2.1項「Oracle Event Processing高可用性なしのJMSアプリケーションでスケーラビリティを構成する方法」
25.2.2.2項「Oracle Event Processing高可用性のあるJMSアプリケーションでスケーラビリティを構成する方法」
詳細は、25.1.2.2項「ActiveActiveGroupBean」を参照してください。
Oracle Event Processing高可用性を使用しないアプリケーションの場合、マルチサーバー・ドメインでセレクタを使用して受信JMSイベント・ストリームをパーティションするためにActiveActiveGroupBean
を使用できます。
Oracle Event Processing高可用性アプリケーションでActiveActiveGroupBean
を使用する方法は、25.2.2.2項「Oracle Event Processing高可用性を使用してJMSアプリケーションでスケーラビリティを構成する方法」を参照してください。
詳細は、25.1.2.2.1項「高可用性なしのActiveActiveGroupBeanを使用したOracle Event Processingアプリケーションのスケーラビリティ」を参照してください。
Oracle Event Processing高可用性なしのJMSアプリケーションでスケーラビリティを構成する手順:
マルチサーバー・ドメインを作成します。
詳細は、『Oracle Fusion Middleware Oracle Event Processing管理者ガイド』のマルチサーバー・ドメインの概要に関する項を参照してください。
この例では、デプロイメント・グループの名前は、MyDeploymentGroup
です。
適切なActiveActiveGroupBean
通知グループをcluster
要素のgroups
子要素に追加するように各Oracle Event ProcessingサーバーのOracle Event Processingサーバー構成ファイルを構成します。
Oracle Event Processingサーバー構成ファイルのconfig.xml
は、DOMAIN_DIR
/
servername
/config
ディレクトリにあります。DOMAIN_DIR
は、メイン・ドメイン・ディレクトリを示し、servername
は、特定のサーバー・インスタンスを示します。
たとえば、表25-4では、ocep-server-1
、ocep-server-2
、ocep-server-3
およびocep-server-4
のOracle Event Processingサーバーのcluster
要素を示します。デプロイメント・グループはMyDeploymentGroup
であり、通知グループはデフォルトのActiveActiveGroupBean
通知グループ・ネーミングを使用して定義します。
オプションで、25.2.2.3項「ActiveActiveGroupBeanグループ・パターン一致の構成方法」"に示すグループのネーミング・ルールを指定することができます。
表25-3 Oracle Event Processingサーバー構成ファイル・グループ要素構成
パーティション | cluster要素 |
---|---|
|
<cluster> <server-name>ocep-server-1</server-name> ... <enabled>coherence</enabled> ... <groups>MyDeploymentGroup, ActiveActiveGroupBean_group1</groups> </cluster> |
|
<cluster> <server-name>ocep-server-2</server-name> ... <enabled>coherence</enabled> ... <groups>MyDeploymentGroup, ActiveActiveGroupBean_group2</groups> </cluster> |
|
<cluster> <server-name>ocep-server-3</server-name> ... <enabled>coherence</enabled> ... <groups>MyDeploymentGroup, ActiveActiveGroupBean_group3</groups> </cluster> |
|
<cluster> <server-name>ocep-server-4</server-name> ... <enabled>coherence</enabled> ... <groups>MyDeploymentGroup, ActiveActiveGroupBean_group4</groups> </cluster> |
Oracle Event Processingアプリケーションを作成します。
EPNアセンブリ・ファイルを構成し、例25-10に示すようにActiveActiveGroupBean
要素を追加します。
JMSインバウンド・アダプタのjms-adapter
要素にパラメータ化されたmessage-selector
を定義します。
JMSインバウンド・アダプタのjms-adapter
要素にgroup-binding
子要素を追加するために、コンポーネント構成ファイルを編集します。
例25-12示すように、各可能JMSメッセージ・セレクタ値に対して1つのgroup-binding
要素を追加します。
例25-7 ocep-server-1用のjms-adapterセレクタ定義
<jms-adapter> <name>JMSInboundAdapter</name> <event-type>StockTick</event-type> <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url> <destination-jndi-name>./Topic1</destination-jndi-name> <user>weblogic</user> <password>weblogic1</password> <work-manager>JettyWorkManager</work-manager> <concurrent-consumers>1</concurrent-consumers> <session-transacted>true</session-transacted> <message-selector>${CONDITION}</message-selector> <bindings> <group-binding group-id="ActiveActiveGroupBean_group1"> <param id="CONDITION">acctid > 400</param> </group-binding> <group-binding group-id="ActiveActiveGroupBean_group2"> <param id="CONDITION">acctid BETWEEN 301 AND 400</param> </group-binding> <group-binding group-id="ActiveActiveGroupBean_group3"> <param id="CONDITION">acctid BETWEEN 201 AND 300</param> </group-binding> <group-binding group-id="ActiveActiveGroupBean_group4"> <param id="CONDITION">acctid <= 200</param> </group-binding> </bindings> </jms-adapter>
この構成では、ActiveActiveGroupBean_group1
を含むcluster
要素、groups
子要素でアプリケーションをOracle Event Processingサーバーにデプロイすると、CONDITION
パラメータがacctid > 400
と定義され、acctid
プロパティが400以上であるイベントがアプリケーションにより処理されます。
マルチサーバー・ドメインのデプロイメント・グループにアプリケーションをデプロイします。
詳細は、第23章「Oracle Event Processingアプリケーションのアセンブルとデプロイ」を参照してください。
実行時に、各Oracle Event ProcessingサーバーがActiveActiveGroupBean
通知グループに対するmessage-selector
にアプリケーションのインスタンスを構成します。これにより、アプリケーションの各インスタンスがメッセージ総数のサブセットを並行して処理するようにJMSトピックがパーティションされます。
ActiveActiveGroupBean
を使用して、Oracle Event Processing高可用性のマルチサーバー・ドメインで受信JMSイベント・ストリームをパーティションできます。
この手順では、図25-6に示すサンプルEPN、例25-8に示す対応するEPNアセンブリ・ファイルおよび例25-9に示す対応するコンポーネント構成ファイルを含む24.2.1.4項「JMSによる正確なリカバリの構成方法」のサンプル・アプリケーションを使用します。
例25-8 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:channel id="channel2" event-type="StockTick"> <wlevs:listener ref="myHaCorrelatingAdapter" /> </wlevs:channel> <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: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>
例25-9 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> <jms-adapter> <name>JMSInboundAdapter</name> <event-type>StockTick</event-type> <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url> <destination-jndi-name>./Topic1</destination-jndi-name> <session-transacted>true</session-transacted> ... </jms-adapter> <jms-adapter> <name>JMSInboundAdapter2</name> <event-type>StockTick</event-type> <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url> <destination-jndi-name>./Topic2</destination-jndi-name> <session-transacted>true</session-transacted> ... </jms-adapter> <jms-adapter> <name>JMSOutboundAdapter</name> <event-type>StockTick</event-type> <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url> <destination-jndi-name>./Topic2</destination-jndi-name> <session-transacted>true</session-transacted> ... </jms-adapter> </wlevs:config>
図25-7に示すように、この手順実行の結果、Oracle Event Processing高可用性構成が作成されます。
図25-7 高可用性のあるOracle Event Processing ActiveActiveGroupBean
詳細は、25.1.2.2.2項「高可用性のあるActiveActiveGroupBeanを使用したOracle Event Processingアプリケーションのスケーラビリティ」を参照してください。
Oracle Event Processing高可用性のあるJMSアプリケーションでスケーラビリティを構成する手順:
マルチサーバー・ドメインを作成します。
詳細は、『Oracle Fusion Middleware Oracle Event Processing管理者ガイド』のマルチサーバー・ドメインの概要に関する項を参照してください。
この例では、デプロイメント・グループの名前は、MyDeploymentGroup
です。
適切なActiveActiveGroupBean
通知グループをcluster
要素のgroups
子要素に追加するように各Oracle Event ProcessingサーバーのOracle Event Processingサーバー構成ファイルを構成します。
Oracle Event Processingサーバー構成ファイルのconfig.xml
は、DOMAIN_DIR
/
servername
/config
ディレクトリにあります。DOMAIN_DIR
は、メイン・ドメイン・ディレクトリを示し、servername
は、特定のサーバー・インスタンスを示します。
たとえば、表25-4では、ocep-server-1
、ocep-server-2
、ocep-server-3
およびocep-server-4
のOracle Event Processingサーバーのcluster
要素を示します。デプロイメント・グループはMyDeploymentGroup
であり、通知グループはデフォルトのActiveActiveGroupBean
通知グループ・ネーミングを使用して定義します。
ocep-server-1
とocep-server-2
は同一の通知グループ名前(ActiveActiveGroupBean_group1
)を使用し、ocep-server-3
とocep-server-4
は同一の通知グループ名前(ActiveActiveGroupBean_group2
)を使用します。
オプションで、25.2.2.3項「ActiveActiveGroupBeanグループ・パターン一致の構成方法」"に示すグループのネーミング・ルールを指定することができます。
表25-4 Oracle Event Processingサーバー構成ファイル・グループ要素構成
パーティション | cluster要素 |
---|---|
|
<cluster> <server-name>ocep-server-1</server-name> ... <enabled>coherence</enabled> ... <groups>MyDeploymentGroup, ActiveActiveGroupBean_group1</groups> </cluster> |
|
<cluster> <server-name>ocep-server-2</server-name> ... <enabled>coherence</enabled> ... <groups>MyDeploymentGroup, ActiveActiveGroupBean_group1</groups> </cluster> |
|
<cluster> <server-name>ocep-server-3</server-name> ... <enabled>coherence</enabled> ... <groups>MyDeploymentGroup, ActiveActiveGroupBean_group2</groups> </cluster> |
|
<cluster> <server-name>ocep-server-4</server-name> ... <enabled>coherence</enabled> ... <groups>MyDeploymentGroup, ActiveActiveGroupBean_group2</groups> </cluster> |
Oracle Event Processing高可用性アプリケーションを作成します。
詳細は、第24章「高可用性のためのアプリケーションの開発」を参照してください。
EPNアセンブリ・ファイルを構成し、例25-10に示すようにActiveActiveGroupBean
要素を追加します。
コンポーネント構成ファイルを編集し、例25-11に示すように、インバウンドJMSアダプタ用のjms-adapter要素を構成します。
各インバウンドJMSアダプタは異なるトピックをリスニングする必要があります。
session-transacted
をtrue
に設定します。
例25-11 インバウンドJMSアダプタ用のjms-adapter要素
<?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> <event-type>StockTick</event-type> <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url> <destination-jndi-name>./Topic1</destination-jndi-name> <session-transacted>true</session-transacted> ... </jms-adapter> <jms-adapter> <name>JMSInboundAdapter2</name> <event-type>StockTick</event-type> <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url> <destination-jndi-name>./Topic2</destination-jndi-name> <session-transacted>true</session-transacted> ... </jms-adapter> </wlevs:config>
詳細は、第11章「Java Message Serviceの統合」を参照してください。
各JMSインバウンド・アダプタのjms-adapter
要素にパラメータ化されたmessage-selector
を定義します。
JMSインバウンド・アダプタのjms-adapter
要素にgroup-binding
子要素を追加するために、コンポーネント構成ファイルを編集します。
例25-12示すように、各可能JMS message-selector
値に対して1つのgroup-binding
要素を追加します。
例25-12 ocep-server-1用のjms-adapterセレクタ定義
<jms-adapter> <name>JMSInboundAdapter</name> <event-type>StockTick</event-type> <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url> <destination-jndi-name>./Topic1</destination-jndi-name> <session-transacted>true</session-transacted> <message-selector>${CONDITION}</message-selector> <bindings> <group-binding group-id="ActiveActiveGroupBean_group1"> <param id="CONDITION">acctid <= 1000</param> </group-binding> <group-binding group-id="ActiveActiveGroupBean_group2"> <param id="CONDITION">acctid > 1000</param> </group-binding> </bindings> </jms-adapter>
この構成では、ActiveActiveGroupBean_group1
を含むcluster
要素、groups
子要素を持つアプリケーションをOracle Event Processingサーバーにデプロイすると、CONDITION
パラメータがacctid <= 1000
と定義され、acctid
プロパティが1000以下であるイベントがアプリケーションにより処理されます。同様に、ActiveActiveGroupBean_group2
を含むcluster
要素、groups
子要素を持つアプリケーションをOracle Event Processingサーバーにデプロイすると、CONDITION
パラメータがacctid > 1000
と定義され、acctid
プロパティが1000以上であるイベントがアプリケーションにより処理されます。
コンポーネント構成ファイルを編集し、例25-13に示すように、アウトバウンドJMSアダプタ用のjms-adapter
要素を構成します。
対応するインバウンド・アダプタ(この例では、JMSInboundAdapter2
: ./Topic2
)と同一トピックでアウトバウンドJMSアダプタを構成します。
session-transacted
をtrue
に設定します。
例25-13 アウトバウンドJMSアダプタ用のjms-adapter要素
<?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> <event-type>StockTick</event-type> <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url> <destination-jndi-name>./Topic1</destination-jndi-name> <session-transacted>true</session-transacted> ... </jms-adapter> <jms-adapter> <name>JMSInboundAdapter2</name> <event-type>StockTick</event-type> <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url> <destination-jndi-name>./Topic2</destination-jndi-name> <session-transacted>true</session-transacted> ... </jms-adapter> <jms-adapter> <name>JMSOutboundAdapter</name> <event-type>StockTick</event-type> <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url> <destination-jndi-name>./Topic2</destination-jndi-name> <session-transacted>true</session-transacted> ... </jms-adapter> </wlevs:config>
詳細は、第11章「Java Message Serviceの統合」を参照してください。
マルチサーバー・ドメインのデプロイメント・グループにアプリケーションをデプロイします。
詳細は、第23章「Oracle Event Processingアプリケーションのアセンブルとデプロイ」を参照してください。
実行時に、各Oracle Event ProcessingサーバーがActiveActiveGroupBean
通知グループに対するmessage-selector
にアプリケーションのインスタンスを構成します。これにより、アプリケーションの各インスタンスがメッセージ総数のサブセットを並行して処理するようにJMSトピックがパーティションされます。
ActiveActiveGroupBean
グループの有効なOracle Event Processingサーバーが停止すると、そのActiveActiveGroupBean
グループのスタンバイOracle Event Processingサーバーに対してOracle Event ProcessingサーバーがOracle Event Processing高可用性フェイルオーバーを実行します。
デフォルトでは、ActiveActiveGroupBean
は次の名前の通知グループを作成します。
ActiveActiveGroupBean_X
X
は文字列です。
実行時に、ActiveActiveGroupBean
は、Oracle Event Processingサーバーに定義された既存のグループをスキャンし、次のデフォルトのパターン一致を適用します。
ActiveActiveGroupBean_\\w+
一致が見つかったら、その名前の通知グループを作成します。
オプションで、別の通知グループ・ネーミング・パターンを指定するために独自のグループ・パターンを定義できます。
ActiveActiveGroupBeanグループ・パターン一致の構成方法
EPNアセンブリ・ファイルを構成し、例25-14に示すように、ActiveActiveGroupBean
要素にgroupPattern
属性を追加します。
通知グループに対し使用するクラスタ・グループ・ネーミング・ルールに一致するgroupPattern
属性の値を指定します。