ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Event Processing開発者ガイド
11gリリース1 (11.1.1.7) for Eclipse
B61654-06
  目次へ移動
目次

前
 
次
 

16 Javaでのイベントの処理

この章では、イベント処理ネットワーク(EPN)のイベントを送受信するイベント・シンクおよびイベント・ソースとして機能するJavaクラスに必要なOracle Event Processingインタフェースの実装方法について説明します。Oracle Event ProcessingイベントBeanまたはSpring BeanとしてJavaクラスを構成する方法についても説明します。

Javaの新しいロジックを書き込むか、または既存のJavaコードを組み込むかにかかわらず、Oracle Event Processingは、Javaコードをアプリケーションに追加するいくつかの方法を提供します。オプションには、コードの実行場所と実行方法および構成方法が含まれます。

この章の内容は次のとおりです。

16.1 イベント処理ネットワークのJavaコードのロール

新しい機能を書き込むか、Oracle Event Processingアプリケーションに組み込むJavaの既存のロジックがあるかにかかわらず、コードの場所はそのロールによって変わります。

多くのOracle Event ProcessingアプリケーションでJavaコードは必要ないので注意してください。たとえば、アプリケーションのロジックは、Oracle CQLのみで取得される場合があります。

Javaコードのロールの次の説明を使用して、コードに最適な場所を検索します。

16.2 ソースおよびシンクでのイベントの処理

イベントを処理するよう設計されたJavaコードを書き込む場合、イベント・シンクまたはイベント・ソースのクラスを作成します。イベント処理ネットワークを通過する場合、イベント・シンクはイベントを受信できます。イベント・ソースはイベントを作成し、EPNのダウンストリーム・ステージに送信できます。たとえば、イベントを受信し、データに関する処理を実行し、次のステージに送信するクラスを作成できます。

イベント・シンクおよびソースは、Oracle Event Processing APIで提供される特定のインタフェースを実装します。イベント・シンクは、Oracle Event Processingサーバーがイベント・タイプ・インスタンスに渡すことができるメソッドを含むインタフェースを実装します。イベント・ソースは、イベントを送信するのに使用するオブジェクトを受信するメソッドを含むインタフェースを実装します。1つのクラスは、イベント処理ネットワーク(EPN)のロールに応じて、いずれかまたは両方の種類の機能を実装できます。


注意:

この項は、ストリームとリレーションおよびイベント処理ネットワークを移動するイベントを表す様々な方法を理解していることを前提とします。そうでない場合、必ず1.3項「イベント、ストリームおよびリレーションの概要」を参照してください。


イベント処理のJavaコードの一般的な場所は、アダプタおよびBeanです。アダプタは、外部コンポーネントと通信するEPNの一部です。外部イベント・データを受信してデータからイベントを作成するか、内部イベントを受信してデータをEPNの外側の別のコンポーネントに送信するよう設計されています。この章の説明に従ったイベント処理コードの書込みは、アダプタの作成の重要な一部です。アダプタの作成の詳細は、第15章「カスタム・アダプタを使用した外部コンポーネントの統合」を参照してください。

java_logic.gifの説明が続きます
図java_logic.gifの説明

アダプタと同様に、Beanはイベントを処理できます。ただし、通常、イベントを内外に渡すようEPNの中央にBeanを追加します。たとえば、Javaコードで通過するイベントのデータに応じてアプリケーション・ロジックを実行するBeanを追加できます。

次の手順では、イベントを送受信するJavaクラスを作成する一般的な手順について説明します。

  1. イベントを送受信するために必要なインタフェースを実装します。EPNコンポーネントとしてJavaロジックを開発するオプションは次のとおりです。

    • EPNを通過する場合にイベントを受信できるクラスを作成するには、クラスをイベント・シンクにするインタフェースを実装します。これらのインタフェースには、1つのイベントを受信するStreamSinkまたはRelationSinkあるいはイベントのバッチを受信するBatchStreamSinkまたはBatchRelationSinkが含まれます。詳細は、16.2.1項「イベント・シンクの実装」を参照してください。

    • EPNの他の部分にイベントを送信できるクラスを作成するには、クラスをイベント・ソースにするインタフェースを実装します。これらのインタフェースには、1つのイベントを送信するStreamSourceまたはRelationSourceあるいはイベントのバッチを送信するBatchStreamSourceまたはBatchRelationSourceが含まれます。詳細は、16.2.2項「イベント・ソースの実装」を参照してください。

  2. 属するEPNに追加できるよう、クラスを構成します。


    注意:

    この手順では、カスタム・イベントBeanはプロセッサ、ストリームおよびビジネス・ロジックPOJOなど、EPNの他のコンポーネントを組み込んだ同一アプリケーションJARファイルにバンドルされたとみなされます。カスタム・イベントBeanを固有のJARファイルにバンドルし、複数のアプリケーション間で共有できるようにするには、23.2.4.2項「固有のバンドルでのイベントBeanのアセンブル方法」を参照してください。


16.2.1 イベント・シンクの実装

イベント処理ネットワークを通過する場合にイベントを受信できるJavaクラスを作成できます。イベントを受信できるコンポーネントはイベント・シンクです。イベント・シンクなどを作成して、各イベントの内容に対応するロジックとともにイベント処理ネットワークの中央でイベントを受信できます。

イベント・シンクのJavaクラスは、この項に記載されているインタフェースのいずれかを実装します。各インタフェースは、イベントが通常チャネルであるクラスのEPNステージに接続されたアップストリームを終了する場合にイベントをクラスに渡すためにOracle Event Processingサーバーで使用するメソッドを提供します。


注意:

単純なイベント・シンクの作成を含む段階を追った開発の例は、必ず第8章「ウォークスルー: 単純なアプリケーションのアセンブル」を参照してください。


ここで示されるインタフェースは、ストリームまたはリレーションとして到着するイベントのサポートを提供します。ただし、リレーション・サポートのインタフェースは、ストリームとして到着するイベントの受信もサポートします。次の表に示すように、インタフェースは階層的に関連します。

インタフェース 説明

com.bea.wlevs.ede.api.StreamSink

ストリームとして順番に到着するイベントを受信するためにこれを実装します。

com.bea.wlevs.ede.api.RelationSink

リレーションとして順番に到着するイベントを受信するためにこれを実装します。ストリームとしてイベントを受信するサポートも提供するよう、StreamSinkを拡張します。

com.bea.wlevs.ede.api.BatchStreamSink

ストリームとして到着するバッチ・イベントの受信をサポートするためにこれを実装します。送信元のチャネルを構成してバッチ処理を許可する場合、イベントはタイムスタンプでバッチ処理されて到着する可能性があります。バッチ処理されていないイベントを受信するサポートも提供するよう、StreamSinkを拡張します。

com.bea.wlevs.ede.api.BatchRelationSink

リレーションとして到着するバッチ・イベントの受信をサポートするためにこれを実装します。送信元のチャネルを構成してバッチ処理を許可する場合、イベントはタイムスタンプでバッチ処理されて到着する可能性があります。ストリームまたはリレーションとしてバッチ処理されていないイベントを受信するサポートも提供するよう、RelationSinkを拡張します。


16.2.1.1 StreamSinkまたはBatchStreamSinkの実装

ストリームとしてイベントを受信するクラスは、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項「バッチ処理チャネル」を参照してください。

16.2.1.2 RelationSinkまたはBatchRelationSinkの実装

リレーションとしてイベントを受信するクラスは、リレーションにある可能性があるすべての種類のイベント(イベントの挿入、イベントの削除およびイベントの更新)を受信できます。ストリームと異なり、リレーションのイベントは順序付けされず、リレーションを作成または操作したコードで更新または削除されたイベントを含みます。

そのため、リレーションとしてイベントを受信するサポート用のインタフェースには、クラスでイベントの挿入、削除または更新を受信できるメソッドがあります。

リレーションとしてバッチ処理されていないイベントを受信するクラスの場合、RelationSinkインタフェースを実装します。onInsertEventonDeleteEventおよび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リファレンスを参照してください。

16.2.2 イベント・ソースの実装

イベント処理ネットワークのダウンストリーム・ステージにイベントを送信できるJavaクラスを作成できます。イベントを送信できるコンポーネントはイベント・ソースです。イベント・ソースなどを作成して、Javaコードで作成したイベントまたはEPNを通過するイベント・データから変更したイベントを送信できます。

イベント・ソースのJavaクラスは、この項に記載されているインタフェースのいずれかを実装します。各インタフェースは、Oracle Event Processingサーバーで使用されるメソッドを提供して、クラスにセンダー・クラスのインスタンスを渡します。

イベント・ソースで受信するセンダー・インスタンスは、この項に記載されているセンダー・インタフェースのいずれかを実装します。センダー・インタフェースは、バッチ処理の有無にかかわらずストリームまたはリレーションとしてイベントをチャネルなどの後続のダウンストリームEPNステージに送信するためにコードで呼び出すことができるメソッドを提供します。

ここで示されるインタフェースは、ストリームまたはリレーションとしてイベントを送信するサポートを提供します。ただし、リレーション・サポートのインタフェースは、ストリームとしてイベントの送信もサポートします。

表16-1 イベント・ソースを実装するインタフェース

インタフェース 説明

com.bea.wlevs.ede.api.StreamSource

ストリームとしてイベントを送信する機能のためにこれを実装します。実行時、Oracle Event Processingサーバーはストリーム・センダー・クラスのインスタンスをインジェクトします。

com.bea.wlevs.ede.api.RelationSource

リレーションまたはストリームとしてイベントを送信する機能のためにこれを実装します。実行時、Oracle Event Processingサーバーはリレーション・センダー・クラスのインスタンスをインジェクトします。ストリーム・イベントのソースとしてサポートも提供するよう、StreamSourceを拡張します。


表16-2「センダー・クラスで実装されるインタフェース」に示すインタフェースは、イベント・ソース・クラスがOracle Event Processingサーバーから受信するセンダー・クラスによって実装されます。

表16-2 センダー・クラスで実装されるインタフェース

インタフェース 説明

com.bea.wlevs.ede.api.StreamSender

コードでストリームとしてイベントを送信できるメソッドを提供します。

com.bea.wlevs.ede.api.RelationSender

コードでリレーションとしてイベントを送信できるメソッドを提供します。ストリームとしてイベントを送信するサポートも提供するよう、StreamSenderを拡張します。

com.bea.wlevs.ede.api.BatchStreamSender

コードでストリームとしてバッチ処理されたイベントを送信できるメソッドを提供します。送信する

ダウンストリーム・ステージがバッチ処理されたイベントのために構成されたチャネルである場合、タイムスタンプでバッチ処理されたイベントを送信できます。バッチ処理されていないイベントを送信するサポートも提供するよう、StreamSenderを拡張します。

com.bea.wlevs.ede.api.BatchRelationSender

コードでリレーションとしてバッチ処理されたイベントを送信できるメソッドを提供します。送信するダウンストリーム・ステージがバッチ処理されたイベントのために構成されたチャネルである場合、タイムスタンプでバッチ処理されたイベントを送信できます。バッチ処理されていないイベントを送信するサポートも提供するよう、RelationSenderを拡張します。


16.2.2.1 StreamSourceの実装

ストリームとしてイベントのソースであるクラスは、Oracle Event Processingの観点から挿入されるイベントのみ送信します。挿入されたイベントのみ送信すると、リレーションではなくストリームがモデル化されます。ストリーム・ソースから送信されるイベントには、あるイベントから後続のイベントへの非減少のタイムスタンプもあります。つまり、後続のイベントのタイムスタンプは、直前のイベントと同じか後になります。

StreamSourceを実装する場合、コードによってバッチ処理の有無にかかわらずイベントを送信できます。StreamSource setEventSenderメソッドの実装により、表16-2「センダー・クラスで実装されるインタフェース」に示されているタイプのいずれかにキャストできるセンダー・インスタンスを受信します。コードはセンダー・インスタンスを使用して、イベントが移動するダウンストリーム・ステージで期待したとおりにイベントを送信します。

コードでバッチ処理を有効にするチャネルにイベントを送信する場合、送信する前にバッチ処理されたイベント・センダーのいずれかを使用して、タイムスタンプでイベントをバッチ処理する必要があります。詳細は、10.1.6項「バッチ処理チャネル」を参照してください。

センダー・インスタンスは、アプリケーションのタイムスタンプを付けるように受信チャネルを構成する場合にハートビートを送信できるsendHeartbeatメソッドも提供します。

16.2.2.2 RelationSourceの実装

リレーションとしてイベントのソースであるクラスは、イベントを受信するダウンストリーム・ステージで期待したとおりにイベントの挿入、削除および更新を送信できます。

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);
    }
}

16.3 BeanとしてのJavaクラスの構成

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の機能は次のとおりです。

  • Oracle Event Processing EPNステージのタイプです。

  • Oracle Event Processingモニター・フレームワークによってモニターできます。

  • 構成メタデータの注釈を利用できます。

  • 通過するイベントを記録および再生するよう設定できます。

  • Oracle Event ProcessingサーバーAPIインタフェースを実装するのではなく、XML宣言でメソッドを指定することによって、Oracle Event ProcessingサーバーBeanライフサイクルに参加できます。

Spring Bean

Springへのレガシー統合に役立ちます。Spring Beanの機能は次のとおりです。

  • EPNに追加するSpring Beanがある場合に役立ちます。

  • Oracle Event Processing EPNステージのタイプではありません。

  • Oracle Event Processingモニター・フレームワークによってモニターできません。

  • 構成メタデータの注釈を使用できません。

  • 通過するイベントを記録および再生するよう設定できません。


それぞれの異なるbeanタイプの詳細は、次を参照してください。

16.3.1 イベントBeanとしてのJavaクラスの構成

EPNアセンブリ・ファイルおよびコンポーネント構成ファイルでOracle Event ProcessingイベントBeanとしてJavaクラスを構成できます。EPNアセンブリ・ファイルでイベントBeanとして構成すると、デフォルト設定とともにBeanがEPNに追加されます。コンポーネント構成ファイルで構成して、特定の機能へのランタイム構成変更をサポートできます。

詳細は、次の項を参照してください。

アプリケーションの他のコンポーネントの登録を含む、構成ファイルの完全な説明は、5.3項「EPNアセンブリ・ファイルの作成」を参照してください。

16.3.1.1 EPNアセンブリ・ファイルのイベントBeanの構成

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>

16.3.1.2 コンポーネント構成ファイルのイベントBeanの構成

コンポーネント構成ファイルのイベント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」を参照してください。

16.3.1.3 イベントBeanファクトリの作成

イベントBeanファクトリを実装および構成して、複数のイベント処理ネットワークで単一イベントBean実装を使用できます。ファクトリ・クラスは、リクエストするアプリケーションのイベントBeanインスタンスを提供します。

ここで説明するAPIの詳細は、Oracle Fusion Middleware Oracle Event Processing Java APIリファレンスに関する項を参照してください。

イベントBeanファクトリを作成するには、以下の手順を実行します。

  1. イベントBeanクラスでは、Beanがファクトリで返されるよう、com.bea.wlevs.ede.api.EventBeanインタフェースを実装します。これはマーカー・インタフェースなので、メソッドは実装されません。

    public class TradeListener implements EventBean, StreamSink {
        // Bean implementation code.
    }
    
  2. イベント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();
    
        }
    }
    
  3. 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>
    
  4. イベントBeanのインスタンスを使用するアプリケーションでは、次の例に示すように、クラス名でBeanを指定するのではなく、プロバイダとして構成されたイベントBeanファクトリを指定してイベントBeanを構成します。

    <wlevs:event-bean id="TradeListenerBean"
        provider="tradeListenerProvider">
        ...
    </wlevs:event-bean>
    

再利用のための固有のバンドルのイベントBeanのバンドルの詳細は、23.2.4.2項「固有のバンドルでのイベントBeanのアセンブル方法」を参照してください。

16.3.2 Spring BeanとしてのJavaクラスの構成

イベント処理ネットワークにクラスを含めるために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>

16.3.2.1 Spring Beanの特性のサポート

EPNに追加するSpring Beanでは、様々なライフサイクル・インタフェースを実装できます。これらには、InitializingBeanDisposableBeanおよびRunnableBeanなどのアクティブなインタフェースが含まれます。Spring Beanイベント・ソースでは、@Prepare@Rollback@Activateなどの構成メタデータの注釈も利用できます。