Oracle® Fusion Middleware Oracle Event Processing開発者ガイド 11gリリース1 (11.1.1.7) for Eclipse B61654-06 |
|
前 |
次 |
この章では、イベント処理ネットワーク(EPN)のイベントを送受信するイベント・シンクおよびイベント・ソースとして機能するJavaクラスに必要なOracle Event Processingインタフェースの実装方法について説明します。Oracle Event ProcessingイベントBeanまたはSpring BeanとしてJavaクラスを構成する方法についても説明します。
Javaの新しいロジックを書き込むか、または既存のJavaコードを組み込むかにかかわらず、Oracle Event Processingは、Javaコードをアプリケーションに追加するいくつかの方法を提供します。オプションには、コードの実行場所と実行方法および構成方法が含まれます。
この章の内容は次のとおりです。
新しい機能を書き込むか、Oracle Event Processingアプリケーションに組み込むJavaの既存のロジックがあるかにかかわらず、コードの場所はそのロールによって変わります。
多くのOracle Event ProcessingアプリケーションでJavaコードは必要ないので注意してください。たとえば、アプリケーションのロジックは、Oracle CQLのみで取得される場合があります。
Javaコードのロールの次の説明を使用して、コードに最適な場所を検索します。
イベント処理ネットワーク(EPN)を通過するイベントを処理するBeanとしてのJavaクラス
EPNを通過する場合にイベントを処理するJavaコードを書き込んで、イベントを受信、送信または送受信できます。たとえば、イベントの送受信をサポートするクラスを追加して、EPNで中間ロジックとして使用できます。そのため、受信するイベントからデータを受信し、特定のダウンストリーム・コンポーネントで使用するデータから新しい種類のイベントを作成できます。
イベントを送受信するJavaクラスの実装の詳細は、16.3項「BeanとしてのJavaクラスの構成」を参照してください。
イベントを着信または発信する外部コンポーネントを統合するカスタム・アダプタ
Oracle Event Processingに付属しているアダプタでサポートされていない外部コンポーネントとやり取りするよう設計されたカスタム・アダプタのロジックとして、Javaクラスを実装できます。たとえば、付属しているJMSまたはHTTPパブリッシュ・サブスクライブ・アダプタでサポートされていないイベント・ソースからイベントを受信できるアダプタを実装できます。
カスタム・アダプタのJavaコードは、この章で説明されているイベント・ソースおよびイベント・シンク機能を実装します。16.2項「ソースおよびシンクでのイベントの処理」を参照してください。カスタム・アダプタの他の側面の詳細は、第15章「カスタム・アダプタを使用した外部コンポーネントの統合」を参照してください。
Oracle CQLコードの機能を強化するJava関数
Oracle CQLコードからJavaメソッドを呼び出して、固有のロジックでOracle CQLを強化できます。たとえば、アプリケーションでイベント・データとして受信するデータなどの計算を実行するメソッドとともにJavaクラスを書き込んだ場合、select
文の一部としてOracle CQLコード内のクラスのメソッドを呼び出す可能性があります。
詳細は、『Oracle Fusion Middleware Oracle Event Processing CQL言語リファレンス』のユーザー定義関数に関する項を参照してください。
イベント・データを表すイベント・タイプとしてのJavaBeanクラス
JavaBeanクラスとしてタイプを実装して、イベント・タイプ -- アプリケーションを介してイベントを移動する手段 -- を作成できます。選択肢はありますが、これがベスト・プラクティス・アプローチです。
詳細は、9.3.1項「JavaBeanとしてのOracle Event Processingイベント・タイプの作成」を参照してください。
イベントを処理するよう設計されたJavaコードを書き込む場合、イベント・シンクまたはイベント・ソースのクラスを作成します。イベント処理ネットワークを通過する場合、イベント・シンクはイベントを受信できます。イベント・ソースはイベントを作成し、EPNのダウンストリーム・ステージに送信できます。たとえば、イベントを受信し、データに関する処理を実行し、次のステージに送信するクラスを作成できます。
イベント・シンクおよびソースは、Oracle Event Processing APIで提供される特定のインタフェースを実装します。イベント・シンクは、Oracle Event Processingサーバーがイベント・タイプ・インスタンスに渡すことができるメソッドを含むインタフェースを実装します。イベント・ソースは、イベントを送信するのに使用するオブジェクトを受信するメソッドを含むインタフェースを実装します。1つのクラスは、イベント処理ネットワーク(EPN)のロールに応じて、いずれかまたは両方の種類の機能を実装できます。
注意: この項は、ストリームとリレーションおよびイベント処理ネットワークを移動するイベントを表す様々な方法を理解していることを前提とします。そうでない場合、必ず1.3項「イベント、ストリームおよびリレーションの概要」を参照してください。 |
イベント処理のJavaコードの一般的な場所は、アダプタおよびBeanです。アダプタは、外部コンポーネントと通信するEPNの一部です。外部イベント・データを受信してデータからイベントを作成するか、内部イベントを受信してデータをEPNの外側の別のコンポーネントに送信するよう設計されています。この章の説明に従ったイベント処理コードの書込みは、アダプタの作成の重要な一部です。アダプタの作成の詳細は、第15章「カスタム・アダプタを使用した外部コンポーネントの統合」を参照してください。
アダプタと同様に、Beanはイベントを処理できます。ただし、通常、イベントを内外に渡すようEPNの中央にBeanを追加します。たとえば、Javaコードで通過するイベントのデータに応じてアプリケーション・ロジックを実行するBeanを追加できます。
次の手順では、イベントを送受信するJavaクラスを作成する一般的な手順について説明します。
イベントを送受信するために必要なインタフェースを実装します。EPNコンポーネントとしてJavaロジックを開発するオプションは次のとおりです。
EPNを通過する場合にイベントを受信できるクラスを作成するには、クラスをイベント・シンクにするインタフェースを実装します。これらのインタフェースには、1つのイベントを受信するStreamSinkまたはRelationSinkあるいはイベントのバッチを受信するBatchStreamSinkまたはBatchRelationSinkが含まれます。詳細は、16.2.1項「イベント・シンクの実装」を参照してください。
EPNの他の部分にイベントを送信できるクラスを作成するには、クラスをイベント・ソースにするインタフェースを実装します。これらのインタフェースには、1つのイベントを送信するStreamSourceまたはRelationSourceあるいはイベントのバッチを送信するBatchStreamSourceまたはBatchRelationSourceが含まれます。詳細は、16.2.2項「イベント・ソースの実装」を参照してください。
属するEPNに追加できるよう、クラスを構成します。
クラスがアダプタの一部である場合、アダプタの実装を終了し、第15章「カスタム・アダプタを使用した外部コンポーネントの統合」の説明に従って構成します。
クラスがBeanとしてEPNに追加されると、16.3項「BeanとしてのJavaクラスの構成」の説明に従って構成できます。
注意: この手順では、カスタム・イベントBeanはプロセッサ、ストリームおよびビジネス・ロジックPOJOなど、EPNの他のコンポーネントを組み込んだ同一アプリケーションJARファイルにバンドルされたとみなされます。カスタム・イベントBeanを固有のJARファイルにバンドルし、複数のアプリケーション間で共有できるようにするには、23.2.4.2項「固有のバンドルでのイベントBeanのアセンブル方法」を参照してください。 |
イベント処理ネットワークを通過する場合にイベントを受信できるJavaクラスを作成できます。イベントを受信できるコンポーネントはイベント・シンクです。イベント・シンクなどを作成して、各イベントの内容に対応するロジックとともにイベント処理ネットワークの中央でイベントを受信できます。
イベント・シンクのJavaクラスは、この項に記載されているインタフェースのいずれかを実装します。各インタフェースは、イベントが通常チャネルであるクラスのEPNステージに接続されたアップストリームを終了する場合にイベントをクラスに渡すためにOracle Event Processingサーバーで使用するメソッドを提供します。
ここで示されるインタフェースは、ストリームまたはリレーションとして到着するイベントのサポートを提供します。ただし、リレーション・サポートのインタフェースは、ストリームとして到着するイベントの受信もサポートします。次の表に示すように、インタフェースは階層的に関連します。
インタフェース | 説明 |
---|---|
|
ストリームとして順番に到着するイベントを受信するためにこれを実装します。 |
|
リレーションとして順番に到着するイベントを受信するためにこれを実装します。ストリームとしてイベントを受信するサポートも提供するよう、 |
|
ストリームとして到着するバッチ・イベントの受信をサポートするためにこれを実装します。送信元のチャネルを構成してバッチ処理を許可する場合、イベントはタイムスタンプでバッチ処理されて到着する可能性があります。バッチ処理されていないイベントを受信するサポートも提供するよう、 |
|
リレーションとして到着するバッチ・イベントの受信をサポートするためにこれを実装します。送信元のチャネルを構成してバッチ処理を許可する場合、イベントはタイムスタンプでバッチ処理されて到着する可能性があります。ストリームまたはリレーションとしてバッチ処理されていないイベントを受信するサポートも提供するよう、 |
ストリームとしてイベントを受信するクラスは、Oracle Event Processingの観点から挿入されるイベントのみ受信します。そのため、ストリームでは、イベントはシーケンスの最後に常に追加されます。また、ストリームのイベントは、あるイベントから次のイベントにタイムスタンプの値が古くならないよう、時間の昇順で常に受信します。(非減少のタイムスタンプの概念はイベントのタイムスタンプが直前のイベントのタイムスタンプと同じになる可能性を考慮しますが、直前のタイムスタンプ以前は考慮しません。同一または以降のいずれかです。)
その結果、ストリームとしてイベントを受信するサポート用のインタフェースは、イベントを受信するごとに1つのメソッドを持ちます。これと複数の種類のイベントの受信をサポートするリレーションとしてイベントを受信するインタフェースを対比します。
ストリームとしてバッチ処理されていないイベントを受信するクラスの場合、StreamSink
インタフェースを実装します。クラスに接続されるアップストリーム・ステージを離れる場合にストリームから各イベントに渡すためにOracle Event Processingサーバーが呼び出す1つのメソッドonInsertEvent
があります。
例16-1「StreamSinkインタフェースの実装」では、株式取引イベントを受信する単純なStreamSink
実装は、Object
インスタンスとして各イベントを受信し、イベントが特定のイベント・タイプのインスタンスかどうかをテストして確認します。そうである場合、コードはそのタイプのメンバーであるプロパティの値を取得します。
例16-1 StreamSinkインタフェースの実装
public class TradeListener implements StreamSink { public void onInsertEvent(Object event) throws EventRejectedException { if (event instanceof TradeEvent){ String symbolProp = ((TradeEvent) event).getSymbol(); Integer volumeProp = ((TradeEvent) event).getVolume(); // Code to do something with the property values. } } }
ストリームとしてバッチ処理されたイベントを受信するクラスの場合、BatchStreamSink
インタフェースを実装します。インタフェースには、アップストリーム・ステージから受信するイベントの集合に渡すためにOracle Event Processingサーバーが呼び出す1つのメソッドonInsertEvents
があります。(BatchStreamSink
インタフェースはStreamSink
を拡張するため、バッチ処理されていないイベントも受信できます。)
イベントのバッチ処理の詳細は、10.1.6項「バッチ処理チャネル」を参照してください。
リレーションとしてイベントを受信するクラスは、リレーションにある可能性があるすべての種類のイベント(イベントの挿入、イベントの削除およびイベントの更新)を受信できます。ストリームと異なり、リレーションのイベントは順序付けされず、リレーションを作成または操作したコードで更新または削除されたイベントを含みます。
そのため、リレーションとしてイベントを受信するサポート用のインタフェースには、クラスでイベントの挿入、削除または更新を受信できるメソッドがあります。
リレーションとしてバッチ処理されていないイベントを受信するクラスの場合、RelationSink
インタフェースを実装します。onInsertEvent
、onDeleteEvent
およびonUpdateEvent
の3つのメソッド(1つはStreamSink
インタフェースから継承されたもので、このインタフェースを拡張します)があります。実行時、Oracle Event Processingサーバーは、クラスに接続されるアップストリーム・チャネルから受信するイベントのタイプに応じて適切なメソッドを呼び出します。
例16-2 RelationSinkインタフェースの実装
public class TradeListener implements RelationSink { public void onInsertEvent(Object event) throws EventRejectedException { if (event instanceof TradeEvent){ String symbolProp = ((TradeEvent) event).getSymbol(); Integer volumeProp = ((TradeEvent) event).getVolume(); // Do something with the inserted event. } } @Override public void onDeleteEvent(Object event) throws EventRejectedException { if (event instanceof TradeEvent){ // Do something with the deleted event. } } @Override public void onUpdateEvent(Object event) throws EventRejectedException { if (event instanceof TradeEvent){ // Do something with the updated event. } } }
リレーションとしてバッチ処理されたイベントを受信するクラスの場合、BatchRelationSink
インタフェースを実装します。java.util.Collection
インスタンスのバッチから3つのタイプすべてのイベントを受信するよう設計されたonEvents
メソッドがあります。
onEvents(insertEvents, deleteEvents, updateEvents)
また、このインタフェースはRelationSink
インタフェースを拡張して、バッチ処理されていないイベントを受信するサポートを提供します。
実行時、Oracle Event Processingサーバーは、適切なメソッドを呼び出して、クラスに接続されたアップストリーム・ステージから受信するイベントに渡します。
イベントのバッチ処理の詳細は、10.1.6項「バッチ処理チャネル」を参照してください。
この項で説明しているOracle Event Processing APIの完全なAPIリファレンス情報については、Oracle Fusion Middleware Oracle Event Processing Java APIリファレンスを参照してください。
イベント処理ネットワークのダウンストリーム・ステージにイベントを送信できるJavaクラスを作成できます。イベントを送信できるコンポーネントはイベント・ソースです。イベント・ソースなどを作成して、Javaコードで作成したイベントまたはEPNを通過するイベント・データから変更したイベントを送信できます。
イベント・ソースのJavaクラスは、この項に記載されているインタフェースのいずれかを実装します。各インタフェースは、Oracle Event Processingサーバーで使用されるメソッドを提供して、クラスにセンダー・クラスのインスタンスを渡します。
イベント・ソースで受信するセンダー・インスタンスは、この項に記載されているセンダー・インタフェースのいずれかを実装します。センダー・インタフェースは、バッチ処理の有無にかかわらずストリームまたはリレーションとしてイベントをチャネルなどの後続のダウンストリームEPNステージに送信するためにコードで呼び出すことができるメソッドを提供します。
ここで示されるインタフェースは、ストリームまたはリレーションとしてイベントを送信するサポートを提供します。ただし、リレーション・サポートのインタフェースは、ストリームとしてイベントの送信もサポートします。
表16-1 イベント・ソースを実装するインタフェース
インタフェース | 説明 |
---|---|
|
ストリームとしてイベントを送信する機能のためにこれを実装します。実行時、Oracle Event Processingサーバーはストリーム・センダー・クラスのインスタンスをインジェクトします。 |
|
リレーションまたはストリームとしてイベントを送信する機能のためにこれを実装します。実行時、Oracle Event Processingサーバーはリレーション・センダー・クラスのインスタンスをインジェクトします。ストリーム・イベントのソースとしてサポートも提供するよう、 |
表16-2「センダー・クラスで実装されるインタフェース」に示すインタフェースは、イベント・ソース・クラスがOracle Event Processingサーバーから受信するセンダー・クラスによって実装されます。
表16-2 センダー・クラスで実装されるインタフェース
インタフェース | 説明 |
---|---|
|
コードでストリームとしてイベントを送信できるメソッドを提供します。 |
|
コードでリレーションとしてイベントを送信できるメソッドを提供します。ストリームとしてイベントを送信するサポートも提供するよう、 |
|
コードでストリームとしてバッチ処理されたイベントを送信できるメソッドを提供します。送信する ダウンストリーム・ステージがバッチ処理されたイベントのために構成されたチャネルである場合、タイムスタンプでバッチ処理されたイベントを送信できます。バッチ処理されていないイベントを送信するサポートも提供するよう、 |
|
コードでリレーションとしてバッチ処理されたイベントを送信できるメソッドを提供します。送信するダウンストリーム・ステージがバッチ処理されたイベントのために構成されたチャネルである場合、タイムスタンプでバッチ処理されたイベントを送信できます。バッチ処理されていないイベントを送信するサポートも提供するよう、 |
ストリームとしてイベントのソースであるクラスは、Oracle Event Processingの観点から挿入されるイベントのみ送信します。挿入されたイベントのみ送信すると、リレーションではなくストリームがモデル化されます。ストリーム・ソースから送信されるイベントには、あるイベントから後続のイベントへの非減少のタイムスタンプもあります。つまり、後続のイベントのタイムスタンプは、直前のイベントと同じか後になります。
StreamSource
を実装する場合、コードによってバッチ処理の有無にかかわらずイベントを送信できます。StreamSource
setEventSender
メソッドの実装により、表16-2「センダー・クラスで実装されるインタフェース」に示されているタイプのいずれかにキャストできるセンダー・インスタンスを受信します。コードはセンダー・インスタンスを使用して、イベントが移動するダウンストリーム・ステージで期待したとおりにイベントを送信します。
コードでバッチ処理を有効にするチャネルにイベントを送信する場合、送信する前にバッチ処理されたイベント・センダーのいずれかを使用して、タイムスタンプでイベントをバッチ処理する必要があります。詳細は、10.1.6項「バッチ処理チャネル」を参照してください。
センダー・インスタンスは、アプリケーションのタイムスタンプを付けるように受信チャネルを構成する場合にハートビートを送信できるsendHeartbeat
メソッドも提供します。
リレーションとしてイベントのソースであるクラスは、イベントを受信するダウンストリーム・ステージで期待したとおりにイベントの挿入、削除および更新を送信できます。
RelationSource
を実装する場合、コードでバッチ処理の有無にかかわらずイベントを送信できます。RelationSource
setEventSender
メソッドの実装により、表16-2「センダー・クラスで実装されるインタフェース」に示されているタイプのいずれかにキャストできるセンダー・インスタンスを受信します。コードは、センダー・インスタンスを使用して、ダウンストリーム・ステージで期待したとおりにイベントを送信します。
RelationSource
を実装する場合、クラスで受信するセンダー・インスタンスを使用する場合に次の制約に留意してください。
sendDeleteEvent
については、チャネル用に構成されたのと同じイベント・タイプのインスタンスを送信する必要があります。
sendInsertEvent
については、同じ主キーを持つイベントがすでにリレーション内に含まれる場合、一意制約違反例外が発生し、入力イベントが破棄されます。
sendUpdateEvent
については、指定の主キーを持つイベントがリレーション内に含まれていない場合、無効な更新タプル例外が発生し、入力イベントが破棄されます。
例16-3「RelationSourceインタフェースの実装」では、単純なRelationSource実装はStreamSenderを受信し、リレーションとしてイベントを送信するためにセンダーをRelationSenderにキャストします。このクラスはリポジトリで構成されたイベント・タイプから新しいTradeEventインスタンスを作成しますが、sendEventsメソッドはコードの別の部分からパラメータのように簡単にインスタンスを受信できます。
例16-3 RelationSourceインタフェースの実装
package com.oracle.cep.example.tradereport; import com.bea.wlevs.ede.api.EventType; import com.bea.wlevs.ede.api.EventTypeRepository; import com.bea.wlevs.ede.api.RelationSender; import com.bea.wlevs.ede.api.RelationSource; import com.bea.wlevs.ede.api.StreamSender; import com.bea.wlevs.util.Service; public class TradeEventSource implements RelationSource { // Variables for event type respository and event sender. Both // will be set by the server. EventTypeRepository m_repos = null; RelationSender m_sender = null; // Called by the server to set the repository instance. @Service public void setEventTypeRepository(EventTypeRepository repos) { m_repos = repos; } // Called by the server to set the sender instance. @Override public void setEventSender(StreamSender sender) { // Cast the received StreamSender to a RelationSender m_sender = (RelationSender)sender; } /** * Sends events to the next EPN stage using the sender * received from the server. This code assumes that an event * instance isn't received from another part of the class, * instead creating a new instance from the repository. */ private void sendEvents(){ EventType eventType = m_repos.getEventType("TradeEvent"); TradeEvent tradeEvent = (TradeEvent)eventType.createEvent(); m_sender.sendDeleteEvent(tradeEvent); } }
Javaクラスを書き込んでイベントを処理する場合、EPNアセンブリ・ファイルで構成してEPNに追加できます。Spring BeanまたはOracle Event ProcessingイベントBeanとしてクラスを構成できます。
注意: 外部コンポーネントとやり取りする場合にコードでイベントを受信または送信するアダプタの一部としてクラスを追加することもできます。アダプタとしてのクラスの構成の詳細は、第15章「カスタム・アダプタを使用した外部コンポーネントの統合」を参照してください。 |
イベントBeanまたはSpring Beanとしてクラスを構成するかどうかは、デプロイメント・コンテキストおよびサポートする機能に依存します。ただし、基本的に、他の場所ですでにSpringを使用している場合など、Spring機能の利用に関心がある場合にSpring Beanとしてクラスを構成できます。
表16-3「イベントBeanおよびSpring Beanの比較」は、イベントBeanおよびSpring Beanで提供される機能を示します。
表16-3 イベントBeanおよびSpring Beanの比較
Beanタイプ | 説明 |
---|---|
イベントBean |
Oracle Event Processingサーバー・コンテナの機能を積極的に使用するEPNステージとして役立ちます。イベントBeanの機能は次のとおりです。
|
Spring Bean |
Springへのレガシー統合に役立ちます。Spring Beanの機能は次のとおりです。
|
それぞれの異なるbeanタイプの詳細は、次を参照してください。
EPNアセンブリ・ファイルおよびコンポーネント構成ファイルでOracle Event ProcessingイベントBeanとしてJavaクラスを構成できます。EPNアセンブリ・ファイルでイベントBeanとして構成すると、デフォルト設定とともにBeanがEPNに追加されます。コンポーネント構成ファイルで構成して、特定の機能へのランタイム構成変更をサポートできます。
詳細は、次の項を参照してください。
アプリケーションの他のコンポーネントの登録を含む、構成ファイルの完全な説明は、5.3項「EPNアセンブリ・ファイルの作成」を参照してください。
EPNアセンブリ・ファイルでは、wlevs:event-bean
要素を使用してカスタム・イベントBeanをイベント・プロセッサ・ネットワークのコンポーネントとして宣言します。構成コードはファクトリから作成されるイベントBeanによって異なるので注意してください。詳細は、16.3.1.3項「イベントBeanファクトリの作成」を参照してください。
次の例では、TradeListener
クラスは、ダウンストリーム接続がID BeanOutputChannel
を使用したチャネルであるイベントBeanとして構成されます。
<wlevs:event-bean id="TradeListenerBean" class="com.oracle.cep.example.tradereport.TradeListener"> <wlevs:listener ref="BeanOutputChannel"/> </wlevs:event-bean>
wlevs:instance-property
子要素を使用して、Beanの静的プロパティを設定することもできます。静的プロパティはBeanのデプロイ後に変更されないプロパティです。
たとえば、BeanクラスにsetThreshold
メソッドが含まれている場合は、次のようにポート番号を渡すことができます。
<wlevs:event-bean id="TradeListenerBean" class="com.oracle.cep.example.tradereport.TradeListener"> <wlevs:instance-property name="threshold" value="6000" /> <wlevs:listener ref="BeanOutputChannel"/> </wlevs:event-bean>
wlevs:listener
要素を使用して、イベント・シンクであるイベントBeanを参照します。次の例では、TradeListenerBean
イベントBeanは、チャネルProcessorOutputChannel
からイベントを受信します。
<wlevs:channel id="ProcessorOutputChannel" > <wlevs:listener ref="TradeListenerBean" /> </wlevs:channel>
コンポーネント構成ファイルのイベントBeanの構成を追加できます。ここで追加する構成は、実行時に更新するために使用できます。コンポーネント構成ファイルの構成の追加では、EPNアセンブリ・ファイルで構成してイベントBeanをEPNに追加済と仮定します(詳細は、16.3.1.1項「EPNアセンブリ・ファイルのイベントBeanの構成」を参照)。
開発環境の必要に応じて、個別のコンポーネント構成XMLファイルも作成することもできます。たとえば、アプリケーションに複数のカスタム・イベントBeanが含まれている場合は、各カスタム・イベントBeanごとに個別のXMLファイルを作成するか、すべてのカスタム・イベントBeanの構成を含む単一のXMLファイルを作成するか、またはアプリケーションのすべてのコンポーネント(Bean、アダプタ、プロセッサ、およびストリーム)を含むファイルを作成できます。
次の例では、TradeListenerBean
イベントBeanはイベントの記録のために構成されます。各イベントBean構成には、config
要素の個別のevent-bean
子要素が必要です。
<?xml version="1.0" encoding="UTF-8"?> <wlevs:config xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"> <event-bean> <name>TradeListenerBean</name> <record-parameters> <dataset-name>tradereport_sample</dataset-name> <event-type-list> <event-type>TradeEvent</event-type> </event-type-list> <batch-size>1</batch-size> <batch-time-out>10</batch-time-out> </record-parameters> </event-bean> </wlevs:config>
各イベントBeanをname
子要素で一意に識別します。この名前は、アプリケーションのイベント処理ネットワークを定義するEPNアセンブリ・ファイルのwlevs:event-bean
要素のid
属性の値と同じである必要があります。これが、この構成が適用される対象の、EPNアセンブリ・ファイル内の特定のイベントBeanをOracle Event Processingが認識する仕組みです。
独自の要素を使用してコンポーネント構成を拡張することもできます。詳細は、第26章「コンポーネント構成の拡張」を参照してください。
コンポーネント構成XMLスキーマのリファレンスは、B.2項「コンポーネント構成スキーマwlevs_application_config.xsd」を参照してください。
イベントBeanファクトリを実装および構成して、複数のイベント処理ネットワークで単一イベントBean実装を使用できます。ファクトリ・クラスは、リクエストするアプリケーションのイベントBeanインスタンスを提供します。
ここで説明するAPIの詳細は、Oracle Fusion Middleware Oracle Event Processing Java APIリファレンスに関する項を参照してください。
イベントBeanファクトリを作成するには、以下の手順を実行します。
イベントBeanクラスでは、Beanがファクトリで返されるよう、com.bea.wlevs.ede.api.EventBean
インタフェースを実装します。これはマーカー・インタフェースなので、メソッドは実装されません。
public class TradeListener implements EventBean, StreamSink { // Bean implementation code. }
イベントBeanファクトリ・クラスを実装して、イベントBeanのインスタンスを作成して返します。
イベントBeanファクトリ・クラスは、com.bea.wlevs.ede.api.EventBeanFactory
インタフェースを実装する必要があります。create
メソッドを実装して、イベントBeanのインスタンスを作成します。
import com.oracle.cep.example.tradereport.TradeListener; import com.bea.wlevs.ede.api.EventBeanFactory; public class TradeListenerFactory implements EventBeanFactory { public TradeListenerFactory() { } public synchronized TradeListener create() throws IllegalArgumentException { // Your code might have a particular way to create the instance. return new TradeListener(); } }
EPNアセンブリ・ファイルでは、ファクトリ・クラスを構成します。
次の例に示すように、wlevs:factory
要素を使用してEPNアセンブリ・ファイルにファクトリを登録します。
<wlevs:factory provider-name="tradeListenerProvider" class="com.oracle.cep.example.tradereport.TradeListenerFactory"/>
サービスのプロパティを指定する必要がある場合は、osgi:service>
要素を使用して、EPNアセンブリ・ファイルにOSGIサービスとしてファクトリを登録する必要もあります。OSGIサービス・レジストリの範囲は、すべてのOracle Event Processingです。このため、指定のサーバーにデプロイされた複数のアプリケーションが同じイベントBeanファクトリを使用する場合は、ファクトリをOSGIサービスとして登録するのが必ず一度きりになるようにします。
エントリを追加して、サービスを com.bea.wlevs.ede.api.EventBeanFactory
インタフェースの実装として登録します。key
属性のtype
、およびこのイベントBeanプロバイダを参照する名前を使用して、プロパティを指定します。最後に、ネストされた標準のSpring bean
要素を追加して、Springアプリケーション・コンテキストで特定のイベントBeanクラスを登録します。
<osgi:service interface="com.bea.wlevs.ede.api.EventBeanFactory"> <osgi:service-properties> <entry key="type" value="tradeListenerProvider"</entry> </osgi:service-properties> <bean class="com.oracle.cep.example.tradereport.TradeListenerFactory" /> </osgi:service>
イベントBeanのインスタンスを使用するアプリケーションでは、次の例に示すように、クラス名でBeanを指定するのではなく、プロバイダとして構成されたイベントBeanファクトリを指定してイベントBeanを構成します。
<wlevs:event-bean id="TradeListenerBean" provider="tradeListenerProvider"> ... </wlevs:event-bean>
再利用のための固有のバンドルのイベントBeanのバンドルの詳細は、23.2.4.2項「固有のバンドルでのイベントBeanのアセンブル方法」を参照してください。
イベント処理ネットワークにクラスを含めるためにSpring BeanとしてJavaクラスを構成できます。EPNに組み込む既存のSpring Beanがある場合、これは適切なオプションです。または、JavaコードでSpring機能を利用できます。
Spring BeanはSpringフレームワークで管理されるJavaクラスです。標準のbean
要素を使用してEPNアセンブリ・ファイルで構成して、Spring Beanとしてクラスを追加します。
Spring BeanはOracle Event Processingステージのタイプではないことに留意してください。つまり、Oracle Event Processing監視フレームワークによって監視できません。また、構成メタデータの注釈も使用できず通過するイベントを記録および再生するように設定できません。
EPNアセンブリ・ファイルでは、bean
要素を使用してカスタムSpring Beanをイベント・プロセッサ・ネットワークのコンポーネントとして宣言します。例:
<bean id="TradeListenerBean" class="com.oracle.cep.example.tradereport.TradeListener"> </bean>