この節では、次の項目について説明します。
HelloWorld: 標準的なOracle CEPの基本スケルトン。
Oracle Continuous Query Language (CQL): Oracle CEP Visualizer問合せウィザードを使用して、イベント・ストリームを処理する様々なOracle CQL問合せを作成する方法を示すサンプル。
Oracle Spatial: Oracle Spatialの使用方法を示すサンプルで、Oracle CQL問合せで全地球測位システム(GPS)のイベント・ストリームを処理してバスのGPS位置を追跡し、バスが事前に定義されたバス停の位置に到着するとアラートを生成します。
外国為替取引(FX): 複数のコンポーネントを含む完全なサンプル。
シグナル生成: 市場取引およびトレンド検出をシミュレートするサンプル。
イベントの記録と再生: 永続イベント・ストアを使用してイベントの記録と再生を構成する方法を示すサンプル。
これらのサンプルは次の2つの形式で提供されます。
サンプルではAntを開発ツールとして使用しています。Antの詳細とコンピュータへのインストール方法は、http://ant.apache.org/
を参照してください。
注意: その他のOracle CEPサンプル・コードは、http://www.oracle.com/technology/sample_code/products/event-driven-architecture にあります。 |
アセンブルしたアプリケーションをデプロイするための、そのまま使用できるサンプル・ドメインが事前に構成されています。わかりやすくするために、サンプルごとに固有のドメインが用意されています。各ドメインはスタンドアロンのサーバー・ドメインです。サーバー・ファイルは、ドメイン・ディレクトリのdefaultserver
サブディレクトリに格納されます。アプリケーションをデプロイするには、ドメインのデフォルト・サーバーを起動するだけです。
サンプルのHelloWorldドメインはORACLE_CEP_HOME
\ocep_11.1\samples\domains\helloworld_domain
にあります。ORACLE_CEP_HOME
はOracle CEPのメイン・インストール・ディレクトリです(d:\oracle_cep
など)。
詳細は、3.6.1項「helloworldドメインから実行するHelloWorldのサンプル」を参照してください。
サンプルのCQLドメインはORACLE_CEP_HOME
\ocep_11.1\samples\domains\cql_domain
にあります。
詳細は、3.7.1項「CQLのサンプルの実行」を参照してください。
サンプルのOracle SpatialドメインはORACLE_CEP_HOME
\ocep_11.1\samples\domains\spatial_domain
にあります。
詳細は、3.8.1項「Oracle Spatialサンプルの実行」を参照してください。
サンプルの外国為替取引ドメインはORACLE_CEP_HOME
\ocep_11.1\samples\domains\fx_domain
にあります。
詳細は、3.9.1項「外国為替取引のサンプルの実行」を参照してください。
サンプルのシグナル生成ドメインはORACLE_CEP_HOME
\ocep_11.1\samples\domains\signalgeneration_domain
にあります。
詳細は、3.10.1項「シグナル生成のサンプルの実行」を参照してください。
サンプルの記録と再生のドメインはORACLE_CEP_HOME
\ocep_11.1\samples\domains\recplay_domain
にあります。
詳細は、3.11.1項「イベントの記録/再生のサンプルの実行」を参照してください。
各サンプルのJavaソースと構成XMLソースは、サンプルの開発環境を示す個別のソース・ディレクトリで提供されます。
HelloWorldのソース・ディレクトリはORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\helloworld
にあります。ORACLE_CEP_HOME
はOracle CEPのメイン・インストール・ディレクトリです(d:\oracle_cep
など)。
詳細は、3.6.4項「HelloWorldのサンプルの実装」を参照してください。
CQLのソース・ディレクトリはORACLE_CEP_HOME
\ocep_11.1\\samples\source\applications\cql
にあります。
詳細は、3.7.4項「CQLのサンプルの実装」を参照してください。
Oracle Spatialのソース・ディレクトリはORACLE_CEP_HOME
\ocep_11.1\\samples\source\applications\spatial
にあります。
詳細は、3.8.4項「Oracle Spatialサンプルの実装」を参照してください。
外国為替取引のソース・ディレクトリはORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\fx
にあります。
詳細は、3.9.4項「外国為替取引のサンプルの実装」を参照してください。
シグナル生成のソース・ディレクトリは、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\signalgeneration
にあります。
詳細は、3.10.4項「シグナル生成のサンプルの実装」を参照してください。
記録と再生のソース・ディレクトリはORACLE_CEP_HOME
\ocep_11.1\\samples\source\applications\recplay
にあります。
詳細は、3.11.4項「記録と再生のサンプルの実装」を参照してください。
デフォルトのocep_domain
ドメイン(デフォルトのパスワード)およびサンプルを含め、すべてのOracle CEPコンポーネントをインストールするには、「カスタム」
オプションを使用する必要があります。「標準」
オプションには、デフォルトのocep_domain
およびサンプルは含まれません。
以前に「標準」
オプションを使用してOracle CEPをインストールしている場合に、サンプルもインストールするには、Oracle CEPインストール・プロセスを再実行し、同じOracle CEPホーム・ディレクトリを指定します。インストール・プロセスの後半のステップで、サンプルのみをインストールできます。
The Oracle CEP Visualizerは、Oracle CEPからのデータを使用し、そのデータを便利で直感的な方法でシステム管理者やオペレータに表示し、さらに特定のタスクにおいて構成の変更を行うために受け入れたデータを再びOracle CEPに返すWeb 2.0アプリケーションです。
Visualizer自身は各サーバー・インスタンスに自動的にデプロイされるOracle CEPアプリケーションです。サンプルでVisualizerを使用するには、次の各サンプルに示されている手順に従ってサーバーを起動済であることを確認し、ブラウザで次のURLを起動します。
http://host:9002/wlevs
host
は、Oracle CEPをホストするコンピュータ名です。ブラウザを実行しているのと同じコンピュータである場合は、localhost
とすることができます。
HelloWorldアプリケーションではセキュリティが無効になるため、ログイン画面でユーザー名とパスワードを入力せずに「ログオン」をクリックできます。ただし、FXおよびシグナル生成のサンプルでは、セキュリティが有効になるため、次の情報を使用してログインします。
User Id: wlevs Password: wlevs
Visualizerの詳細は、1.8項「Oracle CEP Visualizer」を参照してください。
サンプルおよびOracle CEPアプリケーション全般について、実行時のスループットを向上させ待機時間を短縮させるには、次の処理をお薦めします。
Oracle JRockit Real Timeに含まれるJRockit JDKを使用して、該当するドメインのOracle CEPインスタンスの起動コマンドに-dgc
パラメータを指定して確定的ガベージ・コレクタを有効にします。
prompt> startwlevs.cmd -dgc
デフォルトでは、確定的ガベージ・コレクタはサンプルに対して無効になっています。
Oracle JRockit Real Timeの詳細は、http://www.oracle.com/technology/products/jrockit/jrrt/index.html
を参照してください。
メモリー容量の大きいコンピュータでOracle CEPを実行している場合は、コンピュータの容量に合わせてロード・ジェネレータとサーバーのヒープ・サイズを適切に設定する必要があります。十分なメモリー容量のコンピュータでは、サーバーのヒープ・サイズを1GB、ロード・ジェネレータのヒープ・サイズを512MB - 1GBとすることをお薦めします。
Oracle CEPインスタンスを起動してサンプルを実行する前に、開発環境を設定する必要があります。特に、正しいバージョンのJRockit JDKを使用するようにPATH
およびJAVA_HOME
環境変数を設定する必要があります。
JRockitをコンピュータにインストールするときに使用された可能性がある方法として、次の2つの方法があります。
Oracle JRockit Real Timeインストールの一部としてのインストール。このバージョンのJRockit JDKには確定的ガベージ・コレクタが含まれています。
Oracle CEP 11g リリース1(11.1.1)インストールの一部としてのインストール。このバージョンのJRockit JDKには確定的ガベージ・コレクタが含まれていません。このバージョンはテスト目的専用に提供されています。
必須ではありませんが、最適な結果を得るためには、Oracle JRockit Real Timeに含まれるJRockit JDKバージョンを使用してOracle CEPを実行することをお薦めします。以下の手順では、いずれの場合にも適用できる環境の設定方法を説明します。
JRockitの詳細は、3.4項「サンプルのパフォーマンスの改善」を参照してください。
この節では、次の内容について説明します。
この手順は、Windowsに開発環境を設定する方法を説明します。
setEnv.cmd
などのコマンド・ファイルを作成して、ここで説明するset
コマンドを指定しておくと、セッションからログアウトした後に開発環境を簡単にリセットできます。
Windowsコンピュータで、「コントロール パネル」→「システム」ウィンドウを呼び出し、「詳細設定」タブ、「環境変数」ボタンの順にクリックして、必要な環境変数を永続的に設定することもできます。環境変数は、現在のユーザーに対して、またはシステム全体に対して設定できます。
Windowsで開発環境を設定するには:
JRockit JDKのbin
ディレクトリを含むようにPATH
環境変数を更新します。また、PATH
環境変数にAntのインストール先のbin
ディレクトリが含まれていることを確認してください。
Oracle JRockit Real Timeと一緒にインストールされたJRockit JDKを使用する場合
Oracle JRockit Real Timeがd:\jrockit
ディレクトリにインストールされていて、Antがd:\ant
ディレクトリにインストールされている場合は、PATH環境変数を次のように設定します。
prompt> set PATH=d:\jrockit\[JRRT_HOME]\bin;d:\ant\bin;%PATH%
JRRT_HOME
は、JRockit Real Timeのディレクトリです。
Oracle CEPと一緒にインストールされたJRockit JDKを使用する場合
Oracle CEPがd:\oracle_cep
ディレクトリにインストールされていて、Antがd:\ant
ディレクトリにインストールされている場合は、PATH
環境変数を次のように設定します。
prompt> set PATH=d:\oracle_cep\jrockit_160_20\bin;d:\ant\bin;%PATH%
setDomainEnv.cmd
スクリプトのJAVA_HOME
変数が正しいJRockit JDKを参照していることを確認します。正しくない場合は、スクリプトを編集します。
setDomainEnv.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と一緒にインストールされたJRockit JDKを使用する場合
set
コマンドを次のように指定します。
set JAVA_HOME=d:\jrockit\[JRRT_HOME]
JRRT_HOME
は、JRockit Real Timeのディレクトリです。
Oracle CEPと一緒にインストールされたJRockit JDKを使用する場合
set
コマンドを次のように指定します。
set JAVA_HOME=d:\oracle_cep\jrockit_160_20
独自の開発環境のJAVA_HOME
変数を、JRockit JDKを参照するように設定します。
Oracle JRockit Real Timeと一緒にインストールされたJRockit JDKを使用する場合
set
コマンドを次のように指定します。
prompt> set JAVA_HOME=d:\jrockit\[JRRT_HOME]
JRRT_HOME
は、JRockit Real Timeのディレクトリです。
Oracle CEPと一緒にインストールされたJRockit JDKを使用する場合
set
コマンドを次のように指定します。
prompt> set JAVA_HOME=d:\oracle_cep\jrockit_160_20
この手順は、UNIXに開発環境を設定する方法を説明します。
setEnv.sh
などのコマンド・ファイルを作成して、ここで説明するset
コマンドを指定しておくと、セッションからログアウトした後に開発環境を簡単にリセットできます。
UNIXで開発環境を設定するには:
JRockit JDKのbin
ディレクトリを含むようにPATH
環境変数を更新します。また、PATH
環境変数にAntのインストール先のbin
ディレクトリが含まれていることを確認してください。
Oracle JRockit Real Timeと一緒にインストールされたJRockit JDKを使用する場合
Oracle JRockit Real Timeが/jrockit
ディレクトリにインストールされていて、Antが/ant
ディレクトリにインストールされている場合は、PATH
環境変数を次のように設定します。
prompt> PATH=/jrockit/j[JRRT_HOME]/bin:/ant/bin:$PATH
JRRT_HOME
は、JRockit Real Timeのディレクトリです。
Oracle CEPと一緒にインストールされたJRockit JDKを使用する場合
Oracle CEPが/oracle_cep
ディレクトリにインストールされていて、Antが/ant
ディレクトリにインストールされている場合は、PATH
環境変数を次のように設定します。
prompt> PATH=/oracle_cep/jrockit_160_20/bin:/ant/bin:$PATH
setDomainEnv.sh
スクリプトのJAVA_HOME
変数が正しいJRockit JDKを参照していることを確認します。正しくない場合は、スクリプトを編集します。
setDomainEnv.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と一緒にインストールされたJRockit JDKを使用する場合
JAVA_HOME
変数を次のように設定します。
JAVA_HOME=/jrockit/[JRRT_HOME]
JRRT_HOME
は、JRockit Real Timeのディレクトリです。
Oracle CEPと一緒にインストールされたJRockit JDKを使用する場合
JAVA_HOME
変数を次のように設定します。
JAVA_HOME=/oracle_cep/jrockit_160_20
開発環境のJAVA_HOME
変数を、JRockit JDKを参照するように設定します。
Oracle JRockit Real Timeと一緒にインストールされたJRockit JDKを使用する場合
JAVA_HOME
変数を次のように設定します。
prompt> JAVA_HOME=/jrockit/[JRRT_HOME]
JRRT_HOME
は、JRockit Real Timeのディレクトリです。
Oracle CEPと一緒にインストールされたJRockit JDKを使用する場合
JAVA_HOME
変数を次のように設定します。
prompt> JAVA_HOME=/oracle_cep/jrockit_160_20
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に含まれるJRockit JDKを使用している場合は、コマンドに-dgc
パラメータを指定して確定的ガベージ・コレクタを有効にします。
prompt> startwlevs.cmd -dgc
Oracle JRockit Real Timeに含まれるJRockit JDKを使用しない場合
prompt> startwlevs.cmd
UNIXの場合:
Oracle JRockit Real Timeに含まれるJRockit JDKを使用している場合は、コマンドに-dgc
パラメータを指定して確定的ガベージ・コレクタを有効にします。
prompt> startwlevs.sh -dgc
Oracle JRockit Real Timeに含まれる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_11.1.1.4_0.jar
というJARファイルを生成し、生成したJARファイルを現在のディレクトリの下のdist
ディレクトリに格納します。
deploy
- このターゲットはDeployerユーティリティを使用してJARファイルをOracle CEPにデプロイします。
詳細は、『Oracle Complex Event Processing管理者ガイド』のDeployerコマンドライン・リファレンスに関する項を参照してください。
HelloWorldのサンプルの実装は、通常は『Eclipse用Oracle CEP開発者ガイド』の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ファイルの一般的なプログラミング方法については、『Eclipse用Oracle CEP開発者ガイド』のOracle CEPイベント処理ネットワークの拡張に関する項を参照してください。
HelloWorldEvent
イベント・タイプを記述したJavaソース・ファイル。
サンプルでは、このファイルはHelloWorldEvent.java
という名前で、src/com/bea/wlevs/event/example/helloworld
ディレクトリにあります。
このファイルの詳細な説明と、イベント・タイプのプログラミングの概要については、『Eclipse用Oracle CEP開発者ガイド』のイベント・タイプの作成に関する項を参照してください。
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
ディレクトリにあります。
このファイルの詳細な説明と、イベント・シンクのプログラミングの概要については、『Eclipse用Oracle CEP開発者ガイド』のOracle CEPイベント処理ネットワークの拡張に関する項を参照してください。
Oracle CEPにデプロイされるOSGiバンドルのコンテンツを記述したMANIFEST.MF
ファイル。
サンプルでは、MANIFEST.MF
ファイルがMETA-INF
ディレクトリにあります。
このファイルの作成方法およびOracle CEPにデプロイするOSGiバンドルの作成方法の詳細は、『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」などです。
詳細については、次を参照してください:
『Eclipse用Oracle CEP開発者ガイド』のスキーマ参照: EPN Assembly spring-wlevs-v11_1_1_3.xsdに関する項
『Eclipse用Oracle CEP開発者ガイド』のOracle CEPスキーマに関する項
例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_1_1_3.xsd"> <wlevs:event-type-repository> <wlevs:event-type type-name="HelloWorldEvent"> <wlevs:class>com.bea.wlevs.event.example.helloworld.HelloWorldEvent</wlevs:class> </wlevs:event-type> </wlevs:event-type-repository> <wlevs:adapter id="helloworldAdapter" class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter" > <wlevs:instance-property name="message" value="HelloWorld - the 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
要素は、HellowWorldアプリケーションのアダプタ・コンポーネントを定義します。
<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
要素のid属性と同じように機能します。
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
のid属性と同様に機能します。manageable
属性は、チャネルのモニターを有効にします。コンポーネントの管理容易性はデフォルトで無効になっています。
id="helloworldInstream"
のwlevs:channel
要素は、wlevs:listener
子要素を使用して、helloworldProcessor
がチャネルをリスニングするように指定します。また、wlevs:source
子要素を使用して、チャネルがhelloworldAdapter
コンポーネントからイベントを取得するように指定します。
id="helloworldOutstream"
のwlevs:channel
要素でも、これらのlistenerタグとsourceタグを使用します。ただし、1つ異なる点として、一意の識別子を参照するのではなく、wlevs:listener
要素でビジネス・ロジックPOJOの定義を直接ネストします。この場合、ネストされたタグは、POJOがcom.bea.wlevs.example.helloworld.HelloWorldBean
クラスで実装されることを指定するSpring標準のbean
要素です。
HelloWorldアプリケーションは、例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 ]]> </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]
または[range 1]
など)が使用されていません。ウィンドウ演算子を使用すると、出力はストリームではなくリレーションになります。下流のHelloWorldBean
POJOについて考えてみてください。これがStreamSink
のみ(RelationSink
ではなく)を実装するのは、この問合せの出力がストリームであるためです(ウィンドウ演算子で生成されるリレーションではありません)。このため、HelloWorldBean
POJOは挿入イベントのみを出力します。RelationSink
を実装していないため、削除イベントは出力しません。通常は、ストリームを生成する後続の問合せまたはビューで使用するために、リレーション(ウィンドウ演算子を使用)を出力する問合せ(およびビュー)を作成します。
詳細およびOracle CEP問合せ言語を使用するサンプルは、次を参照してください。
『Oracle Complex Event Processing CQL言語リファレンス』
『Oracle Complex Event Processing EPL言語リファレンス』
注意: Oracle EPLはOracle CQLによって置き換えられます。 |
CQLのサンプルは、Oracle CEP Visualizerの問合せウィザードを使用して様々な種類のOracle CQL問合せを作成する方法を示します。
図3-2に、CQLサンプルのイベント処理ネットワーク(EPN)を示します。EPNには、このアプリケーションを構成するコンポーネントが含まれ、コンポーネントの組合せが示されます。
このアプリケーションのEPNには3つの異なるイベント・パスが含まれます。
欠落イベント: このイベント・パスは、チャネルorderChannel
に接続するアダプタorderCVSAdapter
で構成されています。orderChannel
からプロセッサorderProcessor
、チャネルalertChannel
、アダプタalertOutput
の順に接続しています。
このイベント・パスは、顧客注文ワークフローの欠落イベントを検出するために使用されます。
cqlProc
プロセッサが実行する問合せの作成方法の詳細は、3.7.4.1項「欠落イベントの問合せの作成」を参照してください。
移動平均: このイベント・パスは、順に接続されているチャネルstockChannel
、プロセッサstockProcessor
、チャネルmovingAvgChannel
、アダプタmovingOutput
で構成されます。
このイベント・パスは、数が1000を超える在庫の移動平均を計算するために使用されます。
cqlProc
プロセッサが実行する問合せの作成方法の詳細は、3.7.4.2項「移動平均の問合せの作成」を参照してください。
キャッシュ: このイベント・パスは、順に接続されているアダプタadapter
、チャネルS1
、Oracle CQLプロセッサcacheProcessor
、チャネルS2
、Bean Bean
で構成されます。キャッシュstockCache
もあり、Oracle CQLプロセッサcacheProcessor
に接続しています。また、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に含まれるJRockit JDKを使用している場合は、コマンドに-dgc
パラメータを指定して確定的ガベージ・コレクタを有効にします。
prompt> startwlevs.cmd -dgc
Oracle JRockit Real Timeに含まれるJRockit JDKを使用しない場合
prompt> startwlevs.cmd
UNIXの場合:
Oracle JRockit Real Timeに含まれるJRockit JDKを使用している場合は、コマンドに-dgc
パラメータを指定して確定的ガベージ・コレクタを有効にします。
prompt> startwlevs.sh -dgc
Oracle JRockit Real Timeに含まれるJRockit JDKを使用しない場合
prompt> startwlevs.sh
これで、CQLアプリケーションでデータ・フィードからデータを受信する準備ができました。
欠落イベントの問合せのデータ・フィードをシミュレートするには、新しいコマンド・ウィンドウを開き、3.5項「開発環境の設定」の説明に従って環境を設定します。
ORACLE_CEP_HOME
\ocep_11.1\utils\load-generator
ディレクトリに移動します。ORACLE_CEP_HOME
はOracle CEPのメイン・インストール・ディレクトリです(d:\oracle_cep.
など)。
orderData.prop
プロパティ・ファイルを使用してロード・ジェネレータを実行します。
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
はOracle CEPのメイン・インストール・ディレクトリです(d:\oracle_cep.
など)。
stockData.prop
プロパティ・ファイルを使用してロード・ジェネレータを実行します。
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.7.3項「CQLサンプルをビルドするAntターゲットの説明」を参照)。
ソース・ディレクトリからCQLのサンプルをビルドしてデプロイするには:
CQLのOracle CEPインスタンスがまだ実行されていない場合は、3.7.1項「CQLのサンプルの実行」の手順に従ってサーバーを起動します。
再ビルドしたアプリケーションを正常にデプロイするには、サーバーが実行中である必要があります。
新しいコマンド・ウィンドウを開き、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\cql
にあるCQLのソース・ディレクトリに移動します。ORACLE_CEP_HOME
はOracle CEPのメイン・インストール・ディレクトリです(d:\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アプリケーションで必要なロード・ジェネレータが実行されていない場合は、3.7.1項「CQLのサンプルの実行」の説明に従って起動します。
CQLソースの最上位レベル・ディレクトリにあるbuild.xml
ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。
clean
- このターゲットは、現在のディレクトリの下にあるdist
およびoutput
作業ディレクトリを削除します。
all
- このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.cql_11.1.1.4_0.jar
というJARファイルを生成し、生成したJARファイルを現在のディレクトリの下のdist
ディレクトリに格納します。
deploy
- このターゲットはDeployerユーティリティを使用してJARファイルをOracle CEPにデプロイします。
詳細は、『Oracle Complex Event Processing管理者ガイド』のDeployerコマンドライン・リファレンスに関する項を参照してください。
ここでは、CQLのサンプルで使用される問合せの作成方法を説明します。
ここでは、Oracle CEP Visualizer問合せウィザードを使用して、cqlProc
プロセッサが欠落イベントを検出するために実行するOracle CQLのパターン一致問合せを作成する方法を説明します。
顧客注文ワークフロー・イベントがOracle CEPシステムに流れる顧客注文ワークフローについて考えてみます。
有効なシナリオでは、表3-1に示す順序でイベントが出現します。
ただし、表3-2に示すように承認イベントなしで注文が出荷されるとエラーになります。
承認イベントの欠落を検出してアラート・イベントを生成する問合せを作成してテストします。
欠落イベントの問合せを作成するには:
CQLのOracle CEPインスタンスがまだ実行されていない場合は、3.7.1項「CQLのサンプルの実行」の手順に従ってサーバーを起動します。
Oracle CEP Visualizerを使用するには、サーバーが実行中である必要があります。
ブラウザで次のURLを起動します。
http://host:port/wlevs
hostは、Oracle CEPが実行中のコンピュータ名を指します。portは、サーバーに構成されているJetty NetIOポートを指します(デフォルト値9002
)。
図3-3に示すように「ログオン」画面が表示されます。
「ログオン」画面で、「ユーザーID」にwlevs
、「パスワード」にwlevs
を入力し、「ログイン」をクリックします。
図3-29に示すようにOracle CEP Visualizerダッシュボードが表示されます。
Oracle CEP Visualizerのユーザー・インタフェースの詳細は、Oracle CEP Visualizerユーザーズ・ガイドのOracle CEP Visualizerユーザー・インタフェースの概要に関する項を参照してください。
右側のペインで、「WLEventServerDomain」→「NonClusteredServer」→「アプリケーション」を展開します。
cqlノードを選択します。
図3-30に示すようにCQLアプリケーション画面が表示されます。
「イベント処理ネットワーク」タブを選択します。
図3-31に示すように「イベント処理ネットワーク」画面が表示されます。
Oracle CQLプロセッサorderProcessorのアイコンをダブルクリックします。
図3-32に示すようにOracle CQLプロセッサ画面が表示されます。
「問合せウィザード」タブを選択します。
図3-33に示すように「問合せウィザード」画面が表示されます。
Oracle CQL問合せウィザードを使用すると、テンプレートまたは個々のOracle CQL構文からOracle CQL問合せを作成できます。
この手順では、テンプレートからOracle CQL問合せを作成します。
詳細は、Oracle CEP Visualizerユーザーズ・ガイドの問合せウィザードを使用したOracle CQLプロセッサのルール作成に関する項を参照してください。
「テンプレート」タブを選択します。
図3-9に示すように「テンプレート」タブが表示されます。
図3-9に示すように、「パターン一致」テンプレートを「テンプレート」タブでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
SSourceのアイコンをダブルクリックします。
図3-35に示すようにSSourceの構成ダイアログが表示されます。
問合せのソースはorderChannel
ストリームです。
SSourceを次のように構成します。
「タイプ」として「ストリーム」を選択します。
「ソースの選択」プルダウン・メニューでorderChannelを選択します。
「保存」をクリックします。
「問合せの保存」をクリックします。
「パターン」アイコンをダブルクリックします。
図3-11に示すようにパターンの構成ダイアログが表示されます。
「パターン」タブを使用して、欠落イベントの発生と一致するパターン式を定義します。この式は、後の手順で「定義」タブに指定する名前付き条件を使用して作成します。
「パターン式」フィールドに次の式を入力します。
CustOrder NoApproval*? Shipment
このパターンでは、表3-3に示すOracle CQLのパターン量指定子が使用されます。パターン量指定子を使用して、パターン一致が許可される範囲を指定します。1文字のパターン量指定子は最大(最長マッチ)を指定し、まず最大の数量との一致を試行します。2文字のパターン量指定子は最小(最短マッチ)を指定し、まず最小の数量との一致を試行します。
詳細については、次を参照してください:
『Oracle Complex Event Processing CQL言語リファレンス』のPATTERN条件に関する項
『Oracle Complex Event Processing CQL言語リファレンス』のMATCH_RECOGNIZE条件に関する項
「パーティション基準」プルダウン・メニューからorderidを選択し、プラス記号ボタンをクリックしてこのプロパティをPARTITION BY
句に追加します。
これで、Oracle CEPが各注文について欠落イベントの問合せを検証するようになります。
別名フィールドにOrdersと入力します。
これで、パターンの別名(Orders
)が割り当てられ、後から問合せで使用するときに便利です。
「定義」タブをクリックします。
図3-12に示すように「定義」タブが表示されます。
ここで、表3-4に示すようにパターン句に指定する各条件を定義します。
「オブジェクト名」フィールドにCustOrderと入力します。
「式ビルダー」ボタンをクリックし、次のように式ビルダーを構成します(図3-13を参照)。
「変数」リストでeventTypeをダブルクリックします。
「オペランド」リストで=をダブルクリックします。
=オペランドの後に値'C'
を入力します。
「保存」をクリックします。
プラス記号ボタンをクリックします。
図3-14に示すように条件定義がオブジェクト・リストに追加されます。
「オブジェクト名」フィールドにNoApprovalと入力します。
「式ビルダー」ボタンをクリックし、次のように式ビルダーを構成します(図3-13を参照)。
「変数」リストでeventTypeをダブルクリックします。
「オペランド」リストで=をダブルクリックします。
=オペランドの後に値'A'
を入力します。
式をカッコで囲みます。
式の先頭のカッコの外側にカーソルを置きます。
「オペランド」リストでNOTをダブルクリックします。
「保存」をクリックします。
プラス記号ボタンをクリックします。
条件定義がオブジェクト・リストに追加されます。
「オブジェクト名」フィールドにShipmentと入力します。
「式ビルダー」ボタンをクリックし、次のように式ビルダーを構成します(図3-13を参照)。
「変数」リストでeventTypeをダブルクリックします。
「オペランド」リストで=をダブルクリックします。
=オペランドの後に値'S'
を入力します。
「保存」をクリックします。
プラス記号ボタンをクリックします。
図3-17に示すように「定義」タブが表示されます。
「メジャー」タブをクリックします。
図3-18に示すように「メジャー」タブが表示されます。
「メジャー」タブを使用して、MATCH_RECOGNIZE
条件に式を定義し、DEFINE
句の条件と一致するストリーム要素を問合せのselect文に指定する引数にバインドします。
「メジャー」タブを使用して次のように指定します。
CustOrder.orderid AS orderid
CustOrder.amount AS amount
詳細については、次を参照してください:
『Oracle Complex Event Processing CQL言語リファレンス』のMEASURES条件に関する項
『Oracle Complex Event Processing CQL言語リファレンス』のMATCH_RECOGNIZE条件に関する項
「オブジェクト名」フィールドにorderidと入力します。
「式ビルダー」ボタンをクリックし、次のように式ビルダーを構成します(図3-13を参照)。
「変数」リストでCustOrder.orderidをダブルクリックします。
「保存」をクリックします。
プラス記号ボタンをクリックします。
「オブジェクト名」フィールドにamountと入力します。
「式ビルダー」ボタンをクリックし、次のように式ビルダーを構成します(図3-13を参照)。
「変数」リストでCustOrder.amountをダブルクリックします。
「保存」をクリックします。
プラス記号ボタンをクリックします。
図3-21に示すように「メジャー」タブが表示されます。
「保存」をクリックします。
選択アイコンをダブルクリックします。
図3-22に示すように選択の構成画面が表示されます。
「プロジェクト」タブを次のように構成します。
イベント・タイプの選択または入力プルダウン・メニューからAlertEventを選択します。
「ソースの選択」プルダウン・メニューでOrdersを選択します。
「プロパティ」リストのorderidをダブルクリックし、別名の選択または入力プルダウン・メニューからorderidを選択します。
プラス記号ボタンをクリックして、このプロパティを「生成されたCQL文」に追加します。
「プロパティ」リストのamountをダブルクリックし、別名の選択または入力プルダウン・メニューからamountを選択します。
プラス記号ボタンをクリックして、このプロパティを「生成されたCQL文」に追加します。
「プロジェクト式」フィールドをクリックして値"Error - Missing Approval"
を入力し、別名の選択または入力プルダウン・メニューからalertTypeを選択します。
プラス記号ボタンをクリックして、このプロパティを「生成されたCQL文」に追加します。
図3-23に示すように「プロジェクト」タブが表示されます。
「保存」をクリックします。
「問合せの保存」をクリックします。
「出力」アイコンをダブルクリックします。
図3-72に示すように出力の構成ダイアログが表示されます。
出力を次のように構成します。
「問合せ」を選択します。
「問合せ名」としてTrackingと入力します。
「ルールのインジェクト」をクリックします。
図3-46に示すように、ルールのインジェクトの「確認」ダイアログが表示されます。
「OK」をクリックします。
問合せウィザードによってルールがcqlProc
プロセッサに追加されます。
「保存」をクリックします。
「CQLルール」タブをクリックします。
図3-47に示すように「CQLルール」タブが表示されます。
「問合せ」ラジオ・ボタンをクリックします。
Tracking
問合せが存在していることを確認します。
欠落イベントの問合せをテストするには:
欠落イベントの問合せのデータ・フィードをシミュレートするには、新しいコマンド・ウィンドウを開き、3.5項「開発環境の設定」の説明に従って環境を設定します。
ORACLE_CEP_HOME
\ocep_11.1\utils\load-generator
ディレクトリに移動します。ORACLE_CEP_HOME
はOracle CEPのメイン・インストール・ディレクトリです(d:\oracle_cep.
など)。
orderData.prop
プロパティ・ファイルを使用してロード・ジェネレータを実行します。
Windowsの場合:
prompt> runloadgen.cmd orderData.prop
UNIXの場合:
prompt> runloadgen.sh orderData.prop
Oracle CEP Visualizerで上のペインの「ストリームの表示」ボタンをクリックします。
図3-27に示すように「ストリーム・ビジュアライザ」画面が表示されます。
「クライアントの初期化」をクリックします。
「登録」タブをクリックします。
オーダー警告ラジオ・ボタンを選択します。
「サブスクライブ」をクリックします。
欠落イベントが検出されると、Oracle CEPによって「受信メッセージ」領域が更新され、生成されたAlertEvents
が表示されます。
ここでは、Oracle CEP Visualizer問合せウィザードを使用して、cqlProc
プロセッサが実行するOracle CQLの移動平均問合せを作成する方法を説明します。
これは2段階で行います。
まず、移動平均問合せのソースとして使用するビュー(Oracle CQLにおける副問合せ)を作成します。
「移動平均問合せのビュー・ソースの作成」を参照してください。
次に、ソース・ビューを使用する移動平均問合せを作成します。
「ビュー・ソースを使用する移動平均問合せの作成」を参照してください。
最後に、移動平均問合せをテストします。
「移動平均問合せのテスト」を参照してください。
移動平均問合せのビュー・ソースを作成するには:
CQLのOracle CEPインスタンスがまだ実行されていない場合は、3.7.1項「CQLのサンプルの実行」の手順に従ってサーバーを起動します。
Oracle CEP Visualizerを使用するには、サーバーが実行中である必要があります。
ブラウザで次のURLを起動します。
http://host:port/wlevs
hostは、Oracle CEPが実行中のコンピュータ名を指します。portは、サーバーに構成されているJetty NetIOポートを指します(デフォルト値9002
)。
図3-28に示すように「ログオン」画面が表示されます。
「ログオン」画面で、「ユーザーID」にwlevs
、「パスワード」にwlevs
を入力し、「ログイン」をクリックします。
図3-29に示すようにOracle CEP Visualizerダッシュボードが表示されます。
Oracle CEP Visualizerのユーザー・インタフェースの詳細は、Oracle CEP Visualizerユーザーズ・ガイドのOracle CEP Visualizerユーザー・インタフェースの概要に関する項を参照してください。
右側のペインで、「WLEventServerDomain」→「NonClusteredServer」→「アプリケーション」を展開します。
cqlノードを選択します。
図3-30に示すようにCQLアプリケーション画面が表示されます。
「イベント処理ネットワーク」タブを選択します。
図3-31に示すように「イベント処理ネットワーク」画面が表示されます。
Oracle CQLプロセッサstockProcessorのアイコンをダブルクリックします。
図3-32に示すようにOracle CQLプロセッサ画面が表示されます。
「問合せウィザード」タブを選択します。
図3-33に示すように「問合せウィザード」画面が表示されます。
Oracle CQL問合せウィザードを使用すると、テンプレートまたは個々のOracle CQL構文からOracle CQL問合せを作成できます。
この手順では、個々のOracle CQL構文からOracle CQLのビューおよび問合せを作成します。
詳細は、Oracle CEP Visualizerユーザーズ・ガイドの問合せウィザードを使用したOracle CQLプロセッサのルール作成に関する項を参照してください。
図3-54に示すように、SSourceアイコン(ストリーム・ソース)を「CQL構文」パレットでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
SSourceのアイコンをダブルクリックします。
図3-35に示すようにSSourceの構成ダイアログが表示されます。
ビューのソースはstockChannel
ストリームになります。このストリームから、数が1000を超える在庫イベントを選択します。これが移動平均問合せのソースになります。
SSourceを次のように構成します。
「タイプ」として「ストリーム」を選択します。
ビューのソースはstockChannel
ストリームです。
「ソースの選択」プルダウン・メニューでstockChannelを選択します。
別名StockVolGt1000
を「AS」フィールドに入力します。
「保存」をクリックします。
「問合せの保存」をクリックします。
次は、Oracle CQLフィルタを追加します。
図3-36に示すように、「フィルタ」アイコンを「CQL構文」パレットでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
SSourceアイコンをクリックしてウィンドウアイコンまでドラッグし、図3-37に示すようにOracle CQL構文を接続します。
「フィルタ」アイコンをダブルクリックします。
図3-38に示すようにフィルタの構成ダイアログが表示されます。
「式ビルダー」ボタンをクリックします。
図3-39に示すように式ビルダーのダイアログが表示されます。
次のように式ビルダーを構成します。
「イベント・タイプの選択」プルダウン・メニューからStockVolGt100を選択し、この式で使用できる変数を定義します。
symbol変数をダブルクリックして、「式ビルダー」フィールドに追加します。
「オペランド」リストの>をダブルクリックして、「式ビルダー」フィールドに追加します。
>オペランドの後に値1000を入力します。
「保存」をクリックします。
「フィルタの追加」をクリックします。
図3-40に示すように、問合せウィザードによって「生成されたCQL文」にこの式が追加されます。
「保存」をクリックします。
「問合せの保存」をクリックします。
次は、select文を追加します。
図3-41に示すように、選択アイコンを「CQL構文」パレットでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
「フィルタ」アイコンをクリックして選択アイコンにドラッグし、Oracle CQL構文を接続します。
選択アイコンをダブルクリックします。
図3-42に示すように選択の構成ダイアログが表示されます。
price
、symbol
およびvolume
をStockVolGt1000
ストリームから選択します。
選択を次のように構成します。
「ソースの選択」プルダウン・メニューでStockVolGt1000を選択します。
priceプロパティを選択し、プラス記号ボタンをクリックします。
問合せウィザードによって、プロパティが「生成されたCQL文」に追加されます。
symbolプロパティとvolumeプロパティについても繰り返します。
図3-43に示すように選択の構成ダイアログが表示されます。
「保存」をクリックします。
「問合せの保存」をクリックします。
最後に出力を追加します。
図3-44に示すように、「出力」アイコンを「CQL構文」パレットでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
選択アイコンをクリックして「出力」アイコンにドラッグし、Oracle CQL構文を接続します。
「出力」アイコンをダブルクリックします。
図3-45に示すように出力の構成ダイアログが表示されます。
出力を次のように構成します。
「ビュー」を選択します。
「ビュー名」にStockVolGt1000
を構成します。
「スキーマの表示」フィールドの内容を削除します。
Oracle CEPサーバーによってビュー・スキーマが定義されます。
「ルールのインジェクト」をクリックします。
図3-46に示すように、ルールのインジェクトの「確認」ダイアログが表示されます。
「OK」をクリックします。
問合せウィザードによってルールがcqlProc
プロセッサに追加されます。
「保存」をクリックします。
「CQLルール」タブをクリックします。
図3-47に示すように「CQLルール」タブが表示されます。
「ビュー」ラジオ・ボタンをクリックします。
StockVolGt1000
ビューが存在していることを確認します。
ソース・ビューを使用する移動平均問合せを作成するには:
CQLのOracle CEPインスタンスがまだ実行されていない場合は、3.7.1項「CQLのサンプルの実行」の手順に従ってサーバーを起動します。
Oracle CEP Visualizerを使用するには、サーバーが実行中である必要があります。
ブラウザで次のURLを起動します。
http://host:port/wlevs
hostは、Oracle CEPが実行中のコンピュータ名を指します。portは、サーバーに構成されているJetty NetIOポートを指します(デフォルト値9002
)。
図3-48に示すように「ログオン」画面が表示されます。
「ログオン」画面で、「ユーザーID」にwlevs
、「パスワード」にwlevs
を入力し、「ログイン」をクリックします。
図3-29に示すようにOracle CEP Visualizerダッシュボードが表示されます。
Oracle CEP Visualizerのユーザー・インタフェースの詳細は、Oracle CEP Visualizerユーザーズ・ガイドのOracle CEP Visualizerユーザー・インタフェースの概要に関する項を参照してください。
右側のペインで、「WLEventServerDomain」→「NonClusteredServer」→「アプリケーション」を展開します。
cqlノードを選択します。
図3-30に示すようにCQLアプリケーション画面が表示されます。
「イベント処理ネットワーク」タブを選択します。
図3-31に示すように「イベント処理ネットワーク」画面が表示されます。
Oracle CQLプロセッサstockProcessorのアイコンをダブルクリックします。
図3-32に示すようにOracle CQLプロセッサ画面が表示されます。
「問合せウィザード」タブを選択します。
図3-33に示すように「問合せウィザード」画面が表示されます。
Oracle CQL問合せウィザードを使用すると、テンプレートまたは個々のOracle CQL構文からOracle CQL問合せを作成できます。
この手順では、個々のOracle CQL構文からOracle CQLのビューおよび問合せを作成します。
詳細は、Oracle CEP Visualizerユーザーズ・ガイドの問合せウィザードを使用したOracle CQLプロセッサのルール作成に関する項を参照してください。
図3-54に示すように、SSourceアイコン(ストリーム・ソース)を「CQL構文」パレットでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
SSourceのアイコンをダブルクリックします。
図3-55に示すようにSSourceの構成ダイアログが表示されます。
SSourceのダイアログを次のように構成します。
「タイプ」として「ビュー」を選択します。
「ソースの選択」プルダウン・メニューでStockVolGt1000ビューを選択します。
「保存」をクリックします。
「問合せの保存」をクリックします。
図3-56に示すように、ウィンドウアイコンを「CQL構文」パレットでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
SSourceアイコンをクリックしてウィンドウアイコンにドラッグし、Oracle CQL構文を接続します。
ウィンドウアイコンをダブルクリックします。
図3-55に示すようにSSourceの構成ダイアログが表示されます。
symbol
をパーティションとして、最後の2つのイベントに対するスライディング・ウィンドウを作成します。
枠のダイアログを次のように構成します。
「ソース・プロパティ・リスト」でsymbolを選択して、パーティション・リストに追加します。
「タイプ」として「パーティション」を選択します。
「行ベース」を選択し、「行ベース」フィールドに2を入力します。
「ウィンドウの追加」をクリックします。
図3-58に示すように、問合せウィザードによって「生成されたCQL文」にこのスライディング・ウィンドウが追加されます。
「保存」をクリックします。
「問合せの保存」をクリックします。
図3-56に示すように、選択アイコンを「CQL構文」パレットでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
ウィンドウ・アイコンをクリックして選択アイコンにドラッグし、Oracle CQL構文を接続します。
選択アイコンをダブルクリックします。
図3-55に示すように選択の構成画面が表示されます。
「ソースの選択」プルダウン・メニューでStockVolGt1000を選択します。
これは移動平均問合せのソース(前に作成したビュー)です(「移動平均問合せのビュー・ソースの作成」を参照)。
イベント・タイプの選択または入力プルダウン・メニューからMovingAvgEventを選択します。
これは、移動平均問合せによって生成される出力イベントです。ソース・イベントからこの出力イベントにプロパティをマップします。
「ソースのプロパティ」リストからsymbolを選択します。
図3-61に示すように、選択したソース・プロパティが「プロジェクト式」に追加されます。
このケースでは、ソース・プロパティsymbol
を出力イベント・プロパティsymbol
にそのままマップします。
「AS」フィールドの横のプルダウン・メニューをクリックし、symbolを選択します。
プラス記号ボタンをクリックします。
図3-62に示すように、このソース・プロパティが「生成されたCQL文」のプロジェクト式に追加されます。
図3-62 選択の構成ダイアログ: 出力イベント・プロパティにマップされたソース・プロパティsymbol
「ソースのプロパティ」リストからpriceを選択します。
図3-63に示すように、選択したソース・プロパティが「プロジェクト式」に追加されます。
このケースでは、ソース・プロパティprice
を処理した後で出力イベントにマップします。
「式ビルダー」ボタンをクリックします。
図3-64に示すように式ビルダーのダイアログが表示されます。
「関数タイプの選択」プルダウン・メニューで「集計関数」を選択します。
Oracle CQLで提供される集計関数のリストが表示されます。AVG関数を使用します。
「式ビルダー」フィールドでStockVolGt1000.priceを選択します。
AVG関数をダブルクリックします。
図3-65に示すように、「式ビルダー」フィールドで選択した部分がAVG()
関数によって囲まれます。
「保存」をクリックします。
図3-66に示すように、式が「プロジェクト式」フィールドに追加されます。
「AS」フィールドの横のプルダウン・メニューをクリックし、movingAvgPriceを選択します。
プラス記号ボタンをクリックします。
図3-67に示すように、このソース・プロパティが「生成されたCQL文」のプロジェクト式に追加されます。
図3-67 選択の構成ダイアログ: 出力イベント・プロパティにマップされたソース・プロパティprice
「検証」をクリックします。
図3-68に示すように検証エラー・ダイアログが表示されます。
パーティションを使用しているため、GROUP BY
句を指定する必要があります。
「グループ」タブを選択します。
図3-69に示すように「グループ」タブが表示されます。
「グループ」タブを次のように構成します。
「ソースの選択」プルダウン・メニューでStockVolGt1000を選択します。
「プロパティ」リストからsymbolを選択します。
プラス記号ボタンをクリックします。
図3-70に示すようにsymbol
プロパティがGROUP BY
句に追加されます。
「保存」をクリックします。
「問合せの保存」をクリックします。
次は、問合せを出力に結び付けます。
図3-71に示すように、「出力」アイコンを「CQL構文」パレットでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
選択アイコンをクリックして「出力」アイコンにドラッグし、Oracle CQL構文を接続します。
「出力」アイコンをダブルクリックします。
図3-72に示すように出力の構成ダイアログが表示されます。
出力を次のように構成します。
「問合せ」を選択します。
「問合せ名」としてMovingAverageと入力します。
「ルールのインジェクト」をクリックします。
図3-46に示すように、ルールのインジェクトの「確認」ダイアログが表示されます。
「OK」をクリックします。
問合せウィザードによってルールがcqlProc
プロセッサに追加されます。
「保存」をクリックします。
「CQLルール」タブをクリックします。
図3-47に示すように「CQLルール」タブが表示されます。
「問合せ」ラジオ・ボタンをクリックします。
MovingAverage
問合せが存在していることを確認します。
移動平均問合せをテストするには:
移動平均の問合せのデータ・フィードをシミュレートするには、新しいコマンド・ウィンドウを開き、3.5項「開発環境の設定」の説明に従って環境を設定します。
ORACLE_CEP_HOME
\ocep_11.1\utils\load-generator
ディレクトリに移動します。ORACLE_CEP_HOME
はOracle CEPのメイン・インストール・ディレクトリです(d:\oracle_cep.
など)。
stockData.prop
プロパティ・ファイルを使用してロード・ジェネレータを実行します。
Windowsの場合:
prompt> runloadgen.cmd stockData.prop
UNIXの場合:
prompt> runloadgen.sh stockData.prop
Oracle CEP Visualizerで上のペインの「ストリームの表示」ボタンをクリックします。
図3-27に示すように「ストリーム・ビジュアライザ」画面が表示されます。
「クライアントの初期化」をクリックします。
「クライアントの初期化」フィールドに/stockmoving
と入力します。
「サブスクライブ」をクリックします。
移動平均問合せによってイベントが出力されると、Oracle CEPによって「受信メッセージ」領域が更新され、生成されたイベントが表示されます。
このサンプルは、Oracle Spatialの使用方法を示すもので、Oracle CQL問合せで全地球測位システム(GPS)のイベント・ストリームを処理してバスのGPS位置を追跡し、バスが事前に定義されたバス停の位置に到着するとアラートを生成します。
図3-76に、Oracle Spatialサンプルのイベント処理ネットワーク(EPN)を示します。EPNには、このアプリケーションを構成するコンポーネントが含まれ、コンポーネントの組合せが示されます。
このサンプルには次のコンポーネントが含まれています。
BusPositionGen
- バス位置のGPSイベントの入力ストリームをシミュレートするコンポーネント。Oracle CEPのloadgenユーティリティおよびcsvgenアダプタ・プロバイダを使用して、カンマ区切り値(CSV)を読み取り、EPNにBusPos
イベントとして渡します。
BusStopAdapter
- ORACLE_CEP_HOME
\ocep_11.1\samples\domains\spatial_domain\defaultserver\applications\spatial_sample\bus_stops.csv
に基づいてバス停の位置を生成するカスタム・アダプタ・コンポーネント。ORACLE_CEP_HOME
はOracle CEPのメイン・インストール・ディレクトリです(d:\oracle_cep
など)。
BusPosStream
- BusPos
イベントをProcessor
にストリームとして送るコンポーネント。
BusStopRelation
- BusPos
イベントをProcessor
にリレーションとして送るコンポーネント。
Processor
- 着信BusPos
イベントに対してOracle CQL問合せを実行するコンポーネント。
BusStopChannel
、BusPosChannel
およびBusStopArrivalChannel
- Processor
コンポーネントから別の問合せの結果を適切な発信アダプタまたは発信Beanに伝えるために、それぞれが別のセレクタを指定するコンポーネント。
BusStopPub
、BusPosPub
およびBusStopArrivalPub
- Processor
コンポーネントの問合せの結果をパブリッシュするコンポーネント。
BusStopArrivalOutputBean
- 挿入、削除および更新の各イベントのメッセージを記録するPOJOイベントBeanコンポーネント。BusStopArrivalChannel
で提供されるリレーションの視覚化に役立ちます。
注意: データ・カートリッジの詳細は、次を参照してください:
|
Oracle Spatialアプリケーションはspatial_domain
ドメインにあらかじめデプロイされています。このアプリケーションを実行するには、ただOracle CEPのインスタンスを起動します。
Oracle Spatialサンプルをspatial_domainドメインから実行するには:
コマンド・ウィンドウを開き、ORACLE_CEP_HOME
\ocep_11.1\samples\domains\spatial_domain\defaultserver
にあるOracle Spatialサンプルのドメイン・ディレクトリのデフォルト・サーバー・ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などのOracle CEPメイン・インストール・ディレクトリです。
prompt> cd d:\oracle_cep\ocep_11.1\samples\domains\spatial_domain\defaultserver
サーバー起動スクリプトで環境が正しく設定されていることを確認します。
詳細は、3.5項「開発環境の設定」を参照してください。
適切なスクリプトに正しいコマンド・ライン引数を指定して実行し、Oracle CEPを起動します。
Windowsの場合:
Oracle JRockit Real Timeに含まれるJRockit JDKを使用している場合は、コマンドに-dgc
パラメータを指定して確定的ガベージ・コレクタを有効にします。
prompt> startwlevs.cmd -dgc
Oracle JRockit Real Timeに含まれるJRockit JDKを使用しない場合
prompt> startwlevs.cmd
UNIXの場合:
Oracle JRockit Real Timeに含まれるJRockit JDKを使用している場合は、コマンドに-dgc
パラメータを指定して確定的ガベージ・コレクタを有効にします。
prompt> startwlevs.sh -dgc
Oracle JRockit Real Timeに含まれるJRockit JDKを使用しない場合
prompt> startwlevs.sh
コンソール・ログに次のように表示されるまで待機します。
<Mar 4, 2010 2:13:15 PM EST> <Notice> <Spring> <BEA-2047000> <The application context for "spatial_sample" was started successfully> <Mar 4, 2010 2:13:15 PM EST> <Notice> <Server> <BEA-2046000> <Server STARTED>
このメッセージは、Oracle Spatialサンプルが正しく実行されていることを示しています。
Oracle Spatialサンプルが実行しているのと同じホストで、ブラウザを起動してhttp://localhost:9002/bus/main.html
に移動します。
注意: あるホストでこのサンプルを実行し、別のホストからブラウズすることはできません。これは、このサンプルが使用するGoogle API Keyの制約です。Oracle CEPの制約ではありません。 |
Oracle SpatialサンプルのWebページが、図3-77のように表示されます。
バス停到着タブをクリックすると、図3-78に示すようにバス停の到着データが表示されます。
Oracle CEPロード・ジェネレータを実行して、サンプル・データを生成します。
Windowsの場合:
コマンド・プロンプトを開いて、ORACLE_CEP_HOME
/ocep_11.1/utils/load-generator
にナビゲートします。
runloadgen.cmd bus_positions.prop
UNIXの場合:
ターミナル・ウィンドウを開いて、ORACLE_CEP_HOME
/ocep_11.1/utils/load-generator
にナビゲートします。
runloadgen.sh bus_positions.prop
図3-79に示すように、バスの運行状況とアラートをブラウザで確認します。
Oracle Spatialサンプルのソース・ディレクトリには、Javaソースと、Oracle Spatialアプリケーションを構成する他の必須リソース(構成XMLファイルなど)が含まれます。build.xml
Antファイルには、アプリケーションをビルドしてspatial_domain
ドメインにデプロイするためのターゲットが含まれています。
詳細は、3.8.3項「Oracle SpatialサンプルをビルドするAntターゲットの説明」を参照してください。
ソース・ディレクトリからOracle Spatialサンプルをビルドしてデプロイするには:
spatial_domain
のOracle CEPインスタンスがまだ実行されていない場合は、3.8.1項「Oracle Spatialサンプルの実行」の手順に従ってサーバーを起動します。
再ビルドしたアプリケーションを正常にデプロイするには、サーバーが実行中である必要があります。
新しいコマンド・ウィンドウを開き、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\spatial
にあるOracle Spatialのソース・ディレクトリに移動します。ORACLE_CEP_HOME
はOracle CEPをインストールしたディレクトリです。
例:
prompt> cd d:\oracle_cep\ocep_11.1\samples\source\applications\spatial
開発環境を設定します。
詳細は、3.5項「開発環境の設定」を参照してください。
all
Antターゲットを実行してアプリケーションをコンパイルし、JARファイルを作成します。
prompt> ant all
deploy
Antターゲットを実行してアプリケーションJARファイルをOracle CEPにデプロイします。
prompt> ant -Daction=update deploy
注意: このターゲットは、ドメイン・ディレクトリにある既存のOracle SpatialのアプリケーションJARファイルを上書きします。 |
Oracle Spatialのソース・ディレクトリの最上位レベルにあるbuild.xml
ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。
clean
- このターゲットは、現在のディレクトリの下にあるdist
およびoutput
作業ディレクトリを削除します。
all
- このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.helloworld_11.1.1.4_0.jar
というJARファイルを生成し、生成したJARファイルを現在のディレクトリの下のdist
ディレクトリに格納します。
deploy
- このターゲットはDeployerユーティリティを使用してJARファイルをOracle CEPにデプロイします。
詳細は、『Oracle Complex Event Processing管理者ガイド』のDeployerコマンドライン・リファレンスに関する項を参照してください。
Oracle Spatialサンプルの実装は、通常は『Eclipse用Oracle CEP開発者ガイド』のOracle CEPアプリケーションの標準的な作成手順に関する項に従って行われます。
標準的な開発プロセスが説明されているタスクごとの手順は、この項を参照してください。
Oracle Spatialサンプルで使用するすべてのファイルは、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\spatial
ディレクトリを基準にして相対的な場所にあります。ORACLE_CEP_HOME
は、c:\oracle_cep
などのOracle CEPメイン・インストール・ディレクトリです。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお薦めします。ただし、これは必須条件ではありません。
Oracle Spatialサンプルで使用されるファイルは次のとおりです。
アプリケーションの各コンポーネントと、すべてのコンポーネントの接続方法を記述したEPNアセンブリ・ファイル。このXMLファイルをOracle CEPアプリケーションに組み込む必要があります。
サンプルでは、このファイルはcontext.xml
という名前で、META-INF/spring
ディレクトリにあります。
詳細は、3.8.5項「Oracle SpatialサンプルのEPNアセンブリ・ファイル」を参照してください。
アプリケーションのプロセッサ・コンポーネントなど、EPNの様々なコンポーネントを構成するコンポーネント構成ファイル。
サンプルでは、このファイルはconfig.xml
という名前で、META-INF/wlevs
ディレクトリにあります。
詳細は、3.8.5項「Oracle Spatialサンプルのコンポーネント構成ファイル」を参照してください。
次のコンポーネントを実装するJavaファイル
BusStopAdapter
: ORACLE_CEP_HOME
\ocep_11.1\samples\domains\spatial_domain\defaultserver\applications\spatial_sample\bus_stops.csv
に基づいてバス停の位置を生成するカスタム・アダプタ・コンポーネント。ORACLE_CEP_HOME
はOracle CEPのメイン・インストール・ディレクトリです(d:\oracle_cep
など)。
OutputBean
:挿入、削除および更新の各イベントのメッセージを記録するPOJOイベントBeanコンポーネント。BusStopArrivalChannel
で提供されるリレーションの視覚化に役立ちます。
OrdsHelper
: JGeometry
からDouble
値のList
として縦座標を返すメソッドgetOrds
を提供するヘルパー・クラス。
これらのJavaファイルは、source\applications\spatial\src\com\oracle\cep\sample\spatial
ディレクトリにあります。
このPOJOで参照されているOracle CEP APIの詳細は、『Oracle Fusion Middleware Java API Reference for Oracle Complex Event Processing』を参照してください。
Oracle CEPにデプロイされるOSGiバンドルのコンテンツを記述したMANIFEST.MF
ファイル。
サンプルでは、MANIFEST.MF
ファイルがMETA-INF
ディレクトリにあります。
このファイルの作成方法およびOracle CEPにデプロイするOSGiバンドルの作成方法の詳細は、『Eclipse用Oracle CEP開発者ガイド』のアプリケーションのアセンブリとデプロイメントの概要に関する項を参照してください。
Oracle Spatialサンプルでは、OSGiバンドルのコンパイル、アセンブリ、およびデプロイにbuild.xml
Antファイルを使用します。開発環境でもAntを使用する場合、このbuild.xml
ファイルの詳細は、3.8.2項「ソース・ディレクトリからビルドおよびデプロイするOracle Spatialサンプル」を参照してください。
EPNアセンブリ・ファイルの主な目的の1つは、アプリケーションのコンポーネントを宣言してイベント処理ネットワークを定義し、これらすべてのコンポーネントの接続方法、つまりどのコンポーネントが他のどのコンポーネントをリスニングするかを定義することです。Oracle CEPには、ネットワークの宣言に使用するカスタムSpringタグのセットが用意されています。また、EPNアセンブリ・ファイルは、アプリケーションで使用するイベント・タイプとアプリケーションのOracle CQLルールまたはEPLルールを登録するためにも使用します。
EPNアセンブリ・ファイルを通常の方法で使用して、 Springアプリケーション・コンテキストで アプリケーション・コンポーネントBeanを定義します。アプリケーション・コンポーネントBeanは、 Javaクラスで実装される「アダプタ」や 「ビジネス・ロジックを含むPOJO」などです。
詳細については、次を参照してください:
『Eclipse用Oracle CEP開発者ガイド』のスキーマ参照: EPN Assembly spring-wlevs-v11_1_1_3.xsdに関する項
『Eclipse用Oracle CEP開発者ガイド』のOracle CEPスキーマに関する項
例3-3は、Oracle Spatialサンプル・アプリケーションで使用されるEPNアセンブリ・ファイルです。
例3-3 Oracle SpatialサンプルのEPNアセンブリ・ファイル
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:osgi="http://www.springframework.org/schema/osgi" xmlns:wlevs="http://www.bea.com/ns/wlevs/spring" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd http://www.bea.com/ns/wlevs/spring http://www.bea.com/ns/wlevs/spring/spring-wlevs-v11_1_1_3.xsd"> <wlevs:event-type-repository> <wlevs:event-type type-name="BusPos"> <wlevs:properties type="tuple"> <wlevs:property name="busId" type="int"/> <wlevs:property name="seq" type="int"/> <wlevs:property name="longitude" type="double"/> <wlevs:property name="latitude" type="double"/> </wlevs:properties> </wlevs:event-type> <wlevs:event-type type-name="BusStop"> <wlevs:properties type="tuple"> <wlevs:property name="busId" type="int"/> <wlevs:property name="seq" type="int"/> <wlevs:property name="geom" type="com.oracle.cep.cartridge.spatial.Geometry"/> </wlevs:properties> </wlevs:event-type> <wlevs:event-type type-name="BusPosEvent"> <wlevs:properties type="tuple"> <wlevs:property name="busId" type="int"/> <wlevs:property name="seq" type="int"/> <wlevs:property name="geom" type="com.oracle.cep.cartridge.spatial.Geometry"/> </wlevs:properties> </wlevs:event-type> <wlevs:event-type type-name="BusStopArrivalEvent"> <wlevs:properties type="tuple"> <wlevs:property name="incidentTime" type="int"/> <wlevs:property name="busId" type="int"/> <wlevs:property name="stopSeq" type="int"/> </wlevs:properties> </wlevs:event-type> <wlevs:event-type type-name="BusPosPubEvent"> <wlevs:properties type="tuple"> <wlevs:property name="lastTime" type="int"/> <wlevs:property name="busId" type="int"/> <wlevs:property name="longitude" type="double"/> <wlevs:property name="latitude" type="double"/> </wlevs:properties> </wlevs:event-type> <wlevs:event-type type-name="BusStopPubEvent"> <wlevs:properties type="tuple"> <wlevs:property name="busId" type="int"/> <wlevs:property name="id" type="int"/> <wlevs:property name="coords" type="java.util.List"/> </wlevs:properties> </wlevs:event-type> </wlevs:event-type-repository> <!-- Assemble EPN (event processing network) --> <wlevs:adapter id="BusPositionGen" provider="csvgen"> <wlevs:instance-property name="port" value="9020"/> <wlevs:instance-property name="eventTypeName" value="BusPos"/> <wlevs:instance-property name="eventPropertyNames" value="busId,seq,longitude,latitude"/> <wlevs:listener ref="BusPosStream"/> <wlevs:listener ref="BusStopAdapter"/> </wlevs:adapter> <wlevs:adapter id="BusStopAdapter" class="com.oracle.cep.sample.spatial.BusStopAdapter" > <wlevs:instance-property name="path" value="bus_stops.csv"/> <wlevs:instance-property name="eventType" value="BusStop"/> <wlevs:instance-property name="buffer" value="30.0"/> </wlevs:adapter> <wlevs:channel id="BusPosStream" event-type="BusPos" max-size="0" max-threads="0"> <wlevs:listener ref="Processor"/> </wlevs:channel> <wlevs:channel id="BusStopRelation" event-type="BusStop" is-relation="true" > <wlevs:listener ref="Processor"/> <wlevs:source ref="BusStopAdapter"/> </wlevs:channel> <wlevs:processor id="Processor" > </wlevs:processor> <!-- bus stops --> <wlevs:channel id="BusStopChannel" event-type="BusStopPubEvent"> <wlevs:listener ref="BusStopPub" /> <wlevs:source ref="Processor"/> </wlevs:channel> <wlevs:adapter id="BusStopPub" provider="httppub" /> <!-- bus position --> <wlevs:channel id="BusPosChannel" event-type="BusPosPubEvent"> <wlevs:listener ref="BusPosPub" /> <wlevs:source ref="Processor"/> </wlevs:channel> <wlevs:adapter id="BusPosPub" provider="httppub" /> <!-- bus stop arrival --> <wlevs:channel id="BusStopArrivalChannel" event-type="BusStopArrivalEvent"> <wlevs:listener ref="BusStopArrivalPub" /> <wlevs:listener ref="BusStopArrivalOutputBean" /> <wlevs:source ref="Processor"/> </wlevs:channel> <wlevs:event-bean id="BusStopArrivalOutputBean" class="com.oracle.cep.sample.spatial.OutputBean"> </wlevs:event-bean> <wlevs:adapter id="BusStopArrivalPub" provider="httppub" /> </beans>
Oracle Spatialアプリケーションでは5つのプロセッサが使用されます。3つは3つのデータ・フィードを処理し、1つは結果のイベントを結合し、1つは結果を要約します。
これらのXMLファイルには、入力イベントに対して実行されるOracle CEP問合せが含まれます。このサンプルではOracle CQL言語が使用されます。Oracle CEP問合せ言語の詳細およびサンプルは、次を参照してください:
『Oracle Complex Event Processing CQL言語リファレンス』
『Oracle Complex Event Processing EPL言語リファレンス』
注意: Oracle EPLはOracle CQLによって置き換えられます。 |
例3-4は、Oracle Spatialサンプル・アプリケーションで使用されるコンポーネント構成ファイルです。
プロセッサ要素には、Oracle CEPを使用し、Oracle Spatialを使用して地理データを処理するOracle CQLのビューと問合せが含まれます。
注意: データ・カートリッジの詳細は、次を参照してください:
|
例3-4 Oracle Spatialサンプルのコンポーネント構成ファイル
<?xml version="1.0" encoding="UTF-8"?> <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"> <http-pub-sub-adapter> <name>BusPosPub</name> <server-url>http://localhost:9002/pubsub</server-url> <channel>/bus/buspos</channel> <event-type>BusPosPubEvent</event-type> </http-pub-sub-adapter> <http-pub-sub-adapter> <name>BusStopPub</name> <server-url>http://localhost:9002/pubsub</server-url> <channel>/bus/busstop</channel> <event-type>BusStopPubEvent</event-type> </http-pub-sub-adapter> <http-pub-sub-adapter> <name>BusStopArrivalPub</name> <server-url>http://localhost:9002/pubsub</server-url> <channel>/bus/busstoparrival</channel> <event-type>BusStopArrivalEvent</event-type> </http-pub-sub-adapter> <processor> <name>Processor</name> <rules> <view id="BusPosGeomStream" > select bus.busId as busId, bus.seq as seq, com.oracle.cep.cartridge.spatial.Geometry.createPoint(8307, bus.longitude, bus.latitude) as geom from BusPosStream as bus </view> <query id="BusArrival"> ISTREAM( select systimestamp() as incidentTime, bus.busId as busId, busstop.seq as stopSeq from BusPosGeomStream[NOW] as bus, BusStopRelation as busstop where CONTAIN@spatial(busstop.geom, bus.geom, 0.0d) = true and bus.busId = busstop.busId ) </query> <query id="BusStopOut"> select busId, seq as id, com.oracle.cep.sample.spatial.OrdsHelper.getOrds(geom) as coords from BusStopRelation </query> <query id="BusPosOut"> select systimestamp() as lastTime, busId, longitude, latitude from BusPosStream </query> </rules> </processor> <channel> <name>BusStopArrivalChannel</name> <selector>BusArrival</selector> </channel> <channel> <name>BusPosChannel</name> <selector>BusPosOut</selector> </channel> <channel> <name>BusStopChannel</name> <selector>BusStopOut</selector> </channel> </n1:config>
外国為替取引のサンプル(簡単にFXと呼びます)は、複数のデータ・フィードから読み込んだ情報を処理するために複数のプロセッサを使用しているので、HelloWorldのサンプルよりも複雑です。FXのサンプルでは、Oracle CEPロード・ジェネレータ・ユーティリティを使用してデータ・フィードをシミュレートします。
図3-80に、FXサンプルのイベント処理ネットワーク(EPN)を示します。EPNには、このアプリケーションを構成するコンポーネントが含まれ、コンポーネントの組合せが示されます。
このシナリオでは、ロード・ジェネレータを使用してシミュレートした3つのデータ・フィードにより、世界各地から定数の値のペアが送信されます。値のペアは通貨を組み合せたもので、たとえばUSDEURは米ドルと欧州ユーロの組合せを表します。値のペアと共に2つの通貨間の為替レートも送信されます。fxMarketAmer
、fxMarketAsia
およびfxMarketEuro
の各アダプタはフィードからデータを受信し、受信したデータをイベントに変換して、対応するFilterAmer
、FilterAsia
およびFilterEuro
の各プロセッサに渡します。各プロセッサは、初期期限切れチェックを実行し、発生からの経過時間が1秒を超えているイベントがないことを確認します。さらに境界チェックを実行し、2つの通貨間の為替レートが現在の境界の範囲内にあることを確認します。プロセッサは、特定のチャネルから特定の通貨のペアのみを選択します。たとえば、シミュレートされた米国のデータ・フィードからはUSDEURを選択し、USDAUD(オーストラリア・ドル)などの他のすべてのペアを拒否します。
各データ・フィード・プロバイダからのデータがこの初期準備フェーズを通過すると、FindCrossRate
という別のプロセッサが、すべてのプロバイダのすべてのイベントを結合し、最大レートと最小レートの中間点を計算して、トレーダが指定したスプレッドを適用します。最後に、プロセッサはビジネス・コードを含むPOJOにレートを転送します。このサンプルでは、POJOは単純にレートをクライアントにパブリッシュします。
Oracle CEPモニターは、直前のステップのイベント待機時間が特定のしきい値を超えていないか(たとえば、30秒という時間内に更新されたレートがないか)、また同じ通貨のペアで2つの連続的なレート間の偏差が大きすぎないかを監視するように構成されています。最後に、通貨の各ペアの直前のレートがOracle CEP httpパブリッシュ/サブスクライブ・サーバーに転送されます。
最適なデモンストレーションの目的のためには、複数の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に含まれるJRockit JDKを使用している場合は、コマンドに-dgc
パラメータを指定して確定的ガベージ・コレクタを有効にします。
prompt> startwlevs.cmd -dgc
Oracle JRockit Real Timeに含まれるJRockit JDKを使用しない場合
prompt> startwlevs.cmd
UNIXの場合:
Oracle JRockit Real Timeに含まれるJRockit JDKを使用している場合は、コマンドに-dgc
パラメータを指定して確定的ガベージ・コレクタを有効にします。
prompt> startwlevs.sh -dgc
Oracle JRockit Real Timeに含まれるJRockit JDKを使用しない場合
prompt> startwlevs.sh
これで、FXアプリケーションでデータ・フィードからデータを受信する準備ができました。
アメリカのデータ・フィードをシミュレートするには、新しいコマンド・ウィンドウを開き、3.5項「開発環境の設定」の説明に従って環境を設定します。
ORACLE_CEP_HOME
\ocep_11.1\utils\load-generator
ディレクトリに移動します。ORACLE_CEP_HOME
はOracle CEPのメイン・インストール・ディレクトリです(d:\oracle_cep.
など)。
fxAmer.prop
プロパティ・ファイルを使用してロード・ジェネレータを実行します。
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つのロード・ジェネレータが起動した後、サーバーのコマンド・ウィンドウに次のようなメッセージが出力されます(おそらくメッセージは1行で表示されます)。
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.9.3項「FXをビルドするAntターゲットの説明」を参照)。
ソース・ディレクトリから外国為替取引のサンプルをビルドおよびデプロイするには:
FXのOracle CEPインスタンスがまだ実行されていない場合は、3.9.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アプリケーションで必要なロード・ジェネレータが実行されていない場合は、3.9.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_11.1.1.4_0.jar
というJARファイルを生成し、生成したJARファイルを現在のディレクトリの下のdist
ディレクトリに格納します。
deploy
- このターゲットはDeployerユーティリティを使用してJARファイルをOracle CEPにデプロイします。
詳細は、『Oracle Complex Event Processing管理者ガイド』のDeployerコマンドライン・リファレンスに関する項を参照してください。
外国為替(FX)サンプルの実装は、通常は『Eclipse用Oracle CEP開発者ガイド』の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.oracle.cep.sample.fx.context.xml
という名前で、META-INF/spring
ディレクトリにあります。
詳細は、3.9.5項「FXのEPNアセンブリ・ファイル」を参照してください。
アプリケーションのプロセッサ・コンポーネントを構成する2つのXMLファイル。
1つ目のXMLファイルは、filterAmer
、filterAsia
、filterEuro
およびFindCrossRates
の各プロセッサをすべて1つのファイルで構成します。このXMLファイルに含まれるOracle CQLルールは、シミュレートされた特定のマーケット・フィードから特定の通貨ペアを選択し、プリプロセッサで選択されたすべてのイベントを結合し、特定の通貨ペアの内部価格を計算し、さらにクロス・レートを計算します。サンプルでは、このファイルはspreader.xml
という名前で、META-INF/wlevs
ディレクトリにあります。
2つ目のXMLファイルは、summarizeResults
プロセッサを構成し、FindCrossRates
プロセッサの結果を要約するOracle CQLルールを含みます。サンプルでは、このファイルはSummarizeResults.xml
という名前で、META-INF/wlevs
ディレクトリにあります。
詳細は、3.9.6項「FXのプロセッサ・コンポーネント構成ファイル」を参照してください。
PublishSummaryResults
httpパブリッシュ/サブスクライブ・アダプタを構成するXMLファイル。サンプルでは、このファイルはPubSubAdapterConfiguration.xml
という名前で、META-INF/wlevs
ディレクトリにあります。
アプリケーションのOutputBean
コンポーネント(ビジネス・ロジックを含むPOJO)を実装するJavaファイル。このPOJOは、受信したイベント(onEvent
メソッドでプログラミングされたもの)を画面に出力します。また、イベント・タイプ・リポジトリにForeignExchangeEvent
イベント・タイプを登録します。
サンプルでは、このファイルはOutputBean.java
という名前で、src/com/oracle/cep/sample/fx
ディレクトリにあります。
このPOJOで参照されているOracle CEP APIの詳細は、『Oracle Fusion Middleware Java API Reference for Oracle Complex Event Processing』を参照してください。
Oracle CEPにデプロイされるOSGiバンドルのコンテンツを記述したMANIFEST.MF
ファイル。
サンプルでは、MANIFEST.MF
ファイルがMETA-INF
ディレクトリにあります。
このファイルの作成方法およびOracle CEPにデプロイするOSGiバンドルの作成方法の詳細は、『Eclipse用Oracle CEP開発者ガイド』のアプリケーションのアセンブリとデプロイメントの概要に関する項を参照してください。
FXのサンプルでは、OSGiバンドルのコンパイル、アセンブル、およびデプロイにbuild.xml
Antファイルを使用します。開発環境でもAntを使用する場合、このbuild.xml
ファイルの詳細は、3.9.2項「ソース・ディレクトリからビルドおよびデプロイする外国為替取引のサンプル」を参照してください。
EPNアセンブリ・ファイルの主な目的の1つは、アプリケーションのコンポーネントを宣言してイベント処理ネットワークを定義し、これらすべてのコンポーネントの接続方法、つまりどのコンポーネントが他のどのコンポーネントをリスニングするかを定義することです。Oracle CEPには、ネットワークの宣言に使用するカスタムSpringタグのセットが用意されています。また、EPNアセンブリ・ファイルは、アプリケーションで使用するイベント・タイプとアプリケーションのOracle CQLルールまたはEPLルールを登録するためにも使用します。
EPNアセンブリ・ファイルを通常の方法で使用して、 Springアプリケーション・コンテキストで アプリケーション・コンポーネントBeanを定義します。アプリケーション・コンポーネントBeanは、 Javaクラスで実装される「アダプタ」や 「ビジネス・ロジックを含むPOJO」などです。
詳細については、次を参照してください:
『Eclipse用Oracle CEP開発者ガイド』のスキーマ参照: EPN Assembly spring-wlevs-v11_1_1_3.xsdに関する項
『Eclipse用Oracle CEP開発者ガイド』のOracle CEPスキーマに関する項
例3-5は、FXサンプル・アプリケーションで使用するEPNアセンブリ・ファイルを示しています。太字のエントリの詳細は、サンプルの後にある説明を参照してください。
例3-5 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_1_1_3.xsd"> <wlevs:event-type-repository> <wlevs:event-type type-name="StockTick"> <wlevs:properties> <wlevs:property name="lastPrice" type="double"/> <wlevs:property name="symbol" type="char"/> </wlevs:properties> </wlevs:event-type> <wlevs:event-type type-name="CrossRateEvent"> <wlevs:properties> <wlevs:property name="price" type="double"/> <wlevs:property name="fromRate" type="char"/> <wlevs:property name="toRate" type="char"/> </wlevs:properties> </wlevs:event-type> <wlevs:event-type type-name="SpreaderOuputEvent"> <wlevs:properties type="tuple"> <wlevs:property name="internalPrice" type="double"/> <wlevs:property name="crossRate1" type="char"/> <wlevs:property name="crossRate2" type="char"/> </wlevs:properties> </wlevs:event-type> <wlevs:event-type type-name="CrossrateSummaryEvent"> <wlevs:properties> <wlevs:property name="averageInternalPrice" type="double"/> <wlevs:property name="crossRatePair" type="char"/> <wlevs:property name="totalCount" type="int"/> </wlevs:properties> </wlevs:event-type> </wlevs:event-type-repository> <!-- Assemble EPN (event processing network) --> <wlevs:adapter id="fxMarketAmer" provider="loadgen"> <wlevs:instance-property name="port" value="9011"/> <wlevs:listener ref="FilterAmerStream"/> </wlevs:adapter> <!-- This processor is simply here to filter the inbound event data to make it appear more realistic. It would not normally be required in a real application --> <wlevs:channel id="FilterAmerStream" event-type="StockTick"> <wlevs:listener ref="FilterAmer"/> </wlevs:channel> <wlevs:processor id="FilterAmer" provider="cql"> <wlevs:listener ref="FxQuoteStream"/> </wlevs:processor> <wlevs:adapter id="fxMarketAsia" provider="loadgen"> <wlevs:instance-property name="port" value="9012"/> <wlevs:listener ref="FilterAsiaStream"/> </wlevs:adapter> <!-- This processor is simply here to filter the inbound event data to make it appear more realistic. It would not normally be required in a real application --> <wlevs:channel id="FilterAsiaStream" event-type="StockTick"> <wlevs:listener ref="FilterAsia"/> </wlevs:channel> <wlevs:processor id="FilterAsia" provider="cql"> <wlevs:listener ref="FxQuoteStream"/> </wlevs:processor> <wlevs:adapter id="fxMarketEuro" provider="loadgen"> <wlevs:instance-property name="port" value="9013"/> <wlevs:listener ref="FilterEuroStream"/> </wlevs:adapter> <!-- This processor is simply here to filter the inbound event data to make it appear more realistic. It would not normally be required in a real application --> <wlevs:channel id="FilterEuroStream" event-type="StockTick"> <wlevs:listener ref="FilterEuro"/> </wlevs:channel> <wlevs:processor id="FilterEuro" provider="cql"> <wlevs:listener ref="FxQuoteStream"/> </wlevs:processor> <!-- this it to allow delivery of specifc values for testing --> <wlevs:adapter id="csvTestData" provider="csvgen"> <wlevs:instance-property name="port" value="9014"/> <wlevs:instance-property name="eventTypeName" value="StockTick"/> <wlevs:instance-property name="eventPropertyNames" value="symbol,lastPrice"/> <wlevs:listener ref="FxQuoteStream"/> </wlevs:adapter> <wlevs:channel id="FxQuoteStream" event-type="CrossRateEvent"> <wlevs:listener ref="FindCrossRates"/> </wlevs:channel> <wlevs:processor id="FindCrossRates" provider="cql"> <wlevs:listener ref="CrossRateStream"/> </wlevs:processor> <wlevs:channel id="CrossRateStream" event-type="SpreaderOuputEvent" advertise="true"> <wlevs:listener ref="summarizeResults"/> <wlevs:listener> <bean class="com.oracle.cep.sample.fx.OutputBean" autowire="byName"/> </wlevs:listener> </wlevs:channel> <wlevs:processor id="summarizeResults" provider="cql"> <wlevs:listener ref="SummaryResultsStream"/> </wlevs:processor> <wlevs:adapter id="PublishSummaryResults" provider="httppub"></wlevs:adapter> <wlevs:channel id="SummaryResultsStream" event-type="CrossrateSummaryEvent"> <wlevs:listener> <bean class="com.oracle.cep.sample.fx.OutputBean" autowire="byName"/> </wlevs:listener> <wlevs:listener ref="PublishSummaryResults"/> </wlevs:channel> </beans>
上記の例では:
wlevs:event-type-repository
要素が、アプリケーション全体で使用されるイベント・タイプを登録します。これらのイベントを次に示します。これらのタイプはすべてタプルです。
StockTick
: 入力イベント
CrossRateEvent
: FilterAmer
、FilterAsia
およびFilterEuro
の各プロセッサで出力されるイベント・タイプ
SpreaderOutputEvent
: FindCrossRates
プロセッサで出力されるイベント・タイプ
CrossrateSummaryEvent
: summarizeResults
プロセッサで出力されるイベント・タイプ
Oracle CEPは、必要に応じてこれらのイベント・タイプのインスタンスを自動的に作成します。そうすると、アプリケーションのOracle CQLルール、アダプタJavaクラス、およびPOJOでこのデータを参照できます。
詳細は、『Eclipse用Oracle CEP開発者ガイド』のイベント・タイプに関する項を参照してください。
wlevs:adapter
、wlevs:processor
およびwlevs:channel
要素のセットは、ネットワークの各コンポーネントを宣言することによって、イベント処理ネットワークを設定します。このネットワークは、3つのアダプタ、4つのプロセッサ、および5つのストリームで構成されます(図3-80を参照)。
各コンポーネントにはユニークなIDが指定されます。このIDは、他のコンポーネントがリスナーとソースを宣言するときに参照することができます。
wlevs:adapter
要素はアダプタ・コンポーネントを指定します。例:
<wlevs:adapter id="fxMarketAmer" provider="loadgen"> <wlevs:instance-property name="port" value="9011"/> </wlevs:adapter>
fxMarketAmer
、fxMarketAsia
およびfxMarketEuro
の各アダプタは、主要な入力データ・ソースを提供します。これらのアダプタは各wlevs:adapter
要素のprovider="loadgen"
属性を使用し、アダプタがデータをOracle CEPロード・ジェネレータ・ユーティリティから取得することを指定します。wlevs:instance-property
子要素は、アダプタがリスニングするポート番号を指定します。
csvTestData
アダプタは、テスト・データをアプリケーションにフィードするために使用できるオプション・アダプタです。このアダプタはprovider="csvgen"
属性を使用して、アダプタがデータをカンマ区切り値(CSV)ファイルから取得することを指定します。詳細は、『Eclipse用Oracle CEP開発者ガイド』のロード・ジェネレータおよびcsvgenアダプタを使用するアプリケーションのテストに関する項を参照してください。
PublishSummaryResults
アダプタは、イベントをOracle CEP httpパブリッシュ/サブスクライブ・サーバーに出力します。
wlevs:processor
は複合イベント・プロセッサを指定します。例:
<wlevs:processor id="FilterAmer" provider="cql"> <wlevs:listener ref="FxQuoteStream"/> </wlevs:processor>
listeners
属性(すべてのコンポーネントの要素に共通)またはwlevs:listener
子要素を使用すると、プロセッサをリスニングするコンポーネントを指定できます。このケースでは、FxQuoteStream
というチャネルです。
wlevs:channel
要素は、コンポーネント間のイベント・ストリームを指定します。例:
<wlevs:channel id="FxQuoteStream" event-type="CrossRateEvent"> <wlevs:listener ref="FindCrossRates"/></wlevs:channel>
他のすべてのコンポーネントと同様に、wlevs:listener
およびwlevs:source
子要素を使用して、このコンポーネントに対してリスナーおよびソースとして機能する他のコンポーネントを指定できます。
サンプルではFindCrossRates
プロセッサがFxQuoteStream
チャネルをリスニングします。
例3-6は、コンポーネントの定義をwlevs:listener
要素にネストする方法を示しています。
例3-6 コンポーネント定義のネスト
<wlevs:channel id="CrossRateStream" event-type="SpreaderOuputEvent" advertise="true"> <wlevs:listener ref="summarizeResults"/> <wlevs:listener> <bean class="com.oracle.cep.sample.fx.OutputBean" autowire="byName"/> </wlevs:listener> </wlevs:channel>
例3-6では、<bean>
タグを使用して標準Spring Beanとして宣言されているOutputBean
POJOは、CrossRateStream
チャネルをリスニングします。
FXアプリケーションでは5つのプロセッサが使用されます。3つは3つのデータ・フィードを処理し、1つは結果のイベントを結合し、1つは結果を要約します。
最初の4つのプロセッサはspreader.xml
という1つのXMLファイルで構成されます。詳細は、3.9.6.1項「FXのプロセッサ・コンポーネント構成ファイル: spreader.xml」を参照してください。
5つ目のプロセッサはSummarizeResults.xml
というXMLファイルで構成されます。詳細は、3.9.6.2項「FXのプロセッサ・コンポーネント構成ファイル: SummarizeResults.xml」を参照してください。
これらのXMLファイルには、入力イベントに対して実行されるOracle CEP問合せが含まれます。このサンプルではOracle CQL言語が使用されます。Oracle CEP問合せ言語の詳細およびサンプルは、次を参照してください:
『Oracle Complex Event Processing CQL言語リファレンス』
『Oracle Complex Event Processing EPL言語リファレンス』
注意: Oracle EPLはOracle CQLによって置き換えられます。 |
例3-7に示すように、最初の4つのプロセッサはspreader.xml
という1つのXMLファイルで構成されます。
例3-7 FXのプロセッサ・コンポーネント構成ファイル: spreader.xml
<?xml version="1.0" encoding="UTF-8"?> <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>FilterAmer</name> <rules> <view id="UsdToEur" schema="lastPrice symbol"><![CDATA[ select lastPrice, symbol from FilterAmerStream [range 1] where symbol="USDEUR" ]]></view> <view id="UsdToEurPre" schema="price fromRate toRate"><![CDATA[ select avg(lastPrice) as price, "USD" as fromRate, "EUR" as toRate from UsdToEur where lastPrice < 3.0 and lastPrice > 0.25 ]]></view> <query id="AmerFilterCrossRates"><![CDATA[select * from UsdToEurPre]]></query> </rules> </processor> <processor> <name>FilterAsia</name> <rules> <view id="EurToJpy" schema="lastPrice symbol"><![CDATA[ select lastPrice, symbol from FilterAsiaStream [range 1] where symbol="EURJPY" ]]></view> <view id="EurToJpyPre" schema="price fromRate toRate"><![CDATA[ select avg(lastPrice) as price, "EUR" as fromRate, "JPY" as toRate from EurToJpy where lastPrice < 200.0 and lastPrice > 100.0 ]]></view> <query id="AsiaFilterCrossRates"><![CDATA[select * from EurToJpyPre]]></query> </rules> </processor> <processor> <name>FilterEuro</name> <rules> <view id="EurToGbp" schema="lastPrice symbol"><![CDATA[ select lastPrice, symbol from FilterEuroStream [range 1] where symbol="EURGBP" ]]></view> <view id="EurToGbpPre" schema="price fromRate toRate"><![CDATA[ select avg(lastPrice) as price, "EUR" as fromRate, "GBP" as toRate from EurToGbp where lastPrice < 1.5 and lastPrice > 0.5 ]]></view> <query id="EuroFilterCrossRates"><![CDATA[select * from EurToGbpPre]]></query> </rules> </processor> <processor> <name>FindCrossRates</name> <rules> <query id="FindCrossRatesRule"><![CDATA[ select ((a.price * b.price) + 0.05) as internalPrice, a.fromRate as crossRate1, b.toRate as crossRate2 from FxQuoteStream [range 1] as a, FxQuoteStream [range 1] as b where NOT (a.price IS NULL) and NOT (b.price IS NULL) and a.toRate = b.fromRate ]]></query> </rules> </processor> </n1:config>
このファイル内のFilterAmer
、FilterAsia
およびFilterEuro
の各プロセッサは、すべて本質的には同じであり、データ・フィードに対して異なる項目を照会するため、また異なる境界条件を適用するためにOracle CQL問合せで使用される値だけが異なります。このため、この節では、プロセッサの1つであるFilterAmerプロセッサのみについて説明します。
FilterAmer
プロセッサで実行されるOracle CQLルールは次のとおりです。
<processor> <name>FilterAmer</name> <rules> <view id="UsdToEur" schema="lastPrice symbol"><![CDATA[ select lastPrice, symbol from FilterAmerStream [range 1] where symbol="USDEUR" ]]></view> <view id="UsdToEurPre" schema="price fromRate toRate"><![CDATA[ select avg(lastPrice) as price, "USD" as fromRate, "EUR" as toRate from UsdToEur where lastPrice < 3.0 and lastPrice > 0.25 ]]></view> <query id="AmerFilterCrossRates"><![CDATA[select * from UsdToEurPre]]></query> </rules> </processor>
この問合せを理解するには、次のように、様々な句を確認する必要があります。
UsdToEur
ビューは、StockTick
データ・フィードから、symbol
値がUSDEUR
(米ドルと欧州ユーロの為替レート)である項目のみを受け入れ、その他すべての項目を拒否する副問合せとして機能します。また、from
句では、このOracle CQL問合せを実行する時間ウィンドウを1秒に指定しています。
UsdToEurPre
ビューは、UsdToEur
ビューから選択する副問合せとして機能します。where
句では、フィードから読み込む特定の項目のレートが許容範囲内であることが保証されるように、境界条件を指定しています。このサンプルでは、フィードから読み込む特定の項目のlastPrice
が$3.00と$0.25の間である必要があります。
AmerFilterCrossRates問合せは、UsdToEurPreビューのすべてを選択します。問合せの結果のみが、プロセッサをリスニングする下流のチャネルに出力されます。
FindCrossRates
プロセッサで実行されるOracle CQLルールは次のとおりです。
<processor> <name>FindCrossRates</name> <rules> <query id="FindCrossRatesRule"><![CDATA[ select ((a.price * b.price) + 0.05) as internalPrice, a.fromRate as crossRate1, b.toRate as crossRate2 from FxQuoteStream [range 1] as a, FxQuoteStream [range 1] as b where NOT (a.price IS NULL) and NOT (b.price IS NULL) and a.toRate = b.fromRate ]]></query> </rules> </processor>
この問合せを理解するには、次のように、様々な句を確認する必要があります。
from
句とwhere
句では、CrossRateEvent
オブジェクト(FilterAmer
、FilterAsia
およびFilterEuro
の各プロセッサによって選択されたイベントを含む)から、toRate
とfromRate
の値が同じである2つのイベントを結合します。さらに、from
句では、処理時間ウィンドウをここでも1秒と設定しています。
select
句では、特定の通貨の内部価格を計算しています。この価格は、通貨の換算元レートと換算先レートの平均を求め、0.05ドルの手数料を加算して算出します。また、クロス・レートも計算します。クロス・レートは、1つの通貨の、第3国市場の別の通貨に対する価格であると定義されます。
この問合せの結果は、ビジネス・オブジェクトPOJOとsummarizeResults
プロセッサに送られます。
例3-8に示すように、5つ目のプロセッサはSummarizeResults.xml
というXMLファイルで構成されます。
例3-8 FXのプロセッサ・コンポーネント構成ファイル: SummarizeResults.xml
<?xml version="1.0" encoding="UTF-8"?> <wlevs:config xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"> <processor> <name>summarizeResults</name> <rules> <query id="Rule"><![CDATA[ select crossRate1 || crossRate2 as crossRatePair, count(*) as totalCount, avg(internalPrice) as averageInternalPrice from CrossRateStream [RANGE 1 SLIDE 1] group by crossRate1,crossRate2 having count(*) > 0 ]]></query> </rules> </processor> </wlevs:config>
この問合せの結果は、ビジネス・オブジェクトPOJOとPublishSummaryResults
アダプタに送られます。
シグナル生成のサンプル・アプリケーションは、シミュレートされたマーケット・データを受信し、証券の価格変動が2%を超えたかどうかを検証します。このアプリケーションは、特定の銘柄の連続的な株価を追跡することにより、トレンドの発生も検出します。変動が2%を上回る価格が連続3回を超えた場合に、トレンドと見なします。
図3-81に、シグナル生成サンプルのイベント処理ネットワーク(EPN)を示します。EPNには、このアプリケーションを構成するコンポーネントが含まれ、コンポーネントの組合せが示されます。
このアプリケーションでは、Oracle CEPロード・ジェネレータ・ユーティリティを使用してマーケット・データ・フィードをシミュレートします。このサンプルでは、ロード・ジェネレータは毎秒最大10,000個のメッセージを生成します。サンプルには、照合したイベントとレイテンシを表示するHTMLダッシュボードが含まれています。イベントは、銘柄記号、タイム・スタンプ、および価格で構成されます。
このサンプルは非常に短い待機時間を示し、スループットが高い状況では待機時間のジッタは最小限になります。アプリケーションの実行が開始されると、プロセッサは毎秒平均800個のメッセージを照合します。最小限の構成をしたシステムでアプリケーションを実行した場合、このサンプルは非常に短い平均待機時間(平均30~300マイクロ秒)と最小待機時間スパイク(数ミリ秒単位)を示します。
サンプルでは、ロード・ジェネレータで生成されたタイム・スタンプとOracle CEPのタイム・スタンプ間の差分に基づいてレイテンシ値を計算し、表示しています。有効なレイテンシを計算するには、ロード・ジェネレータを実行するコンピュータとOracle CEPを実行するコンピュータの間で、1ミリ秒のような非常に厳密なクロック同期が必要です。このため、ロード・ジェネレータと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に含まれるJRockit JDKを使用している場合は、コマンドに-dgc
パラメータを指定して確定的ガベージ・コレクタを有効にします。
prompt> startwlevs.cmd -dgc
Oracle JRockit Real Timeに含まれるJRockit JDKを使用しない場合
prompt> startwlevs.cmd
UNIXの場合:
Oracle JRockit Real Timeに含まれるJRockit JDKを使用している場合は、コマンドに-dgc
パラメータを指定して確定的ガベージ・コレクタを有効にします。
prompt> startwlevs.sh -dgc
Oracle JRockit Real Timeに含まれる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 ...
これで、シグナル生成アプリケーションでデータ・フィードからデータを受信する準備ができました。
次は、データ・フィードをシミュレートするために、このサンプル用にプログラミングされたロード・ジェネレータを使用します。
新しいコマンド・ウィンドウを開きます。
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ページの開始をクリックします。
図3-82に示すように、このサンプルに構成されているOracle CQLルールと一致するイベントの表示が開始します。
シグナル生成サンプルのソース・ディレクトリには、Javaソースと、シグナル生成アプリケーションを構成する他の必須のリソース(構成XMLファイル、EPNアセンブリ・ファイル、DOJOクライアントJavaScriptライブラリなど)が含まれます。build.xml
Antファイルには、アプリケーションをビルドしてsignalgeneration_domain
ドメインにデプロイするためのターゲットが含まれています(3.10.3項「シグナル生成をビルドするAntターゲットの説明」を参照)。
ソース・ディレクトリからシグナル生成のサンプルをビルドおよびデプロイするには:
シグナル生成のOracle CEPインスタンスがまだ実行されていない場合は、3.10.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ファイルを上書きします。 |
シグナル生成アプリケーションで必要なロード・ジェネレータが実行されていない場合は、3.10.1項「シグナル生成のサンプルの実行」の説明に従って起動します。
3.10.1項「シグナル生成のサンプルの実行」の説明に従って、サンプルのダッシュボードを起動します。
シグナル生成サンプル・ソースの最上位レベル・ディレクトリにあるbuild.xml
ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。
clean
- このターゲットは、現在のディレクトリの下にあるdist
およびoutput
作業ディレクトリを削除します。
all
- このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.signalgen_11.1.1.4_0.jar
というJARファイルを生成し、生成したJARファイルを現在のディレクトリの下のdist
ディレクトリに格納します。
deploy
- このターゲットはDeployerユーティリティを使用してJARファイルをOracle CEPにデプロイします。
詳細は、『Oracle Complex Event Processing管理者ガイド』のDeployerコマンドライン・リファレンスに関する項を参照してください。
シグナル生成サンプルの実装は、通常は『Eclipse用Oracle CEP開発者ガイド』の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.10.5項「シグナル生成のEPNアセンブリ・ファイル」を参照してください。
アプリケーションのプロセッサ・コンポーネントを構成するXMLファイル。このファイルはconfig.xml
という名前で、META-INF/wlevs
ディレクトリにあります。
config.xml
ファイルはprocessor1
というOracle CQLプロセッサを構成します。特に、証券の価格変動が2%を超えたかどうか、また価格においてトレンドが発生したかどうかを確認するOracle CQLルールを構成します。
詳細は、3.10.6項「シグナル生成のコンポーネント構成ファイル」を参照してください。
アプリケーションのSignalgenOutputBean
コンポーネントすなわちビジネス・ロジックを含むPOJOを実装するJavaファイル。このPOJOは、HttpServlet
およびEventSink
です。このonEvent
メソッドは、PercentTick
およびTrendTick
イベント・インスタンスを使用して、待機時間を計算し、ダッシュボードの情報を表示します。
サンプルでは、このファイルはSignalgenOutputBean.java
という名前で、src/oracle/cep/example/signalgen
ディレクトリにあります。
このファイルの詳細な説明と、イベント・シンクのプログラミングの概要については、『Eclipse用Oracle CEP開発者ガイド』のストリーム・ソースおよびストリーム・シンクとリレーション・ソースおよびリレーション・シンクに関する項を参照してください。
Oracle CEPにデプロイされるOSGiバンドルのコンテンツを記述したMANIFEST.MF
ファイル。
サンプルでは、MANIFEST.MF
ファイルがMETA-INF
ディレクトリにあります。
このファイルの作成方法およびOracle CEPにデプロイするOSGiバンドルの作成方法の詳細は、『Eclipse用Oracle CEP開発者ガイド』のアプリケーションのアセンブリとデプロイメントの概要に関する項を参照してください。
メインのサンプル・ディレクトリにあるdashboard.html
ファイル。このHTMLファイルは、実行中のシグナル生成アプリケーションのイベントと待機時間を表示するサンプル・ダッシュボードです。このHTMLファイルは、http://dojotoolkit.org/
のdojo
ディレクトリにあるDojo Javascriptライブラリを使用します。
ForeignExchangeBuilderFactory
で参照されているOracle CEP APIの詳細は、『Oracle Fusion Middleware Java API Reference for Oracle Complex Event Processing』を参照してください。
シグナル生成のサンプルでは、OSGiバンドルのコンパイル、アセンブリ、およびデプロイにbuild.xml
Antファイルを使用します。開発環境でもAntを使用する場合、このbuild.xml
ファイルの詳細は、3.10.2項「ソース・ディレクトリからビルドおよびデプロイするシグナル生成のサンプル」を参照してください。
EPNアセンブリ・ファイルの主な目的の1つは、アプリケーションのコンポーネントを宣言してイベント処理ネットワークを定義し、これらすべてのコンポーネントの接続方法、つまりどのコンポーネントが他のどのコンポーネントをリスニングするかを定義することです。Oracle CEPには、ネットワークの宣言に使用するカスタムSpringタグのセットが用意されています。また、EPNアセンブリ・ファイルは、アプリケーションで使用するイベント・タイプとアプリケーションのOracle CQLルールを登録するためにも使用します。
EPNアセンブリ・ファイルを通常の方法で使用して、 Springアプリケーション・コンテキストで アプリケーション・コンポーネントBeanを定義します。アプリケーション・コンポーネントBeanは、 Javaクラスで実装される「アダプタ」や 「ビジネス・ロジックを含むPOJO」などです。
詳細については、次を参照してください:
『Eclipse用Oracle CEP開発者ガイド』のスキーマ参照: EPN Assembly spring-wlevs-v11_1_1_3.xsdに関する項
『Eclipse用Oracle CEP開発者ガイド』のOracle CEPスキーマに関する項
例3-9は、シグナル生成サンプル・アプリケーションで使用するEPNアセンブリ・ファイルを示しています。太字のエントリの詳細は、サンプルの後にある説明を参照してください。
例3-9 シグナル生成の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_1_1_3.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> <!-- definition for cache that holds the symbols --> <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> <!-- Streams are just place-holders in this scenario, they just pass-through --> <wlevs:channel id="StockTickStream" max-threads="0" max-size="0" event-type="OracleStockTick"> <wlevs:listener ref="processor1"/> <wlevs:source ref="loadgenAdapter"/> </wlevs:channel> <!-- advertise for monitoring --> <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-81を参照)。
各コンポーネントにはユニークな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ロード・ジェネレータ・ユーティリティから取得することを指定します。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>
キャッシュについての詳細は、『Eclipse用Oracle CEP開発者ガイド』のOracle CEPキャッシュの構成に関する項を参照してください。
シグナル生成アプリケーションは、例3-10に示すコンポーネント構成ファイルでプロセッサとキャッシュを構成します。
例3-10 シグナル生成のコンポーネント構成ファイル
<?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 Complex Event Processing CQL言語リファレンス』を参照してください。
記録と再生のサンプルは、1つのコンポーネントを構成してイベントをイベント・ストアに記録し、ネットワークの別のコンポーネントを構成してストアにあるイベントを再生する方法を示します。サンプルは、Oracle CEPで提供されるデフォルトのBerkeleyデータベースを使用してイベントを格納します。サンプルでは、イベント処理ネットワークのノードとしてパブリッシュ用HTTP pub-subアダプタを構成する方法も示します。
図3-83に、イベントの記録と再生のサンプルのイベント処理ネットワーク(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パブリッシュ/サブスクライブ・サーバーの/playbackchannel
というチャネルにパブリッシュするパブリッシュ用HTTPパブリッシュ/サブスクライブ・アダプタ。
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に含まれるJRockit JDKを使用している場合は、コマンドに-dgc
パラメータを指定して確定的ガベージ・コレクタを有効にします。
prompt> startwlevs.cmd -dgc
Oracle JRockit Real Timeに含まれるJRockit JDKを使用しない場合
prompt> startwlevs.cmd
UNIXの場合:
Oracle JRockit Real Timeに含まれるJRockit JDKを使用している場合は、コマンドに-dgc
パラメータを指定して確定的ガベージ・コレクタを有効にします。
prompt> startwlevs.sh -dgc
Oracle JRockit Real Timeに含まれる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-84に示すように「ログオン」画面が表示されます。
「ログオン」画面で、「ユーザーID」にwlevs
、「パスワード」にwlevs
を入力し、「ログイン」をクリックします。
図3-29に示すようにOracle CEP Visualizerダッシュボードが表示されます。
Oracle CEP Visualizerのユーザー・インタフェースの詳細は、Oracle CEP Visualizerユーザーズ・ガイドのOracle CEP Visualizerユーザー・インタフェースの概要に関する項を参照してください。
左側のペインで、WLEventServerDomain→NonClusteredServer→「アプリケーション」→「Recplay」→「ステージ」→simpleEventSourceを選択します。
図3-86に示すように、右側のペインで「記録」タブを選択します。
DataSet Nameフィールドには、例3-11に示すように、simpleEventSource
アダプタ・アプリケーション構成ファイルORACLE-CEP-HOME
\ocep_11.1\samples\domains\recplay_domain\defaultserver\applications\recplay\config.xml
のdataset-name
要素のrecord-parameters
子要素の値が含まれます。
例3-11 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> <batch-size>1</batch-size> <batch-time-out>10</batch-time-out> </record-parameters> </adapter>
「記録」タブの下の「開始」をクリックします。
図3-87に示すように「アラート」ダイアログが表示されます。
「OK」をクリックします。
現在のステータス・フィールドに記録中と表示されます。
「OK」をクリックするとすぐに、イベントがsimpleEventSource
コンポーネントから出力され始め、構成済のデータベースに格納されます。
「記録の開始」フィールドと「記録の停止」フィールドを使用すると、いつイベントを記録するかを構成できます。
左側のペインでeventStreamを選択します。
図3-88に示すように、右側のペインで「再生」タブを選択します。
タブの下の「開始」をクリックします。
図3-89に示すように「アラート」ダイアログが表示されます。
「OK」をクリックします。
現在のステータス・フィールドに再生中と表示されます。
「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
再生されるイベントが記録される期間や再生速度などの再生パラメータをさらに構成できます。そのためには、適切なフィールドを更新し、パラメータの変更をクリックします。再生パラメータを変更した後、再生を再開する必要があります。
playbackHttpPublisher
アダプタがチャネルにパブリッシュしているイベントを表示するには、次のステップを実行します:
上のペインでViewstreamを選択します。
図3-90に示すようにViewstreamウィンドウが表示されます。
右側のペインで「クライアントの初期化」をクリックします。
「チャネルのサブスクライブ」テキスト・ボックスに/playbackchannel
と入力します。
「サブスクライブ」をクリックします。
「受信メッセージ」テキスト・ボックスに、再生されたイベントの詳細が表示されます。再生されたイベントは、イベントの作成時刻と再生時刻を示します。
記録と再生のサンプルのソース・ディレクトリには、Javaソースと、アプリケーションを構成する他の必須リソース(構成XMLファイル、EPNアセンブリ・ファイルなど)が含まれます。build.xml
Antファイルには、アプリケーションをビルドしてsignalgeneration_domainドメインにデプロイするためのターゲットが含まれています(3.11.3項「記録と再生をビルドするAntターゲットの説明」を参照)。
ソース・ディレクトリからイベントの記録/再生のサンプルをビルドおよびデプロイするには:
記録/再生のOracle CEPインスタンスがまだ実行されていない場合は、3.11.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.11.1項「イベントの記録/再生のサンプルの実行」の手順(4以降)に従ってOracle CEP Visualizerを起動し、イベントの記録と再生を開始します。
記録/再生のソースの最上位レベル・ディレクトリにあるbuild.xml
ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。
clean
- このターゲットは、現在のディレクトリの下にあるdist
およびoutput
作業ディレクトリを削除します。
all
- このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.recplay_11.1.1.4_0.jar
というJARファイルを生成し、生成したJARファイルを現在のディレクトリ下のdist
ディレクトリに格納します。
deploy
- このターゲットはDeployerユーティリティを使用してJARファイルをOracle CEPにデプロイします。
詳細は、『Oracle Complex Event Processing管理者ガイド』のDeployerコマンドライン・リファレンスに関する項を参照してください。
シグナル生成サンプルの実装は、通常は『Eclipse用Oracle CEP開発者ガイド』のOracle CEPアプリケーションの標準的な作成手順に関する項に従って行われます。
標準的な開発プロセスが説明されているタスクごとの手順は、この項を参照してください。
このサンプルで使用するすべてのファイルは、ORACLE_CEP_HOME
\ocep_11.1\samples\source\applications\recplay
ディレクトリを基準にして相対的な場所にあります。ORACLE_CEP_HOME
は、c:\oracle_cep
などのOracle CEPメイン・インストール・ディレクトリです。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお薦めします。ただし、これは必須条件ではありません。
記録と再生のサンプルで使用するファイルは次のとおりです。
図3-83に示すアプリケーションの各コンポーネントと、すべてのコンポーネントの接続方法を記述したEPNアセンブリ・ファイル。
サンプルでは、このファイルはcom.bea.wlevs.example.recplay-context.xml
という名前で、META-INF/spring
ディレクトリにあります。
simpleEventSource
アダプタのJavaソース・ファイル。
サンプルでは、このファイルはSimpleEventSource.java
という名前で、src/com/bea/wlevs/adapter/example/recplay
ディレクトリにあります。
このファイルの詳細な説明と、アダプタのJavaファイルの一般的なプログラミング方法については、『Eclipse用Oracle CEP開発者ガイド』のカスタム・アダプタとイベントBeanの作成に関する項を参照してください。
PlayedBackEvent
およびSimpleEvent
イベント・タイプを記述するJavaソース・ファイル。SimpleEvent
イベント・タイプは、最初にアダプタによって生成されたイベントですが、PlayedBackEvent
イベント・タイプは、記録された後に再生されるイベントに対して使用します。PlayedBackEvents
は、SimpleEvent
とほぼ同じですが、イベントが記録された時刻を示す追加フィールドがあります。
サンプルでは、2つのイベントはSimpleEvent.java
およびPlayedBackEvent.java
という名前で、src/com/bea/wlevs/event/example/recplay
ディレクトリにあります。
このファイルの詳細な説明と、イベント・タイプのプログラミングの概要については、『Eclipse用Oracle CEP開発者ガイド』のイベント・タイプの作成に関する項を参照してください。
アプリケーションのrecplayEventSink
イベントBeanを実装するJavaファイルは、simpleEventSource
アダプタからリアル・タイム・イベントと再生イベントの両方を受け取るイベント・シンクです。
サンプルでは、このファイルはRecplayEventSink.java
という名前で、src/com/bea/wlevs/example/recplay
ディレクトリにあります。
このファイルの詳細な説明と、アダプタのJavaファイルの一般的なプログラミング方法については、『Eclipse用Oracle CEP開発者ガイド』のカスタム・アダプタとイベント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バンドルの作成方法の詳細は、『Eclipse用Oracle CEP開発者ガイド』のアプリケーションのアセンブリとデプロイメントの概要に関する項を参照してください。
記録/再生のサンプルでは、OSGiバンドルのコンパイル、アセンブリ、およびデプロイにbuild.xml
Antファイルを使用します。開発環境でもAntを使用する場合、このbuild.xml
ファイルの詳細は、3.11.2項「ソース・ディレクトリからビルドおよびデプロイするイベントの記録/再生のサンプル」を参照してください。