この節では、以下の項目について説明します。
HelloWorld : 一般的な Oracle CEP アプリケーションの基本的な枠組みを示すサンプルです。
外国為替取引 (FX) : 複数のコンポーネントが含まれる完全なサンプルです。
シグナル生成 : 市場取引とトレンド検出をシミュレートするサンプルです。
イベントの記録と再生 : 永続イベント ストアを使用したイベントの記録と再生をコンフィグレーションする方法を示すサンプル。
Oracle Continuous Query Language (CQL) : Oracle CEP Visualizer Query Wizard を使用して、イベント ストリームを処理するさまざまな Oracle CQL クエリを作成する方法を示すサンプル。
これらのサンプルは次の 2 つの形式で提供されます。
サンプルでは Ant を開発ツールとして使用しています。Ant の詳細とコンピュータへのインストールについては、http://ant.apache.org/
を参照してください。
アセンブルしたアプリケーションをデプロイするための、すぐに使用できるサンプル ドメインが事前にコンフィグレーションされています。わかりやすくするために、サンプルごとに固有のドメインが用意されています。各ドメインはスタンドアロンのサーバ ドメインです。サーバ ファイルは、ドメイン ディレクトリの defaultserver
サブディレクトリに格納されます。アプリケーションをデプロイするには、ドメインのデフォルト サーバを起動するだけです。
サンプルの helloworld ドメインは、ORACLE_CEP_HOME
\ocep_11.1\samples\domains\helloworld_domain
にあります。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
詳細については、節 3.6.1「helloworld ドメインから実行する HelloWorld のサンプル」を参照してください。
外国為替取引ドメインのサンプルは、ORACLE_CEP_HOME
\ocep_11.1\samples\domains\fx_domain
にあります。
詳細については、節 3.7.1「外国為替取引のサンプルの実行」を参照してください。
シグナル生成ドメインのサンプルは、ORACLE_CEP_HOME
\ocep_11.1\samples\domains\signalgeneration_domain
にあります。
詳細については、節 3.8.1「シグナル生成のサンプルの実行」を参照してください。
記録と再生ドメインのサンプルは、ORACLE_CEP_HOME
\ocep_11.1\samples\domains\recplay_domain
にあります。
詳細については、節 3.9.1「イベントの記録/再生のサンプルの実行」を参照してください。
CQL ドメインのサンプルは、ORACLE_CEP_HOME
\ocep_11.1\samples\domains\cql_domain
にあります。
詳細については、節 3.10.1「CQL のサンプルの実行」を参照してください。
各サンプルの Java ソースとコンフィグレーション XML ソースは、サンプルの開発環境を示す個別のソース ディレクトリで提供されます。
HelloWorld ソース ディレクトリは、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\helloworld
にあります。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
詳細については、節 3.6.4「HelloWorld のサンプルの実装」を参照してください。
外国為替取引のソース ディレクトリは、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\fx
にあります。
詳細については、節 3.7.4「FX のサンプルの実装」を参照してください。
シグナル生成のソース ディレクトリは、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\signalgeneration
にあります。
詳細については、節 3.8.4「シグナル生成のサンプルの実装」を参照してください。
記録と再生のソース ディレクトリは、ORACLE_CEP_HOME
\ocep_11.1\\samples\source\applications\recplay
にあります。
詳細については、節 3.9.4「記録と再生のサンプルの実装」を参照してください。
CQL のソース ディレクトリは、ORACLE_CEP_HOME
\ocep_11.1\\samples\source\applications\cql
にあります。
詳細については、節 3.10.4「CQL のサンプルの実装」を参照してください。
Oracle CEP を初めてインストールする場合、サンプルをインストールするには、[Custom
] オプションを選択する必要があります。[Typical
] オプションでは、サンプルは含まれません。
以前に [Typical
] オプションを使用して Oracle CEP をインストールしている場合に、サンプルもインストールするには、Oracle CEP インストール プロセスを再実行し、同じ Oracle CEP ホーム ディレクトリを指定します。インストール プロセスの後半のステップで、サンプルのみをインストールできます。
Oracle CEP Visualizer は、Oracle CEP からのデータを使用し、そのデータを便利で直感的な方法でシステム管理者やオペレータに表示し、さらに特定のタスクにおいてコンフィグレーションの変更を行うために受け入れたデータを再び Oracle CEP に返す Web 2.0 アプリケーションです。
Visualizer 自身は各サーバ インスタンスに自動的にデプロイされる Oracle CEP アプリケーションです。サンプルで Visualizer を使用するには、以下の各サンプルに示されている手順に従ってサーバを起動済みであることを確認し、ブラウザで次の URL を起動します。
http://host:9002/wlevs
host
は、Oracle CEP をホストするコンピュータ名です。ブラウザを実行しているのと同じコンピュータである場合は、localhost
とすることができます。
HelloWorld アプリケーションではセキュリティが無効になるため、ログイン画面でユーザ名とパスワードを入力せずに [Logon] をクリックできます。ただし、FX およびシグナル生成のサンプルでは、セキュリティが有効になるため、以下の情報を使用してログインします。
User Id : wlevs Password : wlevs
Visualizer の詳細については、節 1.8「Oracle CEP Visualizer」を参照してください。
サンプルおよび Oracle CEP アプリケーション全般について、実行時のスループットとレイテンシを向上させるには、次の処理をお勧めします。
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用し、該当するドメインの Oracle CEP インスタンスを起動するコマンドに -dgc
パラメータを渡して、確定的ガベージ コレクタを有効にします。
prompt> startwlevs.cmd -dgc
デフォルトでは、サンプルの確定的ガベージ コレクタは無効になっています。
Oracle JRockit Real Time 3.0 の詳細については、http://www.oracle.com/technology/products/jrockit/jrrt/index.html
を参照してください。
メモリ容量の大きいコンピュータで Oracle CEP を実行している場合は、コンピュータの容量に合わせて load generator とサーバのヒープ サイズを適切に設定する必要があります。十分なメモリ容量のコンピュータでは、サーバのヒープ サイズを 1GB、load generator のヒープ サイズを 512MB ~ 1GB とすることをお勧めします。
Oracle CEP インスタンスを起動してサンプルを実行する前に、開発環境を設定する必要があります。特に、正しいバージョンの JRockit JDK を使用するように PATH
および JAVA_HOME
環境変数を設定する必要があります。
JRockit をコンピュータにインストールするときに使用された可能性がある方法として、次の 2 つの方法があります。
Oracle JRockit Real Time 3.0 インストールの一部としてのインストール。このバージョンの JRockit JDK には確定的ガベージ コレクタが含まれています。
Oracle CEP リリース 11gR1 (11.1.1) インストールの一部としてのインストールこのバージョンの JRockit JDK には確定的ガベージ コレクタが含まれていません。このバージョンはテスト目的専用に提供されています。
アプリケーションのコンポーネント コンフィグレーション ファイルでは必須ではありませんが、最適な結果を得るためには、Oracle JRockit Real Time 3.0 に含まれる JRockit JDK バージョンを使用して Oracle CEP を実行することをお勧めします。以下の手順では、いずれの場合にも適用できる環境の設定方法を説明します。
JRockit の詳細については、節 3.4「サンプルのパフォーマンスの向上」を参照してください。
この節では、以下の内容について説明します。
この手順では、Windows で開発環境を設定する方法について説明します。
setEnv.cmd
などのコマンド ファイルを作成して、この節で説明する set
コマンドを指定しておくと、セッションからログアウトした後に開発環境を簡単にリセットできます。
Windows コンピュータで、[コントロール パネル|システム] ウィンドウを呼び出し、[詳細設定] タブ、[環境変数] ボタンの順にクリックして、必要な環境変数を永続的に設定することもできます。環境変数は、現在のユーザに対して、またはシステム全体に対して設定できます。
Windows で開発環境を設定するには、次の手順に従います。
JRockit JDK の bin
ディレクトリを含むように PATH
環境変数を更新します。また、PATH
環境変数に Ant のインストール先の bin
ディレクトリが含まれていることを確認してください。
Oracle JRockit Real Time 3.0 と一緒にインストールされた JRockit JDK を使用する場合
Oracle JRockit Real Time 3.0 が d:\jrockit
ディレクトリにインストールされていて、Ant が d:\ant
ディレクトリにインストールされている場合は、PATH 環境変数を次のように設定します。
prompt> set PATH=d:\jrockit\jrrt-3.0.0-1.6.0\bin;d:\ant\bin;%PATH%
Oracle CEP リリース 11gR1 (11.1.1) と一緒にインストールされた JRockit JDK を使用する場合
Oracle CEP が d:\oracle_cep
ディレクトリにインストールされていて、Ant が d:\ant
ディレクトリにインストールされている場合は、PATH
環境変数を次のように設定します。
prompt> set PATH=d:\oracle_cep\jrockit-R27.6.0-50-1.6.0_05\bin;d:\ant\bin;%PATH%
サーバ起動スクリプトの JAVA_HOME
変数が正しい JRockit JDK を参照していることを確認します。正しくない場合は、スクリプトを編集します。
サーバ起動スクリプト (startwlevs.cmd
) は、メイン ドメイン ディレクトリの defaultserver
サブディレクトリにあります。defaultserver
サブディレクトリには、各ドメインのスタンドアロン サーバのファイルが含まれます。たとえば、HelloWorld ドメインは、ORACLE_CEP_HOME
\ocep_11.1\samples\domains\helloworld_domain
にあります。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
Oracle JRockit Real Time 3.0 と一緒にインストールされた JRockit JDK を使用する場合
set
コマンドを次のように指定します。
set JAVA_HOME=d:\jrockit\jrrt-3.0.0-1.6.0
Oracle CEP リリース 11gR1 (11.1.1) と一緒にインストールされた JRockit JDK を使用する場合
set
コマンドを次のように指定します。
set JAVA_HOME=d:\oracle_cep\jrockit-R27.6.0-50-1.6.0_05
独自の開発環境の JAVA_HOME
変数を、JRockit JDK を参照するように設定します。
Oracle JRockit Real Time 3.0 と一緒にインストールされた JRockit JDK を使用する場合
set
コマンドを次のように指定します。
prompt> set JAVA_HOME=d:\jrockit\jrrt-3.0.0-1.6.0
Oracle CEP リリース 11gR1 (11.1.1) と一緒にインストールされた JRockit JDK を使用する場合
set
コマンドを次のように指定します。
prompt> set JAVA_HOME=d:\oracle_cep\jrockit-R27.6.0-50-1.6.0_05
この手順では、UNIX で開発環境を設定する方法について説明します。
setEnv.sh
などのコマンド ファイルを作成して、この節で説明する set
コマンドを指定しておくと、セッションからログアウトした後に開発環境を簡単にリセットできます。
UNIX で開発環境を設定するには、次の手順に従います。
JRockit JDK の bin
ディレクトリを含むように PATH
環境変数を更新します。また、PATH
環境変数に Ant のインストール先の bin
ディレクトリが含まれていることを確認してください。
Oracle JRockit Real Time 3.0 と一緒にインストールされた JRockit JDK を使用する場合
Oracle JRockit Real Time が /jrockit
ディレクトリにインストールされていて、Ant が /ant
ディレクトリにインストールされている場合は、PATH
環境変数を次のように設定します。
prompt> PATH=/jrockit/jrrt-3.0.0-1.6.0/bin:/ant/bin:$PATH
Oracle CEP 10.3 と一緒にインストールされた JRockit JDK を使用する場合
Oracle CEP が /oracle_cep
ディレクトリにインストールされていて、Ant が /ant
ディレクトリにインストールされている場合は、PATH
環境変数を次のように設定します。
prompt> PATH=/oracle_cep/jrockit-R27.6.0-50-1.6.0_05/bin:/ant/bin:$PATH
サーバ起動スクリプトの JAVA_HOME
変数が正しい JRockit JDK を参照していることを確認します。正しくない場合は、スクリプトを編集します。
サーバ起動スクリプト (startwlevs.sh
) は、メイン ドメイン ディレクトリの defaultserver
サブディレクトリにあります。defaultserver
サブディレクトリには、各ドメインのスタンドアロン サーバのファイルが含まれます。たとえば、HelloWorld ドメインは、ORACLE_CEP_HOME
/ocep_11.1/samples/domains/helloworld_domain
にあります。ORACLE_CEP_HOME
は、/oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
Oracle JRockit Real Time 3.0 と一緒にインストールされた JRockit JDK を使用する場合
JAVA_HOME
変数を次のように設定します。
JAVA_HOME=/jrockit/jrrt-3.0.0-1.6.0
Oracle CEP リリース 11gR1 (11.1.1) と一緒にインストールされた JRockit JDK を使用する場合
JAVA_HOME
変数を次のように設定します。
JAVA_HOME=/oracle_cep/jrockit-R27.6.0-50-1.6.0_05
開発環境の JAVA_HOME
変数を、JRockit JDK を参照するように設定します。
Oracle JRockit Real Time 3.0 と一緒にインストールされた JRockit JDK を使用する場合
JAVA_HOME
変数を次のように設定します。
prompt> JAVA_HOME=/jrockit/jrrt-3.0.0-1.6.0
Oracle CEP リリース 11gR1 (11.1.1) と一緒にインストールされた JRockit JDK を使用する場合
JAVA_HOME
変数を次のように設定します。
prompt> JAVA_HOME=/oracle_cep/jrockit-R27.6.0-50-1.6.0_05
Oracle CEP アプリケーションの作成方法を示す最初のサンプルは、広く知られている HelloWorld です。
図 3-1 は、HelloWorld のサンプルのイベント処理ネットワーク (EPN) を示します。EPN は、アプリケーションを構成する各コンポーネントと、それらの連結を示しています。
このサンプルには次のコンポーネントが含まれています。
helloworldAdapter
- Hello World というメッセージを毎秒生成するコンポーネント。実世界のシナリオでは、このコンポーネントは通常、ソース (金融機関から送られてくるデータなど) からデータ ストリームを読み込み、読み込んだデータ ストリームを複合イベント プロセッサで処理できるイベント ストリームに変換します。HelloWorld アプリケーションには、HelloWorldAdapter
のインスタンスを作成する HelloWorldAdapterFactory
も含まれています。
helloworldInputChannel
- アダプタで生成されたイベント (この場合、Hello World のメッセージ) を複合イベント プロセッサに送信するコンポーネント。
helloworldProcessor
- 単純に、helloworldAdapter
コンポーネントから受け取ったメッセージをビジネス ロジックを含む POJO に転送するコンポーネント。実世界のシナリオでは、このコンポーネントは通常、ストリームから受け取ったイベントに対して追加の処理やはるかに複雑な処理を実行します。たとえば、Oracle CQL を使用して、プロパティ値に基づいてイベントのサブセットを選択する処理や、イベントをグループ化する処理があります。
helloworldOutputChannel
- 複合イベント プロセッサで処理されたイベントを、ユーザ定義のビジネス ロジックを含む POJO に送るコンポーネント。
helloworldBean
- 出力チャネルを経由してプロセッサからひとまとまりのメッセージを受け取るたびに、単純にメッセージを出力する POJO コンポーネント。実世界のシナリオでは、このコンポーネントにはアプリケーションのビジネス ロジックが含まれます。例として、プロセッサから受け取ったイベントに関するレポートを実行するロジックや、適切な電子メールまたはアラートを送信するロジックがあります。
HelloWorld アプリケーションは、helloworld
ドメインにあらかじめデプロイされています。アプリケーションを実行するには、Oracle CEP サーバのインスタンスを起動するだけです。
helloworld ドメインから HelloWorld のサンプルを実行するには、次の手順に従います。
コマンド ウィンドウを開き、ORACLE_CEP_HOME
\ocep_11.1\samples\domains\helloworld_domain\defaultserver
にある helloworld ドメイン ディレクトリのデフォルト サーバ ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
prompt> cd d:\oracle_cep\ocep_11.1\samples\domains\helloworld_domain\defaultserver
サーバ起動スクリプトで環境が正しく設定されていることを確認します。
詳細については、節 3.5「開発環境の設定」を参照してください。
正しいコマンドライン引数を使用して適切なスクリプトを実行し、Oracle CEP を起動します。
Windows の場合
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc
パラメータを渡して確定的ガベージ コレクタを有効にします。
prompt> startwlevs.cmd -dgc
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合
prompt> startwlevs.cmd
UNIX の場合
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc
パラメータを渡して確定的ガベージ コレクタを有効にします。
prompt> startwlevs.sh -dgc
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合
prompt> startwlevs.sh
サーバ ステータス メッセージがスクロールされた後、約 1 秒ごとに次のメッセージが出力されます。
Message: HelloWorld - the current time is: 3:56:57 PM
このメッセージは、HelloWorld のサンプルが正しく実行されていることを示しています。
HelloWorld サンプルのソース ディレクトリには、Java ソースと、HelloWorld アプリケーションを構成する他の必須リソース (コンフィグレーション XML ファイルなど) が含まれます。build.xml
Ant ファイルには、アプリケーションをビルドして helloworld ドメインにデプロイするためのターゲットが含まれています。
詳細については、節 3.6.3「Hello World をビルドする Ant ターゲットの説明」を参照してください。
ソース ディレクトリから HelloWorld のサンプルをビルドおよびデプロイするには、次の手順に従います。
helloworld の Oracle CEP インスタンスがまだ実行されていない場合は、節 3.6.1「helloworld ドメインから実行する HelloWorld のサンプル」の手順に従ってサーバを起動します。
再ビルドしたアプリケーションを正常にデプロイするには、サーバが実行中である必要があります。
新しいコマンド ウィンドウを開き、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\helloworld
にある HelloWorld ソース ディレクトリに移動します。ORACLE_CEP_HOME
は Oracle CEP がインストールされているディレクトリです。
例を示します。
prompt> cd d:\oracle_cep\ocep_11.1\samples\source\applications\helloworld
開発環境を設定します。
詳細については、節 3.5「開発環境の設定」を参照してください。
all
Ant ターゲットを実行してアプリケーションをコンパイルし、JAR ファイルを作成します。
prompt> ant all
deploy
Ant ターゲットを実行してアプリケーション JAR ファイルを Oracle CEP にデプロイします。
prompt> ant -Daction=update deploy
注意 : このターゲットは、ドメイン ディレクトリにある既存の helloworld アプリケーション JAR ファイルを上書きします。 |
出力先に約 1 秒ごとに次のメッセージが出力されます。
Message: HelloWorld - the current time is: 3:56:57 PM
このメッセージは、HelloWorld のサンプルが再デプロイされ、正しく実行されていることを示しています。
HelloWorld ソース ディレクトリの最上位レベルにある build.xml
ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。
clean
- このターゲットは、現在のディレクトリの下にある dist
および output
作業ディレクトリを削除します。
all
- このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.helloworld_3.0.0.0.jar
という JAR ファイルを生成し、生成した JAR ファイルを現在のディレクトリの下の dist
ディレクトリに格納します。
deploy
- このターゲットは、Deployer ユーティリティを使用して JAR ファイルを Oracle CEP にデプロイします。
詳細については、『Oracle CEP 管理者ガイド』の「Deployer コマンドライン リファレンス」を参照してください。
HelloWorld のサンプルを実装するには、通常、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP アプリケーションの作成 : 一般的な手順」に従います。
タスク指向の手順を示して一般的な開発プロセスを説明している節を参照してください。
HelloWorld のサンプルは比較的単純であるため、Oracle CEP アプリケーションを作成するための一般的な手順で説明されているすべてのコンポーネントやコンフィグレーション ファイルを使用するわけではありません。
このサンプルで使用するすべてのファイルは、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\helloworld
ディレクトリを基準にして相対的な場所にあります。ORACLE_CEP_HOME
は、c:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお勧めします。ただし、これは必須条件ではありません。
HelloWorld のサンプルで使用するファイルは次のとおりです。
アプリケーションの各コンポーネントと、すべてのコンポーネントの接続方法を記述した EPN アセンブリ ファイル。EPN アセンブリ ファイルは標準の Spring コンテキスト ファイルを拡張します。また、このファイルはアプリケーションで使用されるイベント タイプを登録します。この XML ファイルを Oracle CEP アプリケーションに組み込む必要があります。
サンプルでは、このファイルは com.bea.wlevs.example.helloworld-context.xml
という名前で、META-INF/spring
ディレクトリにあります。
詳細については、節 3.6.5「HelloWorld EPN アセンブリ ファイル」を参照してください。
helloworldAdapter
コンポーネントの Java ソース ファイル。
サンプルでは、このファイルは HelloWorldAdapter.java
という名前で、src/com/bea/wlevs/adapter/example/helloworld
ディレクトリにあります。
このファイルの詳細な説明と、アダプタの Java ファイルの一般的なプログラミング方法については、『Oracle CEP IDE Eclipse 開発者ガイド』の「イベント ソースとしてのアダプタおよびイベント Bean クラスのプログラミング : ガイドライン」を参照してください。
HelloWorldEvent
イベント タイプを記述した Java ソース ファイル。
サンプルでは、このファイルは HelloWorldEvent.java
という名前で、src/com/bea/wlevs/event/example/helloworld
ディレクトリにあります。
このファイルの詳細な説明と、イベント タイプのプログラミングの概要については、『Oracle CEP IDE Eclipse 開発者ガイド』の「イベント タイプの作成」を参照してください。
helloworldProcessor
および helloworldOutputChannel
コンポーネントをコンフィグレーションする XML ファイル。このファイルの重要な部分は、HelloWorld アプリケーションで処理するイベント セットを選択するための EPL ルール セットです。プロセッサ コンフィグレーション ファイルを Oracle CEP アプリケーションに組み込む必要があります。アダプタとチャネルのコンフィグレーションは省略可能です。
サンプルでは、このファイルは config.xml
という名前で、META-INF/wlevs
ディレクトリにあります。
詳細については、節 3.6.6「HelloWorld コンポーネント コンフィグレーション ファイル」を参照してください。
アプリケーションの helloworldBean
コンポーネント (ビジネス ロジックを含む POJO) を実装する Java ファイル。
サンプルでは、このファイルは HelloWorldBean.java
という名前で、src/com/bea/wlevs/example/helloworld
ディレクトリにあります。
このファイルの詳細な説明と、イベント シンクのプログラミングの概要については、『Oracle CEP IDE Eclipse 開発者ガイド』の「イベント シンクのプログラミング : ガイドライン」を参照してください。
Oracle CEP にデプロイされる OSGi バンドルのコンテンツを記述した MANIFEST.MF
ファイル。
サンプルでは、MANIFEST.MF
ファイルが META-INF
ディレクトリにあります。
このファイルの作成方法と、Oracle CEP にデプロイする OSGi バンドルの作成方法については、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP アプリケーションのアセンブル : 主な手順」を参照してください。
HelloWorld のサンプルでは、OSGi バンドルのコンパイル、アセンブリ、およびデプロイに build.xml
Ant ファイルを使用します。開発環境でも Ant を使用する場合、この build.xml
ファイルの詳細については、節 3.6.2「ソース ディレクトリからビルドおよびデプロイする HelloWorld のサンプル」を参照してください。
EPN アセンブリ ファイルの主な目的の 1 つは、アプリケーションのコンポーネントを宣言してイベント処理ネットワークを定義し、これらすべてのコンポーネントの接続方法、つまりどのコンポーネントが他のどのコンポーネントをリスンするかを定義することです。Oracle CEP には、ネットワークの宣言に使用するカスタム Spring タグのセットが用意されています。また、EPN アセンブリ ファイルは、アプリケーションで使用するイベント タイプとアプリケーションの EPL ルールを登録するためにも使用します。
EPN アセンブリ ファイルを通常の方法で使用して、 Spring アプリケーション コンテキストで アプリケーション コンポーネント Bean を定義します。アプリケーション コンポーネント Bean は、 Java クラスで実装される「アダプタ」や 「ビジネス ロジックを含む POJO」などです。
詳細については、以下を参照してください。
『Oracle CEP 管理者ガイド』の「Oracle CEP アプリケーション アセンブリ タグ リファレンス」
『Oracle CEP 管理者ガイド』の「Oracle CEP ファイルの XSD スキーマ リファレンス」
例 3-1 は、HelloWorld サンプル アプリケーションで使用する EPN アセンブリ ファイルを示します。太字のエントリの詳細については、サンプルの後にある説明を参照してください。
例 3-1 HelloWorld 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_0_0_0.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:channel id="helloworldInstream" > <wlevs:listener ref="helloworldProcessor"/> <wlevs:source ref="helloworldAdapter"/> </wlevs:channel> <wlevs:channel id="helloworldOutstream" manageable="true"> <wlevs:listener> <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/> </wlevs:listener> <wlevs:source ref="helloworldProcessor"/> </wlevs:channel> </beans>
上記の例では、以下のことが行われます。
wlevs:event-type-repository
要素は、アプリケーション全体で使用するイベント タイプを登録します。HelloWorld アプリケーションには、イベント タイプが 1 つしか存在しません。このイベント タイプは、com.bea.wlevs.event.example.helloworld.HelloWorldEvent
クラスで実装される HelloWorldEvent
です。Oracle CEP は、必要に応じてこのデータ型のインスタンスを自動的に作成します。アプリケーションの EPL ルールでもこのデータ型を参照できます。
wlevs:adapter
、wlevs:processor
、および wlevs:channel
要素は、ネットワークの各コンポーネントを宣言することによって、イベント処理ネットワークを共に定義します。
wlevs:adapter
要素は、HelloWorld アプリケーションのアダプタ コンポーネントを定義します。
<wlevs:adapter id="helloworldAdapter" class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter" > <wlevs:instance-property name="message" value="HelloWorld - the currenttime is:"/> </wlevs:adapter>
id
属性は、このコンポーネントのユニークな識別子を指定します。id は、他のコンポーネントによって後で参照されます。class
属性で指定するクラスは、アダプタを実装します。この場合は com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter
です。
wlevs:instance-property
子要素は、インスタンスの変数をアダプタ インスタンスに渡します。変数の名前は message
で、値は HelloWorld - the current time is:
です。
wlevs:processor
要素は、アプリケーションのプロセッサ コンポーネントを定義します。
<wlevs:processor id="helloworldProcessor" />
id
属性は、wlevs:adapter
要素の属性と同じように機能します。
wlevs:channel
要素は、アプリケーションの 2 つのチャネル コンポーネントを定義します。
<wlevs:channel id="helloworldInstream" > <wlevs:listener ref="helloworldProcessor"/> <wlevs:source ref="helloworldAdapter"/> </wlevs:channel> <wlevs:channel id="helloworldOutstream" manageable="true"> <wlevs:listener> <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/> </wlevs:listener> <wlevs:source ref="helloworldProcessor"/> </wlevs:channel>
ストリームの id
属性は、wlevs:adapter
の属性と同様に機能します。manageable
属性は、チャネルのモニタを有効にします。コンポーネントの管理容易性はデフォルトで無効になっています。
id="helloworldInstream
を持つ wlevs:channel
要素は、wlevs:listener
子要素を使用して、helloworldProcessor
がチャネルをリスンするように指定します。また、wlevs:source
子要素を使用して、チャネルが helloworldAdapter
コンポーネントからイベントを取得するように指定します。
id="helloworldOutstream
を持つ wlevs:channel
要素も、これらの listener タグと source タグを使用します。ただし、1 つ異なる点として、helloworldOutstream タグはユニークな識別子を参照するのではなく、wlevs:listener
要素でビジネス ロジック POJO の定義を直接ネストします。この場合、ネストされたタグは、POJO が com.bea.wlevs.example.helloworld.HelloWorldBean
クラスで実装されることを指定する Spring 標準の bean
要素です。
HelloWorld アプリケーションのコンポーネント コンフィグレーション ファイルでは、ストリームの 1 つとプロセッサを例 3-2 に示すようにコンフィグレーションしています。
例 3-2 HelloWorld コンポーネント コンフィグレーション ファイル
<?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>helloworldProcessor</name> <rules> <query id="helloworldRule"> <![CDATA[ select * from helloworldInputChannel [Now] ]]> </query> </rules> </processor></n1:config>
アプリケーションに複数のプロセッサ、アダプタ、またはストリームがある場合は、それらすべてを 1 つのコンフィグレーション ファイルで宣言することも、コンポーネントごとに個別のコンフィグレーション ファイルを作成することもできます。どちらか管理しやすい方法を選択してください。
コンフィグレーションするコンポーネントごとに name
子要素を追加し、参照する特定のコンポーネントを明示的に宣言する必要があります。name
要素の値は、EPN アセンブリ ファイルで宣言したコンポーネントのユニークな識別子に対応している必要があります。
たとえば、プロセッサが EPN アセンブリ ファイルで次のように宣言されているとします。
<wlevs:processor id="helloworldProcessor" ...>
対応する XML コンフィグレーションは次のようになります。
<processor> <name>helloworldProcessor</name> ... </processor>
HelloWorld のサンプルでは、helloworldProcessor
という名前の 1 つのプロセッサに対して、1 つのコンフィグレーション ファイルを使用します。この名前は EPN アセンブリ ファイルでのコンポーネントの宣言に対応しています。
processor
要素は、プロセッサ コンポーネントをコンフィグレーションします。プロセッサ コンフィグレーションの重要な部分は、このプロセッサで実行する Oracle Continuous Query Language (Oracle CQL) のルール セットの宣言です。これらのルールは最終的にアプリケーション ビジネス オブジェクトに渡されるイベント セットを選択します。各ルールは、XML の <![CDATA[...]]>
セクションを使用して query
または relation
要素で宣言されます。すべての query
および relation
要素は単一の rules
要素によってグループ化されます。特定のプロセッサ用に必要な数だけルールを定義できます。
HelloWorld アプリケーションには、ごく単純なルールが 1 つあるだけです。
select * from helloworldInputChannel [Now]
この時間ベースの範囲枠は出力リレーションを定義します。つまり、T = 0
の場合、時間 t
のリレーションはタイムスタンプ t
を持つ helloworldInputChannel
の要素で取得されたタプルで構成されます。
Oracle CEP クエリ言語の使用に関する追加情報およびサンプルについては、以下を参照してください。
注意 : Oracle EPL は Oracle CQL に取って代わられます。 |
外国為替取引のサンプル (簡単に FX と呼びます) は、複数のデータ フィードから読み込んだ情報を処理するために複数のプロセッサを使用しているので、HelloWorld のサンプルよりも複雑です。FX のサンプルでは、Oracle CEP load generator ユーティリティを使用してデータ フィードをシミュレートします。
図 3-2 は、FX のサンプルのイベント処理ネットワーク (EPN) を示します。EPN は、アプリケーションを構成する各コンポーネントと、それらの連結を示しています。
シナリオでは、load generator を使用してシミュレートした 3 つのデータ フィードにより、世界各地から定数の値のペアが送信されます。値のペアは通貨を組み合わせたもので、たとえば USDEUR は米ドルと欧州ユーロの組み合わせを表します。値のペアと共に 2 つの通貨間の為替レートも送信されます。fxMarketXXX
アダプタはフィードからデータを受信し、受信したデータをイベントに変換して preprocessorXXX
プロセッサに渡します。各プロセッサは、初期期限切れチェックを実行し、発生からの経過時間が 10 秒を超えているイベントがないことを確認します。さらに境界チェックを実行し、2 つの通貨間の為替レートが現在の境界の範囲内にあることを確認します。サーバは、特定のチャネルから特定の通貨のペアのみを選択します。たとえば、シミュレートされた米国のデータ フィードからは USDEUR を選択し、USDAUD (オーストラリア ドル) などの他のすべてのペアを拒否します。
各データ フィード プロバイダからのデータがこの初期準備フェーズを通過すると、spreader
という別のプロセッサが、すべてのプロバイダのすべてのイベントを結合し、最大レートと最小レートの中間点を計算して、トレーダが指定したスプレッドを適用します。最後に、プロセッサはビジネス コードを含む POJO にレートを転送します。このサンプルでは、POJO は単純にレートをクライアントにパブリッシュします。
Oracle CEP モニタは、直前のステップのイベント レイテンシが特定のしきい値を超えていないか (たとえば、30 秒という時間内に更新されたレートがないか)、また同じ通貨のペアで 2 つの連続的なレート間の偏差が大きすぎないかを監視するようにコンフィグレーションされています。最後に、通貨の各ペアの直前のレートがダッシュボードに転送されます。
最適なデモンストレーションの目的のためには、複数の CPU または 3GHz のデュアルコア Intel と 2GB 以上の RAM を搭載した強力なコンピュータでこのサンプルを実行することをお勧めします。
外国為替取引 (FX) アプリケーションは、fx_domain
ドメインにあらかじめデプロイされています。アプリケーションを実行するには、Oracle CEP サーバのインスタンスを起動するだけです。
外国為替取引のサンプルを実行するには、次の手順に従います。
コマンド ウィンドウを開き、ORACLE_CEP_HOME
\ocep_11.1\samples\domains\fx_domain\defaultserver
にある fx ドメイン ディレクトリのデフォルトのサーバ ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
prompt> cd d:\oracle_cep\ocep_11.1\samples\domains\fx_domain\defaultserver
節 3.5「開発環境の設定」の説明に従って、開発環境を設定します。
正しいコマンドライン引数を使用して適切なスクリプトを実行し、Oracle CEP を起動します。
Windows の場合
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc
パラメータを渡して確定的ガベージ コレクタを有効にします。
prompt> startwlevs.cmd -dgc
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合
prompt> startwlevs.cmd
UNIX の場合
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc
パラメータを渡して確定的ガベージ コレクタを有効にします。
prompt> startwlevs.sh -dgc
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合
prompt> startwlevs.sh
これで、FX アプリケーションでデータ フィードからデータを受信する準備ができました。
米国のデータ フィードをシミュレートするには、新しいコマンド ウィンドウを開き、節 3.5「開発環境の設定」の説明に従って環境を設定します。
ORACLE_CEP_HOME
\ocep_11.1\utils\load-generator
ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
fxAmer.prop
プロパティ ファイルを使用して load generator を実行します。
Windows の場合
prompt> runloadgen.cmd fxAmer.prop
UNIX の場合
prompt> runloadgen.sh fxAmer.prop
fxAsia.prop
プロパティ ファイルを使用して手順 4 ~ 6 を繰り返し、アジアのデータ フィードをシミュレートします。
Windows の場合
prompt> runloadgen.cmd fxAsia.prop
UNIX の場合
prompt> runloadgen.sh fxAsia.prop
fxEuro.prop
プロパティ ファイルを使用して手順 4 ~ 6 を繰り返し、ヨーロッパのデータ フィードをシミュレートします。
Windows の場合
prompt> runloadgen.cmd fxEuro.prop
UNIX の場合
prompt> runloadgen.sh fxEuro.prop
サーバを起動したコマンド ウィンドウでサーバ ステータス メッセージがスクロールされ、3 つの load generator が起動した後、サーバ コマンド ウィンドウに次のようなメッセージが出力されます。
OutputBean:onEvent() + <TupleValue><EventType>SpreaderOuputEvent</EventType><ObjectName>FindCrossRatesRule</ObjectName><Timestamp>1843704855846</Timestamp><TupleKind>null</TupleKind><DoubleAttribute><Value>90.08350000074516</Value></DoubleAttribute><CharAttribute><Value>USD</Value><Length>3</Length></CharAttribute><CharAttribute><Value>JPY</Value><Length>3</Length></CharAttribute><IsTotalOrderGuarantee>false</IsTotalOrderGuarantee></TupleValue>
これらのメッセージは、外国為替取引のサンプルが正しく実行されていることを示しています。出力では、米ドル対日本円および米ドル対英国ポンドのクロス レートが示されています。
外国為替取引 (FX) サンプルのソース ディレクトリには、Java ソースと、FX アプリケーションを構成する他の必須リソース (コンフィグレーション XML ファイルなど) が含まれます。build.xml
Ant ファイルには、アプリケーションをビルドして fx_domain ドメインにデプロイするためのターゲットが含まれています (節 3.7.3「FX をビルドする Ant ターゲットの説明」を参照)。
外国為替取引のサンプルをソース ディレクトリからビルドおよびデプロイするには、以下の手順を実行します。
FX の Oracle CEP インスタンスがまだ実行されていない場合は、節 3.7.1「外国為替取引のサンプルの実行」の手順に従ってサーバを起動します。
再ビルドしたアプリケーションを正常にデプロイするには、サーバが実行中である必要があります。
新しいコマンド ウィンドウを開き、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\fx
にある FX ソース ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
prompt> cd d:\oracle_cep\ocep_11.1\samples\source\applications\fx
節 3.5「開発環境の設定」の説明に従って、開発環境を設定します。
all
Ant ターゲットを実行してアプリケーションをコンパイルし、JAR ファイルを作成します。
prompt> ant all
deploy
Ant ターゲットを実行してアプリケーション JAR ファイルを Oracle CEP にデプロイします。
prompt> ant -Dusername=wlevs -Dpassword=wlevs -Daction=update deploy
注意 : このターゲットは、ドメイン ディレクトリにある既存の FX アプリケーション JAR ファイルを上書きします。 |
FX アプリケーションで必要な load generator が実行されていない場合は、節 3.7.1「外国為替取引のサンプルの実行」の説明に従って起動します。
サーバ ステータス メッセージがスクロールされた後、出力先に次のメッセージが出力されます。
{crossRate=USDJPY, internalPrice=119.09934499999781}, {crossRate=USDGBP, internalPrice=0.5031949999999915}, {crossRate=USDJPY, internalPrice=117.73945624999783}
このメッセージは、FX のサンプルが再デプロイされ、正しく実行されていることを示しています。
FX ソースの最上位レベル ディレクトリにある build.xml
ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。
clean
- このターゲットは、現在のディレクトリの下にある dist
および output
作業ディレクトリを削除します。
all
- このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.fx_3.0.0.0.jar
という JAR ファイルを生成し、生成した JAR ファイルを現在のディレクトリの下の dist
ディレクトリに格納します。
deploy
- このターゲットは、Deployer ユーティリティを使用して JAR ファイルを Oracle CEP にデプロイします。
詳細については、『Oracle CEP 管理者ガイド』の「Deployer コマンドライン リファレンス」を参照してください。
外国為替取引 (FX) のサンプルを実装するには、通常、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP アプリケーションの作成 : 一般的な手順」に従います。
タスク指向の手順を示して一般的な開発プロセスを説明している節を参照してください。
FX のサンプルで使用するすべてのファイルは、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\fx
ディレクトリを基準にして相対的な場所にあります。ORACLE_CEP_HOME
は、c:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお勧めします。ただし、これは必須条件ではありません。
FX のサンプルで使用するファイルは次のとおりです。
アプリケーションの各コンポーネントと、すべてのコンポーネントの接続方法を記述した EPN アセンブリ ファイル。この XML ファイルを Oracle CEP アプリケーションに組み込む必要があります。
サンプルでは、このファイルは com.bea.wlevs.example.fx-context.xml
という名前で、META-INF/spring
ディレクトリにあります。
詳細については、節 3.7.5「FX EPN アセンブリ ファイル」を参照してください。
アプリケーションのプロセッサ コンポーネントをコンフィグレーションする 2 つの XML ファイル。
1 つ目の XML ファイルは、preprocessorAmer
、preprocessorAsia
、および preprocessorEuro
コンポーネントをすべて 1 つのファイルにコンフィグレーションします。この XML ファイルは、シミュレートされた特定のマーケット フィードから特定の通貨ペアを選択する EPL ルールを含み、サンプルの概要で説明している境界条件を実行します。サンプルでは、このファイルは preprocessors.xml
という名前で、META-INF/wlevs
ディレクトリにあります。
もう 1 つの XML ファイルは、spreader
プロセッサをコンフィグレーションします。このコンポーネントはプリプロセッサで選択されたすべてのイベントを結合し、特定の通貨ペアの内部価格を計算した後、クロス レートを計算します。このファイルは spreader.xml
という名前で、META-INF/wlevs
ディレクトリにあります。
詳細については、節 3.7.6「FX プロセッサ コンポーネント コンフィグレーション ファイル」を参照してください。
アプリケーションの OutputBean
コンポーネント (ビジネス ロジックを含む POJO) を実装する Java ファイル。この POJO は、受信したイベント (onEvent
メソッドでプログラミングされたもの) を画面に出力します。また、イベント タイプ リポジトリに ForeignExchangeEvent
イベント タイプを登録します。
サンプルでは、このファイルは OutputBean.java
という名前で、src/com/bea/wlevs/example/fx
ディレクトリにあります。
POJO で参照されている Oracle CEP API の詳細については、『Oracle CEP Java API Reference』を参照してください。
ForeignExchangeEvents
を生成するファクトリである ForeignExchangeBuilderFactory
を実装する Java ファイル。
サンプルでは、このファイルは ForeignExchangeBuilderFactory.java
という名前で、src/com/bea/wlevs/example/fx
ディレクトリにあります。
ForeignExchangeBuilderFactory
で参照されている Oracle CEP API の詳細については、『Oracle CEP Java API Reference』を参照してください。
Oracle CEP にデプロイされる OSGi バンドルのコンテンツを記述した MANIFEST.MF
ファイル。
サンプルでは、MANIFEST.MF
ファイルが META-INF
ディレクトリにあります。
このファイルの作成方法と、Oracle CEP にデプロイする OSGi バンドルの作成方法については、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP アプリケーションのアセンブル : 主な手順」を参照してください。
FX のサンプルでは、OSGi バンドルのコンパイル、アセンブル、およびデプロイに build.xml
Ant ファイルを使用します。開発環境でも Ant を使用する場合、この build.xml
ファイルの詳細については、節 3.7.2「ソース ディレクトリからビルドおよびデプロイする外国為替取引のサンプル」を参照してください。
EPN アセンブリ ファイルの主な目的の 1 つは、アプリケーションのコンポーネントを宣言してイベント処理ネットワークを定義し、これらすべてのコンポーネントの接続方法、つまりどのコンポーネントが他のどのコンポーネントをリスンするかを定義することです。Oracle CEP には、ネットワークの宣言に使用するカスタム Spring タグのセットが用意されています。また、EPN アセンブリ ファイルは、アプリケーションで使用するイベント タイプとアプリケーションの Oracle CQL または EPL ルールを登録するためにも使用します。
EPN アセンブリ ファイルを通常の方法で使用して、 Spring アプリケーション コンテキストで アプリケーション コンポーネント Bean を定義します。アプリケーション コンポーネント Bean は、 Java クラスで実装される「アダプタ」や 「ビジネス ロジックを含む POJO」などです。
詳細については、以下を参照してください。
『Oracle CEP 管理者ガイド』の「Oracle CEP アプリケーション アセンブリ タグ リファレンス」
『Oracle CEP 管理者ガイド』の「Oracle CEP ファイルの XSD スキーマ リファレンス」
例 X は、FX サンプル アプリケーションで使用する EPN アセンブリ ファイルを示しています。太字のエントリの詳細については、サンプルの後にある説明を参照してください。
例 3-3 FX 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_0_0_0.xsd"> <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> <!-- EPN (イベント処理ネットワーク) をアセンブルします --> <wlevs:adapter id="fxMarketAmer" provider="loadgen"> <wlevs:instance-property name="port" value="9011"/> </wlevs:adapter> <wlevs:adapter id="fxMarketAsia" provider="loadgen"> <wlevs:instance-property name="port" value="9012"/> </wlevs:adapter> <wlevs:adapter id="fxMarketEuro" provider="loadgen"> <wlevs:instance-property name="port" value="9013"/> </wlevs:adapter> <wlevs:processor id="preprocessorAmer" listeners="spreaderIn"/> <wlevs:processor id="preprocessorAsia" listeners="spreaderIn"/> <wlevs:processor id="preprocessorEuro" listeners="spreaderIn"/> <wlevs:channel id="fxMarketAmerOut"> <wlevs:listener ref="preprocessorAmer"/> <wlevs:source ref="fxMarketAmer"/> </wlevs:channel> <wlevs:channel id="fxMarketAsiaOut"> <wlevs:listener ref="preprocessorAsia"/> <wlevs:source ref="fxMarketAsia"/> </wlevs:channel> <wlevs:channel id="fxMarketEuroOut"> <wlevs:listener ref="preprocessorEuro"/> <wlevs:source ref="fxMarketEuro"/> </wlevs:channel> <wlevs:channel id="spreaderOut" manageable="true"> <wlevs:listener> <!-- ビジネス オブジェクトを作成します --> <bean id="outputBean" class="com.bea.wlevs.example.fx.OutputBean" autowire="byName"/> </wlevs:listener> </wlevs:channel> <!-- ルール コンフィグレーションをインポートできるようプロセッサ ID が認識されている必要があります --> <wlevs:processor id="spreader"> <wlevs:listener ref="spreaderOut"/> </wlevs:processor> <wlevs:channel id="spreaderIn"> <wlevs:listener ref="spreader"/> </wlevs:channel> </beans>
上記の例では、以下のことが行われます。
wlevs:event-type-repository
要素は、アプリケーション全体で使用するイベント タイプを登録します。FX アプリケーションには、イベント タイプが 1 つしか存在しません。このイベント タイプは、com.bea.wlevs.example.fx.OutputBean
POJO クラスの ForeignExchangeEvent
内部クラスで実装される ForeignExchangeEvent
です。name="builderFactory"
を含む wlevs:property
子要素は、FX アプリケーションのイベント ビルダ ファクトリ クラスが com.bea.wlevs.example.fx.ForeignExchangeBuilderFactory
によって実装されるように指定します。
Oracle CEP は、必要に応じて ForeignExchangeEvent
タイプのインスタンスを自動的に作成します。アプリケーションの EPL ルール、アダプタ Java クラス、および POJO でこのデータ型を参照できます。
wlevs:adapter
、wlevs:processor
、および wlevs:channel
要素のセットは、ネットワークの各コンポーネントを宣言することによって、イベント処理ネットワークを設定します。このネットワークは、3 つのアダプタ、4 つのプロセッサ、および 5 つのストリームで構成されます (図 3-2 を参照)。
各コンポーネントにはユニークな ID が指定されます。この ID は、他のコンポーネントがリスナとソースを宣言するときに参照することができます。
wlevs:adapter
要素は 3 つのアダプタを指定します。次に例を示します。
<wlevs:adapter id="fxMarketAmer" provider="loadgen"> <wlevs:instance-property name="port" value="9011"/> </wlevs:adapter>
各 wlevs:adapter
要素の provider="loadgen"
属性は、アダプタが Oracle CEP load generator ユーティリティからデータを取得するように指定します。wlevs:instance-property
子要素は、アダプタがリスンするポート番号を指定します。
wlevs:processor
要素は、4 つの複合イベント プロセッサを指定します。次に例を示します。
<wlevs:processor id="preprocessorAmer" listeners="spreaderIn"/>
すべてのコンポーネント要素に共通の listeners
属性は、プロセッサをリスンするコンポーネントを指定します。このサンプルでは、このコンポーネントは spreaderIn
という名前のチャネルです。
次のように wlevs:listeners
子要素を使用してコンポーネントのリスナを指定することもできます。
<wlevs:processor id="spreader"> <wlevs:listener ref="spreaderOut"/> </wlevs:processor>
サンプルでは、spreaderOut
チャネルが spreader
プロセッサをリスンします。
wlevs:channel
要素は 4 つのストリームを指定します。次に例を示します。
<wlevs:channel id="fxMarketAmerOut"> <wlevs:listener ref="preprocessorAmer"/> <wlevs:source ref="fxMarketAmer"/> </wlevs:channel>
他のすべてのコンポーネントと同様に、wlevs:listener
および wlevs:source
子要素を使用して、このコンポーネントに対してリスナおよびソースとして機能する他のコンポーネントを指定できます。
サンプルでは、preprocessorAmer
プロセッサが fxMarketAmerOut
チャネルをリスンし、このストリームは fxMarketAmer
アダプタをリスンします。
例 3-4 は、wlevs:listener
要素内にコンポーネントの定義をネストする方法を示しています。
例 3-4 ネストされたコンポーネントの定義
<wlevs:channel id="spreaderOut" manageable="true"> <wlevs:listener> <!-- Create business object --> <bean id="outputBean" class="com.bea.wlevs.example.fx.OutputBean" autowire="byName"/> </wlevs:listener> </wlevs:channel>
例 3-4 では、<bean>
タグを使用して標準の Spring Bean として宣言される outBean
POJO は、spreaderOut
チャネルをリスンします。spreaderOut
チャネルの manageable="true"
属性は、チャネルのモニタを有効にします。デフォルトでは、コンポーネントの管理容易性は無効になっています。
FX アプリケーションは 4 つのプロセッサを使用します。3 つのプロセッサで 3 つのデータ フィードを処理し、1 つのプロセッサで結果イベントを結合します。最初の 3 つのプロセッサは、preprocessor.xml
という名前の 1 つの XML ファイルで、例 3-5 に示すようにコンフィグレーションされます。
例 3-5 FX プロセッサ コンポーネント コンフィグレーション ファイル : preprocessor.xml
<?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>preprocessorAmer</name> <rules> <rule id="UsdToEurRule"><![CDATA[ insert into ForeignExchangeEvent select avg(lastPrice) as price, 'USD' as fromRate, 'EUR' as toRate from (select * from StockTick where symbol='USDEUR') retain 1 sec where lastPrice < 3.0 and lastPrice > 0.25 ]]></rule> </rules> </processor> <processor> <name>preprocessorAsia</name> <rules> <rule id="EurToJpyRule"><![CDATA[ insert into ForeignExchangeEvent select avg(lastPrice) as price, 'EUR' as fromRate, 'JPY' as toRate from (select * from StockTick where symbol='EURJPY') retain 1 sec where lastPrice < 200.0 and lastPrice > 100.0 ]]></rule> </rules> </processor> <processor> <name>preprocessorEuro</name> <rules> <rule id="EurToGbpRule"><![CDATA[ insert into ForeignExchangeEvent select avg(lastPrice) as price, 'EUR' as fromRate, 'GBP' as toRate from (select * from StockTick where symbol='EURGBP') retain 1 sec where lastPrice < 1.5 and lastPrice > 0.5 ]]></rule> </rules> </processor> </n1:config>
このファイル内の 3 つのプロセッサは、すべて本質的には同じであり、データ フィードに対して異なる項目を照会するため、また異なる境界条件を適用するために Oracle CQL クエリで使用される値だけが異なります。このため、この節では、プロセッサの 1 つである preprocessorAmer
のみについて説明します。
米国のデータ フィードで起動される Oracle CQL ルールは次のとおりです。
insert into ForeignExchangeEvent select avg(lastPrice) as price, 'USD' as fromRate, 'EUR' as toRate from (select * from StockTick where symbol='USDEUR') retain 1 sec where lastPrice < 3.0 and lastPrice > 0.25
このクエリを理解するには、次のように、さまざまな句を確認する必要があります。
insert
句では、この Oracle CQL ルールによって選択されたイベントを ForeignExchangeEvent
に挿入する必要があることを指定しています。ForeignExchangeEvent は、ネットワークにある次のプロセッサである spreader
が、独自の Oracle CQL クエリを実行する対象のオブジェクトです。
from
句では、プロセッサが StockTick データ フィードから、symbol
値が USDEUR
(米ドルと欧州ユーロの為替レート) である項目のみを受け入れ、その他すべての項目を拒否するように指定しています。さらに、from
句では、この Oracle CQL クエリを実行する時間枠を 1 秒に指定しています。
where
句では、フィードから読み込む特定の項目のレートが許容範囲内であることが保証されるように、境界条件を指定しています。このサンプルでは、フィードから読み込む特定の項目の LastPrice
が 3.00 ドルから 0.25 ドルの間である必要があります。
select
句では、選択された項目から ForeignExchangeEvent
オブジェクトに挿入する必要がある値を指定しています。このサンプルでは、ウィンドウ (1 秒) 内の全価格の平均、換算元の通貨として USD
、換算先の通貨として EUR
を指定しています。
spreader プロセッサは、spreader.xml
ファイルを使用して例 3-6 に示すようにコンフィグレーションされています。
例 3-6 FX プロセッサ コンポーネント コンフィグレーション ファイル : spreader.xml
<?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>spreader</name> <rules> <rule id="spreaderRule"><![CDATA[ select ((a.price * b.price) + 0.05) as internalPrice, a.fromRate || b.toRate as crossRate from ForeignExchangeEvent a, ForeignExchangeEvent b retain 10 sec with unique a.toRate partition by a.fromRate where a.toRate = b.fromRate and a.fromRate != b.toRate ]]></rule> </rules> </processor> </n1:config>
spreader Oracle CQL ルールでは、以下のことが行われます。
from
句と where
句では、ForeignExchangeEvent
オブジェクト (3 つの preprocessorXXX
コンポーネントによって選択されたイベントを含む) から、toRate
と fromRate
の値が同じである 2 つのイベントを結合します。さらに、from
句では、処理時間ウィンドウを再び 1 秒と設定しています。
select
句では、特定の通貨の内部価格を計算しています。この価格は、通貨の換算元レートと換算先レートの平均を求め、0.05 ドルの手数料を加算して算出します。また、クロス レートも計算します。クロス レートは、1 つの通貨の、第 3 国市場の別の通貨に対する価格であると定義されます。
このクエリの結果は、ビジネス オブジェクト POJO に送信されます。
Oracle CEP クエリ言語の使用に関する追加情報およびサンプルについては、以下を参照してください。
注意 : Oracle EPL は Oracle CQL に取って代わられます。 |
シグナル生成のサンプル アプリケーションは、シミュレートされたマーケット データを受信し、証券の価格変動が 2% を超えたかどうかを検証します。このアプリケーションは、特定の銘柄の連続的な株価を追跡することにより、トレンドの発生も検出します。変動が 2% を上回る価格が連続 3 回を超えた場合に、トレンドと見なします。
図 3-3 は、シグナル生成のサンプルのイベント処理ネットワーク (EPN) を示します。EPN は、アプリケーションを構成する各コンポーネントと、それらの連結を示しています。
このアプリケーションでは、Oracle CEP load generator ユーティリティを使用してマーケット データ フィードをシミュレートします。このサンプルでは、load generator は毎秒最大 10,000 個のメッセージを生成します。サンプルには、照合したイベントとレイテンシを表示する HTML ダッシュボードが含まれています。イベントは、銘柄記号、タイムスタンプ、および価格で構成されます。
このサンプルは、スループットが高い状況でレイテンシ ジッタが最小限である非常に低いレイテンシを示します。アプリケーションの実行が開始されると、プロセッサは毎秒平均 800 個のメッセージを照合します。最小限のコンフィグレーションをしたシステムでアプリケーションを実行した場合、このサンプルは非常に低い平均レイテンシ (平均 30 ~ 300 マイクロ秒) と最小レイテンシ スパイク (低いミリ秒数) を示します。
サンプルでは、load generator で生成されたタイムスタンプと Oracle CEP のタイムスタンプ間の差分に基づいてレイテンシ値を計算し、表示しています。有効なレイテンシを計算するには、load generator を実行するコンピュータと Oracle CEP を実行するコンピュータの間で、1 ミリ秒のような非常に厳密なクロック同期が必要です。このため、load generator と Oracle CEP の両方を 1 台のマルチ CPU コンピュータで実行し、共通のクロックを共有することをお勧めします。
サンプルでは、Oracle CEP イベント キャッシング機能の使用方法も示されています。具体的には、EPN の単一のプロセッサからイベント Bean とキャッシュの両方にイベントが送信されます。
サンプルでは、Oracle CQL クエリの使用方法も示されています。
最適なデモンストレーションの目的のためには、複数の CPU または 3GHz のデュアルコア Intel と 2GB 以上の RAM を搭載した強力なコンピュータでこのサンプルを実行することをお勧めします。
signalgeneration_domain
ドメインには、単一のアプリケーションであるシグナル生成サンプル アプリケーションが含まれています。シグナル生成アプリケーションを実行するには、ドメインの Oracle CEP インスタンスを起動するだけです。
シグナル生成のサンプルを実行するには、次の手順に従います。
コマンド ウィンドウを開き、ORACLE_CEP_HOME
\ocep_11.1\samples\domains\signalgeneration_domain\defaultserver
にある signalgeneration_domain
ドメイン ディレクトリのデフォルト サーバ ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
prompt> cd d:\oracle_cep\ocep_11.1\samples\domains\signalgeneration_domain\defaultserver
節 3.5「開発環境の設定」の説明に従って、開発環境を設定します。
正しいコマンドライン引数を使用して適切なスクリプトを実行し、Oracle CEP を起動します。
Windows の場合
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc
パラメータを渡して確定的ガベージ コレクタを有効にします。
prompt> startwlevs.cmd -dgc
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合
prompt> startwlevs.cmd
UNIX の場合
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc
パラメータを渡して確定的ガベージ コレクタを有効にします。
prompt> startwlevs.sh -dgc
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合
prompt> startwlevs.sh
次のようなコンソール メッセージが表示されるまで待機します。
<Apr 24, 2009 11:40:37 AM EDT> <Notice> <Server> <BEA-2046000> <Server STARTED> Throughput (msg per second): 0. Average latency (microseconds): 0 Throughput (msg per second): 0. Average latency (microseconds): 0 Throughput (msg per second): 0. Average latency (microseconds): 0 Throughput (msg per second): 0. Average latency (microseconds): 0 ...
これで、シグナル生成アプリケーションでデータ フィードからデータを受信する準備ができました。
次に、データ フィードをシミュレートするには、このサンプル専用にプログラミングされた load generator を使用します。
新しいコマンド ウィンドウを開きます。
ORACLE_CEP_HOME
\ocep_11.1\samples\domains\signalgeneration_domain\defaultserver\utils
ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
startDataFeed
コマンドを実行します。
Windows の場合
prompt> startDataFeed.cmd
UNIX の場合
prompt> startDataFeed.sh
ブラウザを起動し、次の HTML ページを開いて、サンプルのダッシュボードを起動します。
http://host
:9002/signalgeneration/dashboard.html
host
は、Oracle CEP を実行しているコンピュータの名前に置き換えます。ブラウザと同じコンピュータである場合は、localhost
とすることができます。
ブラウザで HTML ページの [Start] をクリックします。
このサンプルにコンフィグレーションされた Oracle CQL ルールに一致するイベントが、図 3-4 のように表示されます。
シグナル生成サンプルのソース ディレクトリには、Java ソースと、シグナル生成アプリケーションを構成する他の必須のリソース (コンフィグレーション XML ファイル、EPN アセンブリ ファイル、DOJO クライアント JavaScript ライブラリなど) が含まれます。build.xml
Ant ファイルには、アプリケーションをビルドして signalgeneration_domain
ドメインにデプロイするためのターゲットが含まれています (節 3.8.3「シグナル生成をビルドする Ant ターゲットの説明」を参照)。
ソース ディレクトリからシグナル生成のサンプルをビルドおよびデプロイするには、以下の手順を実行します。
シグナル生成の Oracle CEP インスタンスがまだ実行されていない場合は、節 3.8.1「シグナル生成のサンプルの実行」の手順に従ってサーバを起動します。再ビルドしたアプリケーションを正常にデプロイするには、サーバが実行中である必要があります。
新しいコマンド ウィンドウを開き、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\signalgeneration
にあるシグナル生成ソース ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
prompt> cd d:\oracle_cep\ocep_11.1\samples\source\applications\signalgeneration
節 3.5「開発環境の設定」の説明に従って、開発環境を設定します。
all
Ant ターゲットを実行してアプリケーションをコンパイルし、JAR ファイルを作成します。
prompt> ant all
deploy
Ant ターゲットを実行してアプリケーション JAR ファイルを ORACLE_CEP_HOME
\ocep_11.1\samples\domains\signalgeneration_domain\defaultserver\applications\signalgeneration
ディレクトリにデプロイします。
prompt> ant deploy
注意 : このターゲットは、ドメイン ディレクトリにある既存のシグナル生成アプリケーション JAR ファイルを上書きします。 |
シグナル生成アプリケーションで必要な load generator が実行されていない場合は、節 3.8.1「シグナル生成のサンプルの実行」の説明に従って起動します。
節 3.8.1「シグナル生成のサンプルの実行」の説明に従って、サンプルのダッシュボードを起動します。
シグナル生成のサンプルのソースの最上位レベル ディレクトリにある build.xml ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。
clean
- このターゲットは、現在のディレクトリの下にある dist
および output
作業ディレクトリを削除します。
all
- このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.signalgen_3.0.0.0.jar
という JAR ファイルを生成し、生成した JAR ファイルを現在のディレクトリの下の dist
ディレクトリに格納します。
deploy
- このターゲットは、Deployer ユーティリティを使用して JAR ファイルを Oracle CEP にデプロイします。
詳細については、『Oracle CEP 管理者ガイド』の「Deployer コマンドライン リファレンス」を参照してください。
シグナル生成のサンプルを実装するには、通常、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP アプリケーションの作成 : 一般的な手順」に従います。
タスク指向の手順を示して一般的な開発プロセスを説明している節を参照してください。
シグナル生成で使用するすべてのファイルは、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\signalgeneration
ディレクトリを基準にして相対的な場所にあります。ORACLE_CEP_HOME
は、c:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお勧めします。ただし、これは必須条件ではありません。
シグナル生成のサンプルで使用するファイルは次のとおりです。
アプリケーションの各コンポーネントと、すべてのコンポーネントの接続方法を記述した EPN アセンブリ ファイル。
サンプルでは、このファイルは epn_assembly.xml
という名前で、META-INF/spring
ディレクトリにあります。
詳細については、節 3.8.5「シグナル生成 EPN アセンブリ ファイル」を参照してください。
アプリケーションのプロセッサ コンポーネントをコンフィグレーションする XML ファイル。このファイルは config.xml
という名前で、META-INF/wlevs
ディレクトリにあります。
config.xml
ファイルは processor1
Oracle CQL プロセッサをコンフィグレーションします。特に、証券の価格変動が 2% を超えたかどうか、および価格にトレンドが発生したかどうかを検証する Oracle CQL ルールをコンフィグレーションします。
詳細については、節 3.8.6「シグナル生成コンポーネント コンフィグレーション ファイル」を参照してください。
アプリケーションの SignalgenOutputBean
コンポーネント (ビジネス ロジックを含む POJO) を実装する Java ファイル。この POJO は、HttpServlet
および EventSink
です。この onEvent
メソッドは、PercentTick
および TrendTick
イベント インスタンスを使用し、レイテンシを計算して、ダッシュボード情報を表示します。
サンプルでは、このファイルは SignalgenOutputBean.java
という名前で、src/oracle/cep/example/signalgen
ディレクトリにあります。
このファイルの詳細な説明と、イベント シンクのプログラミングの概要については、『Oracle CEP IDE Eclipse 開発者ガイド』の「ストリーム ソースとストリーム シンク、リレーション ソースとリレーション シンク」を参照してください。
Oracle CEP にデプロイされる OSGi バンドルのコンテンツを記述した MANIFEST.MF
ファイル。
サンプルでは、MANIFEST.MF
ファイルが META-INF
ディレクトリにあります。
このファイルの作成方法と、Oracle CEP にデプロイする OSGi バンドルの作成方法については、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP アプリケーションのアセンブル : 主な手順」を参照してください。
メイン サンプル ディレクトリにある dashboard.html
ファイル。この HTML ファイルは、実行中のシグナル生成アプリケーションのイベントおよびレイテンシを表示するサンプル ダッシュボードです。HTML ファイルは dojo
ディレクトリにある Dojo Javascript ライブラリ (http://dojotoolkit.org/
) を使用します。
ForeignExchangeBuilderFactory
で参照されている Oracle CEP API の詳細については、『Oracle CEP Java API Reference』を参照してください。
シグナル生成のサンプルでは、OSGi バンドルのコンパイル、アセンブリ、およびデプロイに build.xml
Ant ファイルを使用します。開発環境でも Ant を使用する場合、この build.xml
ファイルの詳細については、節 3.8.2「ソース ディレクトリからビルドおよびデプロイするシグナル生成のサンプル」を参照してください。
EPN アセンブリ ファイルの主な目的の 1 つは、アプリケーションのコンポーネントを宣言してイベント処理ネットワークを定義し、これらすべてのコンポーネントの接続方法、つまりどのコンポーネントが他のどのコンポーネントをリスンするかを定義することです。Oracle CEP には、ネットワークの宣言に使用するカスタム Spring タグのセットが用意されています。また、EPN アセンブリ ファイルは、アプリケーションで使用するイベント タイプとアプリケーションの Oracle CQL ルールを登録するためにも使用します。
EPN アセンブリ ファイルを通常の方法で使用して、 Spring アプリケーション コンテキストで アプリケーション コンポーネント Bean を定義します。アプリケーション コンポーネント Bean は、 Java クラスで実装される「アダプタ」や 「ビジネス ロジックを含む POJO」などです。
詳細については、以下を参照してください。
『Oracle CEP IDE Eclipse 開発者ガイド』の「スキーマ リファレンス : EPN アセンブリ spring-wlevs-v11_0_0_0.xsd」
『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP スキーマ」
例 3-7 は、シグナル生成サンプル アプリケーションで使用する EPN アセンブリ ファイルを示しています。太字のエントリの詳細については、サンプルの後にある説明を参照してください。
例 3-7 シグナル生成 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" xmlns:cqlx="http://www.oracle.com/schema/cqlx" 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_0_0_0.xsd"> <wlevs:event-type-repository> <wlevs:event-type type-name="TrendTick"> <wlevs:properties> <wlevs:property name="symbol" type="char"/> <wlevs:property name="lastPrice" type="double"/> <wlevs:property name="trendLastPrice" type="bigint"/> <wlevs:property name="startTimestamp" type="bigint"/> </wlevs:properties> </wlevs:event-type> <wlevs:event-type type-name="PercentTick"> <wlevs:properties> <wlevs:property name="symbol" type="char"/> <wlevs:property name="lastPrice" type="double"/> <wlevs:property name="percentLastPrice" type="double"/> <wlevs:property name="startTimestamp" type="bigint"/> </wlevs:properties> </wlevs:event-type> <wlevs:event-type type-name="Symbols"> <wlevs:properties> <wlevs:property name="symbol" type="char" length="10"/> </wlevs:properties> </wlevs:event-type> </wlevs:event-type-repository> <wlevs:adapter id="loadgenAdapter" provider="loadgen"> <wlevs:instance-property name="port" value="9001"/> <wlevs:instance-property name="threadContextTimestamp" value="true"/> </wlevs:adapter> <!-- シンボルを保持するキャッシュの定義 --> <wlevs:caching-system id="signalgenCachingSystem"/> <wlevs:cache id="symbolsCache" key-properties="symbol" value-type="Symbols"> <wlevs:caching-system ref="signalgenCachingSystem"/> <wlevs:cache-loader ref="symbolsCacheLoader"/> </wlevs:cache> <wlevs:processor id="processor1"> <wlevs:cache-source ref="symbolsCache"/> </wlevs:processor> <!-- このシナリオではストリームはプレースホルダであり、単にパススルーされます --> <wlevs:channel id="StockTickStream" max-threads="0" max-size="0" event-type="OracleStockTick"> <wlevs:listener ref="processor1"/> <wlevs:source ref="loadgenAdapter"/> </wlevs:channel> <!-- モニタのための公開 --> <wlevs:channel id="TrendStream" max-threads="0" max-size="0" advertise="true" event-type="TrendTick"> <wlevs:listener ref="outputbean"/> <wlevs:source ref="processor1"/> </wlevs:channel> <wlevs:channel id="PercentStream" max-threads="0" max-size="0" advertise="true" event-type="PercentTick"> <wlevs:listener ref="outputbean"/> <wlevs:source ref="processor1"/> </wlevs:channel> <bean id="outputbean" class="oracle.cep.example.signalgen.SignalgenOutputBean"> <property name="timestampProperty" value="startTimestamp"/> </bean> <bean id="symbolsCacheLoader" class="oracle.cep.example.signalgen.SymbolsCacheLoader"> <property name="symbolsFileName" value="applications/MySigGen/symbols.txt"/> <property name="eventTypeName" value="Symbols"/> </bean> </beans>
上記の例では、以下のことが行われます。
wlevs:event-type-repository
要素は、アプリケーション全体でタプルとして使用されるイベント タイプを作成します。シグナル生成アプリケーションには、次のイベントがあります。
TrendTick
: EPN アセンブリ ファイルで定義されます。
PercentTick
: EPN アセンブリ ファイルで定義されます。
Symbols
: EPN アセンブリ ファイルで定義されます。
wlevs:adapter
、wlevs:processor
、wlevs:channel
、および wlevs:caching-system
エントリのセットは、ネットワークの各コンポーネントを宣言することによって、イベント処理ネットワークを設定します (図 3-3 を参照)。
各コンポーネントにはユニークな ID が指定されます。この ID は、他のコンポーネントがリスナとソースを宣言するときに参照することができます。
wlevs:adapter
要素はアダプタを指定します。例を示します。
<wlevs:adapter id="loadgenAdapter" provider="loadgen"> <wlevs:instance-property name="port" value="9001"/> <wlevs:instance-property name="threadContextTimestamp" value="true"/> </wlevs:adapter>
wlevs:adapter
要素の provider="loadgen"
属性は、アダプタが Oracle CEP load generator ユーティリティからデータを取得するように指定します。wlevs:instance-property
子要素は、アダプタがリスンするポート番号を指定します。
wlevs:processor
要素は Oracle CQL プロセッサを指定します。例を示します。
<wlevs:processor id="processor1"> <wlevs:cache-source ref="symbolsCache"/> </wlevs:processor>
すべてのコンポーネント タグに共通の listener
属性は、プロセッサをリスンするコンポーネントを指定します。この場合、リスナは symbolsCache
です。
wlevs:caching-system
要素は、アプリケーションのパフォーマンス向上のために使用される Oracle CEP ローカル イベント キャッシュを指定します。例を示します。
<wlevs:caching-system id="signalgenCachingSystem"/> <wlevs:cache id="symbolsCache" key-properties="symbol" value-type="Symbols"> <wlevs:caching-system ref="signalgenCachingSystem"/> <wlevs:cache-loader ref="symbolsCacheLoader"/> </wlevs:cache>
キャッシュの詳細については、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP キャッシングのコンフィグレーション」を参照してください。
シグナル生成アプリケーションは、例 3-8 に示すコンポーネント コンフィグレーション ファイルのプロセッサおよびキャッシュをコンフィグレーションします。
例 3-8 シグナル生成コンポーネント コンフィグレーション ファイル
<?xml version="1.0" encoding="UTF-8"?> <!-- this is here to test that we ignore this file --> <n1:config xsi:schemaLocation="http://www.bea.com/ns/wlevs/config/application wlevs_application_config.xsd" xmlns:n1="http://www.bea.com/ns/wlevs/config/application" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <processor> <name>processor1</name> <rules> <view id="S" schema="symbol price"> <![CDATA[ RStream(select T.symbol, T.lastPrice from StockTickStream[now] as T, symbolsCache as R where T.symbol = R.symbol) ]]> </view> <query id="percent"> <![CDATA[ select symbol, lastPrice, percentLastPrice, startTimestamp from S MATCH_RECOGNIZE ( PARTITION BY symbol MEASURES B.symbol as symbol, B.price as lastPrice, 100*(B.price - A.price)/A.price as percentLastPrice, B.ELEMENT_TIME as startTimestamp ALL MATCHES PATTERN (A B) DEFINE B AS (100*(B.price - A.price)/A.price > 2.0 or 100*(B.price - A.price)/A.price < -2.0 ) ) as T ]]> </query> <view id="vTrend" schema="symbol lastPrice trendLastPrice"> <![CDATA[ select symbol, lastPrice, trendLastPrice from S MATCH_RECOGNIZE ( PARTITION BY symbol MEASURES Z.symbol as symbol, Z.price as lastPrice, count(A.*)-count(B.*) as trendLastPrice ALL MATCHES PATTERN (X (A|B|C) (A|B|C) (A|B|C) (A|B|C) ) SUBSET Z = (A, B, C) DEFINE A AS (A.price > PREV(A.price)), B AS (B.price < PREV(B.price)), C AS (C.price = PREV(C.price)) ) as T ]]> </view> <query id="trend"> <![CDATA[ select symbol, lastPrice, trendLastPrice, ELEMENT_TIME as startTimestamp from vTrend where trendLastPrice > 2 ]]> </query> </rules> </processor> <channel> <name>TrendStream</name> <selector>trend</selector> </channel> <channel> <name>PercentStream</name> <selector>percent</selector> </channel> </n1:config>
アプリケーションに複数のプロセッサ、アダプタ、またはチャネルがある場合は、それらすべてを 1 つのコンフィグレーション ファイルで宣言することも、コンポーネントごとに個別のコンフィグレーション ファイルを作成することもできます。どちらか管理しやすい方法を選択してください。
コンフィグレーションするコンポーネントごとに name
子要素を追加し、参照する特定のコンポーネントを明示的に宣言する必要があります。name
要素の値は、EPN アセンブリ ファイルで宣言したコンポーネントのユニークな識別子に対応している必要があります。
たとえば、プロセッサが EPN アセンブリ ファイルで次のように宣言されているとします。
<wlevs:processor id="processor1" ...>
対応する XML コンフィグレーションは次のようになります。
<processor> <name>processor1</name> ... </processor>
シグナル生成のサンプルでは、processor1
という名前の 1 つのプロセッサと、symbolsCache
という名前の 1 つのキャッシュに対して、1 つのコンフィグレーション ファイルを使用しています。これらの名前は EPN アセンブリ ファイルでのコンポーネントの宣言に対応しています。
processor
要素は、プロセッサ コンポーネントをコンフィグレーションします。プロセッサ コンフィグレーションの重要な部分は、このプロセッサで実行する Oracle Continuous Query Language (Oracle CQL) のルール セットの宣言です。これらのルールは最終的にアプリケーション ビジネス オブジェクトに渡されるイベント セットを選択します。各ルールは、XML の <![CDATA[...]]>
セクションを使用して query
または relation
要素で宣言されます。すべての query
および relation
要素は単一の rules
要素によってグループ化されます。特定のプロセッサ用に必要な数だけルールを定義できます。
シグナル生成アプリケーションには次のルールがあります。
<rules> <view id="S" schema="symbol price"> <![CDATA[ RStream(select T.symbol, T.lastPrice from StockTickStream[now] as T, symbolsCache as R where T.symbol = R.symbol) ]]> </view> <query id="percent"> <![CDATA[ select symbol, lastPrice, percentLastPrice, startTimestamp from S MATCH_RECOGNIZE ( PARTITION BY symbol MEASURES B.symbol as symbol, B.price as lastPrice, 100*(B.price - A.price)/A.price as percentLastPrice, B.ELEMENT_TIME as startTimestamp ALL MATCHES PATTERN (A B) DEFINE B AS (100*(B.price - A.price)/A.price > 2.0 or 100*(B.price - A.price)/A.price < -2.0 ) ) as T ]]> </query> <view id="vTrend" schema="symbol lastPrice trendLastPrice"> <![CDATA[ select symbol, lastPrice, trendLastPrice from S MATCH_RECOGNIZE ( PARTITION BY symbol MEASURES Z.symbol as symbol, Z.price as lastPrice, count(A.*)-count(B.*) as trendLastPrice ALL MATCHES PATTERN (X (A|B|C) (A|B|C) (A|B|C) (A|B|C) ) SUBSET Z = (A, B, C) DEFINE A AS (A.price > PREV(A.price)), B AS (B.price < PREV(B.price)), C AS (C.price = PREV(C.price)) ) as T ]]> </view> <query id="trend"> <![CDATA[ select symbol, lastPrice, trendLastPrice, ELEMENT_TIME as startTimestamp from vTrend where trendLastPrice > 2 ]]> </query> </rules>
詳細については、『Oracle CEP CQL 言語リファレンス』を参照してください。
記録と再生のサンプルは、1 つのコンポーネントをコンフィグレーションしてイベントをイベント ストアに記録し、ネットワークの別のコンポーネントをコンフィグレーションしてストアにあるイベントを再生する方法を示します。サンプルは、Oracle CEP で提供されるデータベース サーバである Apache Derby を使用してイベントを格納します。サンプルでは、イベント処理ネットワークのノードとしてパブリッシュ用 HTTP pub-sub アダプタをコンフィグレーションする方法も示します。
図 3-5 は、イベントの記録と再生のサンプルのイベント処理ネットワーク (EPN) を示します。EPN は、アプリケーションを構成する各コンポーネントと、それらの連結を示しています。
このアプリケーションのイベント処理ネットワークには次の 4 つのコンポーネントが含まれています。
simpleEventSource
: 例を示すだけの目的で単純なイベントを生成するアダプタ。図で示したように、このコンポーネントはイベントを記録するようにコンフィグレーションされています。
このアダプタのコンフィグレーション ソースは以下のとおりです。
<adapter> <name>simpleEventSource</name> <record-parameters> ... </record-parameters> </adapter>
eventStream
: simpleEventSource
アダプタと recplayEventSink
イベント Bean を接続するチャネル。このコンポーネントはイベントを再生するようにコンフィグレーションされています。
このチャネルのコンフィグレーション ソースは以下のとおりです。
<channel> <name>eventStream</name> <playback-parameters> ... </playback-parameters> ... </channel>
recplayEventSink
: アダプタで生成されるイベントのシンクとして機能するイベント Bean。
playbackHttpPublisher
: recplayEventSink
イベント Bean をリスンし、Oracle CEP HTTP Pub-Sub サーバの /playbackchannel
というチャネルにパブリッシュする、パブリッシュ用 HTTP pub-sub アダプタ。
recplay_domain
ドメインには、記録と再生のサンプル アプリケーションという単一のアプリケーションが含まれています。このアプリケーションを実行するには、以下の手順に示すように、最初にドメインの Oracle CEP インスタンスを起動します。
その後の手順では、Oracle CEP Visualizer を使用して simpleEventSource
および eventStream
コンポーネントでイベントの記録と再生をそれぞれ開始する方法を示しています。手順の最後では、Oracle CEP Visualizer を使用して、playbackHttpPublisher
アダプタによってチャネルにパブリッシュされるイベントのストリームを表示する方法を示しています。
イベントの記録/再生のサンプルを実行するには、次の手順に従います。
コマンド ウィンドウを開き、ORACLE_CEP_HOME
\ocep_11.1\samples\domains\recplay_domain\defaultserver
にある recplay_domain
ドメイン ディレクトリのデフォルト サーバ ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
prompt> cd d:\oracle_cep\ocep_11.1\samples\domains\recplay_domain\defaultserver
節 3.5「開発環境の設定」の説明に従って、開発環境を設定します。
正しいコマンドライン引数を使用して適切なスクリプトを実行し、Oracle CEP を起動します。
Windows の場合
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc
パラメータを渡して確定的ガベージ コレクタを有効にします。
prompt> startwlevs.cmd -dgc
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合
prompt> startwlevs.cmd
UNIX の場合
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc
パラメータを渡して確定的ガベージ コレクタを有効にします。
prompt> startwlevs.sh -dgc
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合
prompt> startwlevs.sh
サーバ ステータス メッセージがスクロールされた後、出力先に次のメッセージが出力されます。
SimpleEvent created at: 14:33:40.441
このメッセージは、Oracle CEP サーバが正しく起動され、simpleEventSource
コンポーネントがイベントを作成していることを示しています。
ブラウザで以下の URL を起動します。
http://host:port/wlevs
host は、Oracle CEP が実行中のコンピュータ名を指します。port は、サーバにコンフィグレーションされている Jetty NetIO ポートを指します (デフォルト値 9002
)。
図 3-6 に示すように、ログオン画面が表示されます。
ログオン画面で、[User Id] に wlevs
、[Password] に wlevs
と入力し、[Log In] をクリックします。
図 3-40 に示すように、Oracle CEP Visualizer ダッシュボードが表示されます。
Oracle CEP Visualizer のユーザ インタフェースの詳細については、『Oracle CEP Visualizer ユーザ ガイド』の「Oracle CEP Visualizer のユーザ インタフェースについて」を参照してください。
左ペインで、[WLEventServerDomain|NonClusteredServer|Applications|recplay|Stages|simpleEventSource] を選択します。
右ペインで、[Record] タブを選択します (図 3-8 を参照)。
[DataSet Name] フィールドには、simpleEventSource
アダプタ アプリケーション コンフィグレーション ファイル ORACLE-CEP-HOME
\ocep_11.1\samples\domains\recplay_domain\defaultserver\applications\recplay\config.xml
からの record-parameters
子要素の値の dataset-name
要素が含まれています (例 3-9 を参照)。
例 3-9 recplay アプリケーション コンフィグレーション ファイル config.xml: adapter 要素
<adapter> <name>simpleEventSource</name> <record-parameters> <dataset-name>recplay_sample</dataset-name> <event-type-list> <event-type>SimpleEvent</event-type> </event-type-list> <provider-name>test-rdbms-provider</provider-name> <batch-size>1</batch-size> <batch-time-out>10</batch-time-out> </record-parameters> </adapter>
[Provider Name] には、data-source
子要素 name
に対応する rdbms-event-store-provider
子要素の値 name
が含まれています (例 3-10 を参照)。
例 3-10 recplay Oracle CEP Server コンフィグレーション ファイル config.xml: data-source および rdbms-event-store-provider 要素
<data-source> <name>derby1</name> <connection-pool-params> <initial-capacity>15</initial-capacity> <max-capacity>50</max-capacity> </connection-pool-params> <driver-params> <url>jdbc:derby:dbtest1;create=true</url> <driver-name>org.apache.derby.jdbc.EmbeddedDriver</driver-name> </driver-params> </data-source> <rdbms-event-store-provider> <name>test-rdbms-provider</name> <data-source-name>derby1</data-source-name> </rdbms-event-store-provider>
[Record] タブの下部にある [Start] をクリックします。
図 3-9 に示すように、[Alert] ダイアログが表示されます。
[OK] をクリックします。
[Current Status] フィールドには「Recording...」と表示されます。
[OK] をクリックするとすぐに、イベントが simpleEventSource
コンポーネントから離れ始め、コンフィグレーションされたデータベースに格納されます。
[Start Recording] および [Stop Recording] フィールドを使用して、イベントをいつ記録するかをさらにコンフィグレーションできます。
左ペインで、[eventStream] を選択します。
右ペインで、[Playback] タブをクリックします (図 3-10 を参照)。
タブの下部にある [Start] をクリックします。
図 3-11 に示すように、[Alert] ダイアログが表示されます。
[OK] をクリックします。
[Current Status] フィールドには「Playing...」と表示されます。
[OK] をクリックするとすぐに、simpleEventSource
コンポーネントで記録されたイベントが simpleStream
コンポーネントで再生されます。
Oracle CEP サーバを起動したコマンド ウィンドウに次のメッセージが出力され、元のイベントと再生イベントの両方が EPN を介してストリーミングされていることを示します。
SimpleEvent created at: 14:33:11.501 Played back: Original time=14:15:23.141 Playback time=14:33:11.657
再生されるイベントが記録された期間や再生速度などの再生パラメータをさらにコンフィグレーションできます。そのためには、適切なフィールドを更新し、[Change Parameters] をクリックします。再生パラメータを変更した後、再生を再開する必要があります。
playbackHttpPublisher
アダプタがチャネルにパブリッシュしているイベントを表示するには、以下の手順を実行します。
上ペインで、[Viewstream] ボタンをクリックします。
図 3-12 に示すように、Viewstream ウィンドウが表示されます。
右ペインで、[Initialize Client] をクリックします。
[Subscribe Channel] テキスト ボックスに /playbackchannel
と入力します。
[Subscribe] をクリックします。
[Received Messages] テキスト ボックスに、再生されたイベントの詳細が表示されます。再生されたイベントは、イベントの作成時刻と再生時刻を示します。
記録と再生のサンプルのソース ディレクトリには、Java ソースと、アプリケーションを構成する他の必須リソース (コンフィグレーション XML ファイル、EPN アセンブリ ファイルなど) が含まれます。build.xml
Ant ファイルには、アプリケーションをビルドして signalgeneration_domain ドメインにデプロイするためのターゲットが含まれています (節 3.9.3「記録と再生のサンプルをビルドする Ant ターゲットの説明」を参照)。
ソース ディレクトリからイベントの記録/再生のサンプルをビルドおよびデプロイするには、次の手順を実行します。
記録/再生の Oracle CEP インスタンスがまだ実行されていない場合は、節 3.9.1「イベントの記録/再生のサンプルの実行」の手順に従ってサーバを起動します。再ビルドしたアプリケーションを正常にデプロイするには、サーバが実行中である必要があります。
新しいコマンド ウィンドウを開き、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\recplay
にある記録/再生ソース ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
prompt> cd d:\oracle_cep\ocep_11.1\samples\source\applications\recplay
節 3.5「開発環境の設定」の説明に従って、開発環境を設定します。
all
Ant ターゲットを実行してアプリケーションをコンパイルし、JAR ファイルを作成します。
prompt> ant all
deploy
Ant ターゲットを実行してアプリケーション JAR ファイルを ORACLE_CEP_HOME
\ocep_11.1\samples\domains\recplay_domain\defaultserver\applications\recplay
ディレクトリにデプロイします。
prompt> ant -Dusername=wlevs -Dpassword=wlevs -Daction=update deploy
注意 : このターゲットは、ドメイン ディレクトリにある既存のイベントの記録/再生アプリケーション JAR ファイルを上書きします。 |
アプリケーション再デプロイ メッセージの後、約 1 秒ごとに次のメッセージが出力先に出力されます。
SimpleEvent created at: 14:33:40.441
このメッセージは、記録と再生のサンプルが再デプロイされ、正しく実行されていることを示します。
節 3.9.1「イベントの記録/再生のサンプルの実行」 (手順 4 以降) に従って Oracle CEP Visualizer を起動し、イベントの記録と再生を開始します。
記録/再生のソースの最上位レベル ディレクトリにある build.xml ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。
clean
- このターゲットは、現在のディレクトリの下にある dist
および output
作業ディレクトリを削除します。
all
- このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.recplay_3.0.0.0.jar
という JAR ファイルを生成し、生成した JAR ファイルを現在のディレクトリ下の dist
ディレクトリに格納します。
deploy
- このターゲットは、Deployer ユーティリティを使用して JAR ファイルを Oracle CEP にデプロイします。
詳細については、『Oracle CEP 管理者ガイド』の「Deployer コマンドライン リファレンス」を参照してください。
シグナル生成のサンプルを実装するには、通常、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP アプリケーションの作成 : 一般的な手順」に従います。
タスク指向の手順を示して一般的な開発プロセスを説明している節を参照してください。
このサンプルで使用するすべてのファイルは、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\recplay
ディレクトリを基準にして相対的な場所にあります。ORACLE_CEP_HOME
は、c:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお勧めします。ただし、これは必須条件ではありません。
記録と再生のサンプルで使用するファイルは次のとおりです。
アプリケーションの各コンポーネントと、すべてのコンポーネントの接続方法を記述した EPN アセンブリ ファイル (図 3-5 を参照)。
サンプルでは、このファイルは com.bea.wlevs.example.recplay-context.xml
という名前で、META-INF/spring
ディレクトリにあります。
simpleEventSource
アダプタの Java ソース ファイル。
サンプルでは、このファイルは SimpleEventSource.java
という名前で、src/com/bea/wlevs/adapter/example/recplay
ディレクトリにあります。
このファイルの詳細な説明と、アダプタ Java ファイルの一般的なプログラミング方法については、『Oracle CEP IDE Eclipse 開発者ガイド』の「カスタム アダプタとイベント Bean の作成」を参照してください。
PlayedBackEvent
および SimpleEvent
イベント タイプを記述する Java ソース ファイル。SimpleEvent
イベント タイプは、最初にアダプタによって生成されたイベントですが、PlayedBackEvent
イベント タイプは、記録された後に再生されるイベントに対して使用します。PlayedBackEvents
は、SimpleEvent
とほぼ同じですが、イベントが記録された時刻を示す追加フィールドがあります。
サンプルでは、2 つのイベントは SimpleEvent.java
および PlayedBackEvent.java
という名前で、src/com/bea/wlevs/event/example/recplay
ディレクトリにあります。
このファイルの詳細な説明と、イベント タイプのプログラミングの概要については、『Oracle CEP IDE Eclipse 開発者ガイド』の「イベント タイプの作成」を参照してください。
アプリケーションの recplayEventSink
イベント Bean を実装する Java ファイルは、simpleEventSource
アダプタからリアルタイム イベントと再生イベントの両方を受け取るイベント シンクです。
サンプルでは、このファイルは RecplayEventSink.java
という名前で、src/com/bea/wlevs/example/recplay
ディレクトリにあります。
このファイルの詳細な説明と、アダプタ Java ファイルの一般的なプログラミング方法については、『Oracle CEP IDE Eclipse 開発者ガイド』の「カスタム アダプタとイベント Bean の作成」を参照してください。
simpleEventSource
アダプタと eventStream
チャネル コンポーネントをコンフィグレーションする XML ファイル。コンポーネントを指定する <record-parameters>
要素を含むアダプタは、イベントをイベント ストアに記録します。同様に、チャネルには再生イベントを受け取るように指定する <playback-parameters>
要素が含まれます。
サンプルでは、このファイルは config.xml
という名前で、META-INF/wlevs
ディレクトリにあります。
Oracle CEP にデプロイされる OSGi バンドルのコンテンツを記述した MANIFEST.MF
ファイル。
サンプルでは、MANIFEST.MF
ファイルが META-INF
ディレクトリにあります。
このファイルの作成方法と、Oracle CEP にデプロイする OSGi バンドルの作成方法については、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP アプリケーションのアセンブル : 主な手順」を参照してください。
記録/再生のサンプルでは、OSGi バンドルのコンパイル、アセンブル、およびデプロイに build.xml
Ant ファイルを使用します。開発環境でも Ant を使用する場合、この build.xml
ファイルの詳細については、節 3.9.2「ソース ディレクトリからビルドおよびデプロイするイベントの記録/再生のサンプル」を参照してください。
CQL のサンプルでは、Oracle CEP Visualizer Query Wizard を使用してさまざまな種類の Oracle CQL クエリを作成する方法を示します。
図 3-13 は、CQL サンプルのイベント処理ネットワーク (EPN) を示します。EPN は、アプリケーションを構成する各コンポーネントと、それらの連結を示しています。
アプリケーションには EPN の個別の 3 つのイベント パスがあります。
不足しているイベント : このイベント パスは、チャネル orderChannel
に接続するアダプタ orderCVSAdapter
で構成されます。orderChannel
はプロセッサ orderProcessor
に接続し、これはさらにチャネル alertChannel
、アダプタ alertOutput
に接続しています。
このイベント パスは顧客注文ワークフローで不足しているイベントを検出するために使用されます。
cqlProc
プロセッサで実行されるクエリの作成方法の詳細については、節 3.10.4.1「不足イベント クエリの作成」を参照してください。
移動平均 : このイベント パスは、プロセッサ stockProcessor
、チャネル movingAvgChannel
、アダプタ movingOutput
の順に接続しているチャネル stockChannel
で構成されます。
このイベント パスは量が 1000 を超える銘柄の移動平均を計算するために使用されます。
cqlProc
プロセッサで実行されるクエリの作成方法の詳細については、節 3.10.4.2「移動平均クエリの作成」を参照してください。
キャッシュ : このイベント パスは、チャネル S1
、Oracle CQL プロセッサ cacheProcessor
、チャネル S2
、Bean Bean
の順に接続しているアダプタ adapter
で構成されます。Oracle CQL プロセッサ cacheProcessor
には、キャッシュ stockCache
も接続しています。また、Bean Loader
もあります。
このイベント パスは Oracle CQL クエリのキャッシュの情報にアクセスするために使用されます。
注意 : EPN の各種コンポーネントの詳細については、このブックの他のサンプルを参照してください。 |
最適なデモンストレーションの目的のためには、複数の CPU または 3GHz のデュアルコア Intel と 2GB 以上の RAM を搭載した強力なコンピュータでこのサンプルを実行することをお勧めします。
CQL アプリケーションは cql_domain
ドメインにあらかじめデプロイされています。アプリケーションを実行するには、Oracle CEP サーバのインスタンスを起動するだけです。
CQL のサンプルを実行するには、次の手順に従います。
コマンド ウィンドウを開き、ORACLE_CEP_HOME
\ocep_11.1\samples\domains\cql_domain\defaultserver
にある CQL ドメイン ディレクトリのデフォルト サーバ ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
prompt> cd d:\oracle_cep\ocep_11.1\samples\domains\cql_domain\defaultserver
節 3.5「開発環境の設定」の説明に従って、開発環境を設定します。
正しいコマンドライン引数を使用して適切なスクリプトを実行し、Oracle CEP を起動します。
Windows の場合
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc
パラメータを渡して確定的ガベージ コレクタを有効にします。
prompt> startwlevs.cmd -dgc
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合
prompt> startwlevs.cmd
UNIX の場合
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc
パラメータを渡して確定的ガベージ コレクタを有効にします。
prompt> startwlevs.sh -dgc
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合
prompt> startwlevs.sh
これで、CQL アプリケーションでデータ フィードからデータを受信する準備ができました。
不足イベント クエリのデータ フィードをシミュレートするには、新しいコマンド ウィンドウを開き、節 3.5「開発環境の設定」の説明に従って環境を設定します。
ORACLE_CEP_HOME
\ocep_11.1\utils\load-generator
ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
orderData.prop
プロパティ ファイルを使用して load generator を実行します。
Windows の場合
prompt> runloadgen.cmd orderData.prop
UNIX の場合
prompt> runloadgen.sh orderData.prop
移動平均クエリのデータ フィードをシミュレートするには、新しいコマンド ウィンドウを開き、節 3.5「開発環境の設定」の説明に従って環境を設定します。
ORACLE_CEP_HOME
\ocep_11.1\utils\load-generator
ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
stockData.prop
プロパティ ファイルを使用して load generator を実行します。
Windows の場合
prompt> runloadgen.cmd stockData.prop
UNIX の場合
prompt> runloadgen.sh stockData.prop
キャッシュ クエリのデータ フィードをシミュレートするには、サンプルを実行するだけで済みます。
Adaptor.java
で負荷データが生成され、Loader.java
でキャッシュ データが生成されます。Oracle CEP Visualizer Query Plan で統計を有効にすることで、データの流れを確認できます。
CQL サンプル ソース ディレクトリには、Java ソースと、CQL アプリケーションを構成する他の必要なリソース (コンフィグレーション XML ファイルなど) が含まれています。build.xml
Ant ファイルには、アプリケーションをビルドして cql_domain
ドメインにデプロイするためのターゲットが含まれています (節 3.10.3「CQL のサンプルをビルドする Ant ターゲットの説明」を参照)。
ソース ディレクトリから CQL のサンプルをビルドおよびデプロイするには、次の手順に従います。
CQL の Oracle CEP インスタンスがまだ実行されていない場合は、節 3.10.1「CQL のサンプルの実行」の手順に従ってサーバを起動します。
再ビルドしたアプリケーションを正常にデプロイするには、サーバが実行中である必要があります。
新しいコマンド ウィンドウを開き、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\cql
にある CQL ソース ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
prompt> cd d:\oracle_cep\ocep_11.1\samples\source\applications\cql
節 3.5「開発環境の設定」の説明に従って、開発環境を設定します。
all
Ant ターゲットを実行してアプリケーションをコンパイルし、JAR ファイルを作成します。
prompt> ant all
deploy
Ant ターゲットを実行してアプリケーション JAR ファイルを Oracle CEP にデプロイします。
prompt> ant -Dusername=wlevs -Dpassword=wlevs -Daction=update deploy
注意 : このターゲットは、ドメイン ディレクトリにある既存の CQL アプリケーション JAR ファイルを上書きします。 |
CQL アプリケーションで必要な load generator が実行されていない場合は、節 3.10.1「CQL のサンプルの実行」の説明に従って起動します。
CQL ソースの最上位レベル ディレクトリにある build.xml ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。
clean
- このターゲットは、現在のディレクトリの下にある dist
および output
作業ディレクトリを削除します。
all
- このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.cql_3.0.0.0.jar
という JAR ファイルを生成し、生成した JAR ファイルを現在のディレクトリの下の dist
ディレクトリに格納します。
deploy
- このターゲットは、Deployer ユーティリティを使用して JAR ファイルを Oracle CEP にデプロイします。
詳細については、『Oracle CEP 管理者ガイド』の「Deployer コマンドライン リファレンス」を参照してください。
この節では、CQL サンプルで使用されるクエリを作成する方法について説明します。以下の節で構成されています。
この節では、Oracle CEP Visualizer Query Wizard を使用して、不足しているイベントを検出するために cqlProc
プロセッサで実行される Oracle CQL パターン マッチング クエリを作成する方法を示します。
Oracle CEP システムに入力される顧客注文ワークフロー イベントが含まれている顧客注文ワークフローを考えます。
有効なシナリオでは、表 3-1 に示す順序でイベントが発生します。
しかし、表 3-2 のように承認イベントなしで注文が出荷された場合はエラーです。
不足している承認イベントを検出し、警告イベントを生成するクエリを作成およびテストします。
不足イベント クエリを作成するには :
CQL の Oracle CEP インスタンスがまだ実行されていない場合は、節 3.10.1「CQL のサンプルの実行」の手順に従ってサーバを起動します。
Oracle CEP Visualizer を使用するにはサーバが実行中である必要があります。
ブラウザで以下の URL を起動します。
http://host:port/wlevs
host は、Oracle CEP が実行中のコンピュータ名を指します。port は、サーバにコンフィグレーションされている Jetty NetIO ポートを指します (デフォルト値 9002
)。
図 3-14 に示すように、ログオン画面が表示されます
ログオン画面で、[User Id] に wlevs
、[Password] に wlevs
と入力し、[Log In] をクリックします。
図 3-40 に示すように、Oracle CEP Visualizer ダッシュボードが表示されます。
Oracle CEP Visualizer のユーザ インタフェースの詳細については、『Oracle CEP Visualizer ユーザ ガイド』の「Oracle CEP Visualizer のユーザ インタフェースについて」を参照してください。
右側のペインで、[WLEventServerDomain|NonClusteredServer|Applications] を展開します。
[cql] ノードを選択します。
図 3-41 に示すように、CQL アプリケーション画面が表示されます。
[Event Processing Network] タブを選択します。
図 3-42 に示すように、[Event Processing Network] 画面が表示されます。
図 3-17 CQL アプリケーション : [Event Processing Network] タブ
[orderProcessor] Oracle CQL プロセッサ アイコンをダブルクリックします。
図 3-43 に示すように、Oracle CQL プロセッサ画面が表示されます。
[Query Wizard] タブを選択します。
図 3-44 に示すように、[Query Wizard] 画面が表示されます。
Oracle CQL Query Wizard を使用すると、テンプレートまたは個別の Oracle CQL 構成体から Oracle CQL クエリを作成できます。
この手順では、テンプレートから Oracle CQL クエリを作成します。
詳細については、『Oracle CEP Visualizer ユーザ ガイド』の「Query Wizard を使用した Oracle CQL プロセッサ内のルールの作成」を参照してください。
[Templates] タブをクリックします。
図 3-20 に示すように、[Templates] タブが表示されます。
[Templates] パレットから [Pattern Match Template] をクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-20 を参照)。
[SSource] アイコンをダブルクリックします。
図 3-46 に示すように、[SSource] コンフィグレーション画面が表示されます。
クエリのソースは orderChannel
ストリームになります。
SSource を次のようにコンフィグレーションします。
[Type] で [Stream] を選択します。
[Select a source] プルダウン メニューから [orderChannel] を選択します。
[Save] をクリックします。
[Save Query] をクリックします。
[Pattern] アイコンをダブルクリックします。
図 3-22 に示すように、[Pattern] コンフィグレーション画面が表示されます。
図 3-22 [Pattern] コンフィグレーション ダイアログ : [Pattern] タブ
[Pattern] タブを使用して、不足しているイベントが発生した場合に一致するパターン式を定義します。式は、後の手順で [Define] タブで指定する名前付き条件として作成されます。
[Pattern Expression] フィールドに次の式を入力します。
CustOrder NoApproval*? Shipment
このパターンでは、表 3-3 に示す Oracle CQL パターン量指定子を使用しています。パターン量指定子を使用して、パターン一致の許容範囲を指定します。1 文字のパターン量指定子は最大を表し、可能な限り多くの量の一致を先に試みます。2 文字のパターン量指定子は最小を表し、可能な限り少ない量の一致を先に試みます。
詳細については、以下を参照してください。
『Oracle CEP CQL 言語リファレンス』の「PATTERN 条件」
『Oracle CEP CQL 言語リファレンス』の「MATCH_RECOGNIZE 条件」
[Partition By] プルダウン メニューから [orderid] を選択し、プラス記号のボタンをクリックして PARTITION BY
句にこのプロパティを追加します。
これにより、Oracle CEP では各注文で不足イベント クエリが評価されます。
[Alias] フィールドに Orders と入力します。
後からクエリで簡単に使用できるように、パターンのエリアス (Orders
) を割り当てます。
[Define] タブをクリックします。
図 3-23 に示すように、[Define] タブが表示されます
図 3-23 [Pattern] コンフィグレーション ダイアログ : [Define] タブ
パターン句に指定した、表 3-4 の各条件を定義します。
[Object Name] フィールドに CustOrder と入力します。
式ビルダ ボタンをクリックし、[Expression Builder] を次のようにコンフィグレーションします (図 3-24 を参照)。
[Variables] リストで、[eventType] をダブルクリックします。
[Operands] リストで、[=] をダブルクリックします。
= 演算子の後に、値 'C'
を入力します。
[Save] をクリックします。
プラス記号のボタンをクリックします。
図 3-25 に示すように、条件の定義が [Object List] に追加されます
図 3-25 [Pattern] コンフィグレーション ダイアログ : CustOrder 条件の [Define] タブ
[Object Name] フィールドに NoApproval と入力します。
式ビルダ ボタンをクリックし、[Expression Builder] を次のようにコンフィグレーションします (図 3-24 を参照)。
[Variables] リストで、[eventType] をダブルクリックします。
[Operands] リストで、[=] をダブルクリックします。
= 演算子の後に、値 'A'
を入力します。
式を丸括弧で囲みます。
式の先頭 (開き括弧の前) に挿入カーソルを合わせます。
[Operands] リストで、[NOT] をダブルクリックします。
[Save] をクリックします。
プラス記号のボタンをクリックします。
条件の定義が [Object List] に追加されます。
[Object Name] フィールドに Shipment と入力します。
式ビルダ ボタンをクリックし、[Expression Builder] を次のようにコンフィグレーションします (図 3-24 を参照)。
[Variables] リストで、[eventType] をダブルクリックします。
[Operands] リストで、[=] をダブルクリックします。
= 演算子の後に、値 'S'
を入力します。
[Save] をクリックします。
プラス記号のボタンをクリックします。
[Define] タブは、図 3-28 のようになります。
図 3-28 [Pattern] コンフィグレーション ダイアログ : [Define] タブの完了
[Measure] タブをクリックします。
図 3-29 に示すように、[Measure] タブが表示されます。
[Measure] タブを使用して、MATCH_RECOGNIZE
条件の式を定義し、DEFINE
句の条件に一致するストリーム要素をクエリの SELECT 文に含めることのできる引数にバインドします。
[Measure] タブを使用して次を指定します。
CustOrder.orderid AS orderid
CustOrder.amount AS amount
詳細については、以下を参照してください。
『Oracle CEP CQL 言語リファレンス 』の「MEASURES 句」
『Oracle CEP CQL 言語リファレンス』の「MATCH_RECOGNIZE 条件」
[Object Name] フィールドに orderid と入力します。
式ビルダ ボタンをクリックし、[Expression Builder] を次のようにコンフィグレーションします (図 3-24 を参照)。
[Variables] リストで、[CustOrder.orderid] をダブルクリックします。
[Save] をクリックします。
プラス記号のボタンをクリックします。
[Object Name] フィールドに amount と入力します。
式ビルダ ボタンをクリックし、[Expression Builder] を次のようにコンフィグレーションします (図 3-24 を参照)。
[Variables] リストで、[CustOrder.amount] をダブルクリックします。
[Save] をクリックします。
プラス記号のボタンをクリックします。
[Measure] タブは、図 3-32 のようになります。
[Save] をクリックします。
[Select] アイコンをダブルクリックします。
図 3-33 に示すように、[Select] コンフィグレーション画面が表示されます。
図 3-33 [Select] コンフィグレーション ダイアログ : [Project] タブ
[Project] タブを次のようにコンフィグレーションします。
[Select or Input Event Type] プルダウン メニューから [AlertEvent] を選択します。
[Select a source] プルダウン メニューから [Orders] を選択します。
[Properties] リストで [orderid] をダブルクリックし、[Select or Input Alias] プルダウン メニューから [orderid] を選択します。
プラス記号のボタンをクリックして [Generated CQL Statement] にプロパティを追加します。
[Properties] リストで [amount] をダブルクリックし、[Select or Input Alias] プルダウン メニューから [amount] を選択します。
プラス記号のボタンをクリックして [Generated CQL Statement] にプロパティを追加します。
[Project Expression] フィールドをクリックして値 "Error - Missing Approval"
を入力し、[Select or Input Alias] プルダウン メニューから [alertType] を選択します。
プラス記号のボタンをクリックして [Generated CQL Statement] にプロパティを追加します。
[Project] タブは、図 3-34 のようになります。
図 3-34 [Select] コンフィグレーション ダイアログ : [Project] タブの完了
[Save] をクリックします。
[Save Query] をクリックします。
[Output] アイコンをダブルクリックします。
図 3-83 に示すように、[Output] コンフィグレーション画面が表示されます。
[Output] を次のようにコンフィグレーションします。
[Query] を選択します。
[Query Name] に Tracking と入力します。
[Inject Rule] をクリックします。
図 3-57 に示すように、[Inject Rule] 確認ダイアログが表示されます。
[OK] をクリックします。
Query Wizard で cqlProc
プロセッサにルールが追加されます。
[Save] をクリックします。
[CQLRules] タブをクリックします。
図 3-58 に示すように、[CQLRules] タブが表示されます。
[Query] ラジオ ボタンをクリックします。
Tracking
クエリが表示されていることを確認します。
不足イベント クエリをテストするには :
不足イベント クエリのデータ フィードをシミュレートするには、新しいコマンド ウィンドウを開き、節 3.5「開発環境の設定」の説明に従って環境を設定します。
ORACLE_CEP_HOME
\ocep_11.1\utils\load-generator
ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
data-aggre.prop
プロパティ ファイルを使用して load generator を実行します。
Windows の場合
prompt> runloadgen.cmd data-aggre.prop
UNIX の場合
prompt> runloadgen.sh data-aggre.prop
Oracle CEP Visualizer で、上ペインにある [ViewStream] ボタンをクリックします。
図 3-38 に示すように、[Stream Visualizer] 画面が表示されます。
[Initialize Client] をクリックします。
[Inititalize client] フィールドで /orderalert
と入力します。
[Subscribe] をクリックします。
不足しているイベントが検出されると、生成された AlertEvents
を表示する [Received Messages] 領域が更新されます。
この節では、Oracle CEP Visualizer Query Wizard を使用して、stockProc
プロセッサで実行される Oracle CQL 移動平均クエリを作成する方法を示します。
この作業には、2 つのステップがあります。
最初に、移動平均クエリのソースとして使用するビュー (サブクエリと同等の Oracle CQL) を作成します。
「移動平均クエリのビュー ソースを作成するには :」を参照してください。
次に、ソース ビューを使用して移動平均クエリを作成します。
「ビュー ソースを使用して移動平均クエリを作成するには :」を参照してください。
最後に、移動平均クエリをテストします。
「移動平均クエリをテストするには :」を参照してください。
移動平均クエリのビュー ソースを作成するには :
CQL の Oracle CEP インスタンスがまだ実行されていない場合は、節 3.10.1「CQL のサンプルの実行」の手順に従ってサーバを起動します。
Oracle CEP Visualizer を使用するにはサーバが実行中である必要があります。
ブラウザで以下の URL を起動します。
http://host:port/wlevs
host は、Oracle CEP が実行中のコンピュータ名を指します。port は、サーバにコンフィグレーションされている Jetty NetIO ポートを指します (デフォルト値 9002
)。
図 3-39 に示すように、ログオン画面が表示されます
ログオン画面で、[User Id] に wlevs
、[Password] に wlevs
と入力し、[Log In] をクリックします。
図 3-40 に示すように、Oracle CEP Visualizer ダッシュボードが表示されます。
Oracle CEP Visualizer のユーザ インタフェースの詳細については、『Oracle CEP Visualizer ユーザ ガイド』の「Oracle CEP Visualizer のユーザ インタフェースについて」を参照してください。
右側のペインで、[WLEventServerDomain|NonClusteredServer|Applications] を展開します。
[cql] ノードを選択します。
図 3-41 に示すように、CQL アプリケーション画面が表示されます。
[Event Processing Network] タブを選択します。
図 3-42 に示すように、[Event Processing Network] 画面が表示されます。
図 3-42 CQL アプリケーション : [Event Processing Network] タブ
[stockProcessor] Oracle CQL プロセッサ アイコンをダブルクリックします。
図 3-43 に示すように、Oracle CQL プロセッサ画面が表示されます。
[Query Wizard] タブを選択します。
図 3-44 に示すように、[Query Wizard] 画面が表示されます。
Oracle CQL Query Wizard を使用すると、テンプレートまたは個別の Oracle CQL 構成体から Oracle CQL クエリを作成できます。
この手順では、個別の Oracle CQL 構成体から Oracle CQL のビューとクエリを作成します。
詳細については、『Oracle CEP Visualizer ユーザ ガイド』の「Query Wizard を使用した Oracle CQL プロセッサ内のルールの作成」を参照してください。
[CQL Constructs] パレットから [SSource] アイコン (ストリーム ソース) をクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-65 を参照)。
[SSource] アイコンをダブルクリックします。
図 3-46 に示すように、[SSource] コンフィグレーション画面が表示されます。
ビューのソースは stockChannel
ストリームです。量が 1000 を超える場合に、このストリームから銘柄イベントを選択します。これが、移動平均クエリのソースになります。
SSource を次のようにコンフィグレーションします。
[Type] で [Stream] を選択します。
ビューのソースは stockChannel
ストリームです。
[Select a source] プルダウン メニューから [stockChannel] を選択します。
[AS
] フィールドにエリアス StockVolGt1000 を入力します。
[Save] をクリックします。
[Save Query] をクリックします。
次に、Oracle CQL のフィルタを追加します。
[CQL Constructs] パレットから [Filter] アイコンをクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-47 を参照)。
[SSource] アイコンをクリックして [Window] アイコンにドラッグし、Oracle CQL の構成体を接続します (図 3-48 を参照)。
[Filter] アイコンをダブルクリックします。
図 3-49 に示すように、[Filter] コンフィグレーション画面が表示されます。
式ビルダ ボタンをクリックします。
図 3-50 に示すように、[Expression Builder] ダイアログが表示されます。
[Expression Builder] を次のようにコンフィグレーションします。
[Select an Event Type] プルダウン メニューから [StockVolGt100] を選択し、この式で使用できる変数を定義します。
[symbol] 変数をダブルクリックし、[Expression Builder] フィールドに追加します。
[Operands] リストの [>] をダブルクリックし、[Expression Builder] フィールドに追加します。
> 演算子の後に、値 1000 を入力します。
[Save] をクリックします。
[Add Filter] をクリックします。
[Query Wizard] で [Generated CQL Statement] に式が追加されます (図 3-51 を参照)。
[Save] をクリックします。
[Save Query] をクリックします。
次に、SELECT 文を追加します。
[CQL Constructs] パレットから [Select] アイコンをクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-52 を参照)。
[Filter] アイコンをクリックし、[Select] アイコンにドラッグして、Oracle CQL の構成体を接続します。
[Select] アイコンをダブルクリックします。
図 3-53 に示すように、[Select] コンフィグレーション画面が表示されます。
StockVolGt1000
ストリームから price
、symbol
、および volume
を選択します。
[Select] を次のようにコンフィグレーションします。
[Select a source] プルダウン メニューから [StockVolGt1000] を選択します。
[price] プロパティを選択し、プラス記号のボタンをクリックします。
[Query Wizard] で [Generated CQL Statement] にプロパティが追加されます。
[symbol] および [volume] プロパティでも同様に繰り返します。
[Select] コンフィグレーション ダイアログは、図 3-54 のようになります。
[Save] をクリックします。
[Save Query] をクリックします。
最後に、[Output] を追加します。
[CQL Constructs] パレットから [Output] アイコンをクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-55 を参照)。
[Select] アイコンをクリックし、[Output] アイコンにドラッグして、Oracle CQL の構成体を接続します。
[Output] アイコンをダブルクリックします。
図 3-56 に示すように、[Output] コンフィグレーション画面が表示されます。
[Output] を次のようにコンフィグレーションします。
[View] を選択します。
[View Name] を StockVolGt1000
にコンフィグレーションします。
[View Schema] フィールドの内容を削除します。
Oracle CEP サーバで自動的にビュー スキーマが定義されるようにします。
[Inject Rule] をクリックします。
図 3-57 に示すように、[Inject Rule] 確認ダイアログが表示されます。
[OK] をクリックします。
Query Wizard で cqlProc
プロセッサにルールが追加されます。
[Save] をクリックします。
[CQLRules] タブをクリックします。
図 3-58 に示すように、[CQLRules] タブが表示されます。
[View] ラジオ ボタンをクリックします。
StockVolGt1000
ビューが表示されていることを確認します。
ビュー ソースを使用して移動平均クエリを作成するには :
CQL の Oracle CEP インスタンスがまだ実行されていない場合は、節 3.10.1「CQL のサンプルの実行」の手順に従ってサーバを起動します。
Oracle CEP Visualizer を使用するにはサーバが実行中である必要があります。
ブラウザで以下の URL を起動します。
http://host:port/wlevs
host は、Oracle CEP が実行中のコンピュータ名を指します。port は、サーバにコンフィグレーションされている Jetty NetIO ポートを指します (デフォルト値 9002
)。
図 3-59 に示すように、ログオン画面が表示されます。
ログオン画面で、[User Id] に wlevs
、[Password] に wlevs
と入力し、[Log In] をクリックします。
図 3-40 に示すように、Oracle CEP Visualizer ダッシュボードが表示されます。
Oracle CEP Visualizer のユーザ インタフェースの詳細については、『Oracle CEP Visualizer ユーザ ガイド』の「Oracle CEP Visualizer のユーザ インタフェースについて」を参照してください。
右側のペインで、[WLEventServerDomain|NonClusteredServer|Applications] を展開します。
[cql] ノードを選択します。
図 3-41 に示すように、CQL アプリケーション画面が表示されます。
[Event Processing Network] タブを選択します。
図 3-42 に示すように、[Event Processing Network] 画面が表示されます。
図 3-62 CQL アプリケーション : [Event Processing Network] タブ
[stockProcessor] Oracle CQL プロセッサ アイコンをダブルクリックします。
図 3-43 に示すように、Oracle CQL プロセッサ画面が表示されます。
[Query Wizard] タブを選択します。
図 3-44 に示すように、[Query Wizard] 画面が表示されます。
Oracle CQL Query Wizard を使用すると、テンプレートまたは個別の Oracle CQL 構成体から Oracle CQL クエリを作成できます。
この手順では、個別の Oracle CQL 構成体から Oracle CQL のビューとクエリを作成します。
詳細については、『Oracle CEP Visualizer ユーザ ガイド』の「Query Wizard を使用した Oracle CQL プロセッサ内のルールの作成」を参照してください。
[CQL Constructs] パレットから [SSource] アイコン (ストリーム ソース) をクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-65 を参照)。
[SSource] アイコンをダブルクリックします。
図 3-66 に示すように、[SSource] コンフィグレーション画面が表示されます。
[SSource] ダイアログを次のようにコンフィグレーションします。
[Type] で [View] を選択します。
[Select a source] プルダウン メニューから [StockVolGt1000] を選択します。
[Save] をクリックします。
[Save Query] をクリックします。
[CQL Constructs] パレットから [Window] アイコンをクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-67 を参照)。
[SSource] アイコンをクリックし、[Window] アイコンにドラッグして、Oracle CQL の構成体を接続します。
[Window] アイコンをダブルクリックします。
図 3-66 に示すように、[SSource] コンフィグレーション画面が表示されます。
symbol
で分割された、最新の 2 件のイベントに対するスライド枠を作成します。
[Window] ダイアログを次のようにコンフィグレーションします。
[Source Property List] の [symbol] を選択し、[Partition List] に追加します。
[Type] で [Partition] を選択します。
[Row Based] を選択し、[Row Based] フィールドに 2 と入力します。
[Add Window] をクリックします。
[Query Wizard] で [Generated CQL Statement] にスライド枠が追加されます (図 3-69 を参照)。
[Save] をクリックします。
[Save Query] をクリックします。
[CQL Constructs] パレットから [Select] アイコンをクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-67 を参照)。
[Window] アイコンをクリックし、[Select] アイコンにドラッグして、Oracle CQL の構成体を接続します。
[Select] アイコンをダブルクリックします。
図 3-66 に示すように、[Select] コンフィグレーション画面が表示されます。
図 3-71 [Select] コンフィグレーション ダイアログ : ソース プロパティ symbol の選択
[Select a source] プルダウン メニューから [StockVolGt1000] を選択します。
これは、移動平均クエリのソースとなる、前の手順で作成したビューです (「移動平均クエリのビュー ソースを作成するには :」を参照)。
[Select or Input Event Type] プルダウン メニューから [MovingAvgEvent] を選択します。
これは、移動平均クエリで生成される出力イベントです。ソース イベントのプロパティをこの出力イベントにマップします。
[Source Properties] リストで、[symbol] を選択します。
図 3-72 に示すように、選択されたソース プロパティが [Project Expression] に追加されます。
図 3-72 [Select] コンフィグレーション ダイアログ : ソース プロパティ symbol の選択
ここでは、ソース プロパティ symbol
を出力イベント プロパティ symbol
にそのままマップします。
[AS] フィールドの横のプルダウン メニューをクリックし、[symbol] を選択します。
プラス記号のボタンをクリックします。
[Generated CQL Statement] のプロジェクト式にソース プロパティが追加されます (図 3-73 を参照)。
図 3-73 [Select] コンフィグレーション ダイアログ : ソース プロパティ symbol の出力イベント プロパティへのマップ
[Source Properties] リストで、[price] を選択します。
図 3-74 に示すように、選択されたソース プロパティが [Project Expression] に追加されます。
図 3-74 [Select] コンフィグレーション ダイアログ : ソース プロパティ price の選択
ここでは、出力イベントにマップする前にソース プロパティ price
を処理する必要があります。
式ビルダ ボタンをクリックします。
[Expression Builder] ダイアログが図 3-75 のように表示されます。
[Select a function type] プルダウン メニューから [Aggregate Functions] を選択します。
Oracle CQL で提供される集約関数のリストが表示されます。[AVG] 関数を使用します。
[Expression Builder] フィールドで、[StockVolGt1000.price] を選択します。
[AVG] 関数をダブルクリックします。
図 3-76 に示すように、AVG()
関数が [Expression Builder] フィールドで選択した部分に適用されます。
[Save] をクリックします。
図 3-77 に示すように、[Project Expression] フィールドに式が追加されます。
[As] フィールドの横のプルダウン メニューをクリックし、[movingAvgPrice] を選択します。
プラス記号のボタンをクリックします。
図 3-78 に示すように、[Generated CQL Statement] のプロジェクト式にソース プロパティが追加されます。
図 3-78 [Select] コンフィグレーション ダイアログ : ソース プロパティ price の出力イベント プロパティへのマップ
[Validate] をクリックします。
図 3-79 に示すように、検証エラーのダイアログが表示されます。
分割を行うため、GROUP BY
句を指定する必要があります。
[Group] タブを選択します。
図 3-80 に示すように [Group] タブが表示されます。
[Group] タブを次のようにコンフィグレーションします。
[Select a source] プルダウン メニューから [StockVolGt1000] を選択します。
[Properties] リストから [symbol] を選択します。
プラス記号のボタンをクリックします。
図 3-81 に示すように、symbol
プロパティが GROUP BY
句に追加されます。
[Save] をクリックします。
[Save Query] をクリックします。
次に、クエリを出力に接続します。
[CQL Constructs] パレットから [Output] アイコンをクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-82 を参照)。
[Select] アイコンをクリックし、[Output] アイコンにドラッグして、Oracle CQL の構成体を接続します。
[Output] アイコンをダブルクリックします。
図 3-83 に示すように、[Output] コンフィグレーション画面が表示されます。
[Output] を次のようにコンフィグレーションします。
[Query] を選択します。
[Query Name] に MovingAverage と入力します。
[Inject Rule] をクリックします。
図 3-57 に示すように、[Inject Rule] 確認ダイアログが表示されます。
[OK] をクリックします。
Query Wizard で cqlProc
プロセッサにルールが追加されます。
[Save] をクリックします。
[CQLRules] タブをクリックします。
図 3-58 に示すように、[CQLRules] タブが表示されます。
[Query] ラジオ ボタンをクリックします。
MovingAverage
クエリが表示されていることを確認します。
移動平均クエリをテストするには :
移動平均クエリのデータ フィードをシミュレートするには、新しいコマンド ウィンドウを開き、節 3.5「開発環境の設定」の説明に従って環境を設定します。
ORACLE_CEP_HOME
\ocep_11.1\utils\load-generator
ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
stockData.prop
プロパティ ファイルを使用して load generator を実行します。
Windows の場合
prompt> runloadgen.cmd stockData.prop
UNIX の場合
prompt> runloadgen.sh stockData.prop
Oracle CEP Visualizer で、上ペインにある [ViewStream] ボタンをクリックします。
図 3-38 に示すように、[Stream Visualizer] 画面が表示されます。
[Initialize Client] をクリックします。
[Inititalize client
] フィールドに /alertOutput と入力します。
[Subscribe] をクリックします。
移動平均クエリによってイベントが出力されると、Oracle CEP では生成されたイベントを表示する [Received Messages] 領域が更新されます。