|
Oracle Complex Event Processing (略称 Oracle CEP) には多数のアプリケーション アセンブリ タグが用意されており、ユーザはそれらのタグをアプリケーションの EPN アセンブリ ファイル内で使用して、イベント タイプを登録し、イベント処理ネットワークのコンポーネントを宣言します。また、各コンポーネントがどのように相互にリンクしているかを指定します。EPN アセンブリ ファイルは、標準の Spring コンテキスト ファイルの拡張です。
次の図は、Oracle CEP アプリケーション アセンブリ タグの階層を表しています。
次に示すサンプルの EPN アセンブリ ファイルは、HelloWorld アプリケーションのものであり、さまざまな Oracle CEP タグの使い方を示しています。
<?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">
<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 currenttime is:"/>
</wlevs:adapter>
<wlevs:processor id="helloworldProcessor" />
<wlevs:stream id="helloworldInstream" >
<wlevs:listener ref="helloworldProcessor"/>
<wlevs:source ref="helloworldAdapter"/>
</wlevs:stream>
<wlevs:stream id="helloworldOutstream" advertise="true">
<wlevs:listener>
<bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
</wlevs:listener>
<wlevs:source ref="helloworldProcessor"/>
</wlevs:stream>
</beans>
このタグを使用して、Spring アプリケーション コンテキストに対してアダプタ コンポーネントを宣言します。
wlevs:adapter アプリケーション アセンブリ タグは、以下の子タグをサポートします。
次の表は、wlevs:adapter アプリケーション アセンブリ タグの属性を示しています。
csvgen または loadgen ユーティリティを使用してデータ フィードをシミュレートする場合は、ハードコード化された csvgen または loadgen の値をそれぞれ使用します。たとえば、次のようになります。
|
|||
次の例は、EPN アセンブリ ファイル内での wlevs:adapter タグの使用方法を示しています。
<wlevs:adapter id="helloworldAdapter" provider="hellomsgs">
<wlevs:instance-property name="message"
value="HelloWorld - the current time is:"/>
</wlevs:adapter>
この例では、アダプタのユニークな識別子は helloworldAdapter です。プロバイダは OSGi サービスです。EPN アセンブリ ファイルにも登録されており、参照は hellomsgs です。アダプタには message という静的なプロパティがあります。これは、アダプタ Java ファイルに setMessage() メソッドがあることを示します。
このタグを使用して、Spring アプリケーション コンテキストに対してキャッシュを宣言します。
wlevs:cache アプリケーション アセンブリ タグは、以下の子タグをサポートします。
wlevs:caching-system—このキャッシュが属するキャッシング システムを指定します。 | 注意 : | この子タグは、キャッシング システムを宣言するために使用する wlevs:caching-system タグとは異なります。wlevs:cache タグの子タグは、ref という単一の属性を持ちます。この属性は、宣言されたキャッシング システムの id 属性を参照します。 |
次の表は、wlevs:cache アプリケーション アセンブリ タグの属性を示しています。
次の例は、EPN アセンブリ ファイル内での wlevs:cache タグの使用方法を示しています。
<wlevs:cache id="cache-id" name="alternative-cache-name">
<wlevs:caching-system ref="caching-system-id"/>
<wlevs:cache-listener ref="tradeListener" />
</wlevs:cache>
この例では、キャッシュのユニークな識別子は cache-id であり、代替名は alternative-cache-name です。キャッシュが属しているキャッシング システムの id は caching-system-id です。キャッシュにはリスナがあり、キャッシュはイベントをそのリスナに送信します。キャッシュをリスンするコンポーネントの id は tradeListener です。
このタグを使用して、リスンするコンポーネントに対するイベントのソースとしてキャッシュを指定します。リスンするコンポーネントは com.bea.cache.jcache.CacheListener インタフェースを実装する必要があります。
このタグは常に wlevs:cache の子です。
次の表は、wlevs:cache-listener アプリケーション アセンブリ タグの属性を示しています。
次の例は、EPN アセンブリ ファイル内での wlevs:cache-listener タグの使用方法を示しています。
<wlevs:caching-system id="caching-system-id"/>
...
<wlevs:cache id="cache-id" name="alternative-cache-name">
<wlevs:caching-system ref="caching-system-id"/>
<wlevs:cache-listener ref="cache-listener-id" />
</wlevs:cache>
...
<bean id="cache-listener-id" class="wlevs.example.MyCacheListener"/>
この例では、cache-listener-id Spring Bean はキャッシュから送られてくるイベントをリスンします。このコンポーネントを実装するクラスである wlevs.example.MyCacheListener は、com.bea.jcache.CacheListener インタフェースを実装する必要があります。wlevs.example.MyCacheListener クラスはユーザ自身がプログラミングする必要があります。
データをキャッシュにロードするオブジェクトを実装する Spring Bean を指定します。
このタグは常に wlevs:cache の子です。
次の表は、wlevs:cache-loader アプリケーション アセンブリ タグの属性を示しています。
|
|
次の例は、EPN アセンブリ ファイル内での wlevs:cache-loader タグの使用方法を示しています。
<wlevs:cache id="cache-id" name="alternative-cache-name">
<wlevs:caching-system ref="caching-system-id"/>
<wlevs:cache-loader ref="cache-loader-id" />
</wlevs:cache>
...
<bean id="cache-loader-id" class="wlevs.example.MyCacheLoader"/>
この例では、cache-loader-id Spring Bean (wlevs.example.MyCacheLoader クラスによって実装され、そのクラスが com.bea.cache.jcache.CacheLoader インタフェースを実装する) が、データをキャッシュにロードする Bean です。キャッシュは、<wlevs:cache-loader> 子要素の ref 属性で参照することによって、このローダを指定します。
このプロセッサ コンポーネントにデータを提供するキャッシュを指定します。プロセッサ コンポーネントは、キャッシュを直接参照する EPL クエリに関連付けられます。
wlevs:cache タグの value-type 属性を使用して、キャッシュによって提供されるデータのイベント タイプを宣言します。
このタグは、wlevs:processor タグのみの子です。
次の表は、wlevs:cache-source アプリケーション アセンブリ タグの属性を示しています。
次の例は、EPN アセンブリ ファイル内での wlevs:cache-source タグの使用方法を示しています。
<wlevs:caching-system id="caching-system-id"/>
...
<wlevs:cache id="cache-id"
name="alternative-cache-name"value-type="Company"><wlevs:caching-system ref="caching-system-id"/>
</wlevs:cache>
<wlevs:stream id="stream-id"/>
<wlevs:processor id="processor-id">
<wlevs:cache-source ref="cache-id">
<wlevs:source ref="stream-id">
</wlevs:processor>
この例では、通常どおり stream-id ストリームからプロセッサにデータがプッシュされます。ただし、プロセッサ内で実行される EPL クエリも、cache-id キャッシュからデータを取り出すことができます。クエリ プロセッサが FROM 句のイベント タイプとキャッシュによって提供されたイベント タイプ (Company など) を照合するとき、プロセッサはそのイベント タイプのインスタンスをキャッシュから取り出します。
キャッシュからバッキング ストア (データベース内のテーブルなど) へのデータの書き込みを処理するカスタム ストアを実装する Spring Bean を指定します。
このタグは常に wlevs:cache の子です。
次の表は、wlevs:cache-store アプリケーション アセンブリ タグの属性を示しています。
|
|
次の例は、EPN アセンブリ ファイル内での wlevs:cache-store タグの使用方法を示しています。
<wlevs:cache id="cache-id" name="alternative-cache-name">
<wlevs:caching-system ref="caching-system-id"/>
<wlevs:cache-store ref="cache-store-id" />
</wlevs:cache>
...
<bean id="cache-store-id" class="wlevs.example.MyCacheStore"/>
この例では、cache-store-id Spring Bean (wlevs.example.MyCacheStore クラスによって実装され、そのクラスが com.bea.cache.jcache.CacheStore インタフェースを実装する) が、カスタム ストア (データベースなど) の Bean です。キャッシュは、<wlevs:cache-store> 子要素の ref 属性で参照することによって、このストアを指定します。
アプリケーションで使用するキャッシング システムを指定します。
wlevs:caching-system アプリケーション アセンブリ タグは、以下の子タグをサポートします。
次の表は、wlevs:caching-system アプリケーション アセンブリ タグの属性を示しています。
次の例は、EPN アセンブリ ファイル内での最も簡単な wlevs:caching-system タグの使用方法を示しています。
<wlevs:caching-system id="caching-system-id"/>
次の例は、ファクトリをプロバイダとして使用するサードパーティの実装を指定する方法を示しています。
<wlevs:caching-system id ="caching-system-id"
provider="caching-provider"/>
<factory id="factory-id" provider-name="caching-provider">
<class>the.factory.class.name</class>
</factory>
この例では、the.factory.class.name が、サードパーティ キャッシング システムを作成するためのファクトリです。wlevs:caching-system の provider 属性が、アプリケーションのキャッシング システムの実装としてそのファクトリを参照します。
このタグを使用して、イベント Bean がイベント処理ネットワーク (EPN) の一部であるコンテキストを Spring アプリケーションに対して宣言します。イベント Bean は Oracle CEP コンテナによって管理されます。これは、Spring Bean が Spring フレームワークによって管理されるのと似ています。多くの点で、イベント Bean と Spring Bean は類似しており、EPN でどちらを使用するかは開発者に任されています。Spring へのレガシー統合の場合は Spring Bean を使用します。Oracle CEP の追加機能を最大限活用するには、イベント Bean を使用します。
たとえば、Oracle CEP モニタリング フレームワークを使用してイベント Bean をモニタできます。また、コンフィグレーション フレームワーク メタデータ アノテーションを利用したり、イベント Bean で渡されるイベントを記録および再生することもできます。イベント Bean は、Oracle CEP API インタフェースを実装するのではなく、EPN アセンブリ ファイル宣言にメソッドを指定することによって、Oracle CEP Bean ライフサイクルに参加することもできます。
wlevs:event-bean アプリケーション アセンブリ タグは、以下の子タグをサポートします。
次の表は、wlevs:event-bean アプリケーション アセンブリ タグの属性を示しています。
次の例は、EPN アセンブリ ファイル内での wlevs:event-bean タグの使用方法を示しています。
<wlevs:event-bean id="myBean" class="com.customer.SomeEventBean" >
<wlevs:listener ref="myProcessor" />
</wlevs:event-bean>
この例では、myBean というイベント Bean がクラス com.customer.SomeEventBean を使用して実装されています。myProcessor というコンポーネントが myBean イベント Bean からイベントを受け取ります。
このタグを使用して、1 つまたは複数の wlevs:event-type タグをまとめてグループ化します。各タグは、アプリケーション全体で使用するイベント タイプを登録するために使用されます。
wlevs:event-type-repository アプリケーション アセンブリ タグは、以下の子タグをサポートします。
次の例は、EPN アセンブリ ファイル内での wlevs:event-type-repository タグの使用方法を示しています。
<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:event-type-repository> タグで単独の <wlevs:event-type> タグをグループ化し、HelloWorldEvent という 1 つのイベント タイプを宣言しています。詳細については、wlevs:event-type を参照してください。
Oracle CEP アプリケーションで使用するイベント タイプの定義を指定します。アプリケーションのイベント タイプを定義したら、定義したイベント タイプをアダプタ クラスおよびビジネス クラスの POJO 内で、また EPL ルールで参照できます。
<wlevs:class> 子タグを使用して指定します。
wlevs:class または wlevs:metadata のどちらか一方を wlevs:event-type の子として指定できますが、両方は指定できません。
wlevs:property 子タグを使用して、イベント タイプに適用するカスタム プロパティを指定することもできます。
wlevs:class 子タグを使用してイベント タイプを定義することをお勧めします。そうすることで、指定した JavaBean クラスを再利用でき、どのようなイベント タイプかを正確に制御できます。
wlevs:event-type アプリケーション アセンブリ タグは、以下の子タグをサポートします。
次の表は、wlevs:event-type アプリケーション アセンブリ タグの属性を示しています。
次の例は、EPN アセンブリ ファイル内での wlevs:event-type タグの使用方法を示しています。
<wlevs:event-type-repository><wlevs:event-type type-name="HelloWorldEvent"></wlevs:event-type-repository>
<wlevs:class>com.bea.wlevs.event.example.helloworld.HelloWorldEvent</wlevs:class>
</wlevs:event-type>
この例では、イベント タイプの名前は HelloWorldEvent であり、このイベント タイプの定義は com.bea.wlevs.event.example.helloworld.HelloWorldEvent JavaBean クラスによって決定します。
このタグを使用して、ファクトリ クラスをサービスとして登録します。このタグを使用すると、Spring-OSGi インタフェースに対するアプリケーションの依存度が低減されます。
このファクトリの Java ソースで、com.bea.wlevs.ede.api.Factory インタフェースを実装する必要があります。
ファクトリ タグでサービスのプロパティを指定することはできません。サービスのプロパティを指定する必要がある場合は、代わりに Spring- OSGi <osgi:service> タグを使用する必要があります。
次の表は、wlevs:factory アプリケーション アセンブリ タグの属性を示しています。
次の例は、EPN アセンブリ ファイル内での wlevs:factory タグの使用方法を示しています。
<wlevs:factory provider-name="myEventSourceFactory"
class="com.customer.MyEventSourceFactory" />
この例では、com.customer.MyEventSourceFactory によって実装されたファクトリが、myEventSourceFactory というプロバイダ名になっています。
このタグを使用して、プロセッサ用のユーザ定義の関数を含む Bean を指定します。
このタグでは、常に子タグとして Spring 標準の <bean> タグを使用して、ユーザ定義の関数用の Spring Bean を指定します。
次の表は、wlevs:function アプリケーション アセンブリ タグの属性を示しています。
次の例は、EPN アセンブリ ファイル内での wlevs:function タグの使用方法を示しています。
<wlevs:processor id="testProcessor">
<wlevs:listener ref="providerCache"/>
<wlevs:listener ref="outputCache"/>
<wlevs:cache-source ref="testCache"/> <wlevs:function epl-name="testfunction"> </wlevs:processor>
<bean class="com.bea.wlevs.example.cache.function.TestFunction"/>
</wlevs:function>
このタグを子タグとするコンポーネントの create ステージのインスタンスに適用するプロパティを指定します。これにより、ユーザ定義のステージ プロパティの宣言型コンフィグレーションが可能になります。
このタグは、wlevs:adapter、wlevs:processor、wlevs:stream、または wlevs:caching-system の子としてのみ使用されます。
wlevs:instance-property タグは、Spring propertyType 型として定義されます。この Spring データ型の詳細や、使用できる子タグの定義などについては、Spring 2.0 XSD を参照してください。
次のいずかの Spring 標準タグを wlevs:instance-property タグの子タグとして指定できます。
次の表は、wlevs:instance-property アプリケーション アセンブリ タグの属性を示しています。
次の例は、EPN アセンブリ ファイル内での wlevs:instance-property タグの使用方法を示しています。
<wlevs:adapter id="helloworldAdapter" provider="hellomsgs"><wlevs:instance-property name="message" value="HelloWorld - the current time is:"/></wlevs:adapter>
この例では、helloworldAdapter アダプタ コンポーネントを実装する Bean は、message というインスタンス プロパティを必要とします。上記のサンプル wlevs:instance-property タグは、このプロパティの値を HelloWorld - the current time is: に設定します。
このタグを子とするコンポーネントをリスンするコンポーネントを指定します。他の任意のコンポーネントのインスタンスをリスナとすることができます。また、特定の wlevs:listener コンポーネント内にコンポーネントの定義をネストして、親をリスンするコンポーネントを指定することもできます。
| 警告 : | ネストされた定義は、動的コンフィグレーションまたは動的モニタには使用できません。 |
このタグは常に、wlevs:adapter、wlevs:processor、wlevs:stream、wlevs:event-bean、または wlevs:cache の子タグです。
次の表は、wlevs:listener アプリケーション アセンブリ タグの属性を示しています。
次の例は、EPN アセンブリ ファイル内での wlevs:listener タグの使用方法を示しています。
<wlevs:processor id="helloworldProcessor"><wlevs:listener ref="helloworldOutstream"/></wlevs:processor>
この例では、hellworldOutstream コンポーネントが helloworldProcessor コンポーネントをリスンします。この EPN アセンブリ ファイルには、ユニークな識別子が helloworldOustream である <wlevs:adapter>、<wlevs:stream>、または <wlevs:processor> コンポーネントの宣言も含まれていると想定しています。
フィールドを Spring entry タグのグループとしてリストし、イベント タイプの定義を指定します。イベント タイプをこの方法で定義すると、Oracle CEP により Java クラスが自動的に生成されます。
entry タグの key 属性を使用してフィールドの名前を指定し、value 属性を使用して、フィールドのデータ型を表す Java クラスを指定します。
このタグは wlevs:event-type タグの子としてのみ使用されます。
wlevs:metadata タグは、Spring mapType 型として定義されます。この Spring データ型の詳細については、Spring 2.0 XSD を参照してください。
wlevs:metadata タグには、1 つ以上の標準 Spring entry 子タグを指定できます。
次の表は、wlevs:metadata アプリケーション アセンブリ タグの属性を示しています。
次の例は、EPN アセンブリ ファイル内での wlevs:metadata タグの使用方法を示しています。
<wlevs:event-type type-name="ForeignExchangeEvent"><wlevs:metadata>...
<entry key="symbol" value="java.lang.String"/>
<entry key="price" value="java.lang.Double"/>
<entry key="fromRate" value="java.lang.String"/>
<entry key="toRate" value="java.lang.String"/>
</wlevs:metadata>
</wlevs:event-type>
この例では、wlevs:metadata タグが 4 つの Spring 標準 entry タグをグループ化しています。それらの 4 つのタグは、ForeignExchangeEvent の 4 つのフィールド、つまり symbol、price、fromRate、toRate を表します。これらのフィールドのデータ型は、それぞれ、java.lang.String、java.lang.Double、java.lang.String、java.lang.String です。
このタグを使用して、Spring アプリケーション コンテキストに対してプロセッサを宣言します。
wlevs:processor Spring tag タグは、以下の子タグをサポートします。
次の表は、wlevs:processor アプリケーション アセンブリ タグの属性を示しています。
次の例は、EPN アセンブリ ファイル内での wlevs:processor タグの使用方法を示しています。
<wlevs:processor id="spreader" />
この例は、spreader という ID を持つプロセッサを宣言する方法を示しています。つまり、このプロセッサの EPL ルールを含むプロセッサ コンフィグレーション ファイル内で、<name> 要素に値 spreader が含まれている必要があります。そうすることで、この特定のプロセッサに対してどの EPL ルールを登録する必要があるかを Oracle CEP に指定します。
イベント タイプに適用するカスタム プロパティを指定します。
このタグは、wlevs:event-type、wlevs:adapter、wlevs:processor、wlevs:stream、または wlevs:caching-system の子としてのみ使用されます。
wlevs:property タグは、Spring propertyType 型として定義されます。この Spring データ型の詳細や、使用できる子タグの定義などについては、Spring 2.0 XSD を参照してください。
次のいずれかの Spring 標準タグを wlevs:property タグの子要素として指定できます。
次の表は、wlevs:property アプリケーション アセンブリ タグの属性を示しています。
次の例は、EPN アセンブリ ファイル内での wlevs:property タグの使用方法を示しています。
<wlevs:event-type type-name="ForeignExchangeEvent">
<wlevs:metadata>
<entry key="symbol" value="java.lang.String"/>
<entry key="price" value="java.lang.Double"/>
</wlevs:metadata><wlevs:property name="builderFactory"></wlevs:event-type>
<bean id="builderFactory"
class="com.bea.wlevs.example.fx.ForeignExchangeBuilderFactory"/>
</wlevs:property>
この例では、wlevs:property タグによって、ForeignExchangeEvent のカスタム プロパティ builderFactory を定義しています。そのプロパティでは、Spring 標準の bean タグを使用して、ForeignExchangeEvents を作成するためのファクトリとして使用される Spring Bean を指定します。
このコンポーネントのイベント ソース、つまりイベントの発生元であるコンポーネントを指定します。イベント ソースを指定することは、このコンポーネントを別のコンポーネントのイベント リスナとして指定するのと同等です。
また、特定の wlevs:source コンポーネント内にコンポーネントの定義をネストして、コンポーネント ソースを定義することもできます。
| 警告 : | ネストされた定義は、動的コンフィグレーションまたは動的モニタには使用できません。 |
このタグは、wlevs:stream または wlevs:processor の子です。
次の表は、wlevs:source アプリケーション アセンブリ タグの属性を示しています。
次の例は、EPN アセンブリ ファイル内での wlevs:source タグの使用方法を示しています。
<wlevs:stream id="helloworldInstream">
<wlevs:listener ref="helloworldProcessor"/><wlevs:source ref="helloworldAdapter"/></wlevs:stream>
この例では、id が helloworldAdapter であるコンポーネントが、helloworldInstream というストリーム コンポーネントのソースです。
このタグを使用して、Spring アプリケーション コンテキストに対してストリームを宣言します。
wlevs:stream アプリケーション アセンブリ タグは、以下の子タグをサポートします。
次の表は、wlevs:stream アプリケーション アセンブリ タグの属性を示しています。
次の例は、EPN アセンブリ ファイル内での wlevs:stream タグの使用方法を示しています。
<wlevs:stream id="fxMarketAmerOut" />
この例は、fxMarketAmerOut というユニークな識別子を持つストリーム サービスを宣言する方法を示しています。
|