この章は、求めるサービス品質に応じてOracle CEPアプリケーションの高可用性を構成する方法について説明しており、次の項目を含みます:
高可用性オプションに関する詳細は、第20章「高可用性について」を参照してください。
EPNアセンブリ・ファイルおよびコンポーネント構成ファイルで、Oracle CEPの高可用性のサービス品質を構成します。このような構成ファイルに関する一般情報は、次を参照してください。
|
注意: Oracle CEPの高可用性の構成に変更を加えた後、Oracle CEPアプリケーションを再デプロイする必要があります。24.5項「Oracle CEPアプリケーションのデプロイ」を参照してください。 |
この項では次について説明します:
スケーラビリティ用Oracle CEPの高可用性アプリケーションの構成に関する詳細は、20.1.4項「高可用性およびスケーラビリティ」を参照してください。
スライディング・ウィンドウのサイズをゼロ(0)に設定して、Oracle CEPバッファリング出力アダプタを使用してシンプル・フェイルオーバーを構成します。
この手順は、図21-1で示すEPNの例から始まり、シンプル・フェイルオーバー用に構成するために必要なコンポーネントを加えていきます。例21-1は対応するEPNアセンブリ・ファイルを示し、例21-2は対応するコンポーネント構成ファイルを示します。
このOracle CEPの高可用性のサービス品質に関する詳細は、20.2.1項「シンプル・フェイルオーバー」を参照してください。
例21-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>
例21-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>
シンプル・フェイルオーバーを構成するには:
Oracle Coherenceを使用してマルチ・サーバー・ドメインを作成します。
詳細は、次を参照してください:
『Oracle Complex Event Processing管理者ガイド』のOracle Coherenceを使用してデフォルト・グループを持つOracle CEPマルチサーバー・ドメインを作成する方法に関する項
『Oracle Complex Event Processing管理者ガイド』のOracle Coherenceを使用してカスタム・グループを持つOracle CEPマルチサーバー・ドメインを作成する方法に関する項
Oracle CEPアプリケーションを作成します。
詳細は、4.2項「Oracle CEPプロジェクトの作成」を参照してください。
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
詳細は、4.7.2項「Oracle CEPプロジェクトへのOSGiバンドルの追加方法」を参照してください。
Oracle CEPアプリケーションのEPNアセンブリ・ファイルを構成し、例21-3に示すように、Oracle CEPの高可用性バッファリング出力アダプタを追加します。
チャネルhelloworldOutputChannelの後に、providerをha-bufferingに設定したwlevs:adapter要素を追加します。
idごとにha-bufferingアダプタを参照するように、チャネルhelloworldOutputChannelでwlevs:listener要素を更新します。
wlevs:listener要素を、HelloWorldBeanクラスを参照するha-bufferingアダプタに追加します。
例21-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>
オプションで、入力アダプタ(helloworldInputChannel)からのチャネル・ダウンストリームを構成し、例21-4で示されるように適切なイベント・プロパティに基づいてアプリケーションのタイムスタンプを構成します。
シンプル・フェイルオーバーの場合、イベントはサーバー間で相関関係を持たないためシステムのタイムスタンプを使用できます。ただし、アプリケーションのタイムスタンプが使用されない場合、若干異なる結果がバッファから出力される可能性があります。
この例では、イベント・プロパティarrivalTimeが使用されます。
wlevs:expressionをこのイベント・プロパティに設定する必要があります。
例21-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>
...
Oracle CEPの高可用性ブロードキャスト・バッファリング・アダプタを構成します。
インスタンス・プロパティwindowLengthを、例21-5で示すようにゼロ(0)に設定します。
例21-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>
...
詳細は、21.2.2.1項「バッファリング出力アダプタのEPNアセンブリ・ファイルの構成」を参照してください。
オプションで、コンポーネント構成ファイルを例21-6で示すように、Oracle CEPの高可用性バッファリング出力アダプタを含むように構成します。
例21-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>
詳細は、次を参照してください:
ステップ1で作成したデプロイメント・グループにアプリケーションをデプロイします。
詳細は、24.5項「Oracle CEPアプリケーションのデプロイ」を参照してください。
Oracle CEPは、Oracle CEPサーバーのいずれかをプライマリとして自動的に選択します。
スライディング・ウィンドウのサイズをゼロ(0)より大きく設定して、Oracle CEPバッファリング出力アダプタを使用してシンプル・フェイルオーバーを構成します。
この手順は、図21-2で示すEPNの例から始まり、バッファリングを使用するシンプル・フェイルオーバー用に構成するために必要なコンポーネントを加えていきます。例21-7は対応するEPNアセンブリ・ファイルを示し、例21-8は対応するコンポーネント構成ファイルを示します。
このOracle CEPの高可用性のサービス品質に関する詳細は、20.2.2項「バッファリングによるシンプル・フェイルオーバー」を参照してください。
例21-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>
例21-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>
バッファリングを使用してシンプル・フェイルオーバーを構成するには:
Oracle Coherenceを使用してマルチ・サーバー・ドメインを作成します。
詳細は、次を参照してください:
『Oracle Complex Event Processing管理者ガイド』のOracle Coherenceを使用してデフォルト・グループを持つOracle CEPマルチサーバー・ドメインを作成する方法に関する項
『Oracle Complex Event Processing管理者ガイド』のOracle Coherenceを使用してカスタム・グループを持つOracle CEPマルチサーバー・ドメインを作成する方法に関する項
Oracle CEPアプリケーションを作成します。
詳細は、4.2項「Oracle CEPプロジェクトの作成」を参照してください。
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
詳細は、4.7.2項「Oracle CEPプロジェクトへのOSGiバンドルの追加方法」を参照してください。
Oracle CEPアプリケーションのEPNアセンブリ・ファイルを構成し、例21-3に示すように、Oracle CEPの高可用性バッファリング出力アダプタを追加します。
チャネルhelloworldOutputChannelの後に、providerをha-bufferingに設定したwlevs:adapter要素を追加します。
idごとにha-bufferingアダプタを参照するように、チャネルhelloworldOutputChannelでwlevs:listener要素を更新します。
wlevs:listener要素を、HelloWorldBeanクラスを参照するha-bufferingアダプタに追加します。
例21-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>
オプションで、入力アダプタ(helloworldInputChannel)からのチャネル・ダウンストリームを構成し、例21-10で示されるように適切なイベント・プロパティに基づいてアプリケーションのタイムスタンプを構成します。
バッファリングを使用するシンプル・フェイルオーバーの場合、イベントはサーバー間で相関関係を持たないため、システムのタイムスタンプを使用できます。ただし、アプリケーションのタイムスタンプが使用されない場合、若干異なる結果がバッファから出力される可能性があります。
この例では、イベント・プロパティarrivalTimeが使用されます。
wlevs:expressionをこのイベント・プロパティに設定する必要があります。
例21-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>
...
Oracle CEPの高可用性ブロードキャスト・バッファリング・アダプタを構成します。
インスタンス・プロパティwindowLengthを、例21-11で示すようにゼロ(0)より大きい値に設定します。
例21-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>
...
詳細は、21.2.2.1項「バッファリング出力アダプタのEPNアセンブリ・ファイルの構成」を参照してください。
オプションで、コンポーネント構成ファイルを例21-12で示すように、Oracle CEPの高可用性バッファリング出力アダプタを含むように構成します。
例21-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>
詳細は、次を参照してください:
アプリケーションが、Oracle CEPの高可用性タイプ1アプリケーション(アプリケーションは既存のセカンダリと完全に同一の出力イベントのシーケンスを生成する必要があります)である場合、バッファリング出力アダプタのwarm-up-window-lengthを構成します。
詳細は、次を参照してください:
ステップ1で作成したデプロイメント・グループにアプリケーションをデプロイします。
詳細は、24.5項「Oracle CEPアプリケーションのデプロイ」を参照してください。
Oracle CEPは、Oracle CEPサーバーのいずれかをプライマリとして自動的に選択します。
Oracle CEPの高可用性入力アダプタおよびブロードキャスト出力アダプタを使用して、軽量キュー・トリミングを構成します。
この手順は、図21-3で示すEPNの例から始まり、軽量キュー・トリミング用に構成するために必要なコンポーネントを加えていきます。例21-13は対応するEPNアセンブリ・ファイルを示し、例21-14は対応するコンポーネント構成ファイルを示します。
このOracle CEPの高可用性のサービス品質に関する詳細は、20.2.3項「軽量キュー・トリミング」を参照してください。
例21-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>
例21-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>
軽量キュー・トリミングを構成するには:
Oracle Coherenceを使用してマルチ・サーバー・ドメインを作成します。
詳細は、次を参照してください:
『Oracle Complex Event Processing管理者ガイド』のOracle Coherenceを使用してデフォルト・グループを持つOracle CEPマルチサーバー・ドメインを作成する方法に関する項
『Oracle Complex Event Processing管理者ガイド』のOracle Coherenceを使用してカスタム・グループを持つOracle CEPマルチサーバー・ドメインを作成する方法に関する項
Oracle CEPアプリケーションを作成します。
詳細は、4.2項「Oracle CEPプロジェクトの作成」を参照してください。
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
詳細は、4.7.2項「Oracle CEPプロジェクトへのOSGiバンドルの追加方法」を参照してください。
Oracle CEPアプリケーションのEPNアセンブリ・ファイルを構成し、例21-15に示すように、Oracle CEPの高可用性入力アダプタを追加します。
通常の入力アダプタhelloworldAdapterの後に、providerをha-inboundに設定したwlevs:adapter要素を追加します。
wlevs:listener要素を、idごとにha-inboundアダプタを参照する通常の入力アダプタhelloworldAdapterに追加します。
wlevs:source要素を、idごとにha-inboundアダプタを参照するhelloworldInputChannelに追加します。
例21-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>
Oracle CEPアプリケーションのEPNアセンブリ・ファイルを構成し、例21-16に示すように、Oracle CEPの高可用性ブロードキャスト出力アダプタを追加します。
チャネルhelloworldOutputChannelの後に、providerをha-broadcastに設定したwlevs:adapter要素を追加します。
idごとにha-broadcastアダプタを参照するように、チャネルhelloworldOutputChannelでwlevs:listener要素を更新します。
wlevs:listener要素を、HelloWorldBeanクラスを参照するha-broadcastアダプタに追加します。
例21-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>
Oracle CEPの高可用性入力アダプタを構成します。
次の例の構成を検討します。
詳細は、21.2.1.1項「高可用性入力アダプタのEPNアセンブリ・ファイルの構成」を参照してください。
例21-17 高可用性入力アダプタ: デフォルト構成
この例は、すべてのデフォルトを使用した高可用性入力アダプタの構成を示します。必須キーはすべてのイベント・プロパティに基づいており、高可用性入力アダプタが時間値を割り当てる対象のイベント・プロパティは、arrivalTimeという名前のイベント・プロパティです。
...
<wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
<wlevs:instance-property name="timeProperty" value="arrivalTime"/>
</wlevs:adapter>
...
例21-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>
...
例21-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>
...
例21-20 高可用性入力アダプタ: 複数のイベント・プロパティのキー
この例は、高可用性入力アダプタの構成を示します。ここでは、必須キーは1つ以上のイベント・プロパティ(orderIDおよびaccountIDプロパティ)に基づいており、高可用性入力アダプタが時間値を割り当てる対象のイベント・プロパティは、arrivalTimeという名前のイベント・プロパティです。複合キーのJavaクラス(com.acme.MyCompoundKeyClass)は必須で、その実装は例21-21で示されます。hashCodeおよびequalsメソッドが必要になります。keyClassを指定するとき、keyPropertiesインスタンス・プロパティは無視されます。Oracle CEPは、複合キーが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>
...
例21-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;
}
}
入力アダプタ(helloworldInputChannel)からのチャネル・ダウンストリームを構成し、例21-22で示される高可用性入力アダプタのtimeProperty設定に基づいて、アプリケーションのタイムスタンプを構成します。
wlevs:expressionをtimePropertyの値に設定する必要があります。
例21-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>
...
Oracle CEPの高可用性ブロードキャスト出力アダプタを構成します。
次の例の構成を検討します。
詳細は、21.2.3.1項「ブロードキャスト出力アダプタのEPNアセンブリ・ファイルの構成」を参照してください。
例21-23 ブロードキャスト出力アダプタ: デフォルト構成
この例は、すべてのデフォルトを使用したブロードキャスト出力アダプタの構成を示します。必須キーはすべてのイベント・プロパティに基づいており、キーの値は非モノトニック(継続的に増加しません)かつ全体順序(一意)です。
...
<wlevs:adapter id="myHaSlidingWindowAdapter" provider="ha-buffering" >
<wlevs:listener>
<bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
</wlevs:listener>
</wlevs:adapter>
...
例21-24 ブロードキャスト出力アダプタ: 1つのイベント・プロパティのキー
この例は、ブロードキャスト出力アダプタの構成を示します。ここでは、必須キーはイベント・プロパティ(timePropertyという名前)に基づいており、キーの値はモノトニック(継続的に増加します)かつ全体順序ではありません(一意ではありません)。
...
<wlevs:adapter id="myHaSlidingWindowAdapter" provider="ha-buffering" >
<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="total-order" value="false"/>
</wlevs:adapter>
...
例21-25 ブロードキャスト出力アダプタ: 複数のイベント・プロパティのキー
この例は、ブロードキャスト出力アダプタの構成を示します。ここでは、必須キーは1つ以上のイベント・プロパティ(timePropertyおよびaccountIDプロパティ)に基づいており、キーの値はモノトニック(継続的に増加します)かつ全体順序(一意)です。複合キーのJavaクラス(com.acme.MyCompoundKeyClass)は必須で、その実装は例21-26で示されます。hashCodeおよびequalsメソッドが必要になります。keyClassを指定するとき、keyPropertiesインスタンス・プロパティは無視されます。Oracle CEPは、複合キーがkeyClass内のすべてのゲッター・メソッドに基づくと仮定します。
...
<wlevs:adapter id="myHaSlidingWindowAdapter" provider="ha-buffering" >
<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="total-order" value="true"/>
</wlevs:adapter>
...
例21-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;
}
}
オプションで、コンポーネント構成ファイルを例21-27で示すように、Oracle CEPの高可用性入力アダプタおよびバッファリング出力アダプタを含むように構成します。
例21-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>
詳細は、次を参照してください:
アプリケーションが、Oracle CEPの高可用性タイプ1アプリケーション(アプリケーションは既存のセカンダリと完全に同一の出力イベントのシーケンスを生成する必要があります)である場合、ブロードキャスト出力アダプタのwarm-up-window-lengthを構成します。
詳細は、次を参照してください:
ステップ1で作成したデプロイメント・グループにアプリケーションをデプロイします。
詳細は、24.5項「Oracle CEPアプリケーションのデプロイ」を参照してください。
Oracle CEPは、Oracle CEPサーバーのいずれかをプライマリとして自動的に選択します。
Oracle CEPの高可用性入力アダプタおよび相関出力アダプタを使用して、JMSによる正確なリカバリを構成します。
この手順では、図21-4が示すEPNの例を作成する方法を説明します。例21-28は対応するEPNアセンブリ・ファイルを示し、例21-29は対応するコンポーネント構成ファイルを示します。
このOracle CEPの高可用性のサービス品質に関する詳細は、20.2.4項「JMSによる正確なリカバリ」を参照してください。
例21-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>
例21-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による正確なリカバリを構成するには:
Oracle Coherenceを使用してマルチ・サーバー・ドメインを作成します。
詳細は、次を参照してください:
『Oracle Complex Event Processing管理者ガイド』のOracle Coherenceを使用してデフォルト・グループを持つOracle CEPマルチサーバー・ドメインを作成する方法に関する項
『Oracle Complex Event Processing管理者ガイド』のOracle Coherenceを使用してカスタム・グループを持つOracle CEPマルチサーバー・ドメインを作成する方法に関する項
Oracle CEPアプリケーションを作成します。
詳細は、4.2項「Oracle CEPプロジェクトの作成」を参照してください。
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
詳細は、4.7.2項「Oracle CEPプロジェクトへのOSGiバンドルの追加方法」を参照してください。
Oracle CEPアプリケーションのEPNアセンブリ・ファイルを構成し、例21-30に示すように、Oracle CEPの高可用性入力アダプタを追加します。
通常の入力アダプタJMSInboundAdapterの後に、providerをha-inboundに設定したwlevs:adapter要素を追加します。
wlevs:listener要素を、idごとにha-inboundアダプタを参照する通常の入力アダプタJMSInboundAdapterに追加します。
wlevs:source要素を、idごとにha-inboundアダプタを参照するチャネルchannel1に追加します。
例21-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>
Oracle CEPアプリケーションのEPNアセンブリ・ファイルを構成し、例21-31に示すように、Oracle CEPの高可用性相関出力アダプタを追加します。
チャネルchannel2の後に、providerをha-correlatingに設定したwlevs:adapter要素を追加します。
idごとにha-correlatingアダプタを参照するように、チャネルchannel2でwlevs:listener要素を更新します。
wlevs:listener要素を、JMSOutboundAdapterクラスを参照するha-correlatingアダプタに追加します。
例21-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>
Oracle CEPの高可用性入力アダプタを構成します。
次の例の構成を検討します。
詳細は、21.2.1.1項「高可用性入力アダプタのEPNアセンブリ・ファイルの構成」を参照してください。
例21-32 高可用性入力アダプタ: デフォルト構成
この例は、すべてのデフォルトを使用した高可用性入力アダプタの構成を示します。必須キーはすべてのイベント・プロパティに基づいており、高可用性入力アダプタが時間値を割り当てる対象のイベント・プロパティは、arrivalTimeという名前のイベント・プロパティです。
...
<wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
<wlevs:instance-property name="timeProperty" value="arrivalTime"/>
</wlevs:adapter>
...
例21-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>
...
例21-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>
...
例21-35 高可用性入力アダプタ: 複数のイベント・プロパティのキー
この例は、高可用性入力アダプタの構成を示します。ここでは、必須キーは1つ以上のイベント・プロパティ(orderIDおよびaccountIDプロパティ)に基づいており、高可用性入力アダプタが時間値を割り当てる対象のイベント・プロパティは、arrivalTimeという名前のイベント・プロパティです。複合キーのJavaクラス(com.acme.MyCompoundKeyClass)は必須で、その実装は例21-36で示されます。hashCodeおよびequalsメソッドが必要になります。keyClassを指定するとき、keyPropertiesインスタンス・プロパティは無視されます。Oracle CEPは、複合キーが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>
...
例21-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;
}
}
入力アダプタ(channel1)からのチャネル・ダウンストリームを構成し、例21-37で示される高可用性入力アダプタのtimeProperty設定に基づいて、アプリケーションのタイムスタンプを構成します。
wlevs:expressionをtimePropertyの値に設定する必要があります。
例21-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>
...
Oracle CEPの高可用性相関出力アダプタfailOverDelayを構成します。
例21-38は、相関出力アダプタの構成を示し、ここではfailOverDelayが2000ミリ秒になっています。
例21-38 相関出力アダプタの構成: failOverDelay
...
<wlevs:adapter id="myHaCorrelatingAdapter" provider="ha-correlating" >
<wlevs:listener ref="JMSOutboundAdapter"/>
<wlevs:instance-property name="failOverDelay" value="2000"/>
</wlevs:adapter>
...
詳細は、21.2.4.1項「相関出力アダプタのEPNアセンブリ・ファイルの構成」を参照してください。
2番目の通常JMS入力アダプタを作成します。
例21-39は、JMSInboundAdapter2という名前のJMSアダプタを示します。
例21-39 インバウンドJMSアダプタのアセンブリ・ファイル
...
<wlevs:adapter id="JMSInboundAdapter2" provider="jms-inbound">
</wlevs:adapter>
...
このJMS入力アダプタは、1番目のJMS入力アダプタ(JMSInboundAdapterなど)と同一となるように構成する必要があります。例21-40は、両方のJMS入力アダプタのコンポーネント構成ファイルを示します。両アダプタは、同一のプロバイダを含む完全に同一の構成になる必要があります。
例21-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>./Queue1</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>./Queue1</destination-jndi-name>
<user>weblogic</user>
<password>weblogic</password>
<work-manager>JettyWorkManager</work-manager>
<concurrent-consumers>1</concurrent-consumers>
</jms-adapter>
...
</wlevs:config>
相関ソースとして機能するチャネルを作成します。
ソースとして2番目の通常JMS入力アダプタを持つこのチャネルを構成する必要があります。
例21-41は、ソースがJMSInboundAdapter2のclusterCorrelatingOutstreamという名前の相関ソースを示します。
correlatedSourceを持つOracle CEPの高可用性相関出力アダプタを構成します。
例21-38は、相関出力アダプタの構成を示し、ここではcorrelatedSourceがclusterCorrelatingOutstreamになっています。
例21-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>
...
詳細は、21.2.4.1項「相関出力アダプタのEPNアセンブリ・ファイルの構成」を参照してください。
アプリケーションが、Oracle CEPの高可用性タイプ1アプリケーション(アプリケーションは既存のセカンダリと完全に同一の出力イベントのシーケンスを生成する必要があります)である場合、相関出力アダプタのwarm-up-window-lengthを構成します。
詳細は、次を参照してください:
コンポーネント構成ファイルを構成し、例21-43で示すように、インバウンドJMSアダプタおよびアウトバウンドJMSアダプタのsession-transactedを有効にします。
例21-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>./Queue1</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>./Queue1</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>
オプションで、コンポーネント構成ファイルを例21-27で示すように、Oracle CEPの高可用性入力アダプタおよび相関出力アダプタを含むように構成します。
例21-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>
詳細は、次を参照してください:
オプションで、ActiveActiveGroupBeanをEPNに追加し、スケーラビリティを向上します。
詳細は、23.2項「ActiveActiveGroupBeanによるスケーラビリティの構成」を参照してください。
ステップ1で作成したデプロイメント・グループにアプリケーションをデプロイします。
詳細は、24.5項「Oracle CEPアプリケーションのデプロイ」を参照してください。
Oracle CEPは、Oracle CEPサーバーのいずれかをプライマリとして自動的に選択します。
チャネルやプロセッサなどのEPN内の他のコンポーネントを構成する方法と同様に、EPNアセンブリ・ファイルおよびコンポーネント構成ファイルでOracle CEPの高可用性アダプタを構成します。このような構成ファイルに関する一般情報は、次を参照してください。
|
注意: Oracle CEPの高可用性の構成に変更を加えた後、Oracle CEPアプリケーションを再デプロイする必要があります。24.5項「Oracle CEPアプリケーションのデプロイ」を参照してください。 |
この項では、Oracle CEPの高可用性アダプタのそれぞれに関する構成可能なオプションを次のような内容で説明します。
Oracle CEPの高可用性ブロードキャスト出力アダプタは、BroadcastInputAdapterによって実装されます。
この項では、Oracle CEPの高可用性入力アダプタの構成方法を次のような内容で説明します。
詳細は、20.1.3.1項「高可用性入力アダプタ」を参照してください。
Oracle CEPの高可用性入力アダプタを宣言するためのルート要素は、例21-45で示されるように、provider要素をha-inboundに設定したwlevs:adapterです。例21-45で示されるように、実際の入力アダプタでOracle CEPの高可用性入力アダプタのwlevs:listener要素を指定します。
例21-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>
表21-1は、Oracle CEPの高可用性入力アダプタに構成できるwlevs:adapterの追加子要素を説明します。
表21-1 高可用性入力アダプタ用wlevs:adapterの子要素
| 子要素 | 説明 |
|---|---|
|
|
表21-2で説明するように、 |
表21-2は、Oracle CEPの高可用性入力アダプタがサポートするインスタンス・プロパティを一覧表示しています。
表21-2 高可用性入力アダプタのインスタンス・プロパティ
| 名前 | 値 |
|---|---|
|
|
高可用性入力アダプタが時間値を割り当てる対象のイベント・プロパティ名を指定します。 これは、例21-45で示すように高可用性入力アダプタの接続対象となる、ダウンストリームEPNコンポーネントの |
|
|
Oracle CEPの高可用性入力アダプタがイベント・インスタンスを識別するために使用する、1つ以上のイベント・プロパティのスペースで区切られたリストを指定します。 1つ以上のプロパティを指定する場合は、 デフォルト: すべてのイベント・プロパティ。 |
|
|
複合キーとして使用されるJavaクラスの完全修飾なクラス名を指定します。 デフォルトでは、 |
|
|
Oracle CEPの高可用性入力アダプタが実際の入力アダプタから受信するイベントの種類名を指定します。これは、例21-45で示すように高可用性入力アダプタの接続対象となる、ダウンストリームEPNコンポーネントで使用するイベント型と同一です。 タプル・イベントの場合、このプロパティは必須です。 すべての他のJavaクラス・ベースのイベント型の場合、このプロパティはオプションです。 詳細は、1.1.2項「Oracle CEPイベント・タイプ」を参照してください。 |
Oracle CEPの高可用性入力アダプタの構成用ルート要素は、ha-inbound-adapterです。特定のアダプタのnameの子要素は、このアダプタを例21-50で示すように宣言するEPNアセンブリ・ファイルにおいて対応するwlevs:adapter要素のid属性に一致する必要があります。
例21-46 高可用性入力アダプタのコンポーネント構成ファイル
<ha:ha-inbound-adapter>
<name>myHaInputAdapter</name>
<heartbeat units="millis">1000</heartbeat>
<batch-size>10</batch-size>
</ha:ha-inbound-adapter>
表21-3は、Oracle CEPの高可用性入力アダプタに構成できるha-inbound-adapterの追加子要素を説明します。
表21-3 高可用性入力アダプタ用ha-inbound-adapterの子要素
| 子要素 | 説明 |
|---|---|
|
|
デフォルト: ハートビートが送信されません。 |
|
|
プライマリがセカンダリにブロードキャストする各タイミング・メッセージにおいてイベント数を指定します。 デフォルト: 1 (バッチを無効化)。 |
Oracle CEPの高可用性バッファリング出力アダプタは、SlidingWindowQueueTrimmingAdapterによって実装されます。
この項では、Oracle CEPの高可用性バッファリング出力アダプタの構成方法を次のような内容で説明します。
詳細は、20.1.3.2項「バッファリング出力アダプタ」を参照してください。
Oracle CEPの高可用性バッファリング出力アダプタを宣言するためのルート要素は、例21-47で示されるように、provider要素をha-bufferingに設定したwlevs:adapterです。
例21-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>
表21-4は、Oracle CEPの高可用性バッファリング出力アダプタに構成できるwlevs:adapterの追加子要素を説明します。
表21-4 バッファリング出力アダプタ用wlevs:adapterの子要素
| 子要素 | 説明 |
|---|---|
|
|
Oracle CEPの高可用性バッファリング出力アダプタから、通常の出力アダプタのダウンストリームを指定します。 |
|
|
表21-5で説明するように、 |
表21-5は、Oracle CEPの高可用性ブロードキャスト出力アダプタがサポートするインスタンス・プロパティを一覧表示しています。
Oracle CEPの高可用性バッファリング出力アダプタの構成用ルート要素は、ha-buffering-adapterです。特定のアダプタのnameの子要素は、このアダプタを例21-48で示すように宣言するEPNアセンブリ・ファイルにおいて対応するwlevs:adapter要素のid属性に一致する必要があります。
例21-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 >
表21-6は、Oracle CEPの高可用性バッファリング出力アダプタに構成できるha-buffering-adapterの追加子要素を説明します。
表21-6 バッファリング出力アダプタ用ha-buffering-adapterの子要素
| 子要素 | 説明 |
|---|---|
|
|
スライディング・ウィンドウのサイズを整数のミリ秒で指定します。 デフォルト: |
|
|
以前に失敗したセカンダリの再起動後または新しいセカンダリが
デフォルト: 詳細は、20.3.2.5項「適切なwarm-up-window時間の選択」を参照してください。 |
Oracle CEPの高可用性ブロードキャスト出力アダプタは、クラスGroupBroadcastQueueTrimmingAdapterによって実装されます。
この項では、Oracle CEPの高可用性ブロードキャスト出力アダプタの構成方法を次のような内容で説明します。
詳細は、20.1.3.3項「ブロードキャスト出力アダプタ」を参照してください。
Oracle CEPの高可用性ブロードキャスト出力アダプタを宣言するためのルート要素は、例21-49で示されるように、provider要素をha-broadcastに設定したwlevs:adapterです。
例21-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>
表21-7は、Oracle CEPの高可用性ブロードキャスト出力アダプタに構成できるwlevs:adapterの追加子要素を説明します。
表21-7 ブロードキャスト出力アダプタ用wlevs:adapterの子要素
| 子要素 | 説明 |
|---|---|
|
|
Oracle CEPの高可用性ブロードキャスト出力アダプタから、通常の出力アダプタのダウンストリームを指定します。 |
|
|
表21-8で説明するように、 |
表21-8は、Oracle CEPの高可用性ブロードキャスト出力アダプタがサポートするインスタンス・プロパティを一覧表示しています。
表21-8 ブロードキャスト出力アダプタのインスタンス・プロパティ
| 名前 | 値 |
|---|---|
|
|
Oracle CEPの高可用性ブロードキャスト出力アダプタがイベント・インスタンスを識別するために使用する、1つ以上のイベント・プロパティのスペースで区切られたリストを指定します。 1つ以上のプロパティを指定する場合は、 デフォルト: すべてのイベント・プロパティ。 |
|
|
複合キーとして使用されるJavaクラスの完全修飾なクラス名を指定します。 デフォルトでは、 複合キーは、 |
|
|
キーの値が(時間値のように)常に増加するかどうかを指定します。 有効な値:
デフォルト: |
|
|
イベント・キーが一意であるかどうか指定します。インスタンス・プロパティ 有効な値:
デフォルト: |
Oracle CEPの高可用性ブロードキャスト出力アダプタの構成用ルート要素は、ha-broadcast-adapterです。特定のアダプタのnameの子要素は、このアダプタを例21-50で示すように宣言するEPNアセンブリ・ファイルにおいて対応するwlevs:adapter要素のid属性に一致する必要があります。
例21-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>
表21-9は、Oracle CEPの高可用性ブロードキャスト出力アダプタに構成できるha-broadcast-adapterの追加子要素を説明します。
表21-9 ブロードキャスト出力アダプタ用ha-broadcast-adapterの子要素
| 子要素 | 説明 |
|---|---|
|
|
トリミング・メッセージが
デフォルト: |
|
|
以前に失敗したセカンダリの再起動後または新しいセカンダリが
デフォルト: 詳細は、20.3.2.5項「適切なwarm-up-window時間の選択」を参照してください。 |
Oracle CEPの高可用性相関出力アダプタは、クラスCorrelatedQueueTrimmingAdapterによって実装されます。
この項では、Oracle CEPの高可用性相関出力アダプタの構成方法を次のような内容で説明します。
詳細は、20.1.3.4項「相関出力アダプタ」を参照してください。
Oracle CEPの高可用性相関出力アダプタを宣言するためのルート要素は、例21-51で示されるように、provider要素をha-correlatingに設定したwlevs:adapterです。
例21-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>
表21-10は、Oracle CEPの高可用性相関出力アダプタに構成できるwlevs:adapterの追加子要素を説明します。
表21-10 相関出力アダプタ用wlevs:adapterの子要素
| 子要素 | 説明 |
|---|---|
|
|
Oracle CEPの高可用性バッファリング出力アダプタから、通常の出力アダプタのダウンストリームを指定します。 |
|
|
表21-11で説明するように、 |
表21-11は、Oracle CEPの高可用性相関出力アダプタがサポートするインスタンス・プロパティを一覧表示しています。
Oracle CEPの高可用性相関出力アダプタの構成用ルート要素は、ha-correlating-adapterです。特定のアダプタのnameの子要素は、このアダプタを例21-52で示すように宣言するEPNアセンブリ・ファイルにおいて対応するwlevs:adapter要素のid属性に一致する必要があります。
例21-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>
表21-12は、Oracle CEPの高可用性相関出力アダプタに構成できるha-broadcast-adapterの追加子要素を説明します。
表21-12 相関出力アダプタ用ha-correlating-adapterの子要素
| 子要素 | 説明 |
|---|---|
|
|
フェイルオーバー後に相関関係が再起動される速さを決定するために使用される、遅延タイムアウトをミリ秒単位で指定します。 デフォルト: 0ミリ秒。 |
|
|
以前に失敗したセカンダリの再起動後または新しいセカンダリが
デフォルト: 詳細は、20.3.2.5項「適切なwarm-up-window時間の選択」を参照してください。 |