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