ここでは、XTP連携を行う場合の留意事項と、その利用方法について説明します。
複合イベント処理の外部データ参照において、XTP連携を利用する場合に留意すべき項目について説明します。
XTP連携の必要性の確認
高速フィルターでマスタデータを利用する場合と異なり、XTP連携の場合、随時更新されるデータの参照が可能です(高速フィルターの場合、CEPエンジン動作中はデータの更新が反映されません)。
随時更新が不要なデータを参照する場合、高速フィルターにおいてマスタデータの利用を検討します。
XTPのキャッシュの構成
複合イベント処理ルールから参照するXTPのキャッシュのデータは、Key/Value形式のエントリーとして管理されます。複合イベント処理ルールで使用するキャッシュに格納するKey/Valueの形式については、「5.4.11 XTPのキャッシュ」を参照してください。
XTPのキャッシュの参照方法
複合イベント処理ルールからXTPのキャッシュを参照するには、Virtual Data Window機能を利用します。Virtual Data Windowの作成方法、および作成したVirtual Data Windowを使ったキャッシュの参照方法については、「5.4.7.2 XTPのキャッシュの参照方法」を参照してください。
Virtual Data Windowの作成方法と、作成したVirtual Data Window の利用方法について説明します。
Virtual Data Windowの作成
複合イベント処理ルールからXTPのキャッシュを参照するには、ルール中でVirtual Data Window(以降VDW)を作成します。
具体的には、以下のように記述します。
構文:イベントタイプIDを利用する場合
@VDW(cacheName="キャッシュ名", keyProperty="キープロパティ名")
create window ウィンドウ名.isxtp:vdw() as イベントタイプID;
構文:型情報を直接指定する場合
@VDW(cacheName="キャッシュ名", keyProperty="キープロパティ名")
create window ウィンドウ名.isxtp:vdw() as (プロパティ名 型, プロパティ名 型, ...);
VDWの作成は@VDWアノテーションとcreate window文の組み合わせで行います。
キャッシュの実体を参照するため、キャッシュ名とデータ参照のためのキープロパティ名の設定が必要です。この2つの設定を行うため、@VDWアノテーションの指定が必要です。
キャッシュ名には、使用するキャッシュの名前を指定します。
キープロパティ名には、エントリーを特定するためのプロパティ名を指定します。イベントタイプIDを利用する場合は、指定されたイベントタイプのプロパティ名を指定します。型情報を直接指定する場合は、任意の名前を指定できます。指定したプロパティの型は、キャッシュのKeyクラスに対応する型である必要があります。
ウィンドウ名には任意の名前を指定します。ここで指定した名前で、他の複合イベント処理ルールのselect文から参照することが可能になります。
イベントタイプIDには、CSV形式のイベントタイプ定義で定義されたイベントを指定します。(XML形式のイベントタイプ定義は指定できません。)
プロパティ名 型、にはキャッシュのValueに設定するjava.util.HashMapのキーと対応したプロパティ名と型を指定する必要があります。また、キープロパティ名で指定したプロパティ名とその型も指定する必要があります。
指定したプロパティ名が、キャッシュのValueに設定するjava.util.HashMapに設定されていない場合、複合イベント処理ルールでnull値として扱われます。
例
Virtual Data Window (VDW)作成の記述例
XTPのキャッシュ(MARKET)を参照するVDW(MarketWindow)の作成例です。
@VDW(cacheName="MARKET", keyProperty="code")
create window MarketWindow.isxtp:vdw() as (code string, high int, low int);
キープロパティとしてcodeを指定しています。
プロパティとして、code(string型)、high(int型)、low(int型)を定義しています。
Virtual Data Windowの利用
作成したVirtual Data Windowは、通常のウィンドウと同じように利用します。
例
作成したVirtual Data Window(VDW)の使用例
TickerWindowのイベントでVDWのMarketWindowを参照し、条件に合うVDWのイベント(キャッシュのエントリー)のデータを取得する例です。
select M.code from MarketWindow as M, TickerWidnow as T
where M.code = T.code and ( T.price > M.high or T.price < M.low);
注意
Virtual Data Window利用時の注意
Virtual Data Window に格納された情報にアクセスする際に利用できるwhere句には以下の制限があります。
以下の制限は、キャッシュからレコードを特定する際に制限されるものです。
レコードが特定された後であれば、以下の制限はなく、通常通りにルールを記述できます。
レコードの特定には、@VDWアノテーションで指定したキープロパティのみ指定可能です。
レコードの特定で指定可能な、キープロパティに対する比較演算子は"="のみです。
記述例
M.code = T.code でレコードを特定後、他の項目についての比較を行っています。
@VDW(cacheName="MARKET", keyProperty="code")
create window MarketWindow.isxtp:vdw() as (code string, high int, low int);
select M.code from MarketWindow as M, TicketWindow as T
where M.code = T.code and ( T.price > M.high or T.price < M.low)
以下は上記のキャッシュでOKな記述例と、NGな記述例です。
No | 記述例 | OK/NG | 説明 |
---|---|---|---|
1 | select * from MarketWindow where code = '1111' | OK | キープロパティに対する‘=’オペレーション |
2 | select * from MarketWindow where high = 1000 | NG | キープロパティ以外をWHERE句に指定しているためNG |
3 | select * from MarketWindow where code > '1111' | NG | キープロパティのみWHERE句に指定しているが、‘=’以外の演算を行っているためNG |