| Oracle® Fusion Middleware Oracle Complex Event Processingスタート・ガイド 11gリリース1 (11.1.1.6.2) B61656-04 |
|
![]() 前 |
![]() 次 |
この章では、Oracle Complex Event Processing (Oracle CEP)に付属するサンプル・コードを紹介し、簡単な"Hello World"からOracle Continuous Query Language (CQL)のアプリケーションまでのコードの設定および使用方法だけでなく、空間や業界に特化したシナリオの場合も同様に説明します。
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サンプル・コードは、 |
アセンブルしたアプリケーションをデプロイするための、そのまま使用できるサンプル・ドメインが事前に構成されています。わかりやすくするために、サンプルごとに固有のドメインが用意されています。各ドメインはスタンドアロン・サーバー・ドメインです。サーバー・ファイルは、ドメイン・ディレクトリのdefaultserverサブディレクトリに格納されます。アプリケーションをデプロイするには、単にドメインのデフォルト・サーバーを起動します。
サンプルのHelloWorldドメインは\MIDDLEWARE_HOME\ocep_11.1\samples\domains\helloworld_domainにあります。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。
詳細は、2.6.1項「helloworldドメインから実行するHelloWorldのサンプル」を参照してください。
サンプルのCQLドメインはMIDDLEWARE_HOME\ocep_11.1\samples\domains\cql_domainにあります。
詳細は、2.7.1項「CQLのサンプルの実行」を参照してください。
サンプルのOracle SpatialドメインはMIDDLEWARE_HOME\ocep_11.1\samples\domains\spatial_domainにあります。
詳細は、2.8.1項「Oracle Spatialサンプルの実行」を参照してください。
サンプルの外国為替取引ドメインはMIDDLEWARE_HOME\ocep_11.1\samples\domains\fx_domainにあります。
詳細は、2.9.1項「外国為替取引のサンプルの実行」を参照してください。
サンプルのシグナル生成ドメインはMIDDLEWARE_HOME\ocep_11.1\samples\domains\signalgeneration_domainにあります。
詳細は、2.10.1項「シグナル生成のサンプルの実行」を参照してください。
サンプルの記録と再生のドメインはMIDDLEWARE_HOME\ocep_11.1\samples\domains\recplay_domainにあります。
詳細は、2.11.1項「イベントの記録/再生のサンプルの実行」を参照してください。
各サンプルのJavaソースと構成XMLソースは、サンプルの開発環境を示す個別のソース・ディレクトリで提供されます。
HelloWorldソース・ディレクトリは\MIDDLEWARE_HOME\ocep_11.1\samples\source\applications\helloworldにあります。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。
詳細は、2.6.4項「HelloWorldのサンプルの実装」を参照してください。
CQLのソース・ディレクトリはMIDDLEWARE_HOME\ocep_11.1\\samples\source\applications\cqlにあります。
詳細は、2.7.4項「CQLのサンプルの実装」を参照してください。
Oracle Spatialのソース・ディレクトリはMIDDLEWARE_HOME\ocep_11.1\\samples\source\applications\spatialにあります。
詳細は、2.8.4項「Oracle Spatialサンプルの実装」を参照してください。
外国為替取引のソース・ディレクトリはMIDDLEWARE_HOME\ocep_11.1\samples\source\applications\fxにあります。
詳細は、2.9.4項「外国為替取引のサンプルの実装」を参照してください。
シグナル生成のソース・ディレクトリは、MIDDLEWARE_HOME\ocep_11.1\samples\source\applications\signalgenerationにあります。
詳細は、2.10.4項「シグナル生成のサンプルの実装」を参照してください。
記録と再生のソース・ディレクトリはMIDDLEWARE_HOME\ocep_11.1\\samples\source\applications\recplayにあります。
詳細は、2.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アプリケーションです。サンプルでそれを使用するには、次の各サンプルに示されている手順に従ってサーバーを起動済であることを確認し、ブラウザで次の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の詳細は、2.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\Middlewareディレクトリにインストールされていて、Antがd:\antディレクトリにインストールされている場合は、PATH環境変数を次のように設定します。
prompt> set PATH=d:\Oracle\Middleware\jrockit_160_20\bin;d:\ant\bin;%PATH%
setDomainEnv.cmdスクリプトのJAVA_HOME変数が正しいJRockit JDKを参照していることを確認します。正しくない場合は、スクリプトを編集します。
setDomainEnv.cmdスクリプトは、メイン・ドメイン・ディレクトリのdefaultserverサブディレクトリにあります。defaultserverサブディレクトリには、各ドメインのスタンドアロン・サーバーのファイルが含まれます。たとえば、HelloWorldドメインは\MIDDLEWARE_HOME\ocep_11.1\samples\domains\helloworld_domainにあります。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ホーム・ディレクトリです(d:\Oracle\Middlewareなど)。
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\Middleware\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\Middleware\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/Middlewareディレクトリにインストールされていて、Antが/antディレクトリにインストールされている場合は、PATH環境変数を次のように設定します。
prompt> PATH=/Oracle/Middleware/jrockit_160_20/bin:/ant/bin:$PATH
setDomainEnv.shスクリプトのJAVA_HOME変数が正しいJRockit JDKを参照していることを確認します。正しくない場合は、スクリプトを編集します。
setDomainEnv.shスクリプトは、メイン・ドメイン・ディレクトリのdefaultserverサブディレクトリにあります。defaultserverサブディレクトリには、各ドメインのスタンドアロン・サーバーのファイルが含まれます。たとえば、HelloWorldドメインはMIDDLEWARE_HOME/ocep_11.1/samples/domains/helloworld_domainにあります。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ホーム・ディレクトリです(/Oracle/Middlewareなど)。
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/Middleware/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/Middleware/jrockit_160_20
Oracle CEPアプリケーションの作成方法を示すこの最初のサンプルは、よく知られているHelloWorldです。
図2-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ドメインから実行するには:
コマンド・ウィンドウを開き、MIDDLEWARE_HOME\ocep_11.1\samples\domains\helloworld_domain\defaultserverにあるhelloworldドメイン・ディレクトリのデフォルト・サーバー・ディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ホーム・ディレクトリです(d:\Oracle\Middlewareなど)。
prompt> cd d:\Oracle\Middleware\ocep_11.1\samples\domains\helloworld_domain\defaultserver
サーバー起動スクリプトで環境が正しく設定されていることを確認します。
詳細は、2.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ドメインにデプロイするためのターゲットが含まれています。
詳細は、2.6.3項「Hello WorldをビルドするAntターゲットの説明」を参照してください。
ソース・ディレクトリからHelloWorldのサンプルをビルドしてデプロイするには:
helloworldのOracle CEPインスタンスがまだ実行されていない場合は、2.6.1項「helloworldドメインから実行するHelloWorldのサンプル」の手順に従ってサーバーを起動します。
再ビルドしたアプリケーションを正常にデプロイするには、サーバーが実行中である必要があります。
新しいコマンド・ウィンドウを開き、MIDDLEWARE_HOME\ocep_11.1\samples\source\applications\helloworldにあるHelloWorldソース・ディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ホーム・ディレクトリです。
例:
prompt> cd d:\Oracle\Middleware\ocep_11.1\samples\source\applications\helloworld
開発環境を設定します。
詳細は、2.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 Fusion Middleware Oracle Complex Event Processing管理者ガイド』のDeployerコマンドライン・リファレンスに関する項を参照してください。
HelloWorldのサンプルの実装は、通常は『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPアプリケーションの標準的な作成手順に関する項に従って行われます。
標準的な開発プロセスが説明されているタスクごとの手順は、この項を参照してください。
HelloWorldのサンプルは、比較的単純な内容であるため、Oracle CEPアプリケーションを作成する一般的な手順で説明されるすべてのコンポーネントと構成ファイルが使用されるわけではありません。
サンプルのすべてのファイルは、MIDDLEWARE_HOME\ocep_11.1\samples\source\applications\helloworldディレクトリを基準にして相対的な場所にあります。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお薦めします。ただし、これは必須条件ではありません。
HelloWorldのサンプルで使用するファイルは次のとおりです。
アプリケーションの各コンポーネントと、すべてのコンポーネントの接続方法を記述したEPNアセンブリ・ファイル。EPNアセンブリ・ファイルは標準のSpringコンテキスト・ファイルを拡張します。また、このファイルはアプリケーションで使用されるイベント・タイプを登録します。このXMLファイルをOracle CEPアプリケーションに組み込む必要があります。
サンプルでは、このファイルはcom.bea.wlevs.example.helloworld-context.xmlという名前で、META-INF/springディレクトリにあります。
詳細は、2.6.5項「HelloWorldのEPNアセンブリ・ファイル」を参照してください。
helloworldAdapterコンポーネントのJavaソース・ファイル。
サンプルでは、このファイルはHelloWorldAdapter.javaという名前で、src/com/bea/wlevs/adapter/example/helloworldディレクトリにあります。
このファイルの詳細な説明と、アダプタのJavaファイルの一般的なプログラミング方法については、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPイベント処理ネットワークの拡張に関する項を参照してください。
HelloWorldEventイベント・タイプを記述したJavaソース・ファイル。
サンプルでは、このファイルはHelloWorldEvent.javaという名前で、src/com/bea/wlevs/event/example/helloworldディレクトリにあります。
このファイルの詳細な説明と、イベント・タイプのプログラミングの概要については、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のイベント・タイプの作成に関する項を参照してください。
helloworldProcessorおよびhelloworldOutputChannelコンポーネントを構成するXMLファイル。このファイルの重要な部分は、HelloWorldアプリケーションで処理するイベント・セットを選択するためのEPLルール・セットです。プロセッサ構成ファイルをOracle CEPアプリケーションに組み込む必要があります。アダプタとチャネルの構成は省略可能です。
サンプルでは、このファイルはconfig.xmlという名前で、META-INF/wlevsディレクトリにあります。
詳細は、2.6.6項「HelloWorldのコンポーネント構成ファイル」を参照してください。
アプリケーションのhelloworldBeanコンポーネント(ビジネス・ロジックを含むPOJO)を実装するJavaファイル。
サンプルでは、このファイルはHelloWorldBean.javaという名前で、src/com/bea/wlevs/example/helloworldディレクトリにあります。
このファイルの詳細な説明と、イベント・シンクのプログラミングの概要については、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPイベント処理ネットワークの拡張に関する項を参照してください。
Oracle CEPにデプロイされるOSGiバンドルのコンテンツを記述したMANIFEST.MFファイル。
サンプルでは、MANIFEST.MFファイルがMETA-INFディレクトリにあります。
このファイルの作成方法およびOracle CEPにデプロイするOSGiバンドルの作成方法の詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のアプリケーションのアセンブリとデプロイメントの概要に関する項を参照してください。
HelloWorldのサンプルでは、OSGiバンドルのコンパイル、アセンブリ、およびデプロイにbuild.xml Antファイルを使用します。開発環境でもAntを使用する場合、このbuild.xmlファイルの詳細は、2.6.2項「ソース・ディレクトリからビルドおよびデプロイするHelloWorldのサンプル」を参照してください。
EPNアセンブリ・ファイルの主な目的の1つは、アプリケーションのコンポーネントを宣言してイベント処理ネットワークを定義し、これらすべてのコンポーネントの接続方法、つまりどのコンポーネントが他のどのコンポーネントをリスニングするかを定義することです。Oracle CEPには、ネットワークの宣言に使用するカスタムSpringタグのセットが用意されています。また、EPNアセンブリ・ファイルは、アプリケーションで使用するイベント・タイプとアプリケーションのEPLルールを登録するためにも使用します。
EPNアセンブリ・ファイルを通常の方法で使用して、 Springアプリケーション・コンテキストで アプリケーション・コンポーネントBeanを定義します。アプリケーション・コンポーネントBeanは、 Javaクラスで実装される「アダプタ」や 「ビジネス・ロジックを含むPOJO」などです。
詳細については、次を参照してください:
『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』の「スキーマ参照: EPN Assembly spring-wlevs-v11_1_1_6.xsd」
『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPスキーマに関する項
例2-1は、HelloWorldサンプル・アプリケーションで使用するEPNアセンブリ・ファイルを示しています。太字のエントリの詳細は、サンプルの後にある説明を参照してください。
例2-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_6.xsd">
<wlevs:event-type-repository>
<wlevs:event-type type-name="HelloWorldEvent">
<wlevs:class>com.bea.wlevs.event.example.helloworld.HelloWorldEvent</wlevs:class>
</wlevs:event-type>
</wlevs:event-type-repository>
<wlevs:adapter id="helloworldAdapter" class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter" >
<wlevs:instance-property name="message" value="HelloWorld - the currenttime is:"/>
</wlevs:adapter>
<wlevs:processor id="helloworldProcessor" />
<wlevs:channel id="helloworldInstream" >
<wlevs:listener ref="helloworldProcessor"/>
<wlevs:source ref="helloworldAdapter"/>
</wlevs:channel>
<wlevs:channel id="helloworldOutstream" manageable="true">
<wlevs:listener>
<bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
</wlevs:listener>
<wlevs:source ref="helloworldProcessor"/>
</wlevs:channel>
</beans>
上記の例では:
wlevs:event-type-repository要素は、アプリケーション全体で使用するイベント・タイプを登録します。HelloWorldアプリケーションには、イベント・タイプが1つしか存在しません。このイベント・タイプは、com.bea.wlevs.event.example.helloworld.HelloWorldEventクラスで実装されるHelloWorldEventです。Oracle CEPは、必要に応じてこのデータ型のインスタンスを自動的に作成します。アプリケーションのEPLルールでもこのデータ型を参照できます。
wlevs:adapter要素、wlevs:processor要素およびwlevs:channel要素は、それぞれがネットワーク内の各コンポーネントを宣言することにより、イベント・プロセッサ・ネットワークを定義します。
wlevs:adapter要素は、HelloWorldアプリケーションのアダプタ・コンポーネントを定義します。
<wlevs:adapter id="helloworldAdapter"
class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter" >
<wlevs:instance-property name="message" value="HelloWorld - the currenttime is:"/>
</wlevs:adapter>
id属性は、このコンポーネントの一意の識別子を指定します。idは、他のコンポーネントによって後で参照されます。class属性は、アダプタを実装するクラスを指定します。この場合は、com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapterです。
wlevs:instance-property子要素は、インスタンスの変数をアダプタ・インスタンスに渡します。変数の名前はmessageで、値はHelloWorld - the current time is:です。
wlevs:processor要素は、アプリケーションのプロセッサ・コンポーネントを定義します。
<wlevs:processor id="helloworldProcessor" />
id属性は、wlevs:adapter要素の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アプリケーションは、例2-2に示すコンポーネント構成ファイルでプロセッサを構成します。
例2-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 Fusion Middleware Oracle Complex Event Processing CQL言語リファレンス』
『Oracle Fusion Middleware Oracle Complex Event Processing EPL言語リファレンス』
|
注意: Oracle EPLはOracle CQLによって置き換えられます。 |
CQLのサンプルは、Oracle CEP Visualizerの問合せウィザードを使用して様々な種類のOracle CQL問合せを作成する方法を示します。
図2-2に、CQLサンプルのイベント処理ネットワーク(EPN)を示します。EPNには、このアプリケーションを構成するコンポーネントが含まれ、コンポーネントの組合せが示されます。
このアプリケーションのEPNには3つの異なるイベント・パスが含まれます。
欠落イベント: このイベント・パスは、チャネルorderChannelに接続するアダプタorderCVSAdapterで構成されています。orderChannelからプロセッサorderProcessor、チャネルalertChannel、アダプタalertOutputの順に接続しています。
このイベント・パスは、顧客注文ワークフローの欠落イベントを検出するために使用されます。
cqlProcプロセッサが実行する問合せの作成方法の詳細は、2.7.4.1項「欠落イベントの問合せの作成」を参照してください。
移動平均: このイベント・パスは、順に接続されているチャネルstockChannel、プロセッサstockProcessor、チャネルmovingAvgChannel、アダプタmovingOutputで構成されます。
このイベント・パスは、数が1000を超える在庫の移動平均を計算するために使用されます。
cqlProcプロセッサが実行する問合せの作成方法の詳細は、2.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のサンプルを実行するには:
コマンド・ウィンドウを開き、MIDDLEWARE_HOME\ocep_11.1\samples\domains\cql_domain\defaultserverにあるCQLドメイン・ディレクトリのデフォルト・サーバー・ディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。
prompt> cd d:\Oracle\Middleware\ocep_11.1\samples\domains\cql_domain\defaultserver
2.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アプリケーションでデータ・フィードからデータを受信する準備ができました。
欠落イベントの問合せのデータ・フィードをシミュレートするには、新しいコマンド・ウィンドウを開き、2.5項「開発環境の設定」の説明に従って環境を設定します。
MIDDLEWARE_HOME\ocep_11.1\utils\load-generatorディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。
orderData.propプロパティ・ファイルを使用してロード・ジェネレータを実行します。
Windowsの場合:
prompt> runloadgen.cmd orderData.prop
UNIXの場合:
prompt> runloadgen.sh orderData.prop
移動平均の問合せのデータ・フィードをシミュレートするには、新しいコマンド・ウィンドウを開き、2.5項「開発環境の設定」の説明に従って環境を設定します。
MIDDLEWARE_HOME\ocep_11.1\utils\load-generatorディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。
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ドメインにデプロイするためのターゲットが含まれています(2.7.3項「CQLサンプルをビルドするAntターゲットの説明」を参照)。
ソース・ディレクトリからCQLのサンプルをビルドしてデプロイするには:
CQLのOracle CEPインスタンスがまだ実行されていない場合は、2.7.1項「CQLのサンプルの実行」の手順に従ってサーバーを起動します。
再ビルドしたアプリケーションを正常にデプロイするには、サーバーが実行中である必要があります。
新しいコマンド・ウィンドウを開き、MIDDLEWARE_HOME\ocep_11.1\samples\source\applications\cqlにあるCQLソース・ディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。
prompt> cd d:\Oracle\Middleware\ocep_11.1\samples\source\applications\cql
2.5項「開発環境の設定」に従って開発環境を設定します。
all Antターゲットを実行してアプリケーションをコンパイルし、JARファイルを作成します。
prompt> ant all
deploy Antターゲットを実行してアプリケーションJARファイルをOracle CEPにデプロイします。
prompt> ant -Dusername=wlevs -Dpassword=wlevs -Daction=update deploy
|
注意: このターゲットは、ドメイン・ディレクトリにある既存のCQLアプリケーションJARファイルを上書きします。 |
CQLアプリケーションで必要なロード・ジェネレータが実行されていない場合は、2.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 Fusion Middleware Oracle Complex Event Processing管理者ガイド』のDeployerコマンドライン・リファレンスに関する項を参照してください。
ここでは、CQLのサンプルで使用される問合せの作成方法を説明します。
ここでは、Oracle CEP Visualizer問合せウィザードを使用して、cqlProcプロセッサが欠落イベントを検出するために実行するOracle CQLのパターン一致問合せを作成する方法を説明します。
顧客注文ワークフロー・イベントがOracle CEPシステムに流れる顧客注文ワークフローについて考えてみます。
有効なシナリオでは、表2-1に示す順序でイベントが出現します。
ただし、表2-2に示すように承認イベントなしで注文が出荷されるとエラーになります。
承認イベントの欠落を検出してアラート・イベントを生成する問合せを作成してテストします。
欠落イベントの問合せを作成するには:
CQLのOracle CEPインスタンスがまだ実行されていない場合は、2.7.1項「CQLのサンプルの実行」の手順に従ってサーバーを起動します。
Oracle CEP Visualizerを使用するには、サーバーが実行中である必要があります。
ブラウザで次のURLを起動します。
http://host:port/wlevs
hostは、Oracle CEPが実行中のコンピュータ名を指します。portは、サーバーに構成されているJetty NetIOポートを指します(デフォルト値9002)。
図2-3に示すように「ログオン」画面が表示されます。
「ログオン」画面で、「ユーザーID」にwlevs、「パスワード」にwlevsを入力し、「ログイン」をクリックします。
図2-4に示すようにOracle CEP Visualizerダッシュボードが表示されます。
Oracle CEP Visualizerのユーザー・インタフェースの詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing Visualizerユーザーズ・ガイド』のOracle CEP Visualizerユーザー・インタフェースの概要に関する項を参照してください。
右側のペインで、「WLEventServerDomain」→「NonClusteredServer」→「アプリケーション」を展開します。
cqlノードを選択します。
図2-5に示すようにCQLアプリケーション画面が表示されます。
「イベント処理ネットワーク」タブを選択します。
図2-6に示すように「イベント処理ネットワーク」画面が表示されます。
Oracle CQLプロセッサorderProcessorのアイコンをダブルクリックします。
図2-7に示すようにOracle CQLプロセッサ画面が表示されます。
「問合せウィザード」タブを選択します。
図2-8に示すように「問合せウィザード」画面が表示されます。
Oracle CQL問合せウィザードを使用すると、テンプレートまたは個々のOracle CQL構文からOracle CQL問合せを作成できます。
この手順では、テンプレートからOracle CQL問合せを作成します。
詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing Visualizerユーザーズ・ガイド』の問合せウィザードを使用したOracle CQLプロセッサのルール作成に関する項を参照してください。
「テンプレート」タブを選択します。
図2-9に示すように「テンプレート」タブが表示されます。
図2-9に示すように、「パターン一致」テンプレートを「テンプレート」タブでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
SSourceのアイコンをダブルクリックします。
図2-10に示すようにSSourceの構成ダイアログが表示されます。
問合せのソースはorderChannelストリームです。
SSourceを次のように構成します。
「タイプ」として「ストリーム」を選択します。
「ソースの選択」プルダウン・メニューでorderChannelを選択します。
「保存」をクリックします。
「問合せの保存」をクリックします。
「パターン」アイコンをダブルクリックします。
図2-11に示すようにパターンの構成ダイアログが表示されます。
「パターン」タブを使用して、欠落イベントの発生と一致するパターン式を定義します。この式は、後の手順で「定義」タブに指定する名前付き条件を使用して作成します。
「パターン式」フィールドに次の式を入力します。
CustOrder NoApproval*? Shipment
このパターンでは、表2-3に示すOracle CQLのパターン量指定子が使用されます。パターン量指定子を使用して、パターン一致が許可される範囲を指定します。1文字のパターン量指定子は最大(最長マッチ)を指定し、まず最大の数量との一致を試行します。2文字のパターン量指定子は最小(最短マッチ)を指定し、まず最小の数量との一致を試行します。
詳細については、次を参照してください:
『Oracle Fusion Middleware Oracle Complex Event Processing CQL言語リファレンス』のPATTERN条件に関する項
『Oracle Fusion Middleware Oracle Complex Event Processing CQL言語リファレンス』のMATCH_RECOGNIZE条件に関する項
「パーティション基準」プルダウン・メニューからorderidを選択し、プラス記号ボタンをクリックしてこのプロパティをPARTITION BY句に追加します。
これで、Oracle CEPが各注文について欠落イベントの問合せを検証するようになります。
別名フィールドにOrdersと入力します。
これで、パターンの別名(Orders)が割り当てられ、後から問合せで使用するときに便利です。
「定義」タブをクリックします。
図2-12に示すように「定義」タブが表示されます。
ここで、表2-4に示すようにパターン句に指定する各条件を定義します。
「オブジェクト名」フィールドにCustOrderと入力します。
「式ビルダー」ボタンをクリックし、次のように式ビルダーを構成します(図2-13を参照)。
「変数」リストでeventTypeをダブルクリックします。
「オペランド」リストで=をダブルクリックします。
=オペランドの後に値'C'を入力します。
「保存」をクリックします。
プラス記号ボタンをクリックします。
図2-14に示すように条件定義がオブジェクト・リストに追加されます。
「オブジェクト名」フィールドにNoApprovalと入力します。
「式ビルダー」ボタンをクリックし、次のように式ビルダーを構成します(図2-15を参照)。
「変数」リストでeventTypeをダブルクリックします。
「オペランド」リストで=をダブルクリックします。
=オペランドの後に値'A'を入力します。
式をカッコで囲みます。
式の先頭のカッコの外側にカーソルを置きます。
「オペランド」リストでNOTをダブルクリックします。
「保存」をクリックします。
プラス記号ボタンをクリックします。
条件定義がオブジェクト・リストに追加されます。
「オブジェクト名」フィールドにShipmentと入力します。
「式ビルダー」ボタンをクリックし、次のように式ビルダーを構成します(図2-16を参照)。
「変数」リストでeventTypeをダブルクリックします。
「オペランド」リストで=をダブルクリックします。
=オペランドの後に値'S'を入力します。
「保存」をクリックします。
プラス記号ボタンをクリックします。
図2-17に示すように「定義」タブが表示されます。
「メジャー」タブをクリックします。
図2-18に示すように「メジャー」タブが表示されます。
「メジャー」タブを使用して、MATCH_RECOGNIZE条件に式を定義し、DEFINE句の条件と一致するストリーム要素を問合せのselect文に指定する引数にバインドします。
「メジャー」タブを使用して次のように指定します。
CustOrder.orderid AS orderid
CustOrder.amount AS amount
詳細については、次を参照してください:
『Oracle Fusion Middleware Oracle Complex Event Processing CQL言語リファレンス』のMEASURES句に関する項
『Oracle Fusion Middleware Oracle Complex Event Processing CQL言語リファレンス』のMATCH_RECOGNIZE条件に関する項
「オブジェクト名」フィールドにorderidと入力します。
「式ビルダー」ボタンをクリックし、次のように式ビルダーを構成します(図2-19を参照)。
「変数」リストでCustOrder.orderidをダブルクリックします。
「保存」をクリックします。
プラス記号ボタンをクリックします。
「オブジェクト名」フィールドにamountと入力します。
「式ビルダー」ボタンをクリックし、次のように式ビルダーを構成します(図2-20を参照)。
「変数」リストでCustOrder.amountをダブルクリックします。
「保存」をクリックします。
プラス記号ボタンをクリックします。
図2-21に示すように「メジャー」タブが表示されます。
「保存」をクリックします。
選択アイコンをダブルクリックします。
図2-22に示すように選択の構成画面が表示されます。
「プロジェクト」タブを次のように構成します。
イベント・タイプの選択または入力プルダウン・メニューからAlertEventを選択します。
「ソースの選択」プルダウン・メニューでOrdersを選択します。
「プロパティ」リストのorderidをダブルクリックし、別名の選択または入力プルダウン・メニューからorderidを選択します。
プラス記号ボタンをクリックして、このプロパティを「生成されたCQL文」に追加します。
「プロパティ」リストのamountをダブルクリックし、別名の選択または入力プルダウン・メニューからamountを選択します。
プラス記号ボタンをクリックして、このプロパティを「生成されたCQL文」に追加します。
「プロジェクト式」フィールドをクリックして値"Error - Missing Approval"を入力し、別名の選択または入力プルダウン・メニューからalertTypeを選択します。
プラス記号ボタンをクリックして、このプロパティを「生成されたCQL文」に追加します。
図2-23に示すように「プロジェクト」タブが表示されます。
「保存」をクリックします。
「問合せの保存」をクリックします。
「出力」アイコンをダブルクリックします。
図2-24に示すように出力の構成ダイアログが表示されます。
出力を次のように構成します。
「問合せ」を選択します。
「問合せ名」としてTrackingと入力します。
「ルールのインジェクト」をクリックします。
図2-25に示すように、ルールのインジェクトの「確認」ダイアログが表示されます。
「OK」をクリックします。
問合せウィザードによってルールがcqlProcプロセッサに追加されます。
「保存」をクリックします。
「CQLルール」タブをクリックします。
図2-26に示すように「CQLルール」タブが表示されます。
「問合せ」ラジオ・ボタンをクリックします。
Tracking問合せが存在していることを確認します。
欠落イベントの問合せをテストするには:
欠落イベントの問合せのデータ・フィードをシミュレートするには、新しいコマンド・ウィンドウを開き、2.5項「開発環境の設定」の説明に従って環境を設定します。
MIDDLEWARE_HOME\ocep_11.1\utils\load-generatorディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に作成したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。
orderData.propプロパティ・ファイルを使用してロード・ジェネレータを実行します。
Windowsの場合:
prompt> runloadgen.cmd orderData.prop
UNIXの場合:
prompt> runloadgen.sh orderData.prop
Oracle CEP Visualizerで上のペインの「ストリームの表示」ボタンをクリックします。
図2-27に示すように「ストリーム・ビジュアライザ」画面が表示されます。
「クライアントの初期化」をクリックします。
「登録」タブをクリックします。
オーダー警告ラジオ・ボタンを選択します。
「サブスクライブ」をクリックします。
欠落イベントが検出されると、Oracle CEPによって「受信メッセージ」領域が更新され、生成されたAlertEventsが表示されます。
ここでは、Oracle CEP Visualizer問合せウィザードを使用して、stockProcプロセッサが実行するOracle CQLの移動平均問合せを作成する方法を説明します。
これは2段階で行います。
まず、移動平均問合せのソースとして使用するビュー(Oracle CQLにおける副問合せ)を作成します。
「移動平均問合せのビュー・ソースの作成」を参照してください。
次に、ソース・ビューを使用する移動平均問合せを作成します。
「ビュー・ソースを使用する移動平均問合せの作成」を参照してください。
最後に、移動平均問合せをテストします。
「移動平均問合せのテスト」を参照してください。
移動平均問合せのビュー・ソースを作成するには:
CQLのOracle CEPインスタンスがまだ実行されていない場合は、2.7.1項「CQLのサンプルの実行」の手順に従ってサーバーを起動します。
Oracle CEP Visualizerを使用するには、サーバーが実行中である必要があります。
ブラウザで次のURLを起動します。
http://host:port/wlevs
hostは、Oracle CEPが実行中のコンピュータ名を指します。portは、サーバーに構成されているJetty NetIOポートを指します(デフォルト値9002)。
図2-28に示すように「ログオン」画面が表示されます。
「ログオン」画面で、「ユーザーID」にwlevs、「パスワード」にwlevsを入力し、「ログイン」をクリックします。
図2-29に示すようにOracle CEP Visualizerダッシュボードが表示されます。
Oracle CEP Visualizerのユーザー・インタフェースの詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing Visualizerユーザーズ・ガイド』のOracle CEP Visualizerユーザー・インタフェースの概要に関する項を参照してください。
右側のペインで、「WLEventServerDomain」→「NonClusteredServer」→「アプリケーション」を展開します。
cqlノードを選択します。
図2-30に示すようにCQLアプリケーション画面が表示されます。
「イベント処理ネットワーク」タブを選択します。
図2-31に示すように「イベント処理ネットワーク」画面が表示されます。
Oracle CQLプロセッサstockProcessorのアイコンをダブルクリックします。
図2-32に示すようにOracle CQLプロセッサ画面が表示されます。
「問合せウィザード」タブを選択します。
図2-33に示すように「問合せウィザード」画面が表示されます。
Oracle CQL問合せウィザードを使用すると、テンプレートまたは個々のOracle CQL構文からOracle CQL問合せを作成できます。
この手順では、個々のOracle CQL構文からOracle CQLのビューおよび問合せを作成します。
詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing Visualizerユーザーズ・ガイド』の問合せウィザードを使用したOracle CQLプロセッサのルール作成に関する項を参照してください。
図2-34に示すように、SSourceアイコン(ストリーム・ソース)を「CQL構文」パレットでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
SSourceのアイコンをダブルクリックします。
SSourceの構成画面が表示されます。
ビューのソースはstockChannelストリームになります。このストリームから、数が1000を超える在庫イベントを選択します。これが移動平均問合せのソースになります。
SSourceを次のように構成します(図2-35)。
「タイプ」として「ストリーム」を選択します。
ビューのソースはstockChannelストリームになります。
「ソースの選択」プルダウン・メニューでstockChannelを選択します。
別名StockVolGt1000を「AS」フィールドに入力します。
「保存」をクリックします。
「問合せの保存」をクリックします。
プロンプトが表示されたら、「問合せID」フィールドにStockVolGt1000と入力します。
「保存」をクリックします。
次は、Oracle CQLフィルタを追加します。
図2-36に示すように、「フィルタ」アイコンを「CQL構文」パレットでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
SSourceアイコンをクリックしてウィンドウアイコンまでドラッグし、図2-37に示すようにOracle CQL構文を接続します。
「フィルタ」アイコンをダブルクリックします。
図2-38に示すようにフィルタの構成ダイアログが表示されます。
「式ビルダー」ボタンをクリックします。
「式ビルダー」ダイアログが表示されます。
式ビルダーを次のように構成します(図2-39)。
「イベント・タイプの選択」プルダウン・メニューからStockVolGt100を選択し、この式で使用できる変数を定義します。
volume変数をダブルクリックして、「式ビルダー」フィールドに追加します。
「オペランド」リストの>をダブルクリックして、「式ビルダー」フィールドに追加します。
>オペランドの後に値1000を入力します。
「保存」をクリックします。
「フィルタの追加」をクリックします。
図2-40に示すように、問合せウィザードによって「生成されたCQL文」にこの式が追加されます。
「保存」をクリックします。
「問合せの保存」をクリックします。
次は、select文を追加します。
図2-41に示すように、選択アイコンを「CQL構文」パレットでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
「フィルタ」アイコンをクリックして選択アイコンにドラッグし、Oracle CQL構文を接続します。
選択アイコンをダブルクリックします。
選択の構成画面が表示されます。
price、symbolおよびvolumeをStockVolGt1000ストリームから選択します。
選択を次のように構成します。
「ソースの選択」プルダウン・メニューでStockVolGt1000を選択します。
priceプロパティを選択し、プラス記号ボタンをクリックします。
問合せウィザードによって、プロパティが「生成されたCQL文」に追加されます。
symbolプロパティとvolumeプロパティについても繰り返します。
図2-42に示すように選択の構成ダイアログが表示されます。
「保存」をクリックします。
「問合せの保存」をクリックします。
最後に出力を追加します。
図2-43に示すように、「出力」アイコンを「CQL構文」パレットでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
選択アイコンをクリックして「出力」アイコンにドラッグし、Oracle CQL構文を接続します。
「出力」アイコンをダブルクリックします。
出力の構成画面が表示されます。
出力を次のように構成します(図2-44)。
「ビュー」を選択します。
「ビュー名」にStockVolGt1000を構成します。
「スキーマの表示」フィールドの内容を削除します。
Oracle CEPサーバーによってビュー・スキーマが定義されます。
「ルールのインジェクト」をクリックします。
図2-45に示すように、ルールのインジェクトの「確認」ダイアログが表示されます。
「OK」をクリックします。
問合せウィザードによってルールがcqlProcプロセッサに追加されます。
「保存」をクリックします。
「CQLルール」タブをクリックします。
図2-46に示すように「CQLルール」タブが表示されます。
「ビュー」ラジオ・ボタンをクリックします。
StockVolGt1000ビューが存在していることを確認します。
ソース・ビューを使用する移動平均問合せを作成するには:
CQLのOracle CEPインスタンスがまだ実行されていない場合は、2.7.1項「CQLのサンプルの実行」の手順に従ってサーバーを起動します。
Oracle CEP Visualizerを使用するには、サーバーが実行中である必要があります。
ブラウザで次のURLを起動します。
http://host:port/wlevs
hostは、Oracle CEPが実行中のコンピュータ名を指します。portは、サーバーに構成されているJetty NetIOポートを指します(デフォルト値9002)。
図2-47に示すように「ログオン」画面が表示されます。
「ログオン」画面で、「ユーザーID」にwlevs、「パスワード」にwlevsを入力し、「ログイン」をクリックします。
図2-48に示すようにOracle CEP Visualizerダッシュボードが表示されます。
Oracle CEP Visualizerのユーザー・インタフェースの詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing Visualizerユーザーズ・ガイド』のOracle CEP Visualizerユーザー・インタフェースの概要に関する項を参照してください。
左側のペインで、「WLEventServerDomain」→「NonClusteredServer」→「アプリケーション」を展開します。
cqlノードを選択します。
図2-49に示すようにCQLアプリケーション画面が表示されます。
「イベント処理ネットワーク」タブを選択します。
図2-50に示すように「イベント処理ネットワーク」画面が表示されます。
Oracle CQLプロセッサstockProcessorのアイコンをダブルクリックします。
図2-51に示すようにOracle CQLプロセッサ画面が表示されます。
「問合せウィザード」タブを選択します。
図2-52に示すように「問合せウィザード」画面が表示されます。最近このプロセッサに対する問合せを作成または編集している場合は、その問合せが問合せウィザードのキャンバスに表示される可能性があります。それ以外の場合、キャンバスは空白になります。
Oracle CQL問合せウィザードを使用すると、テンプレートまたは個々のOracle CQL構文からOracle CQL問合せを作成できます。
この手順では、個々のOracle CQL構文からOracle CQLのビューおよび問合せを作成します。
詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing Visualizerユーザーズ・ガイド』の問合せウィザードを使用したOracle CQLプロセッサのルール作成に関する項を参照してください。
図2-53に示すように、SSourceアイコン(ストリーム・ソース)を「CQL構文」パレットでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
SSourceのアイコンをダブルクリックします。
SSourceの構成画面が表示されます。
SSourceダイアログを次のように構成します(図2-54)。
「タイプ」として「ビュー」を選択します。
「ソースの選択」プルダウン・メニューでStockVolGt1000ビューを選択します。
「保存」をクリックします。
「問合せの保存」をクリックします。
図2-55に示すように、ウィンドウアイコンを「CQL構文」パレットでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
SSourceアイコンをクリックしてウィンドウアイコンにドラッグし、Oracle CQL構文を接続します。
ウィンドウアイコンをダブルクリックします。
SSourceの構成画面が表示されます。
symbolをパーティションとして、最後の2つのイベントに対するスライディング・ウィンドウを作成します。
ウィンドウ・ダイアログを次のように構成します(図2-56)。
「ソース・プロパティ・リスト」でsymbolを選択して、パーティション・リストに追加します。
「タイプ」として「パーティション」を選択します。
「行ベース」を選択し、「行ベース」フィールドに2を入力します。
「ウィンドウの追加」をクリックします。
図2-56に示すように、問合せウィザードによって「生成されたCQL文」にこのスライディング・ウィンドウが追加されます。
「保存」をクリックします。
「問合せの保存」をクリックします。
図2-57に示すように、選択アイコンを「CQL構文」パレットでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
ウィンドウ・アイコンをクリックして選択アイコンにドラッグし、Oracle CQL構文を接続します。
選択アイコンをダブルクリックします。
選択の構成画面が表示されます。
「ソースの選択」プルダウン・メニューでStockVolGt1000を選択します。
これは、前に作成した移動平均問合せのビューのソースです(「移動平均問合せのビュー・ソースを作成するには:」を参照してください)。
ターゲット・イベント・タイププルダウン・メニューからMovingAvgEventを選択します。
これは、移動平均問合せによって生成される出力イベントです。ソース・イベントからこの出力イベントにプロパティをマップします。
「ソースのプロパティ」リストからsymbolを選択します。
図2-58に示すように、選択したソース・プロパティが「プロジェクト式」に追加されます。
このケースでは、ソース・プロパティsymbolを出力イベント・プロパティsymbolにそのままマップします。
「AS」フィールドの横のプルダウン・メニューをクリックし、symbolを選択します。
プラス記号ボタンをクリックします。
図2-59に示すように、このソース・プロパティが「生成されたCQL文」のプロジェクト式に追加されます。
図2-59 選択の構成ダイアログ: 出力イベント・プロパティにマップされたソース・プロパティsymbol

「ソースのプロパティ」リストからpriceを選択します。
図2-60に示すように、選択したソース・プロパティが「プロジェクト式」に追加されます。
このケースでは、ソース・プロパティpriceを処理した後で出力イベントにマップします。
「式ビルダー」ボタンをクリックします。
「式ビルダー」ダイアログが表示されます。
「関数タイプの選択」プルダウン・メニューで「集計関数」を選択します。
Oracle CQLで提供される集計関数のリストが表示されます。AVG関数を使用します。
「式ビルダー」フィールドでStockVolGt1000.priceを選択します。
AVG関数をダブルクリックします。
図2-61に示すように、「式ビルダー」フィールドで選択した部分がAVG()関数によって囲まれます。
「保存」をクリックします。
図2-62に示すように、式が「プロジェクト式」フィールドに追加されます。
「AS」フィールドの横のプルダウン・メニューをクリックし、movingAvgPriceを選択します。
プラス記号ボタンをクリックします。
図2-63に示すように、このソース・プロパティが「生成されたCQL文」のプロジェクト式に追加されます。
図2-63 選択の構成ダイアログ: 出力イベント・プロパティにマップされたソース・プロパティprice

「検証」をクリックします。
図2-64に示すように検証エラー・ダイアログが表示されます。
パーティションを使用しているため、GROUP BY句を指定する必要があります。
「グループ」タブを選択します。
「グループ」タブが表示されます。
「グループ」タブを次のように構成します(図2-65)。
「ソースの選択」プルダウン・メニューでStockVolGt1000を選択します。
「プロパティ」リストからsymbolを選択します。
プラス記号ボタンをクリックします。
図2-65に示すようにsymbolプロパティがGROUP BY句に追加されます。
「保存」をクリックします。
「問合せの保存」をクリックします。
次は、問合せを出力に結び付けます。
図2-66に示すように、「出力」アイコンを「CQL構文」パレットでクリックし、問合せウィザードのキャンバスの任意の場所にドラッグ・アンド・ドロップします。
選択アイコンをクリックして「出力」アイコンにドラッグし、Oracle CQL構文を接続します。
「出力」アイコンをダブルクリックします。
出力の構成画面が表示されます。
出力を次のように構成します(図2-67)。
「問合せ」を選択します。
「問合せ名」としてMovingAverageと入力します。
「ルールのインジェクト」をクリックします。
図2-68に示すように、ルールのインジェクトの「確認」ダイアログが表示されます。
「OK」をクリックします。
問合せウィザードによってルールがcqlProcプロセッサに追加されます。
「保存」をクリックします。
「CQLルール」タブをクリックします。
図2-69に示すように「CQLルール」タブが表示されます。
「問合せ」ラジオ・ボタンをクリックします。
MovingAverage問合せが存在していることを確認します。
移動平均問合せをテストするには:
移動平均の問合せのデータ・フィードをシミュレートするには、新しいコマンド・ウィンドウを開き、2.5項「開発環境の設定」の説明に従って環境を設定します。
MIDDLEWARE_HOME\ocep_11.1\utils\load-generatorディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。
stockData.propプロパティ・ファイルを使用してロード・ジェネレータを実行します。
Windowsの場合:
prompt> runloadgen.cmd stockData.prop
UNIXの場合:
prompt> runloadgen.sh stockData.prop
Oracle CEP Visualizerで上のペインの「ストリームの表示」ボタンをクリックします。
図2-70に示すように「ストリーム・ビジュアライザ」画面が表示されます。
「クライアントの初期化」をクリックします。
「クライアントの初期化」フィールドに/stockmovingと入力します。
「サブスクライブ」をクリックします。
移動平均問合せによってイベントが出力されると、Oracle CEPによって「受信メッセージ」領域が更新され、生成されたイベントが表示されます。
このサンプルは、Oracle Spatialの使用方法を示すもので、Oracle CQL問合せで全地球測位システム(GPS)のイベント・ストリームを処理してバスのGPS位置を追跡し、バスが事前に定義されたバス停の位置に到着するとアラートを生成します。
図2-71に、Oracle Spatialサンプルのイベント処理ネットワーク(EPN)を示します。EPNには、このアプリケーションを構成するコンポーネントが含まれ、コンポーネントの組合せが示されます。
このサンプルには次のコンポーネントが含まれています。
BusPositionGen - バス位置のGPSイベントの入力ストリームをシミュレートするコンポーネント。Oracle CEPのloadgenユーティリティおよびcsvgenアダプタ・プロバイダを使用して、カンマ区切り値(CSV)を読み取り、EPNにBusPosイベントとして渡します。
BusStopAdapter - MIDDLEWARE_HOME\ocep_11.1\samples\domains\spatial_domain\defaultserver\applications\spatial_sample\bus_stops.csvに基づいてバス停の位置を生成するカスタム・アダプタ・コンポーネント。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。
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ドメインから実行するには:
コマンド・ウィンドウを開き、MIDDLEWARE_HOME\ocep_11.1\samples\domains\spatial_domain\defaultserverにあるOracle Spatialサンプルのドメイン・ディレクトリのデフォルト・サーバー・ディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。
prompt> cd d:\Oracle iddleware\ocep_11.1\samples\domains\spatial_domain\defaultserver
サーバー起動スクリプトで環境が正しく設定されていることを確認します。
詳細は、2.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ページが、図2-72のように表示されます。
バス停到着タブをクリックすると、図2-73に示すようにバス停の到着データが表示されます。
Oracle CEPロード・ジェネレータを実行して、サンプル・データを生成します。
Windowsの場合:
コマンド・プロンプトを開いて、MIDDLEWARE_HOME/ocep_11.1/utils/load-generatorにナビゲートします。
runloadgen.cmd bus_positions.prop
UNIXの場合:
ターミナル・ウィンドウを開いて、MIDDLEWARE_HOME/ocep_11.1/utils/load-generatorにナビゲートします。
runloadgen.sh bus_positions.prop
図2-74に示すように、バスの運行状況とアラートをブラウザで確認します。
Oracle Spatialサンプルのソース・ディレクトリには、Javaソースと、Oracle Spatialアプリケーションを構成する他の必須リソース(構成XMLファイルなど)が含まれます。build.xml Antファイルには、アプリケーションをビルドしてspatial_domainドメインにデプロイするためのターゲットが含まれています。
詳細は、2.8.3項「Oracle SpatialサンプルをビルドするAntターゲットの説明」を参照してください。
ソース・ディレクトリからOracle Spatialサンプルをビルドしてデプロイするには:
spatial_domainのOracle CEPインスタンスがまだ実行されていない場合は、2.8.1項「Oracle Spatialサンプルの実行」の手順に従ってサーバーを起動します。
再ビルドしたアプリケーションを正常にデプロイするには、サーバーが実行中である必要があります。
新しいコマンド・ウィンドウを開き、MIDDLEWARE_HOME\ocep_11.1\samples\source\applications\spatialにあるOracle Spatialソース・ディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ディレクトリです。
例:
prompt> cd d:\Oracle\Middleware\ocep_11.1\samples\source\applications\spatial
開発環境を設定します。
詳細は、2.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 Fusion Middleware Oracle Complex Event Processing管理者ガイド』のDeployerコマンドライン・リファレンスに関する項を参照してください。
Oracle Spatialのサンプルの実装は、通常は『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPアプリケーションの標準的な作成手順に関する項に従って行われます。
標準的な開発プロセスが説明されているタスクごとの手順は、この項を参照してください。
Oracle Spatialサンプルのすべてのファイルは、MIDDLEWARE_HOME\ocep_11.1\samples\source\applications\spatialディレクトリを基準にして相対的な場所にあります。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお薦めします。ただし、これは必須条件ではありません。
Oracle Spatialサンプルで使用されるファイルは次のとおりです。
アプリケーションの各コンポーネントと、すべてのコンポーネントの接続方法を記述したEPNアセンブリ・ファイル。このXMLファイルをOracle CEPアプリケーションに組み込む必要があります。
サンプルでは、このファイルはcontext.xmlという名前で、META-INF/springディレクトリにあります。
詳細は、2.8.5項「Oracle SpatialサンプルのEPNアセンブリ・ファイル」を参照してください。
アプリケーションのプロセッサ・コンポーネントなど、EPNの様々なコンポーネントを構成するコンポーネント構成ファイル。
サンプルでは、このファイルはconfig.xmlという名前で、META-INF/wlevsディレクトリにあります。
詳細は、2.8.6項「Oracle Spatialサンプルのコンポーネント構成ファイル」を参照してください。
次のコンポーネントを実装するJavaファイル
BusStopAdapter - MIDDLEWARE_HOME\ocep_11.1\samples\domains\spatial_domain\defaultserver\applications\spatial_sample\bus_stops.csvに基づいてバス停の位置を生成するカスタム・アダプタ・コンポーネント。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。
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バンドルの作成方法の詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のアプリケーションのアセンブリとデプロイメントの概要に関する項を参照してください。
Oracle Spatialサンプルでは、OSGiバンドルのコンパイル、アセンブリ、およびデプロイにbuild.xml Antファイルを使用します。開発環境でもAntを使用する場合、このbuild.xmlファイルの詳細は、2.8.2項「ソース・ディレクトリからビルドおよびデプロイするOracle Spatialサンプル」を参照してください。
EPNアセンブリ・ファイルの主な目的の1つは、アプリケーションのコンポーネントを宣言してイベント処理ネットワークを定義し、これらすべてのコンポーネントの接続方法、つまりどのコンポーネントが他のどのコンポーネントをリスニングするかを定義することです。Oracle CEPには、ネットワークの宣言に使用するカスタムSpringタグのセットが用意されています。また、EPNアセンブリ・ファイルは、アプリケーションで使用するイベント・タイプとアプリケーションのOracle CQLルールまたはEPLルールを登録するためにも使用します。
EPNアセンブリ・ファイルを通常の方法で使用して、 Springアプリケーション・コンテキストで アプリケーション・コンポーネントBeanを定義します。アプリケーション・コンポーネントBeanは、 Javaクラスで実装される「アダプタ」や 「ビジネス・ロジックを含むPOJO」などです。
詳細については、次を参照してください:
『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』の「スキーマ参照: EPN Assembly spring-wlevs-v11_1_1_6.xsd」
『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPスキーマに関する項
例2-3は、Oracle Spatialサンプル・アプリケーションで使用されるEPNアセンブリ・ファイルです。
例2-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_6.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 Fusion Middleware Oracle Complex Event Processing CQL言語リファレンス』
『Oracle Fusion Middleware Oracle Complex Event Processing EPL言語リファレンス』
|
注意: Oracle EPLはOracle CQLによって置き換えられます。 |
例2-4は、Oracle Spatialサンプル・アプリケーションで使用されるコンポーネント構成ファイルです。
プロセッサ要素には、Oracle CEPを使用し、Oracle Spatialを使用して地理データを処理するOracle CQLのビューと問合せが含まれます。
|
注意: データ・カートリッジの詳細は、次を参照してください:
|
例2-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のサンプルよりも複雑です。このサンプルでは、Oracle CEPロード・ジェネレータ・ユーティリティを使用してデータ・フィードをシミュレートします。
図2-75に、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のインスタンスを起動します。
外国為替取引のサンプルを実行するには:
コマンド・ウィンドウを開き、MIDDLEWARE_HOME\ocep_11.1\samples\domains\fx_domain\defaultserverにあるFXドメイン・ディレクトリのデフォルト・サーバー・ディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。
prompt> cd d:\Oracle iddleware\ocep_11.1\samples\domains\fx_domain\defaultserver
2.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アプリケーションでデータ・フィードからデータを受信する準備ができました。
アメリカのデータ・フィードをシミュレートするには、新しいコマンド・ウィンドウを開き、2.5項「開発環境の設定」の説明に従って環境を設定します。
MIDDLEWARE_HOME\ocep_11.1\utils\load-generatorディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。
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ドメインにデプロイするためのターゲットが含まれています(2.9.3項「FXをビルドするAntターゲットの説明」を参照)。
ソース・ディレクトリから外国為替取引のサンプルをビルドおよびデプロイするには:
FXのOracle CEPインスタンスがまだ実行されていない場合は、2.9.1項「外国為替取引のサンプルの実行」の手順に従ってサーバーを起動します。
再ビルドしたアプリケーションを正常にデプロイするには、サーバーが実行中である必要があります。
新しいコマンド・ウィンドウを開き、MIDDLEWARE_HOME\ocep_11.1\samples\source\applications\fxにあるFXソース・ディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPインストール・ディレクトリをインストールした際に指定したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。
prompt> cd d:\Oracle\Middleware\ocep_11.1\samples\source\applications\fx
2.5項「開発環境の設定」に従って開発環境を設定します。
all Antターゲットを実行してアプリケーションをコンパイルし、JARファイルを作成します。
prompt> ant all
deploy Antターゲットを実行してアプリケーションJARファイルをOracle CEPにデプロイします。
prompt> ant -Dusername=wlevs -Dpassword=wlevs -Daction=update deploy
|
注意: このターゲットは、ドメイン・ディレクトリにある既存のFXアプリケーションJARファイルを上書きします。 |
FXアプリケーションで必要なロード・ジェネレータが実行されていない場合は、2.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 Fusion Middleware Oracle Complex Event Processing管理者ガイド』のDeployerコマンドライン・リファレンスに関する項を参照してください。
外国為替(FX)のサンプルの実装は、通常は『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPアプリケーションの標準的な作成手順に関する項に従って行われます。
標準的な開発プロセスが説明されているタスクごとの手順は、この項を参照してください。
FXサンプルのすべてのファイルは、MIDDLEWARE_HOME\ocep_11.1\samples\source\applications\fxディレクトリを基準にして相対的な場所にあります。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ホーム・ディレクトリです(d:\Oracle\Middlewareなど)。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお薦めします。ただし、これは必須条件ではありません。
FXのサンプルで使用するファイルは次のとおりです。
アプリケーションの各コンポーネントと、すべてのコンポーネントの接続方法を記述したEPNアセンブリ・ファイル。このXMLファイルをOracle CEPアプリケーションに組み込む必要があります。
サンプルでは、このファイルはcom.oracle.cep.sample.fx.context.xmlという名前で、META-INF/springディレクトリにあります。
詳細は、2.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ディレクトリにあります。
詳細は、2.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バンドルの作成方法の詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のアプリケーションのアセンブリとデプロイメントの概要に関する項を参照してください。
FXのサンプルでは、OSGiバンドルのコンパイル、アセンブル、およびデプロイにbuild.xml Antファイルを使用します。開発環境でもAntを使用する場合、このbuild.xmlファイルの詳細は、2.9.2項「ソース・ディレクトリからビルドおよびデプロイする外国為替取引のサンプル」を参照してください。
EPNアセンブリ・ファイルの主な目的の1つは、アプリケーションのコンポーネントを宣言してイベント処理ネットワークを定義し、これらすべてのコンポーネントの接続方法、つまりどのコンポーネントが他のどのコンポーネントをリスニングするかを定義することです。Oracle CEPには、ネットワークの宣言に使用するカスタムSpringタグのセットが用意されています。また、EPNアセンブリ・ファイルは、アプリケーションで使用するイベント・タイプとアプリケーションのOracle CQLルールまたはEPLルールを登録するためにも使用します。
EPNアセンブリ・ファイルを通常の方法で使用して、 Springアプリケーション・コンテキストで アプリケーション・コンポーネントBeanを定義します。アプリケーション・コンポーネントBeanは、 Javaクラスで実装される「アダプタ」や 「ビジネス・ロジックを含むPOJO」などです。
詳細については、次を参照してください:
『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』の「スキーマ参照: EPN Assembly spring-wlevs-v11_1_1_6.xsd」
『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPスキーマに関する項
例2-5は、FXサンプル・アプリケーションで使用するEPNアセンブリ・ファイルを示しています。太字のエントリの詳細は、サンプルの後にある説明を参照してください。
例2-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_6.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でこのデータを参照できます。
『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のイベント・タイプに関する項を参照してください。
wlevs:adapter、wlevs:processorおよびwlevs:channel要素のセットは、ネットワークの各コンポーネントを宣言することによって、イベント処理ネットワークを設定します。このネットワークは、2つのアダプタ、4つのプロセッサ、および5つのストリームで構成されます(図3-75を参照)。
各コンポーネントにはユニークな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)ファイルから取得することを指定します。詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のロード・ジェネレータおよび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チャネルをリスニングします。
例2-6は、コンポーネントの定義をwlevs:listener要素にネストする方法を示しています。
例2-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>
例2-6では、<bean>タグを使用して標準Spring Beanとして宣言されているOutputBean POJOは、CrossRateStreamチャネルをリスニングします。
FXアプリケーションでは5つのプロセッサが使用されます。3つは3つのデータ・フィードを処理し、1つは結果のイベントを結合し、1つは結果を要約します。
最初の4つのプロセッサはspreader.xmlという1つのXMLファイルで構成されます。詳細は、2.9.6.1項「FXのプロセッサ・コンポーネント構成ファイル: spreader.xml」を参照してください。
5つ目のプロセッサはSummarizeResults.xmlというXMLファイルで構成されます。詳細は、2.9.6.2項「FXのプロセッサ・コンポーネント構成ファイル: SummarizeResults.xml」を参照してください。
これらのXMLファイルには、入力イベントに対して実行されるOracle CEP問合せが含まれます。このサンプルではOracle CQL言語が使用されます。Oracle CEP問合せ言語の詳細およびサンプルは、次を参照してください:
『Oracle Fusion Middleware Oracle Complex Event Processing CQL言語リファレンス』
『Oracle Fusion Middleware Oracle Complex Event Processing EPL言語リファレンス』
|
注意: Oracle EPLはOracle CQLによって置き換えられます。 |
例2-7に示すように、最初の4つのプロセッサはspreader.xmlという1つのXMLファイルで構成されます。
例2-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プロセッサに送られます。
例2-8に示すように、5つ目のプロセッサはSummarizeResults.xmlというXMLファイルで構成されます。
例2-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回を超えた場合に、トレンドと見なします。
図2-76に、シグナル生成サンプルのイベント処理ネットワーク(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インスタンスを起動するだけです。
シグナル生成のサンプルを実行するには:
コマンド・ウィンドウを開き、MIDDLEWARE_HOME\ocep_11.1\samples\domains\signalgeneration_domain\defaultserverにあるsignalgeneration_domainドメイン・ディレクトリのデフォルト・サーバー・ディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ホーム・ディレクトリです(d:\Oracle\Middlewareなど)。
prompt> cd d:\Oracle\Middleware\ocep_11.1\samples\domains\signalgeneration_domain\defaultserver
2.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 ...
これで、シグナル生成アプリケーションでデータ・フィードからデータを受信する準備ができました。
次は、データ・フィードをシミュレートするために、このサンプル用にプログラミングされたロード・ジェネレータを使用します。
新しいコマンド・ウィンドウを開きます。
MIDDLEWARE_HOME\ocep_11.1\samples\domains\signalgeneration_domain\defaultserver\utilsディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ホーム・ディレクトリです(d:Oracle\Middlewareなど)。
startDataFeedコマンドを実行します。
Windowsの場合:
prompt> startDataFeed.cmd
UNIXの場合:
prompt> startDataFeed.sh
ブラウザを起動し、次のHTMLページを開いて、サンプルのダッシュボードを起動します。
http://host:9002/signalgeneration/dashboard.html
hostは、Oracle CEPを実行しているコンピュータの名前に置き換えます。ブラウザと同じコンピュータである場合は、localhostとすることができます。
ブラウザで、HTMLページの開始をクリックします。
図2-77に示すように、このサンプルに構成されているOracle CQLルールと一致するイベントの表示が開始します。
シグナル生成サンプルのソース・ディレクトリには、Javaソースと、シグナル生成アプリケーションを構成する他の必須のリソース(構成XMLファイル、EPNアセンブリ・ファイル、DOJOクライアントJavaScriptライブラリなど)が含まれます。build.xml Antファイルには、アプリケーションをビルドしてsignalgeneration_domainドメインにデプロイするためのターゲットが含まれています(2.10.3項「シグナル生成をビルドするAntターゲットの説明」を参照)。
ソース・ディレクトリからシグナル生成のサンプルをビルドおよびデプロイするには:
シグナル生成のOracle CEPインスタンスがまだ実行されていない場合は、2.10.1項「シグナル生成のサンプルの実行」の手順に従ってサーバーを起動します。再ビルドしたアプリケーションを正常にデプロイするには、サーバーが実行中である必要があります。
新しいコマンド・ウィンドウを開き、MIDDLEWARE_HOME\ocep_11.1\samples\source\applications\signalgenerationにあるシグナル生成ソース・ディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ホーム・ディレクトリです(d:\Oracle\Middlewareなど)。
prompt> cd d:\Oracle\Middleware\ocep_11.1\samples\source\applications\signalgeneration
2.5項「開発環境の設定」に従って開発環境を設定します。
all Antターゲットを実行してアプリケーションをコンパイルし、JARファイルを作成します。
prompt> ant all
deploy Antターゲットを実行してアプリケーションJARファイルをMIDDLEWARE_HOME\ocep_11.1\samples\domains\signalgeneration_domain\defaultserver\applications\signalgenerationディレクトリにデプロイします。
prompt> ant deploy
|
注意: このターゲットは、ドメイン・ディレクトリにある既存のシグナル生成アプリケーションJARファイルを上書きします。 |
シグナル生成アプリケーションで必要なロード・ジェネレータが実行されていない場合は、2.10.1項「シグナル生成のサンプルの実行」の説明に従って起動します。
2.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 Fusion Middleware Oracle Complex Event Processing管理者ガイド』のDeployerコマンドライン・リファレンスに関する項を参照してください。
シグナル生成のサンプルの実装は、通常は『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPアプリケーションの標準的な作成手順に関する項に従って行われます。
標準的な開発プロセスが説明されているタスクごとの手順は、この項を参照してください。
シグナル生成のすべてのファイルは、MIDDLEWARE_HOME\ocep_11.1\samples\source\applications\signalgenerationディレクトリを基準にして相対的な場所にあります。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ホーム・ディレクトリです(c:\Oracle\Middlewareなど)。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお薦めします。ただし、これは必須条件ではありません。
シグナル生成のサンプルで使用されるファイルは次のとおりです。
アプリケーションの各コンポーネントと、すべてのコンポーネントの接続方法を記述したEPNアセンブリ・ファイル。
サンプルでは、このファイルはepn_assembly.xmlという名前で、META-INF/springディレクトリにあります。
詳細は、2.10.5項「シグナル生成のEPNアセンブリ・ファイル」を参照してください。
アプリケーションのプロセッサ・コンポーネントを構成するXMLファイル。このファイルはconfig.xmlという名前で、META-INF/wlevsディレクトリにあります。
config.xmlファイルはprocessor1というOracle CQLプロセッサを構成します。特に、証券の価格変動が2%を超えたかどうか、また価格においてトレンドが発生したかどうかを確認するOracle CQLルールを構成します。
詳細は、2.10.6項「シグナル生成のコンポーネント構成ファイル」を参照してください。
アプリケーションのSignalgenOutputBeanコンポーネントすなわちビジネス・ロジックを含むPOJOを実装するJavaファイル。このPOJOは、HttpServletおよびEventSinkです。このonEventメソッドは、PercentTickおよびTrendTickイベント・インスタンスを使用して、待機時間を計算し、ダッシュボードの情報を表示します。
サンプルでは、このファイルはSignalgenOutputBean.javaという名前で、src/oracle/cep/example/signalgenディレクトリにあります。
このファイルの詳細な説明と、イベント・シンクのプログラミングの概要については、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のストリーム・ソースおよびストリーム・シンクとリレーション・ソースおよびリレーション・シンクに関する項を参照してください。
Oracle CEPにデプロイされるOSGiバンドルのコンテンツを記述したMANIFEST.MFファイル。
サンプルでは、MANIFEST.MFファイルがMETA-INFディレクトリにあります。
このファイルの作成方法およびOracle CEPにデプロイするOSGiバンドルの作成方法の詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のアプリケーションのアセンブリとデプロイメントの概要に関する項を参照してください。
メインのサンプル・ディレクトリにある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ファイルの詳細は、2.10.2項「ソース・ディレクトリからビルドおよびデプロイするシグナル生成のサンプル」を参照してください。
EPNアセンブリ・ファイルの主な目的の1つは、アプリケーションのコンポーネントを宣言してイベント処理ネットワークを定義し、これらすべてのコンポーネントの接続方法、つまりどのコンポーネントが他のどのコンポーネントをリスニングするかを定義することです。Oracle CEPには、ネットワークの宣言に使用するカスタムSpringタグのセットが用意されています。また、EPNアセンブリ・ファイルは、アプリケーションで使用するイベント・タイプとアプリケーションのOracle CQLルールを登録するためにも使用します。
EPNアセンブリ・ファイルを通常の方法で使用して、 Springアプリケーション・コンテキストで アプリケーション・コンポーネントBeanを定義します。アプリケーション・コンポーネントBeanは、 Javaクラスで実装される「アダプタ」や 「ビジネス・ロジックを含むPOJO」などです。
詳細については、次を参照してください:
『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のスキーマ参照: EPN Assembly spring-wlevs-v11_1_1_6.xsdに関する項
『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPスキーマに関する項
例2-9は、シグナル生成サンプル・アプリケーションで使用するEPNアセンブリ・ファイルを示しています。太字のエントリの詳細は、サンプルの後にある説明を参照してください。
例2-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_6.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エントリのセットは、ネットワークの各コンポーネントを宣言することによって、イベント・プロセッサ・ネットワークを設定します(図2-76を参照)。
各コンポーネントにはユニークな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>
キャッシュについての詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPキャッシュの構成に関する項を参照してください。
シグナル生成アプリケーションは、例2-10に示すコンポーネント構成ファイルでプロセッサとキャッシュを構成します。
例2-10 シグナル生成のコンポーネント構成ファイル
<?xml version="1.0" encoding="UTF-8"?>
<!-- this is here to test that you 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 Fusion Middleware Oracle Complex Event Processing CQL言語リファレンス』を参照してください。
記録と再生のサンプルは、1つのコンポーネントを構成してイベントをイベント・ストアに記録し、ネットワークの別のコンポーネントを構成してストアにあるイベントを再生する方法を示します。サンプルは、Oracle CEPで提供されるデフォルトのBerkeleyデータベースを使用してイベントを格納します。サンプルでは、イベント処理ネットワークのノードとしてパブリッシュ用HTTP pub-subアダプタを構成する方法も示します。
図2-78に、イベントの記録と再生のサンプルのイベント処理ネットワーク(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アダプタによってチャネルにパブリッシュされるイベントのストリームを表示する方法を示しています。
イベントの記録/再生のサンプルを実行するには:
コマンド・ウィンドウを開き、MIDDLEWARE_HOME\ocep_11.1\samples\domains\recplay_domain\defaultserverにあるrecplay_domainドメイン・ディレクトリのデフォルト・サーバー・ディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ディレクトリです(d:\Oracle\Middlewareなど)。
prompt> cd d:\Oracle\Middleware\ocep_11.1\samples\domains\recplay_domain\defaultserver
2.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)。
図2-79に示すように「ログオン」画面が表示されます。
「ログオン」画面で、「ユーザーID」にwlevs、「パスワード」にwlevsを入力し、「ログイン」をクリックします。
図2-80に示すようにOracle CEP Visualizerダッシュボードが表示されます。
Oracle CEP Visualizerのユーザー・インタフェースの詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing Visualizerユーザーズ・ガイド』のOracle CEP Visualizerユーザー・インタフェースの概要に関する項を参照してください。
左側のペインで、WLEventServerDomain→NonClusteredServer→「アプリケーション」→「Recplay」→「ステージ」→simpleEventSourceを選択します。
図2-81に示すように、右側のペインで「記録」タブを選択します。
DataSet Nameフィールドには、例2-11に示すように、simpleEventSourceアダプタ・アプリケーション構成ファイルORACLE-CEP-HOME\ocep_11.1\samples\domains\recplay_domain\defaultserver\applications\recplay\config.xmlのdataset-name要素のrecord-parameters子要素の値が含まれます。
例2-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>
「記録」タブの下の「開始」をクリックします。
図2-82に示すように「アラート」ダイアログが表示されます。
「OK」をクリックします。
現在のステータス・フィールドに記録中と表示されます。
「OK」をクリックするとすぐに、イベントがsimpleEventSourceコンポーネントから出力され始め、構成済のデータベースに格納されます。
「記録の開始」フィールドと「記録の停止」フィールドを使用すると、いつイベントを記録するかを構成できます。
左側のペインでeventStreamを選択します。
図2-83に示すように、右側のペインで「再生」タブを選択します。
タブの下の「開始」をクリックします。
図2-84に示すように「アラート」ダイアログが表示されます。
「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を選択します。
図2-85に示すようにViewstreamウィンドウが表示されます。
右側のペインで「クライアントの初期化」をクリックします。
「チャネルのサブスクライブ」テキスト・ボックスに/playbackchannelと入力します。
「サブスクライブ」をクリックします。
「受信メッセージ」テキスト・ボックスに、再生されたイベントの詳細が表示されます。再生されたイベントは、イベントの作成時刻と再生時刻を示します。
記録と再生のサンプルのソース・ディレクトリには、Javaソースと、アプリケーションを構成する他の必須リソース(構成XMLファイル、EPNアセンブリ・ファイルなど)が含まれます。build.xml Antファイルには、アプリケーションをビルドしてsignalgeneration_domainドメインにデプロイするためのターゲットが含まれています(2.11.3項「記録と再生をビルドするAntターゲットの説明」を参照)。
ソース・ディレクトリからイベントの記録/再生のサンプルをビルドおよびデプロイするには:
記録/再生のOracle CEPインスタンスがまだ実行されていない場合は、2.11.1項「イベントの記録/再生のサンプルの実行」の手順に従ってサーバーを起動します。再ビルドしたアプリケーションを正常にデプロイするには、サーバーが実行中である必要があります。
新しいコマンド・ウィンドウを開き、MIDDLEWARE_HOME\ocep_11.1\samples\source\applications\recplayにある記録/再生ディレクトリに移動します。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ホーム・ディレクトリです(d:\Oracle\Middlewareなど)。
prompt> cd d:\Oracle\Middleware\ocep_11.1\samples\source\applications\recplay
2.5項「開発環境の設定」に従って開発環境を設定します。
all Antターゲットを実行してアプリケーションをコンパイルし、JARファイルを作成します。
prompt> ant all
deploy Antターゲットを実行してアプリケーションJARファイルをMIDDLEWARE_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
このメッセージは、記録と再生のサンプルが再デプロイされ、正しく実行されていることを示します。
2.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 Fusion Middleware Oracle Complex Event Processing管理者ガイド』のDeployerコマンドライン・リファレンスに関する項を参照してください。
シグナル生成のサンプルの実装は、通常は『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPアプリケーションの標準的な作成手順に関する項に従って行われます。
標準的な開発プロセスが説明されているタスクごとの手順は、この項を参照してください。
サンプルのすべてのファイルは、MIDDLEWARE_HOME\ocep_11.1\samples\source\applications\recplayディレクトリを基準にして相対的な場所にあります。MIDDLEWARE_HOMEはOracle CEPをインストールした際に指定したミドルウェア・ホーム・ディレクトリです(c:\Oracle\Middlewareなど)。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお薦めします。ただし、これは必須条件ではありません。
記録と再生のサンプルで使用するファイルは次のとおりです。
図2-78に示すアプリケーションの各コンポーネントと、すべてのコンポーネントの接続方法を記述したEPNアセンブリ・ファイル。
サンプルでは、このファイルはcom.bea.wlevs.example.recplay-context.xmlという名前で、META-INF/springディレクトリにあります。
simpleEventSourceアダプタのJavaソース・ファイル。
サンプルでは、このファイルはSimpleEventSource.javaという名前で、src/com/bea/wlevs/adapter/example/recplayディレクトリにあります。
このファイルの詳細な説明と、アダプタのJavaファイルの一般的なプログラミング方法については、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のカスタム・アダプタとイベントBeanの作成に関する項を参照してください。
PlayedBackEventおよびSimpleEventイベント・タイプを記述するJavaソース・ファイル。SimpleEventイベント・タイプは、最初にアダプタによって生成されたイベントですが、PlayedBackEventイベント・タイプは、記録された後に再生されるイベントに対して使用します。PlayedBackEventsは、SimpleEventとほぼ同じですが、イベントが記録された時刻を示す追加フィールドがあります。
サンプルでは、2つのイベントはSimpleEvent.javaおよびPlayedBackEvent.javaという名前で、src/com/bea/wlevs/event/example/recplayディレクトリにあります。
このファイルの詳細な説明と、イベント・タイプのプログラミングの概要については、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のイベント・タイプの作成に関する項を参照してください。
アプリケーションのrecplayEventSinkイベントBeanを実装するJavaファイルは、simpleEventSourceアダプタからリアル・タイム・イベントと再生イベントの両方を受け取るイベント・シンクです。
サンプルでは、このファイルはRecplayEventSink.javaという名前で、src/com/bea/wlevs/example/recplayディレクトリにあります。
このファイルの詳細な説明と、アダプタのJavaファイルの一般的なプログラミング方法については、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のカスタム・アダプタとイベントBeanの作成に関する項を参照してください。
simpleEventSourceアダプタとeventStreamチャネル・コンポーネントを構成するXMLファイル。コンポーネントを指定する<record-parameters>要素を含むアダプタは、イベントをイベント・ストアに記録します。同様に、チャネルには再生イベントを受け取るように指定する<playback-parameters>要素が含まれます。
サンプルでは、このファイルはconfig.xmlという名前で、META-INF/wlevsディレクトリにあります。
Oracle CEPにデプロイされるOSGiバンドルのコンテンツを記述したMANIFEST.MFファイル。
サンプルでは、MANIFEST.MFファイルがMETA-INFディレクトリにあります。
このファイルの作成方法およびOracle CEPにデプロイするOSGiバンドルの作成方法の詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のアプリケーションのアセンブリとデプロイメントの概要に関する項を参照してください。
記録/再生のサンプルでは、OSGiバンドルのコンパイル、アセンブリ、およびデプロイにbuild.xml Antファイルを使用します。開発環境でもAntを使用する場合、このbuild.xmlファイルの詳細は、2.11.2項「ソース・ディレクトリからビルドおよびデプロイするイベントの記録/再生のサンプル」を参照してください。