この章では、カスタム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アセンブリ・ファイルの作成」を参照してください。