この章では、カスタムSpring Beanのコーディングおよび登録方法について説明します。次の項が含まれます。
Spring BeanはSpringフレームワークによって管理されるPOJO (Plain Old Java Object)です。標準のbean
要素を使用して、Spring BeanをEPNアセンブリ・ファイルに登録します。
Spring Beanはステージの一種ではなく、Oracle CEP監視フレームワークによって監視できません。また、構成メタデータの注釈も使用できず通過するイベントを記録および再生するように設定できません。
POJOをOracle CEPアプリケーションに追加する手順:
Springへのレガシー統合にSpring Beanを使用します。
Oracle CEPサーバー・コンテナの能力を積極的に使用するためにイベントBeanを使用します。
詳細は、第15章「カスタム・イベントBeanの構成」を参照してください。
標準のSpring Beanはイベント・ソースまたはイベント・シンク、あるいはその両方に使用できます。イベント・ソースはイベントを生成し、イベント・シンクはイベントを受信します。
com.bea.wlevs.ede.api.StreamSource
またはRelationSource
APIを実装して、EPN内の標準のSpring Beanコンポーネントがイベント・ソースであることを指定します。
Beanは、オプションで、InitializingBean
、DisposableBean
のような様々なライフサイクル・インタフェース、およびRunnableBean
のようなアクティブなインタフェースを実装することがあります。Spring BeanがRunnable
を実装し、RunnableBean
は実装しない場合、Oracle CEPはそれをスレッドで実行しません。これは、イベントBeanと異なった動作になります。
Spring Beanイベント・ソースでは、@Prepare
、@Rollback
、@Activate
などの構成メタデータの注釈を利用できます。
bean
要素を使用して、Spring BeanをEPNアセンブリ・ファイルに登録します。例:
<bean id="bean" class="com.acme.BeanSource" />
この例では、JavaクラスBeanSource.java
によってcom.bea.wlevs.ede.api.StreamSource
またはRelationSource
APIが実装されます。
com.bea.wlevs.ede.api.StreamSink
またはRelationSinkn
APIを実装して、EPN内の標準のSpring Beanコンポーネントがイベント・シンクであることを指定します。
Beanは、オプションで、InitializingBean
、DisposableBean
のような様々なライフサイクル・インタフェース、およびRunnableBean
のようなアクティブなインタフェースを実装することがあります。Spring BeanがRunnable
を実装し、RunnableBean
は実装しない場合、Oracle CEPはそれをスレッドで実行しません。これは、イベントBeanと異なった動作になります。
Spring Beanイベント・ソースでは、@Prepare
、@Rollback
、@Activate
などの構成メタデータの注釈を利用できます。
bean
要素を使用して、通常の方法でSpring BeanをEPNアセンブリ・ファイルに登録します。その後、このBeanをEPNの他のステージに対するイベント・シンクとして指定できます。
wlevs:listener
要素を使用してEPNアセンブリ・ファイルでイベント・シンクを参照します。
<wlevs:channel id="S2" advertise="true" event-type="StockEvent" > <wlevs:listener ref="bean"/> <wlevs:source ref="cacheProcessor"/> </wlevs:channel> <bean id="bean" class="com.bea.wlevs.example.cachecql.Bean" />
この例では、JavaクラスBean.java
によってcom.bea.wlevs.ede.api.StreamSink
またはRelationSink
APIが実装されます。
以下の手順では、カスタム・イベントBeanを作成する通常のステップについて説明します。
カスタム・イベントBeanを実装する手順:
カスタム・イベントBean Javaクラスをプログラミングします。
カスタム・イベントBeanがイベント・ソースの場合、16.2.1項「カスタムSpring Beanをイベント・ソースとして実装」を参照してください。
カスタム・イベントBeanがイベント・シンクの場合、16.2.2項「カスタムSpring Beanをイベント・シンクとして実装」を参照してください。
カスタム・イベントBeanがイベント・ソースとイベント・シンクの両方である場合は、両方の項を参照してください。
カスタム・イベントBeanおよびカスタム・イベントBeanファクトリ(使用する場合)の登録情報を使用して、EPNアセンブリ・ファイルを更新します。
16.3項「カスタムSpring Bean EPNファイルの構成」を参照してください。
カスタム・イベントBeanの基本構成が不十分な場合は、必要に応じてその構成を拡張します。
第19章「コンポーネント構成の拡張」を参照してください。
次の例は、イベント・ソースとしてのカスタムSpring Beanクラスを示します。Javaコードの太字部分に対応するコーディングのガイドラインについては、例の後で説明しています。
package com.acme; import com.bea.wlevs.ede.api.StreamSender; import com.bea.wlevs.ede.api.StreamSource; import com.bea.wlevs.ede.api.RunnableBean; public class SpringBeanSource implements RunnableBean, StreamSource { public void setEventSender (StreamSender streamSender) { ... } public void run() { ... } public synchronized void suspend() throws Exception { ... } }
カスタムSpring Bean Javaクラスのプログラミングでは、次のガイドラインに従います。上記の例でガイドラインのコード・スニペットは太字で示されています。
Oracle CEP APIのインタフェースおよびクラスをインポートします。
import com.bea.wlevs.ede.api.StreamSender; import com.bea.wlevs.ede.api.StreamSource; import com.bea.wlevs.ede.api.RunnableBean;
カスタムSpring Beanはイベント・ソースであるため、StreamSource
インタフェースを実装する必要があります。カスタムSpring Beanをスレッドで実行する必要がある場合は、RunnableBean
も実装します。StreamSender
インタフェースは、イベント・タイプをアプリケーション・ネットワークの次のコンポーネントに送信します。これらのAPIの完全な詳細は、Oracle Complex Event ProcessingのOracle Fusion Middleware Java APIリファレンスを参照してください。
カスタムSpring Beanクラスはイベント・ソースであり、固有のスレッドで実行されるため、StreamSource
およびRunnableBean
インタフェースを実装する必要があります。
public class HelloWorldAdapter implements RunnableBean, StreamSource {
StreamSource
インタフェースではイベントの送信に使用されるStreamSender
が提供されます。
RunnableBean
インタフェースが実装されるため、カスタムSpring Beanではrun
メソッドを実装する必要があります。
public void run() {...
ここに、マーケット・フィードなどからの着信データを読み込み、Oracle CEPイベント・タイプに変換し、ネットワークの次のコンポーネントにイベントを送信するコードを配置する必要があります。着信データの読込み方法の詳細については、データ・フィード・プロバイダのドキュメントを参照してください。サード・パーティJARファイルにパッケージ化されているベンダーAPIに確実にアクセスできるための情報は、24.2.2.2項「サード・パーティJARファイルへのアクセス」を参照してください。
カスタムSpring BeanではStreamSource
が実装されるため、イベントの送信に使用されるStreamSender
を渡すsetEventSender
メソッドを実装する必要があります。
public void setEventSender(StreamSender sender) { ...
通常のケースと同様、カスタムSpring BeanでSuspendableBean
が実装される場合は、たとえばアプリケーションがアンデプロイされた場合などにアダプタを停止するsuspend
メソッドを実装する必要があります。
public synchronized void suspend() throws Exception { ...
次のコード例は、HelloWorldアプリケーションでイベント・シンクとして動作するSpring Beanです。太字部分のコードについては、例の後で説明しています。
package com.bea.wlevs.example.helloworld; import com.bea.wlevs.ede.api.StreamSink; import com.bea.wlevs.event.example.helloworld.HelloWorldEvent; public class HelloWorldBean implements StreamSink { public void onInsertEvent(Object event) { if (event instanceof HelloWorldEvent) { HelloWorldEvent helloWorldEvent = (HelloWorldEvent) event; System.out.println("Message: " + helloWorldEvent.getMessage()); } } }
上記の例に示したプログラミングのガイドラインは、次のとおりです。
Beanではアプリケーションのイベント・タイプをインポートする必要があります。HelloWorldの場合はHelloWorldEvent
です。
import com.bea.wlevs.event.example.helloworld.HelloWorldEvent;
Beanはcom.bea.wlevs.ede.api.StreamSink
インタフェースを実装する必要があります。
public class HelloWorldBean implements StreamSink {...
StreamSink
インタフェースは、実装する必要のあるonInsertEvent (java.lang.Object)
という単一のメソッドがあります。このメソッドは、イベントを受信するためのコールバック・メソッドです。メソッドパラメータはオブジェクト
であり、イベントを送信したコンポーネントからBeanが受信した実際のイベントを表現します。
public void onInsertEvent(Object event)
イベントのデータ型は、アプリケーションのEPNアセンブリ・ファイルに登録されたイベント・タイプによって決定されます。この例のイベント・タイプはHelloWorldEvent
です。コードでは、受信したイベントが実際にHelloWorldEvent
であることがまず確認されます。
if (event instanceof HelloWorldEvent) { HelloWorldEvent helloWorldEvent = (HelloWorldEvent) event;
このイベント・タイプは、EPNアセンブリ・ファイルで以下のように構成されたJavaBeanです。
<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>
EPNアセンブリ・ファイルの作成手順に関する情報は、4.3項「EPNアセンブリ・ファイルの作成」を参照してください。参照情報は、付録C「スキーマ参照: EPNアセンブリspring-wlevs-v11_1_1_3.xsd」を参照してください。
イベントは該当するJavaBeanのインスタンスであるため、標準のgetXXX
メソッドを使用して個々のプロパティにアクセスします。この例では、HelloWorldEvent
にはmessage
のプロパティがあり、getMessage
を使用してこのプロパティにアクセスします。
System.out.println("Message: " + helloWorldEvent.getMessage());
この項で説明しているOracle CEP APIの完全なAPIリファレンス情報については、Oracle Fusion Middleware Oracle Complex Event Processing Java APIリファレンスを参照してください。
次の項で説明しているとおり、カスタム・イベントBean、およびイベントBeanファクトリ(使用している場合)をEPNアセンブリ・ファイルに登録する必要があります。
アプリケーションの他のコンポーネントの登録を含む、構成ファイルの完全な説明は、4.3項「EPNアセンブリ・ファイルの作成」を参照してください。