アプリケーション開発ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

Oracle Complex Event Processing アプリケーションの作成の概要

この節では、以下の項目について説明します。

 


Oracle Complex Event Processing プログラミング モデルの概要

Oracle Complex Event Processing (略称 Oracle CEP) アプリケーションは、低レイテンシかつ高性能駆動型のアプリケーションであるため、軽量なコンテナ上で実行し、POJO ベースのプログラミング モデルを使用して開発されています。POJO (Plain Old Java Object) プログラミングでは、ビジネス ロジックは POJO 形式で実装され、必要とするサービスが注入されます。これは一般に、「依存性注入」と呼ばれます。注入されたサービスは、コンフィグレーション管理などの Oracle CEP サービスで提供されるものから、Oracle Kodo などの他の Oracle 製品で提供されるサービスやサードパーティ製のサービスまで多岐に渡ります。

Oracle CEP では、イベント駆動型アプリケーションをアセンブルするために共に使用する一連のコア サービスやコンポーネントが定義されます。一般的なサービスには、アダプタ、ストリーム、およびプロセッサがあります。また、アプリケーションの一部となる独自のビジネス ロジック POJO と Spring Bean を作成したり、イベントのモニタや、イベントの記録または再生など、Oracle CEP フレームワークへの完全なアクセス権を持つ、Spring Bean と同様の特殊化されたイベント Bean を作成できます。このほかにも、Oracle CEP にはキャッシュ、クラスタ化、コンフィグレーション、モニタ、ロギングなどの他のインフラストラクチャ サービスがあります。

すべてのサービスは基になる Oracle microServices Architecture (mSA) テクノロジ上にデプロイされています。Oracle mSA は OSGi Alliance で定義された OSGi Service Platform に基づいています。

以下の節では、Oracle CEP プログラミング モデルとアプリケーションの作成についてさらに詳しく説明しています。

Oracle CEP イベント処理ネットワークのコンポーネント

Oracle CEP アプリケーションおよびイベント処理ネットワーク (EPN) は、以下の基本コンポーネントで構成されています。

イベント ソースとイベント シンク

EPN のすべてのコンポーネントは、イベント ソース (イベントを送信) またはイベント シンク (イベントを受信) のいずれかです。たとえば、EPN の中央でアダプタからイベントを受信しプロセッサにイベントを送信するイベント Bean など、両方を実行できるコンポーネントもあります。

イベントを送信するコンポーネントは com.bea.wlevs.ede.api.EventSource インタフェースを実装する必要があります。このインタフェースには 1 つのメソッド setEventSender() が含まれています。実行時、イベント ソース コンポーネントには com.bea.wlevs.ede.api.EventSender インスタンスが注入されます。EventSender インスタンスには、イベントを実際に次の EPN のコンポーネントに送信するためにコンポーネントで呼び出されるメソッド sentEvent() が含まれています。

イベント ソースからイベントを受信するコンポーネントは com.bea.wlevs.ede.api.EventSink インタフェースを実装する必要があります。このインタフェースには 1 つのコールバック メソッド onEvent() が含まれています。イベント シンクはこれを実装して、EPN の前のコンポーネントからのイベント リストを受信します。

コンポーネント コンフィグレーション ファイル

イベント処理ネットワークの各コンポーネント (アダプタ、プロセッサ、ストリーム、またはイベント Bean) にはコンフィグレーション ファイルを関連付けることができますが、コンフィグレーション ファイルが必須なのはプロセッサのみです。イベント処理ネットワークのステージであるかどうかにかかわらず、キャッシング システムもコンフィグレーション ファイルを使用します。Oracle CEP のコンポーネント コンフィグレーション ファイルは、標準の XML スキーマを使用して定義された構造を持つ XML ドキュメントです。アプリケーションのすべてのコンポーネントのコンフィグレーションを含む単一のファイルを作成するか、または各コンポーネントごとに個別のファイルを作成できます。これらのうち、管理しやすい方を選択します。

以下の 2 つのスキーマ ドキュメントでは、アプリケーション コンフィグレーション ファイルのデフォルトの構造を定義しています。

アプリケーション コンフィグレーション ファイルの構造は以下のとおりです。<config> という最上位ルート要素に、サブ要素のシーケンスが含まれています。個々のサブ要素には、Oracle CEP コンポーネント (プロセッサ、ストリーム、アダプタ) のコンフィグレーション データが含まれています。例を示します。

<?xml version="1.0" encoding="UTF-8"?>
<helloworld:config
xmlns:helloworld="http://www.bea.com/ns/wlevs/example/helloworld">
<processor>
<name>helloworldProcessor</name>
<rules>
<rule id="helloworldRule"><![CDATA[ select * from HelloWorldEvent retain 1 event ]]></rule>
</rules>
</processor>
  <adapter>
<name>helloworldAdapter</name>
<message>HelloWorld - the current time is:</message>
</adapter>
  <stream monitoring="true" >
<name>helloworldOutstream</name>
<max-size>10000</max-size>
<max-threads>2</max-threads>
</stream>
</helloworld:config>

コンポーネントが連動するしくみ

Oracle CEP アプリケーションは、共にアセンブルされてイベント処理ネットワーク (EPN) を形成するサービスで構成されています。

サーバでは、Spring が普及しており簡素であることから、Spring フレームワークをアセンブリ メカニズムとして使用しています。Oracle CEP では Spring フレームワークが拡張され、アプリケーションのアセンブル プロセスがさらに簡素化されました。この手法によって、Oracle CEP アプリケーションは、既存の Spring Bean、および依存性注入メカニズムに基づいた他の軽量なプログラミング フレームワークと簡単に統合できます。

依存性注入の一般的な手法では、XML コンフィグレーション ファイルを使用してアプリケーションの依存関係とアセンブリが宣言的に指定されます。サーバにデプロイする前に、Oracle CEP アプリケーションを EPN アセンブリ ファイルにアセンブリします。この EPN アセンブリ ファイルは、Spring フレームワーク XML コンフィグレーション ファイルの拡張です。

アプリケーションのアセンブリが完了したら、Oracle CEP にデプロイできるようパッケージ化する必要があります。この処理は簡単です。アプリケーションのデプロイメント単位はプレーン JAR ファイルであり、少なくとも以下のアーティファクトが含まれている必要があります。

JAR ファイルへのアーティファクトのアセンブルが完了したら、着信データの受信を直ちに開始できるよう Oracle CEP にこのバンドルをデプロイします。

アプリケーションのライフサイクル

この節では、Oracle CEP にデプロイされたアプリケーションのライフサイクルと、com.bea.wlevs.ede.api API コールバックのシーケンスについて説明します。ライフサイクルの説明は、アプリケーションのインストール、中断、再開など、ユーザが実行するアクションに分類されます。

この節の目的は、ユーザが独自のアプリケーションでライフサイクル API を使用する際に役立つように、Oracle CEP でアプリケーションのライフサイクルが管理されるしくみを示すことです。RunnableBeanSuspendableBean などのライフサイクル API の簡単な説明については、「Oracle CEP API」および Javadoc を参照してください。

この節で参照しているアプリケーションの状態は、ApplicationMBeangetState() メソッドで返されます。これらの状態は Oracle CEP に固有のものであり、OSGI バンドルの状態ではありません。使用される状態には、UNINSTALLED、INITIALIZING、RUNNING、および SUSPENDED があります。

ユーザ アクション : アプリケーションをインストールする、またはアプリケーションがすでにデプロイされた状態でサーバを起動する

ユーザ アクション : アプリケーションを中断する

ユーザ アクション : アプリケーションを再開する

ユーザ アクション : アプリケーションをアンインストールする

ユーザ アクション : アプリケーションを更新する

これは、最初にアプリケーションをアンインストールしてから再びインストールするのと同等です。

Oracle CEP API

Oracle CEP には、アダプタまたはイベント Bean の実装に使用されるさまざまな Java API が用意されています。

この節では、アダプタおよびイベント Bean で通常使用される API について説明します。すべてのクラスとインタフェースの完全なリファレンス マニュアルについては、Javadoc を参照してください。これらの API を使用する Java コードの例については、「カスタム アダプタとイベント Bean の作成」、およびインストール製品に含まれる HelloWorld および FX サンプルを参照してください。

 


Oracle CEP Development Environment for Eclipse

Oracle CEP アプリケーションを開発するプログラマ向けに特化した IDE が用意されています。Oracle CEP Development Environment for Eclipse (Oracle CEP IDE) は、Oracle CEP アプリケーションの開発、デプロイ、およびデバッグ用に設計された、Eclipse IDE のプラグインのセットです。

Oracle CEP IDE の主な機能は以下のとおりです。

Oracle CEP IDE の使用は必須または前提条件ではありませんが、使用を検討されることをお勧めします。

IDE の使用に関する詳細な手順については、Oracle CEP IDE 製品自体に付属のオンライン ヘルプを参照してください。

最新版 Oracle CEP IDE のダウンロード

最新版の IDE は定期的に Oracle Technology Network Web サイトにアップロードされます。以下のサイトから IDE をダウンロードすることを強くお勧めします。

http://www.oracle.com/technology/products/event-driven-architecture/cep-ide/10

製品と共に配布された Oracle CEP IDE のインストール

Oracle CEP 製品には Oracle CEP IDE が付属していますが、このバージョンは Oracle Technology Network サイトのバージョンよりも古い場合があります。製品に付属のバージョンを使用する場合は、以下の手順を実行します。

  1. Eclipse (3.3.2) および WTP (2.0) の必要なバージョンを取得します。以下の Web サイトで入手可能な Europa インストール全体を取得することをお勧めします。
  2. Windows :

    http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/europa/winter/eclipse-jee-europa-winter-win32.zip

    Linux :

    http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/europa/winter/eclipse-jee-europa-winter-linux-gtk.tar.gz

  3. Oracle CEP IDE ツールが含まれている zip ファイルを取得します。
  4. このファイル名は cep-tools-10.3.0.20080917-2044.zip であり、ORACLE_CEP_HOME/ocep_10.3/eclipse-update-site ディレクトリに収められています。ORACLE_CEP_HOME は、/oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

  5. Eclipse IDE を開き、メニューから [Help|Software Updates|Find and Install] を選択します。
  6. [Search for New Features] オプションを選択します。
  7. [New Archived Site] を選択し、zip ファイルを選択します。
  8. Oracle CEP ツールのインストールを選択し、Update Manager を完了します。
  9. メッセージが表示されたら、Eclipse を再起動します。この操作を省略すると、予期しない動作が発生する可能性があります。

Eclipse の再起動が完了したら、Oracle CEP IDE ツールのすべてが使用可能になっています。

 


Oracle CEP アプリケーションの作成 : 一般的な手順

Oracle CEP アプリケーションを作成するための、開始から終了までの推奨される手順を以下に示します。各種コンポーネントのプログラミングおよびコンフィグレーションは必ずしもこの順序で行う必要はありませんが、以下の手順では推奨される通常の論理的な流れを示しています。

この手順では IDE の使用を想定していますが、これは必須ではなく、任意の環境を選択できます。Oracle CEP 開発者向けの環境については、「Oracle CEP Development Environment for Eclipse」を参照してください。

  1. 開発環境の設定」の説明に従って、環境設定を行います。
  2. イベント処理ネットワーク (EPN) を設計します。
  3. この手順では、EPN アセンブリ ファイルを作成し、アプリケーションを構成するコンポーネントの完全なリストおよびそれらが互いに接続する方法を追加し、アプリケーションで使用されるイベント タイプを登録します。

    この手順では、特にコンフィグレーションおよびコーディングする必要のあるコンポーネントの決定などを含むアプリケーションの設計と、すべてのコンポーネントを指定する実際の XML ファイルの作成が結合されます。この XML ファイルはアプリケーションの実装が進むにつれて頻繁に更新されることが予想されますが、アプリケーションの概要を把握できるようこの手順から開始することをお勧めします。

    詳細については、「EPN アセンブリ ファイルの作成」を参照してください。

  4. プロセッサがストリームからのイベントを選択するときに使用する EPL ルールを設計します。
  5. EPL リファレンス ガイド」を参照してください。

  6. アプリケーションで使用されるイベント タイプを設計します。独自の JavaBean を作成する場合は、Java ファイルのプログラミングを行います。
  7. イベント タイプの作成」を参照してください。

  8. イベント処理ネットワークの着信、中間、発信コンポーネントとして動作するアダプタまたはイベント Bean をプログラミングし、必要に応じてコンフィグレーションします。独自のアダプタまたはイベント Bean を作成するか、または Oracle CEP で提供されるアダプタを使用できます。詳細については、以下を参照してください。
  9. コンフィグレーション XML ファイルを作成して、プロセッサをコンフィグレーションします。この手順の最も重要な部分は、各プロセッサに関連付けられている初期 EPL ルールの設計および宣言です。
  10. 複合イベント プロセッサのコンフィグレーション」を参照してください。

  11. 必要に応じて、コンフィグレーション XML ファイルを作成して、アダプタ、プロセッサ、およびビジネス ロジック POJO の間を流れるデータを処理するストリームをコンフィグレーションします。
  12. ストリーム コンポーネントのコンフィグレーション」を参照してください。

  13. イベントをキャッシュにパブリッシュしたり、キャッシュのイベントを使用したりすることで、イベントの可用性を高め、アプリケーションのパフォーマンスを向上するために、キャッシング システムを必要に応じてコンフィグレーションします。
  14. Oracle CEP キャッシングの使用」を参照してください。

Oracle CEP には、特に EPL ルールなどのアプリケーションのテストに使用できるテスト ツール load generator が用意されています。このテスト ツールではアプリケーションのアダプタ コンポーネントをテスト目的で一時的に置換できます。詳細については、「アプリケーションをテストする Load Generator の使用」を参照してください。

パッケージやデプロイなど、アプリケーションのプログラミングが完了した後に実行する必要のある手順については、「次の手順」を参照してください。

 


EPN アセンブリ ファイルの作成

EPN アセンブリ ファイルを使用して、Oracle CEP アプリケーションを構成するコンポーネントと、各コンポーネントが互いに接続する方法を宣言します。このファイルは、アプリケーションのイベント タイプと、アプリケーションのアダプタおよび POJO コンポーネントを実装する Java クラスの登録にも使用します。

EPN アセンブリ ファイルの例については、「外国為替取引 (FX) のサンプル」を参照してください。Spring および OSGi に関する追加情報については、「Spring および OSGi に関する追加情報」を参照してください。

Spring でも同様ですが、タグを使用してイベント ネットワークを定義するにはいくつかの方法があります。この節では 1 つの方法を示します。使用可能な他のタグおよび属性の完全なリファレンス情報については、Oracle CEP Spring タグ リファレンスまたは XSD スキーマを参照してください。

アプリケーションの EPN アセンブリ ファイルを作成する一般的な方法では、以下の手順を実行します。

  1. 任意の XML エディタまたはテキスト エディタを使用して、<beans> ルート要素とネームスペース宣言が含まれる以下のような XML ファイルを作成します。
  2. <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:osgi="http://www.springframework.org/schema/osgi"
    xmlns:wlevs="http://www.bea.com/ns/wlevs/spring"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/osgi
    http://www.springframework.org/schema/osgi/spring-osgi.xsd
    http://www.bea.com/ns/wlevs/spring
    http://www.bea.com/ns/wlevs/spring/spring-wlevs.xsd">
    ...
    </beans>

    XML ファイル内で Spring-OSGI タグを使用しない場合は、上記の例で太字で示されている、これに対応するネームスペース宣言は必要ありません。

  3. アダプタ ファクトリをプログラミングした場合は、<osgi:service ...>Spring タグを追加してファクトリを OSGi サービスとして登録します。例を示します。
  4. <osgi:service interface="com.bea.wlevs.ede.api.AdapterFactory">
    <osgi:service-properties>
    <prop key="type">hellomsgs</prop>
    </osgi:service-properties>
    <bean class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapterFactory" />
    </osgi:service>

    Oracle CEP で提供されるアダプタ ファクトリ (com.bea.wlevs.ede.api.AdapterFactory) を interface 属性に指定します。<osgi-service-properties> タグを使用して、OSGI サービスにタイプ名を指定します。上記の例では、名前は hellomsgs です。アプリケーションのアダプタ コンポーネントを宣言する場合、後からこのラベルを参照します。最後に、<bean> Spring タグを使用して、Spring アプリケーション コンテキストでアダプタ ファクトリ Bean を登録します。このクラスでアダプタのインスタンスが生成されます。

    警告 : タイプ名 (上記の例では hellomsgs) には、特定の Oracle CEP にデプロイされているすべてのアプリケーションを通じて必ずユニークな名前を使用するようにしてください。アプリケーションごとではなくサーバごとに 1 つの OSGI サービス レジストリが使用されるため、2 つの異なるアダプタ ファクトリ サービスが同じタイプ名で登録された場合は、特定のアプリケーションで使用されるアダプタ ファクトリが未定義になります。この混乱を避けるため、サーバの EPN アセンブリ ファイル内では、OSGI に登録された各アダプタ ファクトリの <prop key="type"> エントリに必ずユニークな値を使用するようにしてください。
  5. <wlevs:event-type-repository> タグを追加して、アダプタの実装、ビジネス ロジック POJO、プロセッサ コンポーネントに関連付けられた EPL ルールなどの、アプリケーション全体で使用されるイベント タイプを登録します。アプリケーションのイベント タイプごとに <wlevs:event-type> 子タグを追加します。
  6. イベント タイプは、自身でコーディングするか (推奨)、または <wlevs:event-type> タグに指定したメタ データから Oracle CEP で自動生成される単純な JavaBean です。JavaBean を自身でコーディングする場合は、<wlevs:class> タグを使用して JavaBean クラスを指定します。ファクトリをプログラミングした場合は、必要に応じて <wlevs:property name="builderFactory"> タグを使用して、イベント タイプのビルダ ファクトリとして動作する Spring Bean を指定できます。Oracle CEP で JavaBean クラスが自動生成されるようにする場合は、<wlevs:metadata> タグを使用してイベント タイプの各プロパティをリストします。以下の例は FX サンプルからの例です。

    <wlevs:event-type-repository>
    <wlevs:event-type type-name="ForeignExchangeEvent">
    <wlevs:class>
    com.bea.wlevs.example.fx.OutputBean$ForeignExchangeEvent
    </wlevs:class>
    <wlevs:property name="builderFactory">
    <bean id="builderFactory"
    class="com.bea.wlevs.example.fx.ForeignExchangeBuilderFactory"/>
    </wlevs:property>
    </wlevs:event-type>
    </wlevs:event-type-repository>

    このタグのリファレンス情報については、wlevs:event-type-repository参照してください。イベント タイプの作成に関する追加情報については、「イベント タイプの作成」を参照してください。

  7. アプリケーションの各アダプタ コンポーネントごとに <wlevs:adapter> タグを追加して、コンポーネントがイベント処理ネットワークの一部であることを宣言します。必須の id 属性を使用してユニークな ID を指定し、provider 属性を使用してアダプタがリスンするデータ フィードのタイプを指定します。<wlevs:instance-property> 子タグを使用して、アダプタに予期されるプロパティを渡します。たとえば、シミュレートされたデータ フィードを使用して EPL ルールをテストするために Oracle CEP で提供される csvgen アダプタでは、setPort() メソッドが定義されるため、特に port プロパティが予期されます。provider 属性を使用して、通常 OSGi サービスとして登録されるアダプタ ファクトリを指定します。csvgen キーワードを使用して csvgen アダプタを指定することもできます。
  8. 次の例は、HelloWorld のサンプルの helloWorldAdapter を宣言します。

        <wlevs:adapter id="helloworldAdapter" provider="hellomsgs" manageable="true">
    <wlevs:instance-property name="message" value="HelloWorld - the currenttime is:"/>
    </wlevs:adapter>

    この例では、プロパティ message がアダプタに渡されます。アダプタ ファクトリ プロバイダ hellomsgs は、アダプタ ファクトリ OSGI サービスのタイプ名です。すべてのコンポーネントに共通の manageable 属性は、アダプタのモニタを有効にします。パフォーマンスに影響する可能性があるため、コンポーネントの管理容易性はデフォルトで無効になっています。

    特に省略可能な追加の属性および子タグなどを含む、このタグのリファレンス情報については、wlevs:adapter参照してください。

  9. アプリケーションの各プロセッサ コンポーネントごとに <wlevs:processor> タグを追加します。id 属性を使用してユニークな ID を指定します。listeners 属性または <wlevs:listener> 子タグを使用して、プロセッサをリスンするコンポーネントを指定します。以下の 2 つの例は同等です。
  10. <wlevs:processor id="preprocessorAmer" listeners="spreaderIn"/>
    <wlevs:processor id="preprocessorAmer">
    <wlevs:listener ref="spreaderIn"/>
    </wlevs:processor>

    この例では、spreaderIn ストリーム コンポーネントが preprocessorAmer プロセッサをリスンします。

    コンポーネントのモニタを有効にする manageable などの省略可能な追加属性を含む、このタグのリファレンス情報については、wlevs:processor参照してください。

  11. アプリケーションの各ストリーム コンポーネントごとに <wlevs:stream> タグを追加して、コンポーネントがイベント処理ネットワークの一部であることを宣言します。id 属性を使用してユニークな ID を指定します。<wlevs:listener> および <wlevs:source> 子タグを使用して、ストリームのリスナおよびソースとして動作するコンポーネントを指定します。例を示します。
  12. <wlevs:stream id="fxMarketAmerOut">
    <wlevs:listener ref="preprocessorAmer"/>
    <wlevs:source ref="fxMarketAmer"/>
    </wlevs:stream>

    この例では、fxMarketAmerOut ストリームが fxMarketAmer コンポーネントをリスンし、preprocessorAmer コンポーネントが fxMarketAmerOut ストリームをリスンします。

    下の例の outputBean のように、<wlevs:listener> タグ内で標準の Spring <bean> タグを使用して、ビジネス ロジック POJO の宣言をネストします。

    <wlevs:stream id="spreaderOut" advertise="true">
    <wlevs:listener>
    <!-- ビジネス オブジェクトの作成 -->
    <bean id="outputBean"
    class="com.bea.wlevs.example.fx.OutputBean"
    autowire="byName"/>
    </wlevs:listener>
    </wlevs:stream>

    advertise 属性は、すべての Oracle CEP アプリケーション アセンブリのタグに共通であり、コンポーネントを OSGI レジストリのサービスとして登録するために使用されます。

    コンポーネントのモニタを有効にする manageable などの省略可能な追加属性を含む、このタグのリファレンス情報については、wlevs:stream参照してください。

 


イベント タイプの作成

イベント タイプは、Oracle CEP アプリケーションで処理されるイベントのプロパティを定義します。アダプタは JMS や金融マーケット データ フィードなどのさまざまなイベント ソースからの着信イベントを受信します。プロセッサが処理を開始できるよう、これらのイベントをイベント タイプで定義する必要があります。イベント タイプは、EventTypeRepository クラスを使用してプログラムで作成するか、または EPN アセンブリ ファイルの宣言で作成できます。

次に、これらのイベント タイプは、アダプタおよび POJO Java コードや、プロセッサに関連付けられた EPL ルールで使用されます。

イベントとは、フィードからのデータ項目が各プロパティによって表現される JavaBean インスタンスです。イベント タイプを表現する独自の JavaBean クラスを作成し、クラスを EPN アセンブリ ファイルに登録することをお勧めします。独自の JavaBean を作成することにより、再利用を可能にし、イベントが持つ性質を完全に制御します。または、EPN アセンブリ ファイルで <wlevs:metadata> タグを使用してイベント タイプのプロパティを指定できますが、その場合は Oracle CEP でマップが使用されます。この方法は、迅速なプロトタイプ化のために最適な方法です。

次の単純な例は、HelloWorldEvent を実装する JavaBean を示します。

package com.bea.wlevs.event.example.helloworld;
public class HelloWorldEvent {
private String message;
        public String getMessage() {
return message;
}
        public void setMessage (String message) {
this.message = message;
}
}

上記の Java クラスは標準の JavaBean プログラミング ガイドラインに準拠しています。その他の詳細については、JavaBeans Tutorial を参照してください。

また、不変の JavaBean ではガベージ コレクションの動作が向上するため、可能な場合は、パフォーマンス上の理由から JavaBean を不変にすることをお勧めします。不変の Bean は読み取り専用であり (getter のみ)、不変性を満たす引数を持つパブリック コンストラクタを使用します。

イベント タイプを表現する JavaBean のプログラミングとコンパイルが完了したら、<wlevs:event-type-repository><wlevs:event-type> 子タグを使用して EPN アセンブリ ファイルに登録します。<wlevs:class> タグを使用して JavaBean クラスを参照します。必要に応じて <wlevs:property name="builderFactory"> タグを使用して、JavaBean 仕様に準拠しないイベント インスタンスを作成するために使用可能な、イベント タイプのカスタム イベント ビルダ ファクトリを指定します。Oracle CEP で Bean インスタンスが自動生成されるようにするには、<wlevs:metadata> タグを使用して、各プロパティの標準の Spring <entry> タグをグループ化します。次の例は、両方の方法を示します。

<wlevs:event-type-repository>
<wlevs:event-type type-name="ForeignExchangeEvent">
<wlevs:class>
com.bea.wlevs.example.fx.OutputBean$ForeignExchangeEvent
</wlevs:class>
<wlevs:property name="builderFactory">
<bean id="builderFactory"
class="com.bea.wlevs.example.fx.ForeignExchangeBuilderFactory"/>
</wlevs:property>
</wlevs:event-type>
    <wlevs:event-type type-name="AnotherEvent">
<wlevs:metadata>
<entry key="name" value="java.lang.String"/>
<entry key="age" value="java.lang.Integer"/>
<entry key="address" value="java.lang.String"/>
</wlevs:metadata>
</wlevs:event-type>
</wlevs:event-type-repository>

この例で、ForeignExchangeEventcom.bea.wlevs.example.fx.OutputBeanForeignExchangeEvent 内部クラスで実装されています。Oracle CEP により AnotherEvent のインスタンスが生成されます。AnotherEvent には nameage、および address という 3 つのプロパティがあります。

イベント タイプ ビルダ ファクトリの使用に関する追加情報については、「イベント タイプ ビルダ ファクトリの使用」を参照してください。

これにより、アプリケーションのアダプタおよびビジネス ロジック POJO の Java コード内で、イベント タイプを標準の JavaBean として参照できます。以下に、HelloWorld アプリケーションのビジネス ロジック POJO HelloWorldBean.java の例を示します。

public void onEvent(List newEvents)
throws RejectEventException {
for (Object event : newEvents) {
HelloWorldEvent helloWorldEvent = (HelloWorldEvent) event;
System.out.println("Message: " + helloWorldEvent.getMessage());
}
}

次の EPL ルールは、SELECT 文で HelloWorldEvent を参照する方法を示しています。

SELECT * FROM HelloWorldEvent RETAIN 1 event

イベント タイプ ビルダ ファクトリの使用

<wlevs:event-type> タグを使用してイベント タイプをリポジトリに登録すると、Oracle CEP ではイベント タイプ クラスの情報を使用してイベントのインスタンスが作成されます。

ただし、イベント タイプ インスタンスの作成をより詳細に制御する必要が生じる場合があります。これは、イベント プロパティに必要な getter および setter メソッドがイベントを表現する POJO で公開されていない場合に必要です。たとえば、イベント タイプに firstname プロパティが含まれている一方で、イベント タイプで実行される EPL ルールでは fname というプロパティが想定されるとします。さらに、(たとえば、他のバンドルからの共有イベント クラスを使用しているなどの理由から)、相互の互換性を実現するためにイベント タイプ クラスを変更することも、EPL ルールを変更することもできないと想定します。この場合は、イベント タイプ ビルダ ファクトリを使用して、プロパティ名を firstname の代わりに fname にするよう、イベント タイプ インスタンスの作成方法を変更できます。

イベント タイプ ビルダ ファクトリをプログラミングする場合は、com.bea.wlevs.ede.api.EventBuilder インタフェースの EventBuilder.Factory 内部インタフェースを実装する必要があります。createBuilder()createEvent() などの実装する必要のあるメソッドの詳細については、Javadoc を参照してください。

次の例は、FX サンプルからのイベント タイプ ビルダ ファクトリ クラスの例です。

package com.bea.wlevs.example.fx;
import java.util.HashMap;
import java.util.Map;
import com.bea.wlevs.ede.api.EventBuilder;
import com.bea.wlevs.example.fx.OutputBean.ForeignExchangeEvent;
public class ForeignExchangeBuilderFactory implements EventBuilder.Factory {
        public EventBuilder createBuilder() {
return new ForeignExchangeBuilder();
}
        static class ForeignExchangeBuilder implements EventBuilder {
private Map<String,Object> values = new HashMap<String,Object>(10);
                public Object createEvent() {
return new ForeignExchangeEvent(
(String) values.get("symbol"),
(Double) values.get("price"),
(String) values.get("fromRate"),
(String) values.get("toRate"));
}
                public void put(String property, Object value) throws IllegalStateException {
values.put(property, value);
}
}
}

EPN アセンブリ ファイルでイベント タイプを登録する場合は、<wlevs:event-type> タグの <wlevs:property name="builderFactory"> 子タグを使用してファクトリ クラスの名前を指定します。name 属性のハードコード化された builderFactory の値によって、このイベントのインスタンスを作成する際はデフォルト ファクトリではなく指定されたファクトリ クラスを使用する必要があることが Oracle CEP に対して警告されます。たとえば、FX サンプルでは、ビルダ ファクトリは太字で示されたとおりに登録されています。

<wlevs:event-type-repository>
<wlevs:event-type type-name="ForeignExchangeEvent">
<wlevs:class>com.bea.wlevs.example.fx.OutputBean$ForeignExchangeEvent</wlevs:class>
<wlevs:property name="builderFactory">
<bean id="builderFactory"
class="com.bea.wlevs.example.fx.ForeignExchangeBuilderFactory"/>
</wlevs:property>
</wlevs:event-type>
</wlevs:event-type-repository>

アプリケーション バンドル間でのイベント タイプの共有

それぞれの Oracle CEP アプリケーションは、固有の Java クラスローダを取得し、そのクラスローダを使用してアプリケーションのクラスをロードします。このため、デフォルトでは、あるアプリケーションから別のアプリケーションのクラスにアクセスすることはできません。ただし、イベント タイプ リポジトリはシングルトン サービスであるため、あるバンドルでリポジトリをコンフィグレーションし、イベント タイプ クラスを明示的にエクスポートすることによって、(同一の Oracle CEP サーバにデプロイされた) 別のバンドル内のアプリケーションでそれらの共有されたイベント タイプを使用できるようになります。

この場合、イベント タイプ名のスコープは Oracle CEP サーバ インスタンス全体になります。このため、他のバンドルからの共有イベント タイプと同名のイベント タイプを作成しようとすると例外が送出されますが、これらのイベント タイプのクラスは異なります。

イベント タイプ クラスを共有するには、共有するイベント タイプ リポジトリが含まれているバンドルの MANIFEST.MF ファイルの Export-Package ヘッダにパッケージ名を追加します。

共有イベント タイプを使用するアプリケーションが含まれているすべてのバンドルよりも前に、イベント タイプ リポジトリが含まれているバンドルを必ずデプロイするようにします。そうしないと、デプロイメント例外が送出されます。

 


次の手順

アプリケーションのすべてのコンポーネントのプログラミングと、各コンポーネントのコンフィグレーション XML ファイルの作成が完了した後は、次の手順を実行します。


  ページの先頭       前  次