この章では、Oracle Event Processingイベント処理ネットワーク用にOracle Event Processing Language (EPL)プロセッサを構成する方法について説明します。EPLは非推奨です。新しいアプリケーションではOracle Continuous Query Languageを使用する必要があります。
この章の内容は次のとおりです。
|
注意: イベント処理言語(EPL)は、Oracle Event Processing 11gリリース1 (11.1.1)ではOracle CQLによって置き換えられます。Oracle Event Processingは、EPLとの下位互換性をサポートします。詳細は、第17章「Oracle CQLでのイベント・ストリームの問合せ」を参照してください。 |
Oracle Event Processingアプリケーションには、1つ以上のイベント・プロセッサ、もしくはプロセッサが含まれています。各プロセッサは1つまたは複数のアダプタからのイベントを入力として受け取ります。これらのアダプタでは、ソースから連続的なデータ・ストリームを送信するデータ・フィードにリスニングします。金融データ・フィードからOracle Event Processingロード・ジェネレータまで、任意のソースを使用できます。
EPLプロセッサの主な機能は、受信イベントのサブセットを選択してプロセッサをリスニングしているコンポーネントに渡す、関連付けられたEvent Processing Language (EPL)のルールです。リスニングするコンポーネントには、他のプロセッサまたは通常はイベント処理ネットワークの最後を定義し、クライアント・アプリケーションへのパブリッシュなどイベントでなんらかの処理を実行するビジネス・オブジェクトPOJOを指定できます。EPLの詳細は、『Oracle Fusion Middleware Oracle Event Processing EPL言語リファレンス』を参照してください。
アプリケーションの各EPLプロセッサに対して、コンポーネント構成ファイルにprocessor要素を作成する必要があります。このprocessor要素には、プロセッサのEPLルールの初期セット、および次のような任意のプロセッサ構成を指定します。
Oracle Event Processingアプリケーションでリレーショナル・データベースへの接続が必要な場合は、JDBCデータ・ソースのリファレンス。
プロセッサのモニターの有効化。
EPLプロセッサEPNアセンブリ・ファイルに、任意の追加EPLプロセッサの機能を構成できます。
コンポーネント構成ファイルprocessor要素のname要素は、EPNアセンブリ・ファイルprocessor要素のid属性と一致している必要があります。たとえば、例19-1に表示されるEPNアセンブリ・ファイルprocessor要素が指定され、例19-2に表示される対応するコンポーネント構成ファイルprocessor要素が指定されています。
例19-1 EPNアセンブリ・ファイル EPLプロセッサID: proc
<wlevs:processor id="proc" provider="epl" >
<wlevs:table-source ref="Stock" />
</wlevs:processor>
例19-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 Event Processing 11gリリース1 (11.1.1)では、Event Processing Language (EPL)はOracle CQLで置換されているため、デフォルトのプロセッサ・プロバイダはcqlです。EPNアセンブリ・ファイルにEPLプロセッサを指定するには、例19-1に示すように、wlevs:processor要素のprovider属性をeplに設定する必要があります。Oracle Event Processingは、EPLとの下位互換性をサポートします。詳細は、第17章「Oracle CQLでのイベント・ストリームの問合せ」を参照してください。 |
processor要素は、次のいずれかの任意のコンポーネント構成ファイルに作成できます。
デフォルトのOracle Event Processingアプリケーション構成ファイル(デフォルトでは、META-INF/wlevs/config.xml)。
個別の構成ファイル。
アプリケーションに1つ以上のプロセッサが含まれている場合は、デフォルトconfig.xmlファイルでプロセッサごとにprocessor要素を作成できます。また、プロセッサごとにMETA-INF/wlevsに個別のXMLファイルを作成するか、またはすべてのプロセッサの構成のみでなく、アプリケーション内のすべてのコンポーネント(アダプタ、プロセッサ、およびチャネル)が含まれる単一のXMLファイルをMETA-INF/wlevsに作成できます。開発環境に最も適した方法を選択します。
デフォルトでは、Oracle Event Processing IDE for Eclipseは、1つのコンポーネント構成ファイルおよび1つのEPNアセンブリ・ファイルを作成します。Oracle Event Processing IDE for Eclipseを使用してEPLプロセッサを作成する場合、デフォルトでプロセッサ要素がデフォルト・コンポーネント構成ファイルMETA-INF/wlevs/config.xmlファイルに追加されます。
コンポーネント構成ファイルは、Oracle Event Processingアプリケーション・バンドルの一部としてデプロイされます。Oracle Event Processing Visualizer、wlevs.Adminユーティリティを使用するか、または適切なJMX Mbeanを直接操作して、後で実行時にこの構成を更新できます。
詳細は、次を参照してください:
『Oracle Fusion Middleware Oracle Event Processing Visualizerユーザーズ・ガイド』
『Oracle Fusion Middleware Oracle Event Processing管理者ガイド』のwlevs.Adminコマンドライン・リファレンスに関する項
『Oracle Fusion Middleware Oracle Event Processing管理者ガイド』のOracle Event ProcessingのJMXの構成に関する項
EPLプロセッサ構成の詳細は、次の項を参照してください。
以下の手順では、プロセッサの構成ファイルを作成する主な手順について示します。簡略化のため、この手順ではすべてのプロセッサを1つのXMLファイルに構成することを想定しています。ただし、各プロセッサごとに個別のファイルを作成することもできます。
プロセッサ構成ファイルを記述する完全なXSDスキーマは、B.2項「コンポーネント構成スキーマwlevs_application_config.xsd」を参照してください。
プロセッサ構成ファイルの完全な例は、19.4項「EPLプロセッサ構成ファイルの例」を参照してください。
任意のテキスト・エディタを使用して、手動でEPLプロセッサを構成できます。
EPLプロセッサを構成するには:
プロセッサで実行される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 Fusion Middleware Oracle Event Processing EPL言語リファレンス』を参照してください。
アプリケーションの各プロセッサについて上記の手順で設計されたEPLルールおよびオプションの機能が含まれた、プロセッサ構成XMLファイルを作成します。
このXMLファイルの名前は自分で決定しますが、その拡張は.xmlで終了することが必要です。
プロセッサ構成ファイルのルート要素はconfigで、ネームスペース定義は次の手順に示します。
アプリケーションの各プロセッサに対して、configのprocessor子要素を追加します。
各プロセッサをname子要素で一意に識別します。この名前は、アプリケーションのイベント処理ネットワークを定義するEPNアセンブリ・ファイルのwlevs:processor要素のid属性の値と同じである必要があります。これによって、Oracle Event Processingは、このプロセッサ構成はEPNアセンブリ・ファイルのどのプロセッサ・コンポーネントに適用されるかを理解します。詳細は、5.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 Event Processing 11gリリース1 (11.1.1)では、Event Processing Language (EPL)はOracle CQLで置換されているため、デフォルトのプロセッサ・プロバイダはcqlです。EPNアセンブリ・ファイルにEPLプロセッサを指定するには、wlevs:processor要素のprovider属性をeplに設定する必要があります。Oracle Event Processingは、EPLとの下位互換性をサポートします。詳細は、第17章「Oracle CQLでのイベント・ストリームの問合せ」を参照してください。 |
|
注意: XMLファイルの識別子と名前は大/小文字が区別されるため、EPNアセンブリ・ファイルでコンポーネントの識別子を参照するときは、必ず大/小文字を同一にします。 |
各processorにrules子要素を追加して、このプロセッサに設計されている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>
必要に応じて、次の追加processor子要素を追加してデフォルトのプロセッサ構成をオーバーライドします。
必要に応じて、processor要素のdatabase子要素を追加してアプリケーションのJDBCデータ・ソースを定義します。EPLルールでイベントのストリームが実際のリレーショナル・データベース表に結合される場合は、これを追加する必要があります。
databaseのname子要素を使用して、データ・ソースを一意に識別します。
databaseのdata-source-name子要素を使用してデータ・ソースの実際の名前を指定します。この名前は、使用するドメインのconfig.xmlファイル内のdata-source構成オブジェクトのname子要素に対応します。
詳細は、『Oracle Fusion Middleware Oracle Event Processing管理者ガイド』のリレーショナル・データベースへのアクセスの構成に関する項を参照してください。
例:
<processor>
<name>firstProcessor</name>
<rules>
....
</rules>
<database>
<name>myDataSource</name>
<data-source-name>rdbmsDataSource</data-source-name>
</database>
</processor>
ファイルを保存して閉じます。
必要に応じて、アセンブリ・ファイルに追加のEPLプロセッサ機能を構成します。
EPLプロセッサを構成してOracle Event Processingキャッシュにアクセスできます。
詳細は、次を参照してください:
この項では、Oracle CQLプロセッサ構成ファイルの例を記載します。次のものが含まれます。
次の例は、19.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" />要素を含む必要があることを示します(19.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_6.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>