ヘッダーをスキップ
Oracle® Complex Event Processing開発者ガイド
11g リリース1 (11.1.1.4.0) for Eclipse
B61654-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

11 EPLプロセッサの構成

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


注意:

Oracle CQLは、Oracle CEP 11gリリース1 (11.1.1)でEvent Processing Language (EPL)に取って代わります。Oracle CEPは、EPLとの下位互換性をサポートします。詳細は、第10章「Oracle CQLプロセッサの構成」を参照してください。

11.1 EPLプロセッサ・コンポーネント構成の概要

Oracle CEPアプリケーションには、1つ以上の複雑なイベント・プロセッサ、もしくはプロセッサが含まれています。各プロセッサは1つまたは複数のアダプタからのイベントを入力として受け取ります。これらのアダプタでは、ソースから連続的なデータ・ストリームを送信するデータ・フィードにリスニングします。金融データ・フィードからOracle CEPロード・ジェネレータまで、任意のソースを使用できます。

EPLプロセッサの主な機能は、受信イベントのサブセットを選択してプロセッサをリスニングしているコンポーネントに渡す、関連付けられたEvent Processing Language (EPL)のルールです。リスニングするコンポーネントには、他のプロセッサまたは通常はイベント処理ネットワークの最後を定義し、クライアント・アプリケーションへのパブリッシュなどイベントでなんらかの処理を実行するビジネス・オブジェクトPOJOを指定できます。EPLの詳細は、Oracle Complex Event Processing EPL言語リファレンス』を参照してください。

アプリケーションの各EPLプロセッサに対して、コンポーネント構成ファイルにprocessor要素を作成する必要があります。このprocessor要素には、プロセッサのEPLルールの初期セット、および次のような任意のプロセッサ構成を指定します。

EPLプロセッサEPNアセンブリ・ファイルに、任意の追加EPLプロセッサの機能を構成できます。

コンポーネント構成ファイルprocessor要素のname要素がEPNアセンブリ・ファイルprocessor要素のid属性と一致する必要があります。たとえば、例11-1に表示されるEPNアセンブリ・ファイルprocessor要素が指定され、例11-2に表示される対応するコンポーネント構成ファイルprocessor要素が指定されています。

例11-1 EPNアセンブリ・ファイル EPLプロセッサID: proc

<wlevs:processor id="proc" provider="epl" >
    <wlevs:table-source ref="Stock" />
</wlevs:processor>

例11-2 コンポーネント構成ファイル EPLプロセッサ名: proc

<processor>
    <name>proc</name>
    <rules>
        <rule id="myRule"><![CDATA[
            SELECT symbol, AVG(price) 
            FROM (SELECT * FROM MarketTrade WHERE blockSize > 10)
            RETAIN 100 EVENTS PARTITION BY symbol WITH LARGEST price
            GROUP BY symbol
            HAVING AVG(price) >= 100
            ORDER BY symbol
        ]]></rule>
    </rules>
</procesor>

注意:

Oracle CEP 11gリリース1 (11.1.1)では、Event Processing Language (EPL)はOracle CQLで置換されているため、デフォルトのプロセッサ・プロバイダはcqlです。EPNアセンブリ・ファイルにEPLプロセッサを指定するには、例11-1に示すように、wlevs:processor要素のprovider属性をeplに設定する必要があります。Oracle CEPは、EPLとの下位互換性をサポートします。詳細は、第10章「Oracle CQLプロセッサの構成」を参照してください。

processor要素は、次のいずれかの任意のコンポーネント構成ファイルに作成できます。

アプリケーションに1つ以上のプロセッサが含まれている場合は、デフォルトconfig.xmlファイルでプロセッサごとにprocessor要素を作成できます。また、プロセッサごとにMETA-INF/wlevsに個別のXMLファイルを作成するか、またはすべてのプロセッサの構成のみでなく、アプリケーション内のすべてのコンポーネント(アダプタ、プロセッサ、およびチャネル)が含まれる単一のXMLファイルをMETA-INF/wlevsに作成できます。開発環境に最も適した方法を選択します。

デフォルトでは、Oracle CEP IDE for Eclipseは、1つのコンポーネント構成ファイルおよび1つのEPNアセンブリ・ファイルを作成します。Oracle CEP IDE for Eclipseを使用してEPLプロセッサを作成する場合、デフォルトでプロセッサ要素がデフォルト・コンポーネント構成ファイルMETA-INF/wlevs/config.xmlファイルに追加されます。

コンポーネント構成ファイルは、Oracle CEPアプリケーション・バンドルの一部としてデプロイされます。Oracle CEP Visualizer、wlevs.Adminユーティリティを使用するか、または適切なJMX Mbeanを直接操作して、後で実行時にこの構成を更新できます。

詳細は、次を参照してください:

EPLプロセッサ構成の詳細は、次の項を参照してください。

11.2 EPLプロセッサの構成

以下の手順では、プロセッサの構成ファイルを作成する主な手順について示します。簡略化のため、この手順ではすべてのプロセッサを1つのXMLファイルに構成することを想定しています。ただし、各プロセッサごとに個別のファイルを作成することもできます。

プロセッサ構成ファイルを記述する完全なXSDスキーマは、B.2項「コンポーネント構成スキーマwlevs_application_config.xsd」を参照してください。

プロセッサ構成ファイルの完全な例は、11.4項「EPLプロセッサ構成ファイルの例」を参照してください。

11.2.1 EPLプロセッサを手動で構成する方法

任意のテキスト・エディタを使用して、手動でEPLプロセッサを構成できます。

EPLプロセッサを構成するには:

  1. プロセッサで実行されるEPLルールのセットを設計します。これらのルールでは、次の2つの例のように、単純にすべての受信イベントを選択し、時間やプロパティの値などに基づいてセットを制限することが可能です。

    SELECT * from Withdrawal RETAIN ALL
    SELECT symbol, AVG(price) 
    FROM (SELECT * FROM MarketTrade WHERE blockSize > 10)
    RETAIN 100 EVENTS PARTITION BY symbol WITH LARGEST price
    GROUP BY symbol
    HAVING AVG(price) >= 100
    ORDER BY symbol
    

    EPLにはリレーショナル・データベース表の問合せに使用されるStructure Query Language (SQL)との多くの共通点がありますが、これらの構文は多くの点で異なります。その他の大きな相違点として、EPL問合せではもう1つの面(時間)が考慮されます。静的なSQL問合せとは異なり、プロセッサではEPLが継続的に実行されます。

    EPLに関する追加概念情報と、独自のEPLルールの設計と作成に役立つ例およびリファレンス情報は、『Oracle Complex Event Processing EPL言語リファレンス』を参照してください。

  2. アプリケーションの各プロセッサについて上記の手順で設計されたEPLルールおよびオプションの機能が含まれた、プロセッサ構成XMLファイルを作成します。

    このXMLファイルの名前は自分で決定しますが、その拡張は.xmlで終了することが必要です。

    プロセッサ構成ファイルのルート要素はconfigで、ネームスペース定義は次の手順に示します。

  3. アプリケーションの各プロセッサに対して、configprocessor子要素を追加します。

    各プロセッサをname子要素で一意に識別します。この名前は、アプリケーションのイベント処理ネットワークを定義するEPNアセンブリ・ファイルのwlevs:processor要素のid属性の値と同じである必要があります。これによって、Oracle CEPは、このプロセッサ構成はEPNアセンブリ・ファイルのどのプロセッサ・コンポーネントに適用されるかを理解します。詳細は、4.3項「EPNアセンブリ・ファイルの作成」を参照してください。

    たとえば、アプリケーションに2つのプロセッサがある場合、構成ファイルは最初に以下のようになります。

    <?xml version="1.0" encoding="UTF-8"?>
    <n1:config xmlns:n1="http://www.bea.com/ns/wlevs/config/application">
      <processor>
        <name>firstProcessor</name>
         ...
      </processor>
      <processor>
        <name>secondProcessor</name>
         ...
       </processor>
    </n1:config>
    

    この例では、構成ファイルには、firstProcessorおよびsecondProcessorという2つのプロセッサが含まれています。これは、EPNアセンブリ・ファイルには、同じ識別子を持つ少なくとも2つのプロセッサ登録が含まれる必要があることを意味します。

    <wlevs:processor id="firstProcessor" provider="epl"...>
      ...
    </wlevs:processor>
    <wlevs:processor id="secondProcessor" provider="epl"...>
      ...
    </wlevs:processor>
    

    注意:

    Oracle CEP 11gリリース1 (11.1.1)では、Event Processing Language (EPL)はOracle CQLで置換されているため、デフォルトのプロセッサ・プロバイダはcqlです。EPNアセンブリ・ファイルにEPLプロセッサを指定するには、wlevs:processor要素のprovider属性をeplに設定する必要があります。Oracle CEPは、EPLとの下位互換性をサポートします。詳細は、第10章「Oracle CQLプロセッサの構成」を参照してください。


    注意:

    XMLファイルの識別子と名前は大/小文字が区別されるため、EPNアセンブリ・ファイルでコンポーネントの識別子を参照するときは、必ず大/小文字を同一にします。

  4. processorrules子要素を追加して、このプロセッサに設計されているEPLルール・セットに対応する1つ以上のrule要素をグループ化します。

    rule要素の必要なid属性を使用して、各ルールを一意に識別します。XML CDATAタイプを使用して実際のEPLルールを入力します。例:

    <processor>
        <name>firstProcessor</name>
        <rules>
          <rule id="myFirstRule"><![CDATA[
          SELECT * from Withdrawal RETAIN ALL
          ]]></rule>
          <rule id="mySecondRule"><![CDATA[
          SELECT * from Checking RETAIN ALL
          ]]></rule>
        </rules>
    </processor>
    
  5. 必要に応じて、次の追加processor子要素を追加してデフォルトのプロセッサ構成をオーバーライドします。

    • 必要に応じて、processor要素のdatabase子要素を追加してアプリケーションのJDBCデータ・ソースを定義します。EPLルールでイベントのストリームが実際のリレーショナル・データベース表に結合される場合は、これを追加する必要があります。

      databasename子要素を使用して、データ・ソースを一意に識別します。

      databasedata-source-name子要素を使用してデータ・ソースの実際の名前を指定します。この名前は、使用するドメインのconfig.xmlファイル内のdata-source構成オブジェクトのname子要素に対応します。

      詳細は、『Oracle Complex Event Processing管理者ガイド』のリレーショナル・データベースへのアクセスの構成に関する項を参照してください。

      例:

      <processor>
          <name>firstProcessor</name>
          <rules>
          ....
          </rules>
          <database>
            <name>myDataSource</name>
            <data-source-name>rdbmsDataSource</data-source-name>
          </database>
      </processor>
      
  6. ファイルを保存して閉じます。

  7. 必要に応じて、アセンブリ・ファイルに追加のEPLプロセッサ機能を構成します。

11.3 EPLプロセッサ・キャッシュ・ソースの構成

EPLプロセッサを構成してOracle CEPキャッシュにアクセスできます。

詳細は、次を参照してください:

11.4 EPLプロセッサの構成ファイルの例

この項では、Oracle CQLプロセッサ構成ファイルの例を記載します。次のものが含まれます。

11.4.1 EPLプロセッサ・コンポーネント構成ファイル

次の例は、11.2項「EPLプロセッサの構成」」に示すmyProcessorEPLプロセッサのサンプルのEPL問合せを構成する方法を示します。

<?xml version="1.0" encoding="UTF-8"?>
<n1:config xmlns:n1="http://www.bea.com/ns/wlevs/config/application"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <processor>
        <name>myProcessor</name>
        <rules>
            <rule id="myRule"><![CDATA[
                SELECT symbol, AVG(price) 
                FROM (SELECT * FROM MarketTrade WHERE blockSize > 10)
                RETAIN 100 EVENTS PARTITION BY symbol WITH LARGEST price
                GROUP BY symbol
                HAVING AVG(price) >= 100
                ORDER BY symbol
            ]]></rule>
        </rules>
    </processor>
</n1:config>

例では、name要素は、単一のEPLルールが構成されているプロセッサはmyProcessorという名前であることを指定しています。これは、アプリケーションを定義するEPNアセンブリ・ファイルには、これらのEPLルールを実際のmyProcessorEPLプロセッサ・インスタンスにリンクするために、対応する<wlevs:processor id="myProcessor" provider="epl" />要素を含む必要があることを示します(11.4.2項「EPLプロセッサEPNアセンブリ・ファイル」を参照してください)。

11.4.2 EPLプロセッサのEPNアセンブリ・ファイル

次の例は、EPLプロセッサのEPNアセンブリ・ファイルを示しています。

<?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-v11_1_1_3.xsd">
    <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>
    <wlevs:adapter 
        id="helloworldAdapter"
        class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter">
        <wlevs:instance-property name="message" value="HelloWorld - the current time is:"/>
    </wlevs:adapter>
    <wlevs:channel id="helloworldInputChannel" event-type="HelloWorldEvent">
        <wlevs:listener ref="helloworldProcessor"/>
        <wlevs:source ref="helloworldAdapter"/>
    </wlevs:channel>
    <wlevs:processor id="helloworldProcessor" provider="epl" />
    <wlevs:channel 
        id="helloworldOutputChannel" event-type="HelloWorldEvent" advertise="true">
        <wlevs:listener>
            <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
        </wlevs:listener>
        <wlevs:source ref="helloworldProcessor"/>
    </wlevs:channel>
</beans>