![]() ![]() ![]() ![]() |
Oracle Complex Event Processing (略称 Oracle CEP) には、次の 4 つの完全なサンプルが含まれています。HelloWorld は、一般的な Oracle CEP アプリケーションの基本的な枠組みを示すサンプルです。外国為替取引 (FX) のサンプルには複数のコンポーネントが含まれています。シグナル生成のサンプルは、市場取引とトレンド検出をシミュレートし、記録/再生のサンプルは永続イベント ストアを使用したイベントの記録と再生をコンフィグレーションする方法を示します。
defaultserver
サブディレクトリに格納されます。アプリケーションをデプロイするには、ドメインのデフォルト サーバを起動するだけです。
サンプルの helloworld ドメインは、ORACLE_CEP_HOME
\ocep_10.3\samples\domains\helloworld_domain
にあります。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。詳細については、「helloworld ドメインから実行する HelloWorld のサンプル」を参照してください。
外国為替取引ドメインのサンプルは、ORACLE_CEP_HOME
\ocep_10.3\samples\domains\fx_domain
にあります。詳細については、「外国為替取引のサンプルの実行」を参照してください。
シグナル生成ドメインのサンプルは、ORACLE_CEP_HOME
\ocep_10.3\samples\domains\signalgeneration_domain
にあります。詳細については、「シグナル生成のサンプルの実行」を参照してください。
記録と再生ドメインのサンプルは、ORACLE_CEP_HOME
\ocep_10.3\samples\domains\recplay_domain
にあります。詳細については、「イベントの記録/再生のサンプルの実行」を参照してください。
HelloWorld ソース ディレクトリは、ORACLE_CEP_HOME
\ocep_10.3\samples\source\applications\helloworld
にあります。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。詳細については、「HelloWorld のサンプルの実装」を参照してください。
外国為替取引のソース ディレクトリは、ORACLE_CEP_HOME
\ocep_10.3\samples\source\applications\fx
にあります。詳細については、「FX のサンプルの実装」を参照してください。
シグナル生成のソース ディレクトリは、ORACLE_CEP_HOME
\ocep_10.3\samples\source\applications\signalgeneration
にあります。
記録と再生のソース ディレクトリは、ORACLE_CEP_HOME
\ocep_10.3\\samples\source\applications\recplay
にあります。詳細については、「記録と再生のサンプルの実装」を参照してください。
サンプルでは Ant を開発ツールとして使用しています。Ant の詳細とコンピュータへのインストールについては、Apache Ant Project を参照してください。
Oracle CEP を初めてインストールする場合、サンプルをインストールするには、[Custom
] オプションを選択する必要があります。[Typical
] オプションでは、サンプルは含まれません。
以前に [Typical
] オプションを使用して Oracle CEP をインストールしている場合に、サンプルもインストールするには、Oracle CEP インストール プロセスを再実行し、同じ Oracle CEP ホーム ディレクトリを指定します。インストール プロセスの後半のステップで、サンプルのみをインストールできます。
Oracle CEP Visualizer (略称 Visualizer) は、Oracle CEP からのデータを使用し、そのデータを便利で直感的な方法でシステム管理者やオペレータに表示し、さらに特定のタスクにおいてコンフィグレーションの変更を行うために受け入れたデータを再び Oracle CEP に返す Web 2.0 アプリケーションです。
Visualizer 自身は各サーバ インスタンスに自動的にデプロイされる Oracle CEP アプリケーションです。サンプルで Visualizer を使用するには、以下の各サンプルに示されている手順に従ってサーバを起動済みであることを確認し、ブラウザで次の URL を起動します。
http://host
:9002
host
は、Oracle CEP をホストするコンピュータ名です。ブラウザを実行しているのと同じコンピュータである場合は、localhost
とすることができます。
HelloWorld アプリケーションではセキュリティが無効になるため、ログイン画面でユーザ名とパスワードを入力せずに [Logon] をクリックできます。ただし、FX およびシグナル生成のサンプルでは、セキュリティが有効になるため、以下の情報を使用してログインします。
User Id: wlevs
Password: wlevs
Visualizer の詳細については、「Visualizer の概要」を参照してください。
サンプルおよび Oracle CEP アプリケーション全般について、実行時のスループットとレイテンシを向上させるには、次の処理をお勧めします。
-dgc
パラメータを渡して、確定的ガベージ コレクタを有効にします。prompt> startwlevs.cmd -dgc
デフォルトでは、サンプルの確定的ガベージ コレクタは無効になっています。Oracle JRockit Real Time 3.0 のマニュアルについては、Oracle Technology Network を参照してください。
Oracle CEP インスタンスを起動してサンプルを実行する前に、開発環境を設定する必要があります。特に、正しいバージョンの JRockit JDK を使用するように PATH および JAVA_HOME 環境変数を設定する必要があります。
JRockit をコンピュータにインストールするときに使用された可能性がある方法として、次の 2 つの方法があります。
必須ではありませんが、最適な結果を得るためには、Oracle JRockit Real Time 3.0 に含まれる JRockit JDK バージョンを使用して Oracle CEP を実行することをお勧めします。以下の手順では、いずれの場合にも適用できる環境の設定方法を説明します。
bin
ディレクトリを含むように PATH 環境変数を更新します。また、PATH 環境変数に Ant のインストール先の bin
ディレクトリが含まれていることを確認してください。
Oracle JRockit Real Time 3.0 と一緒にインストールされた JRockit JDK を使用する場合
Oracle JRockit Real Time 3.0 が d:\jrockit
ディレクトリにインストールされていて、Ant が d:\ant
ディレクトリにインストールされている場合は、PATH 環境変数を次のように設定します。
prompt> set PATH=d:\jrockit\jrrt-3.0.0-1.6.0\bin;d:\ant\bin;%PATH%
Oracle CEP 10.3 と一緒にインストールされた JRockit JDK を使用する場合
Oracle CEP 10.3 が d:\oracle_cep
ディレクトリにインストールされていて、Ant が d:\ant
ディレクトリにインストールされている場合は、PATH 環境変数を次のように設定します。
prompt> set PATH=d:\oracle_cep\jrockit-R27.6.0-50-1.6.0_05\bin;d:\ant\bin;%PATH%
JAVA_HOME
変数が正しい JRockit JDK を参照していることを確認します。正しくない場合は、スクリプトを編集します。
サーバ起動スクリプト (startwlevs.cmd
) は、メイン ドメイン ディレクトリの defaultserver
サブディレクトリにあります。defaultserver
サブディレクトリには、各ドメインのスタンドアロン サーバのファイルが含まれます。たとえば、HelloWorld ドメインは、ORACLE_CEP_HOME
\ocep_10.3\samples\domains\helloworld_domain
にあります。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
Oracle JRockit Real Time 3.0 と一緒にインストールされた JRockit JDK を使用する場合、set
コマンドを次のように指定します。
set JAVA_HOME=d:\jrockit\jrrt-3.0.0-1.6.0
Oracle CEP 10.3 と一緒にインストールされた JRockit JDK を使用する場合、set
コマンドを次のように指定します。
set JAVA_HOME=d:\oracle_cep\jrockit-R27.6.0-50-1.6.0_05
JAVA_HOME
変数を、JRockit JDK を参照するように設定します。
Oracle JRockit Real Time 3.0 と一緒にインストールされた JRockit JDK を使用する場合
prompt> set JAVA_HOME=d:\jrockit\jrrt-3.0.0-1.6.0
Oracle CEP 10.3 と一緒にインストールされた JRockit JDK を使用する場合
prompt> set JAVA_HOME=d:\oracle_cep\jrockit-R27.6.0-50-1.6.0_05
setEnv.cmd
などのコマンド ファイルを作成して、これらの set
コマンドを指定しておくと、セッションからログアウトした後に開発環境を簡単にリセットできます。
Windows コンピュータで、[コントロール パネル|システム] ウィンドウを呼び出し、[詳細設定] タブ、[環境変数] ボタンの順にクリックして、これらの環境変数を永続的に設定することもできます。環境変数は、現在のユーザに対して、またはシステム全体に対して設定できます。
bin
ディレクトリを含むように PATH 環境変数を更新します。また、PATH 環境変数に Ant のインストール先の bin
ディレクトリが含まれていることを確認してください。
Oracle JRockit Real Time 3.0 と一緒にインストールされた JRockit JDK を使用する場合
Oracle JRockit Real Time が /jrockit
ディレクトリにインストールされていて、Ant が /ant
ディレクトリにインストールされている場合は、PATH 環境変数を次のように設定します。
prompt> PATH=/jrockit/jrrt-3.0.0-1.6.0/bin:/ant/bin:$PATH
Oracle CEP 10.3 と一緒にインストールされた JRockit JDK を使用する場合
Oracle CEP が /oracle_cep
ディレクトリにインストールされていて、Ant が /ant
ディレクトリにインストールされている場合は、PATH 環境変数を次のように設定します。
prompt> PATH=/oracle_cep/jrockit-R27.6.0-50-1.6.0_05/bin:/ant/bin:$PATH
JAVA_HOME
変数が正しい JRockit JDK を参照していることを確認します。正しくない場合は、スクリプトを編集します。
サーバ起動スクリプト (startwlevs.sh
) は、メイン ドメイン ディレクトリの defaultserver
サブディレクトリにあります。defaultserver
サブディレクトリには、各ドメインのスタンドアロン サーバのファイルが含まれます。たとえば、HelloWorld ドメインは、ORACLE_CEP_HOME
/ocep_10.3/samples/domains/helloworld_domain
にあります。ORACLE_CEP_HOME
は、/oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。
Oracle JRockit Real Time 3.0 と一緒にインストールされた JRockit JDK を使用する場合は、JAVA_HOME
変数を次のように設定します。
JAVA_HOME=/jrockit/jrrt-3.0.0-1.6.0
Oracle CEP 10.3 と一緒にインストールされた JRockit JDK を使用する場合は、JAVA_HOME
変数を次のように設定します。
JAVA_HOME=/oracle_cep/jrockit-R27.6.0-50-1.6.0_05
JAVA_HOME
変数を、JRockit JDK を参照するように設定します。
Oracle JRockit Real Time 3.0 と一緒にインストールされた JRockit JDK を使用する場合
prompt> JAVA_HOME=/jrockit/jrrt-3.0.0-1.6.0
Oracle CEP 10.3 と一緒にインストールされた JRockit JDK を使用する場合
prompt> JAVA_HOME=/oracle_cep/jrockit-R27.6.0-50-1.6.0_05
setEnv.sh
などのコマンド ファイルを作成して、これらのコマンドを指定しておくと、セッションからログアウトした後に環境を簡単にリセットできます。
Oracle CEP アプリケーションの作成方法を示す最初のサンプルは、広く知られている HelloWorld です。次の図は、アプリケーションを構成するコンポーネントと、それらのコンポーネントが連動して HelloWorld イベント処理ネットワークを構成するしくみを示しています。
helloworldAdapter
—単純に「Hello World」というメッセージを毎秒生成するコンポーネント。実世界のシナリオでは、このコンポーネントは通常、ソース (金融機関から送られてくるデータなど) からデータ ストリームを読み込み、読み込んだデータ ストリームを複合イベント プロセッサで処理できるイベント ストリームに変換します。HelloWorld アプリケーションには、HelloWorldAdapter のインスタンスを作成する HelloWorldAdapterFactory も含まれています。helloworldInstream
—アダプタで生成されたイベント (この場合、「Hello World」のメッセージ) を複合イベント プロセッサに送信するコンポーネント。helloworldProcessor
—単純に、helloworldAdapter
コンポーネントから受け取ったメッセージをビジネス ロジックを含む POJO に転送するコンポーネント。実世界のシナリオでは、このコンポーネントは通常、ストリームから受け取ったイベントに対して追加の処理やはるかに複雑な処理を実行します。例として、プロパティ値に基づいてイベントのサブセットを選択する処理や、イベントをグループ化する処理があります。helloworldOutstream
—複合イベント プロセッサで処理されたイベントを、ユーザ定義のビジネス ロジックを含む POJO に送るコンポーネント。helloworldBean
—出力ストリームを経由してプロセッサからひとまとまりのメッセージを受け取るたびに、単純にメッセージを出力する POJO コンポーネント。実世界のシナリオでは、このコンポーネントにはアプリケーションのビジネス ロジックが含まれます。例として、プロセッサから受け取ったイベントに関するレポートを実行するロジックや、適切な電子メールまたはアラートを送信するロジックがあります。
helloworld
ドメインにあらかじめデプロイされている HelloWorld アプリケーションを実行するには、次の手順に従って Oracle CEP のインスタンスを起動するだけです。
ORACLE_CEP_HOME
\ocep_10.3\samples\domains\helloworld_domain\defaultserver
にある helloworld ドメイン ディレクトリのデフォルト サーバ ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。prompt> cd d:\oracle_cep\ocep_10.3\samples\domains\helloworld_domain\defaultserver
startwlevs.cmd
(Windows) コマンドまたは startwlevs.sh
(UNIX) コマンドを実行して Oracle CEP を起動します。prompt> startwlevs.cmd
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc
パラメータを渡して確定的ガベージ コレクタを有効にします。
prompt> startwlevs.cmd -dgc
サーバ ステータス メッセージがスクロールされた後、約 1 秒ごとに次のメッセージが出力されます。
Message: HelloWorld - the current time is: 3:56:57 PM
このメッセージは、HelloWorld のサンプルが正しく実行されていることを示しています。
HelloWorld サンプルのソース ディレクトリには、Java ソースと、HelloWorld アプリケーションを構成する他の必須リソース (コンフィグレーション XML ファイルなど) が含まれます。build.xml
Ant ファイルには、アプリケーションをビルドして helloworld ドメインにデプロイするためのターゲットが含まれています。詳細については、「Hello World をビルドする Ant ターゲットの説明」を参照してください。
HelloWorld アプリケーションをビルドおよびデプロイするには、以下の手順を実行します。
ORACLE_CEP_HOME
\ocep_10.3\samples\source\applications\helloworld
にある HelloWorld ソース ディレクトリに移動します。prompt> cd d:\oracle_cep\ocep_10.3\samples\source\applications\helloworld
all
Ant ターゲットを実行してアプリケーションをコンパイルし、JAR ファイルを作成します。prompt> ant all
deploy
Ant ターゲットを実行してアプリケーション JAR ファイルを Oracle CEP にデプロイします。prompt> ant -Daction=update deploy
警告 : | このターゲットは、ドメイン ディレクトリにある既存の helloworld アプリケーション JAR ファイルを上書きします。 |
Message: HelloWorld - the current time is: 3:56:57 PM
このメッセージは、HelloWorld のサンプルが再デプロイされ、正しく実行されていることを示しています。
HelloWorld ソース ディレクトリの最上位レベルにある build.xml
ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。
clean
—このターゲットは、現在のディレクトリの下にある dist
および output
作業ディレクトリを削除します。all
—このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.helloworld_3.0.0.0.jar
という JAR ファイルを生成し、生成した JAR ファイルを現在のディレクトリの下の dist
ディレクトリに格納します。deploy
—このターゲットは、Deployer ユーティリティを使用して JAR ファイルを Oracle CEP にデプロイします。Deployer ユーティリティの詳細なリファレンス情報については、「Deployer コマンドライン リファレンス」を参照してください。
HelloWorld のサンプルを実装するには、通常、「Oracle CEP アプリケーションの作成 : 一般的な手順」に従います。タスク指向の手順を示して一般的な開発プロセスを説明している節を参照してください。
HelloWorld のサンプルは比較的単純であるため、Oracle CEP アプリケーションを作成するための一般的な手順で説明されているすべてのコンポーネントやコンフィグレーション ファイルを使用するわけではありません。このサンプルで使用するすべてのファイルは、ORACLE_CEP_HOME
\ocep_10.3\samples\source\applications\helloworld
ディレクトリを基準にして相対的な場所にあります。ORACLE_CEP_HOME
は、c:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお勧めします。ただし、これは必須条件ではありません。
HelloWorld のサンプルで使用するファイルは次のとおりです。
サンプルでは、このファイルは com.bea.wlevs.example.helloworld-context.xml
という名前で、META-INF/spring
ディレクトリにあります。
詳細については、「HelloWorld EPN アセンブリ ファイル」を参照してください。
helloworldAdapter
コンポーネントの Java ソース ファイル。
サンプルでは、このファイルは HelloWorldAdapter.java
という名前で、src/com/bea/wlevs/adapter/example/helloworld
ディレクトリにあります。
このファイルの詳細な説明と、アダプタの Java ファイルの一般的なプログラミング方法については、アダプタ クラスのプログラミングのガイドラインを参照してください。
HelloWorldEvent
イベント タイプを記述した Java ソース ファイル。
サンプルでは、このファイルは HelloWorldEvent.java
という名前で、src/com/bea/wlevs/event/example/helloworld
ディレクトリにあります。
このファイルの詳細な説明と、イベント タイプのプログラミングの概要については、「イベント タイプの作成」を参照してください。
helloworldProcessor
および helloworldOutstream
コンポーネントをコンフィグレーションする XML ファイル。このファイルの重要な部分は、HelloWorld アプリケーションで処理するイベント セットを選択するための EPL ルール セットです。プロセッサ コンフィグレーション ファイルを Oracle CEP アプリケーションに組み込む必要があります。アダプタとストリームのコンフィグレーションは省略可能です。
サンプルでは、このファイルは config.xml
という名前で、META-INF/wlevs
ディレクトリにあります。
詳細については、「HelloWorld コンポーネント コンフィグレーション ファイル」を参照してください。
helloworldBean
コンポーネント (ビジネス ロジックを含む POJO) を実装する Java ファイル。
サンプルでは、このファイルは HelloWorldBean.java
という名前で、src/com/bea/wlevs/example/helloworld
ディレクトリにあります。
このファイルの詳細と、ビジネス ロジック POJO の一般的なプログラミング方法については、ビジネス ロジックのプログラミングのガイドラインを参照してください。
MANIFEST.MF
ファイル。
サンプルでは、MANIFEST.MF
ファイルが META-INF
ディレクトリにあります。
このファイルの作成方法と、Oracle CEP にデプロイする OSGi バンドルの作成方法については、「Oracle CEP アプリケーションのアセンブル : 主な手順」を参照してください。
HelloWorld のサンプルでは、OSGi バンドルのコンパイル、アセンブリ、およびデプロイに build.xml
Ant ファイルを使用します。開発環境でも Ant を使用する場合、この build.xml
ファイルの詳細については、「ソース ディレクトリからビルドおよびデプロイする HelloWorld のサンプル」を参照してください。
EPN アセンブリ ファイルの主な目的の 1 つは、アプリケーションのコンポーネントを宣言してイベント処理ネットワークを定義し、これらすべてのコンポーネントの接続方法、つまりどのコンポーネントが他のどのコンポーネントをリスンするかを定義することです。Oracle CEP には、ネットワークの宣言に使用するカスタム Spring タグのセットが用意されています。また、EPN アセンブリ ファイルは、アプリケーションで使用するイベント タイプとアプリケーションの EPL ルールを登録するためにも使用します。
EPN アセンブリ ファイルを通常の方法で使用して、 Spring アプリケーション コンテキストで アプリケーション コンポーネント Bean を定義します。アプリケーション コンポーネント Bean は、 Java クラスで実装される「アダプタ」や 「ビジネス ロジックを含む POJO」などです。
カスタム Spring タグの詳細なリファレンス情報については、Oracle CEP カスタム Spring タグ リファレンスか、タグを定義している XSD スキーマ ファイルを参照してください。
次のサンプルは、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.xsd">
<wlevs:event-type-repository>
<wlevs:event-type type-name="HelloWorldEvent">
<wlevs:class>com.bea.wlevs.event.example.helloworld.HelloWorldEvent</wlevs:class>
</wlevs:event-type>
</wlevs:event-type-repository>
<wlevs:adapter id="helloworldAdapter" class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter" >
<wlevs:instance-property name="message" value="HelloWorld - the currenttime is:"/>
</wlevs:adapter>
<wlevs:processor id="helloworldProcessor" />
<wlevs:stream id="helloworldInstream" >
<wlevs:listener ref="helloworldProcessor"/>
<wlevs:source ref="helloworldAdapter"/>
</wlevs:stream>
<wlevs:stream id="helloworldOutstream" manageable="true">
<wlevs:listener>
<bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
</wlevs:listener>
<wlevs:source ref="helloworldProcessor"/>
</wlevs:stream>
</beans>
<wlevs:event-type-repository>
エントリは、アプリケーション全体で使用するイベント タイプを登録します。HelloWorld アプリケーションには、イベント タイプが 1 つしか存在しません。このイベント タイプは、com.bea.wlevs.event.example.helloworld.HelloWorldEvent
クラスで実装される HelloWorldEvent
です。Oracle CEP は、必要に応じてこのデータ型のインスタンスを自動的に作成します。アプリケーションの EPL ルールでもこのデータ型を参照できます。<wlevs:adapter>
、<wlevs:processor>
、および <wlevs:stream>
エントリは、ネットワークの各コンポーネントを宣言することによって、イベント処理ネットワークを定義します。各コンポーネントのコンフィグレーションについて次に説明します。<wlevs:adapter>
タグは、HelloWorld アプリケーションのアダプタ コンポーネントを定義します。<wlevs:adapter id="helloworldAdapter"
class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter" >
<wlevs:instance-property name="message" value="HelloWorld - the currenttime is:"/>
</wlevs:adapter>
id
属性は、このコンポーネントのユニークな識別子を指定します。id は、他のコンポーネントによって後で参照されます。class
属性で指定するクラスは、アダプタを実装します。この場合は com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter
です。
<wlevs:instance-property>
子タグは、インスタンスの変数をアダプタ インスタンスに渡します。変数の名前は message
で、値は HelloWorld - the current time is:
です。
<wlevs:processor>
タグは、アプリケーションのプロセッサ コンポーネントを定義します。<wlevs:processor id="helloworldProcessor" />
id
属性は、<wlevs:adapter>
の属性と同じように機能します。
<wlevs:stream>
タグは、アプリケーションの 2 つのストリーム コンポーネントを定義します。<wlevs:stream id="helloworldInstream" >
<wlevs:listener ref="helloworldProcessor"/>
<wlevs:source ref="helloworldAdapter"/>
</wlevs:stream>
<wlevs:stream id="helloworldOutstream" manageable="true">
<wlevs:listener>
<bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
</wlevs:listener>
<wlevs:source ref="helloworldProcessor"/>
</wlevs:stream>
ストリームの id
属性は、<wlevs:adapter>
の属性と同様に機能します。manageable
属性は、ストリームのモニタを有効にします。コンポーネントの管理容易性はデフォルトで無効になっています。
<wlevs:stream id="helloworldInstream">
タグは、<wlevs:listener>
子タグを使用して、helloworldProcessor
がストリームをリスンするように指定します。また、<wlevs:source>
子タグを使用して、ストリームが helloworldAdapter
コンポーネントからイベントを取得するように指定します。
<wlevs:stream id="helloworldOutstream">
タグでも、これらの listener タグと source タグを使用します。ただし、1 つ異なる点として、helloworldOutstream タグはユニークな識別子を参照するのではなく、<wlevs:listener>
タグでビジネス ロジック POJO の定義を直接ネストします。この場合、ネストされたタグは、POJO が com.bea.wlevs.example.helloworld.HelloWorldBean クラスで実装されることを指定する Spring 標準の <bean>
です。
HelloWorld アプリケーションのコンポーネント コンフィグレーション ファイルでは、ストリームの 1 つとプロセッサを次のようにコンフィグレーションしています。
<?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>
<rule id="helloworldRule"><![CDATA[ select * from HelloWorldEvent retain 1 event ]]></rule>
</rules>
</processor>
<stream>
<name>helloworldOutstream</name>
<max-size>10000</max-size>
<max-threads>2</max-threads>
</stream>
</n1:config>
アプリケーションに複数のプロセッサ、アダプタ、またはストリームがある場合は、それらすべてを 1 つのコンフィグレーション ファイルで宣言することも、コンポーネントごとに個別のコンフィグレーション ファイルを作成することもできます。どちらか管理しやすい方法を選択してください。
コンフィグレーションするコンポーネントごとに <name>
子要素を追加し、参照する特定のコンポーネントを明示的に宣言する必要があります。<name>
要素の値は、EPN アセンブリ ファイルで宣言したコンポーネントのユニークな識別子に対応している必要があります。
たとえば、プロセッサが EPN アセンブリ ファイルで次のように宣言されているとします。
<wlevs:processor id="helloworldProcessor" ...>
対応する XML コンフィグレーションは次のようになります。
<processor>
<name>helloworldProcessor</name>
...
</processor>
HelloWorld のサンプルでは、helloworldProcessor
という名前の 1 つのプロセッサと、helloworldOutstream
という名前の 1 つのストリームに対して、1 つのコンフィグレーション ファイルを使用しています。これらの名前は EPN アセンブリ ファイルでのコンポーネントの宣言に対応しています。
<processor>
要素は、プロセッサ コンポーネントをコンフィグレーションします。プロセッサ コンフィグレーションの重要な部分は、このプロセッサで実行するイベント処理言語 (EPL) のルール セットの宣言です。これらのルールは最終的にアプリケーション ビジネス オブジェクトに渡されるイベント セットを選択します。各ルールは、XML の ![CDATA[...]]
セクションを使用して <rule>
要素で宣言されます。すべてのルールは単一の <rules>
要素によってグループ化されます。特定のプロセッサ用に必要な数だけルールを定義できます。
HelloWorld アプリケーションには、ごく単純なルールが 1 つあるだけです。
select * from HelloWorldEvent retain 1 event
このルールでは、タイプが HelloWorldEvent
であるすべてのイベントを選択しますが、ウィンドウには一度に 1 つのイベントのみを保持します。EPL の使用に関する詳細と使用例については、『EPL リファレンス ガイド』を参照してください。
<stream>
要素は、helloworldOutstream
コンポーネントをコンフィグレーションします。<max-size>
および <max-threads>
要素は、ストリームの最大サイズとストリームに割り当てられたスレッドの最大数をそれぞれ指定します。
外国為替取引のサンプル (簡単に FX と呼びます) は、複数のデータ フィードから読み込んだ情報を処理するために複数のプロセッサを使用しているので、HelloWorld のサンプルよりも複雑です。FX のサンプルでは、Oracle CEP load generator ユーティリティを使用してデータ フィードをシミュレートします。次の図に FX イベント処理ネットワークを示します。
シナリオでは、load generator を使用してシミュレートした 3 つのデータ フィードにより、世界各地から定数の値のペアが送信されます。値のペアは通貨を組み合わせたもので、たとえば USDEUR は米ドルと欧州ユーロの組み合わせを表します。値のペアと共に 2 つの通貨間の為替レートも送信されます。fxMarketXXX
アダプタはフィードからデータを受信し、受信したデータをイベントに変換して preprocessorXXX
プロセッサに渡します。各プロセッサは、初期期限切れチェックを実行し、発生からの経過時間が 10 秒を超えているイベントがないことを確認します。さらに境界チェックを実行し、2 つの通貨間の為替レートが現在の境界の範囲内にあることを確認します。サーバは、特定のストリームから特定の通貨のペアのみを選択します。たとえば、シミュレートされた米国のデータ フィードからは USDEUR を選択し、USDAUD (オーストラリア ドル) などの他のすべてのペアを拒否します。
各データ フィード プロバイダからのデータがこの初期準備フェーズを通過すると、spreader
という別のプロセッサが、すべてのプロバイダのすべてのイベントを結合し、最大レートと最小レートの中間点を計算して、トレーダが指定したスプレッドを適用します。最後に、プロセッサはビジネス コードを含む POJO にレートを転送します。このサンプルでは、POJO は単純にレートをクライアントにパブリッシュします。
Oracle CEP モニタは、直前のステップのイベント レイテンシが特定のしきい値を超えていないか (たとえば、30 秒という時間内に更新されたレートがないか)、また同じ通貨のペアで 2 つの連続的なレート間の偏差が大きすぎないかを監視するようにコンフィグレーションされています。最後に、通貨の各ペアの直前のレートがダッシュボードに転送されます。
最適なデモンストレーションの目的のためには、複数の CPU または 3GHz のデュアルコア Intel と 2GB 以上の RAM を搭載した強力なコンピュータでこのサンプルを実行することをお勧めします。
fx_domain ドメインにあらかじめデプロイされている外国為替取引 (FX) アプリケーションを実行するには、次の手順に従って Oracle CEP のインスタンスを起動するだけです。
ORACLE_CEP_HOME
\ocep_10.3\samples\domains\fx_domain\defaultserver
にある fx ドメイン ディレクトリのデフォルトのサーバ ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。prompt> cd d:\oracle_cep\ocep_10.3\samples\domains\fx_domain\defaultserver
startwlevs.cmd
(Windows) コマンドまたは startwlevs.sh
(UNIX) コマンドを実行して Oracle CEP を起動します。prompt> startwlevs.cmd
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc
パラメータを渡して確定的ガベージ コレクタを有効にします。
prompt> startwlevs.cmd -dgc
これで、FX アプリケーションでデータ フィードからデータを受信する準備ができました。
ORACLE_CEP_HOME
\ocep_10.3\utils\load-generator
ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。fxAmer.prop
プロパティ ファイルを使用して load generator を実行します。prompt> runloadgen.cmd fxAmer.prop
fxAsia.prop
プロパティ ファイルを使用して手順 4 ~ 6 を繰り返し、アジアのデータ フィードをシミュレートします。prompt> runloadgen.cmd fxAsia.prop
fxEuro.prop
プロパティ ファイルを使用して手順 4 ~ 6 を繰り返し、ヨーロッパのデータ フィードをシミュレートします。prompt> runloadgen.cmd fxEuro.prop
サーバを起動したコマンド ウィンドウでサーバ ステータス メッセージがスクロールされ、3 つの load generator が起動した後、サーバ コマンド ウィンドウに次のようなメッセージが出力されます。
{crossRate=USDJPY, internalPrice=119.09934499999781}, {crossRate=USDGBP, internalPrice=0.5031949999999915}, {crossRate=USDJPY, internalPrice=117.73945624999783}
これらのメッセージは、外国為替取引のサンプルが正しく実行されていることを示しています。出力では、米ドル対日本円および米ドル対英国ポンドのクロス レートが示されています。
外国為替取引 (FX) サンプルのソース ディレクトリには、Java ソースと、FX アプリケーションを構成する他の必須リソース (コンフィグレーション XML ファイルなど) が含まれます。build.xml
Ant ファイルには、アプリケーションをビルドして fx_domain ドメインにデプロイするためのターゲットが含まれています (「FX をビルドする Ant ターゲットの説明」を参照)。
FX アプリケーションをビルドおよびデプロイするには、以下の手順を実行します。
ORACLE_CEP_HOME
\ocep_10.3\samples\source\applications\fx
にある FX ソース ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。prompt> cd d:\oracle_cep\ocep_10.3\samples\source\applications\fx
all
Ant ターゲットを実行してアプリケーションをコンパイルし、JAR ファイルを作成します。prompt> ant all
deploy
Ant ターゲットを実行してアプリケーション JAR ファイルを Oracle CEP にデプロイします。prompt> ant -Dusername=wlevs -Dpassword=wlevs -Daction=update deploy
警告 : | このターゲットは、ドメイン ディレクトリにある既存の helloworld アプリケーション JAR ファイルを上書きします。 |
サーバ ステータス メッセージがスクロールされた後、ほぼ毎秒次のメッセージが出力されます。
{crossRate=USDJPY, internalPrice=119.09934499999781}, {crossRate=USDGBP, internalPrice=0.5031949999999915}, {crossRate=USDJPY, internalPrice=117.73945624999783}
このメッセージは、FX のサンプルが再デプロイされ、正しく実行されていることを示しています。
FX ソースの最上位レベル ディレクトリにある build.xml
ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。
clean
—このターゲットは、現在のディレクトリの下にある dist
および output
作業ディレクトリを削除します。all
—このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.fx_3.0.0.0.jar
という JAR ファイルを生成し、生成した JAR ファイルを現在のディレクトリの下の dist
ディレクトリに格納します。deploy
—このターゲットは、Deployer ユーティリティを使用して JAR ファイルを Oracle CEP にデプロイします。Deployer ユーティリティの詳細なリファレンス情報については、「Deployer コマンドライン リファレンス」を参照してください。
外国為替取引 (FX) のサンプルを実装するには、通常、「Oracle CEP アプリケーションの作成 : 一般的な手順」に従います。一般的な開発プロセスを説明している手順の節を参照してください。
FX のサンプルで使用するすべてのファイルは、ORACLE_CEP_HOME
\ocep_10.3\samples\source\applications\fx
ディレクトリを基準にして相対的な場所にあります。ORACLE_CEP_HOME
は、c:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお勧めします。ただし、これは必須条件ではありません。
サンプルでは、このファイルは com.bea.wlevs.example.fx-context.xml
という名前で、META-INF/spring
ディレクトリにあります。
詳細については、「FX EPN アセンブリ ファイル」を参照してください。
1 つ目の XML ファイルは、preprocessorAmer
、preprocessorAsia
、および preprocessorEuro
コンポーネントをすべて 1 つのファイルにコンフィグレーションします。この XML ファイルは、シミュレートされた特定のマーケット フィードから特定の通貨ペアを選択する EPL ルールを含み、サンプルの概要で説明している境界条件を実行します。サンプルでは、このファイルは preprocessors.xml
という名前で、META-INF/wlevs
ディレクトリにあります。
もう 1 つの XML ファイルは、spreader
プロセッサをコンフィグレーションします。このコンポーネントはプリプロセッサで選択されたすべてのイベントを結合し、特定の通貨ペアの内部価格を計算した後、クロス レートを計算します。このファイルは spreader.xml
という名前で、META-INF/wlevs
ディレクトリにあります。
詳細については、「FX プロセッサ コンフィグレーション ファイル」を参照してください。
OutputBean
コンポーネント (ビジネス ロジックを含む POJO) を実装する Java ファイル。この POJO は、受信したイベント (onEvent
メソッドでプログラミングされたもの) を画面に出力します。また、イベント タイプ リポジトリに ForeignExchangeEvent
イベント タイプを登録します。
サンプルでは、このファイルは OutputBean.java
という名前で、src/com/bea/wlevs/example/fx
ディレクトリにあります。
POJO で参照されている Oracle CEP API の詳細については、Oracle CEP の Javadoc を参照してください。
ForeignExchangeEvents
を生成するファクトリである ForeignExchangeBuilderFactory
を実装する Java ファイル。
サンプルでは、このファイルは ForeignExchangeBuilderFactory.java
という名前で、src/com/bea/wlevs/example/fx
ディレクトリにあります。
ForeignExchangeBuilderFactory
で参照されている Oracle CEP API の詳細については、Oracle CEP のJavadoc を参照してください。
MANIFEST.MF
ファイル。
サンプルでは、MANIFEST.MF
ファイルが META-INF
ディレクトリにあります。
このファイルの作成方法と、Oracle CEP にデプロイする OSGi バンドルの作成方法については、「Oracle CEP アプリケーションのアセンブル : 主な手順」を参照してください。
FX のサンプルでは、OSGi バンドルのコンパイル、アセンブル、およびデプロイに build.xml
Ant ファイルを使用します。開発環境でも Ant を使用する場合、この build.xml
ファイルの詳細については、「ソース ディレクトリからビルドおよびデプロイする外国為替取引のサンプル」を参照してください。
次のサンプルは、FX サンプル アプリケーションで使用する EPN アセンブリ ファイルを示しています。太字のエントリの詳細については、サンプルの後にある説明を参照してください。
注意 : | EPN アセンブリ ファイルの概要については、「HelloWorld EPN アセンブリ ファイル」の先頭にある説明を参照してください。カスタム Spring タグの詳細なリファレンス情報については、Oracle CEP カスタム Spring タグ リファレンスか、タグを定義している XSD スキーマ ファイルを参照してください。 |
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:osgi="http://www.springframework.org/schema/osgi"
xmlns:wlevs="http://www.bea.com/ns/wlevs/spring"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi.xsd
http://www.bea.com/ns/wlevs/spring
http://www.bea.com/ns/wlevs/spring/spring-wlevs.xsd">
<wlevs:event-type-repository>
<wlevs:event-type type-name="ForeignExchangeEvent">
<wlevs:class>com.bea.wlevs.example.fx.OutputBean$ForeignExchangeEvent</wlevs:class>
<wlevs:property name="builderFactory">
<bean id="builderFactory" class="com.bea.wlevs.example.fx.ForeignExchangeBuilderFactory"/>
</wlevs:property>
</wlevs:event-type>
</wlevs:event-type-repository>
<!-- Assemble EPN (event processing network) -->
<wlevs:adapter id="fxMarketAmer" provider="loadgen">
<wlevs:instance-property name="port" value="9011"/>
</wlevs:adapter>
<wlevs:adapter id="fxMarketAsia" provider="loadgen">
<wlevs:instance-property name="port" value="9012"/>
</wlevs:adapter>
<wlevs:adapter id="fxMarketEuro" provider="loadgen">
<wlevs:instance-property name="port" value="9013"/>
</wlevs:adapter>
<wlevs:processor id="preprocessorAmer" listeners="spreaderIn"/>
<wlevs:processor id="preprocessorAsia" listeners="spreaderIn"/>
<wlevs:processor id="preprocessorEuro" listeners="spreaderIn"/>
<wlevs:stream id="fxMarketAmerOut">
<wlevs:listener ref="preprocessorAmer"/>
<wlevs:source ref="fxMarketAmer"/>
</wlevs:stream>
<wlevs:stream id="fxMarketAsiaOut">
<wlevs:listener ref="preprocessorAsia"/>
<wlevs:source ref="fxMarketAsia"/>
</wlevs:stream>
<wlevs:stream id="fxMarketEuroOut">
<wlevs:listener ref="preprocessorEuro"/>
<wlevs:source ref="fxMarketEuro"/>
</wlevs:stream>
<wlevs:stream id="spreaderOut" manageable="true">
<wlevs:listener>
<!-- Create business object -->
<bean id="outputBean"
class="com.bea.wlevs.example.fx.OutputBean"
autowire="byName"/>
</wlevs:listener>
</wlevs:stream>
<!-- The processor id needs to be well known so that it can import the rules config -->
<wlevs:processor id="spreader">
<wlevs:listener ref="spreaderOut"/>
</wlevs:processor>
<wlevs:stream id="spreaderIn">
<wlevs:listener ref="spreader"/>
</wlevs:stream>
</beans>
<wlevs:event-type-repository>
エントリは、アプリケーション全体で使用するイベント タイプを登録します。FX アプリケーションには、イベント タイプが 1 つしか存在しません。このイベント タイプは、com.bea.wlevs.example.fx.OutputBean
POJO クラスの ForeignExchangeEvent
内部クラスで実装される ForeignExchangeEvent
です。<wlevs:property name="builderFactory">
子タグは、FX アプリケーションのイベント ビルダ ファクトリ クラスが com.bea.wlevs.example.fx.ForeignExchangeBuilderFactory
によって実装されるように指定します。
Oracle CEP は、必要に応じて ForeignExchangeEvent
タイプのインスタンスを自動的に作成します。アプリケーションの EPL ルール、アダプタ Java クラス、および POJO でこのデータ型を参照できます。
<wlevs:adapter>
、<wlevs:processor>
、および <wlevs:stream>
エントリのセットは、ネットワークの各コンポーネントを宣言することによって、イベント処理ネットワークを設定します。このネットワークは、3 つのアダプタ、4 つのプロセッサ、および 5 つのストリームで構成されます (「FX イベント処理ネットワーク」を参照)。
各コンポーネントにはユニークな ID が指定されます。この ID は、他のコンポーネントがリスナとソースを宣言するときに参照することができます。
<wlevs:adapter>
エントリは 3 つのアダプタを指定します。次に例を示します。<wlevs:adapter id="fxMarketAmer" provider="loadgen">
<wlevs:instance-property name="port" value="9011"/>
</wlevs:adapter>
各 <wlevs:adapter>
の provider="loadgen"
属性は、アダプタが Oracle CEP load generator ユーティリティからデータを取得するように指定します。<wlevs:instance-property>
子タグは、アダプタがリスンするポート番号を指定します。
<wlevs:processor>
エントリは、4 つの複合イベント プロセッサを指定します。次に例を示します。<wlevs:processor id="preprocessorAmer" listeners="spreaderIn"/>
すべてのコンポーネント タグに共通の listeners
属性は、プロセッサをリスンするコンポーネントを指定します。このサンプルでは、このコンポーネントは spreaderIn
という名前のストリームです。
次のように <wlevs:listeners>
子タグを使用してコンポーネントのリスナを指定することもできます。
<wlevs:processor id="spreader">
<wlevs:listener ref="spreaderOut"/>
</wlevs:processor>
サンプルでは、spreaderOut
ストリームが spreader
プロセッサをリスンします。
<wlevs:stream>
エントリは 4 つのストリームを指定します。次に例を示します。<wlevs:stream id="fxMarketAmerOut">
<wlevs:listener ref="preprocessorAmer"/>
<wlevs:source ref="fxMarketAmer"/>
</wlevs:stream>
他のすべてのコンポーネントと同様に、<wlevs:listener>
および <wlevs:source>
子タグを使用して、このコンポーネントに対してリスナおよびソースとして機能する他のコンポーネントを指定できます。
サンプルでは、preprocessorAmer
プロセッサが fxMarketAmerOut
ストリームをリスンし、このストリームは fxMarketAmer
アダプタをリスンします。
次のサンプルは、<wlevs:listener>
タグ内にコンポーネントの定義をネストする方法を示しています。
<wlevs:stream id="spreaderOut" manageable="true">
<wlevs:listener>
<!-- Create business object -->
<bean id="outputBean"
class="com.bea.wlevs.example.fx.OutputBean"
autowire="byName"/>
</wlevs:listener>
</wlevs:stream>
サンプルでは、<bean>
タグを使用して標準の Spring Bean として宣言される outBean
POJO は、spreaderOut
ストリームをリスンします。spreaderOut
ストリームの manageable="true"
属性は、ストリームのモニタを有効にします。デフォルトでは、コンポーネントの管理容易性は無効になっています。
FX アプリケーションは 4 つのプロセッサを使用します。3 つのプロセッサで 3 つのデータ フィードを処理し、1 つのプロセッサで結果イベントを結合します。最初の 3 つのプロセッサは、preprocessor.xml
という名前の 1 つの XML ファイルで次のようにコンフィグレーションされます。
<?xml version="1.0" encoding="UTF-8"?>
<n1:config xmlns:n1="http://www.bea.com/ns/wlevs/config/application"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<processor>
<name>preprocessorAmer</name>
<rules>
<rule id="UsdToEurRule"><![CDATA[
insert into ForeignExchangeEvent
select avg(lastPrice) as price, 'USD' as fromRate, 'EUR' as toRate
from (select * from StockTick where symbol='USDEUR') retain 1 sec
where lastPrice < 3.0 and lastPrice > 0.25
]]></rule>
</rules>
</processor>
<processor>
<name>preprocessorAsia</name>
<rules>
<rule id="EurToJpyRule"><![CDATA[
insert into ForeignExchangeEvent
select avg(lastPrice) as price, 'EUR' as fromRate, 'JPY' as toRate
from (select * from StockTick where symbol='EURJPY') retain 1 sec
where lastPrice < 200.0 and lastPrice > 100.0
]]></rule>
</rules>
</processor>
<processor>
<name>preprocessorEuro</name>
<rules>
<rule id="EurToGbpRule"><![CDATA[
insert into ForeignExchangeEvent
select avg(lastPrice) as price, 'EUR' as fromRate, 'GBP' as toRate
from (select * from StockTick where symbol='EURGBP') retain 1 sec
where lastPrice < 1.5 and lastPrice > 0.5
]]></rule>
</rules>
</processor>
</n1:config>
このファイル内の 3 つのプロセッサは、すべて本質的には同じであり、データ フィードに対して異なる項目を照会するため、また異なる境界条件を適用するために EPL クエリで使用される値だけが異なります。このため、この節では、プロセッサの 1 つである preprocessorAmer
のみについて説明します。
米国のデータ フィードで起動される EPL ルールは次のとおりです。
insert into ForeignExchangeEvent
select avg(lastPrice) as price, 'USD' as fromRate, 'EUR' as toRate
from (select * from StockTick where symbol='USDEUR') retain 1 sec
where lastPrice < 3.0 and lastPrice > 0.25
このクエリを理解するには、次のように、さまざまな句を確認する必要があります。
insert
句では、この EPL ルールによって選択されたイベントを ForeignExchangeEvent
に挿入する必要があることを指定しています。ForeignExchangeEvent は、ネットワークにある次のプロセッサである spreader
が、独自の EPL クエリを実行する対象のオブジェクトです。 from
句では、プロセッサが StockTick データ フィードから、symbol
値が USDEUR
(米ドルと欧州ユーロの為替レート) である項目のみを受け入れ、その他すべての項目を拒否するように指定しています。さらに、from
句では、この EPL クエリを実行する時間ウィンドウを 1 秒に指定しています。 where
句では、フィードから読み込む特定の項目のレートが許容範囲内であることが保証されるように、境界条件を指定しています。このサンプルでは、フィードから読み込む特定の項目の LastPrice
が 3.00 ドルから 0.25 ドルの間である必要があります。 select
句では、選択された項目から ForeignExchangeEvent
オブジェクトに挿入する必要がある値を指定しています。このサンプルでは、ウィンドウ (1 秒) 内の全価格の平均、換算元の通貨として USD
、換算先の通貨として EUR
を指定しています。
spreader プロセッサは、spreader.xml
ファイルを使用して次のようにコンフィグレーションされています。
<?xml version="1.0" encoding="UTF-8"?>
<n1:config xmlns:n1="http://www.bea.com/ns/wlevs/config/application"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<processor>
<name>spreader</name>
<rules>
<rule id="spreaderRule"><![CDATA[
select ((a.price * b.price) + 0.05) as internalPrice, a.fromRate || b.toRate as crossRate
from ForeignExchangeEvent a, ForeignExchangeEvent b
retain 10 sec with unique a.toRate partition by a.fromRate
where a.toRate = b.fromRate and a.fromRate != b.toRate
]]></rule>
</rules>
</processor>
</n1:config>
spreader EPL ルールでは、以下のことが行われます。
from
句と where
句では、ForeignExchangeEvent
オブジェクト (3 つの preprocessorXXX
コンポーネントによって選択されたイベントを含む) から、toRate と fromRate の値が同じである 2 つのイベントを結合します。さらに、from
句では、処理時間ウィンドウを再び 1 秒と設定しています。select
句では、特定の通貨の内部価格を計算しています。この価格は、通貨の換算元レートと換算先レートの平均を求め、0.05 ドルの手数料を加算して算出します。また、クロス レートも計算します。クロス レートは、1 つの通貨の、第 3 国市場の別の通貨に対する価格であると定義されます。
このクエリの結果は、ビジネス オブジェクト POJO に送信されます。
EPL の使用に関する詳細と使用例については、『EPL リファレンス ガイド』を参照してください。
シグナル生成のサンプル アプリケーションは、シミュレートされたマーケット データを受信し、証券の価格変動が 2% を超えたかどうかを検証します。このアプリケーションは、特定の銘柄の連続的な株価を追跡することにより、トレンドの発生も検出します。変動が 2% を上回る価格が連続 3 回を超えた場合に、トレンドと見なします。
このアプリケーションでは、Oracle CEP load generator ユーティリティを使用してマーケット データ フィードをシミュレートします。このサンプルでは、load generator は毎秒最大 10,000 個のメッセージを生成します。サンプルには、照合したイベントとレイテンシを表示する HTML ダッシュボードが含まれています。イベントは、銘柄記号、タイムスタンプ、および価格で構成されます。
このサンプルは、スループットが高い状況でレイテンシ ジッタが最小限である非常に低いレイテンシを示します。アプリケーションの実行が開始されると、プロセッサは毎秒平均 800 個のメッセージを照合します。最小限のコンフィグレーションをしたシステムでアプリケーションを実行した場合、このサンプルは非常に低い平均レイテンシ (平均 30 ~ 300 マイクロ秒) と最小レイテンシ スパイク (低いミリ秒数) を示します。
サンプルでは、load generator で生成されたタイムスタンプと Oracle CEP のタイムスタンプ間の差分に基づいてレイテンシ値を計算し、表示しています。有効なレイテンシを計算するには、load generator を実行するコンピュータと Oracle CEP を実行するコンピュータの間で、1 ミリ秒のような非常に厳密なクロック同期が必要です。このため、load generator と Oracle CEP の両方を 1 台のマルチ CPU コンピュータで実行し、共通のクロックを共有することをお勧めします。
サンプルでは、Oracle CEP イベント キャッシング機能の使用方法も示されています。具体的には、EPN の単一のプロセッサからイベント Bean とキャッシュの両方にイベントが送信されます。
さらに、パラメータ化された EPL クエリの使用方法も示されています。つまり、プロセッサ コンフィグレーション ファイル内にコンフィグレーションするルールでは、?
文字をプレースホルダとして使用し、実行時にクエリに特定のパラメータ値を渡します。
最適なデモンストレーションの目的のためには、複数の CPU または 3GHz のデュアルコア Intel と 2GB 以上の RAM を搭載した強力なコンピュータでこのサンプルを実行することをお勧めします。
signalgeneration_domain
ドメインには、単一のアプリケーションであるシグナル生成サンプル アプリケーションが含まれています。シグナル生成アプリケーションを実行するには、次の手順に従って、ドメインの Oracle CEP インスタンスを起動するだけです。
ORACLE_CEP_HOME
\ocep_10.3\samples\domains\signalgeneration_domain\defaultserver
にある signalgeneration_domain
ドメイン ディレクトリのデフォルト サーバ ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。prompt> cd d:\oracle_cep\ocep_10.3\samples\domains\signalgeneration_domain\defaultserver
startwlevs.cmd
(Windows) コマンドまたは startwlevs.sh
(UNIX) コマンドを実行して Oracle CEP を起動します。prompt> startwlevs.cmd
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc
パラメータを渡して確定的ガベージ コレクタを有効にします。
prompt> startwlevs.cmd -dgc
これで、シグナル生成アプリケーションでデータ フィードからデータを受信する準備ができました。
Windows では [スタート] メニューを使用してサーバを起動することもできます。
[スタート|すべてのプログラム|Oracle Complex Event Processing 10gR3|Examples|Start Signal Generation Example Server]
ORACLE_CEP_HOME
\ocep_10.3\samples\domains\signalgeneration_domain\defaultserver\utils
ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。startDataFeed
コマンドを実行します。prompt> startDataFeed.cmd
Windows では [スタート] メニューを使用して load generator を起動することもできます。
[スタート|すべてのプログラム|Oracle Complex Event Processing 10gR3|Examples|Start Load Generator]
http://host
:9002/algo/dashboard.html
host
は、Oracle CEP を実行しているコンピュータの名前に置き換えます。ブラウザと同じコンピュータである場合は、localhost
とすることができます。
Windows では [スタート] メニューを使用してダッシュボードを起動することもできます。
[スタート|すべてのプログラム|Oracle Complex Event Processing 10gR3|Examples|Start Signal Generation Console]
シグナル生成サンプルのソース ディレクトリには、Java ソースと、シグナル生成アプリケーションを構成する他の必須のリソース (コンフィグレーション XML ファイル、EPN アセンブリ ファイル、DOJO クライアント JavaScript ライブラリなど) が含まれます。build.xml
Ant ファイルには、アプリケーションをビルドして signalgeneration_domain ドメインにデプロイするためのターゲットが含まれています (「シグナル生成をビルドする Ant ターゲットの説明」を参照)。
シグナル生成アプリケーションをビルドおよびデプロイするには、以下の手順を実行します。
ORACLE_CEP_HOME
\ocep_10.3\samples\source\applications\signalgeneration
にあるシグナル生成ソース ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。prompt> cd d:\oracle_cep\ocep_10.3\samples\source\applications\signalgeneration
all
Ant ターゲットを実行してアプリケーションをコンパイルし、JAR ファイルを作成します。prompt> ant all
deploy
Ant ターゲットを実行してアプリケーション JAR ファイルを ORACLE_CEP_HOME
\ocep_10.3\samples\domains\signalgeneration_domain\defaultserver\applications\signalgeneration
ディレクトリにデプロイします。prompt> ant deploy
警告 : | このターゲットは、ドメイン ディレクトリにある既存のシグナル生成アプリケーション JAR ファイルを上書きします。 |
FX ソースの最上位レベル ディレクトリにある build.xml
ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。
clean
—このターゲットは、現在のディレクトリの下にある dist
および output
作業ディレクトリを削除します。all
—このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.signalgen_3.0.0.0.jar
という JAR ファイルを生成し、生成した JAR ファイルを現在のディレクトリの下の dist
ディレクトリに格納します。deploy
—このターゲットは、Deployer ユーティリティを使用して JAR ファイルを Oracle CEP にデプロイします。Deployer ユーティリティの詳細なリファレンス情報については、「Deployer コマンドライン リファレンス」を参照してください。
記録と再生のサンプルは、1 つのコンポーネントをコンフィグレーションしてイベントをイベント ストアに記録し、ネットワークの別のコンポーネントをコンフィグレーションしてストアにあるイベントを再生する方法を示します。サンプルは、Oracle CEP で提供されるデータベース サーバである Apache Derby を使用してイベントを格納します。サンプルでは、イベント処理ネットワークのノードとしてパブリッシュ用 HTTP pub-sub アダプタをコンフィグレーションする方法も示します。
このアプリケーションのイベント処理ネットワークには次の 4 つのコンポーネントが含まれています。
simpleEventSource
というアダプタ。図で示したように、このコンポーネントはイベントを記録するようにコンフィグレーションされています。recplayEventSink
というイベント Bean。simpleEventSource
アダプタと recplayEventSink
イベント Bean を接続する、eventStream
というストリーム。このコンポーネントはイベントを再生するようにコンフィグレーションされています。recplayEventSink
イベント Bean をリスンし、Oracle CEP HTTP Pub-Sub サーバの /playbackchannel
というチャネルにパブリッシュする、playbackHttpPublisher
というパブリッシュ用 HTTP pub-sub アダプタ。
recplay_domain
ドメインには、記録と再生のサンプル アプリケーションという単一のアプリケーションが含まれています。このアプリケーションを実行するには、以下の手順に示すように、最初にドメインの Oracle CEP インスタンスを起動します。
その後の手順では、Visualizer を使用して simpleEventSource
および eventStream
コンポーネントでイベントの記録と再生をそれぞれ開始する方法を示しています。手順の最後では、Visualizer を使用して、playbackHttpPublisher
アダプタによってチャネルにパブリッシュされるイベントのストリームを表示する方法を示しています。
ORACLE_CEP_HOME
\ocep_10.3\samples\domains\recplay_domain\defaultserver
にある recplay_domain
ドメイン ディレクトリのデフォルト サーバ ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。prompt> cd d:\oracle_cep\ocep_10.3\samples\domains\recplay_domain\defaultserver
startwlevs.cmd
(Windows) コマンドまたは startwlevs.sh
(UNIX) コマンドを実行して Oracle CEP を起動します。prompt> startwlevs.cmd
Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc
パラメータを渡して確定的ガベージ コレクタを有効にします。
prompt> startwlevs.cmd -dgc
サーバ ステータス メッセージがスクロールされた後、出力先に次のメッセージが出力されます。
SimpleEvent created at: 14:33:40.441
このメッセージは、Oracle CEP サーバが正しく起動され、simpleEventSource
コンポーネントがイベントを作成していることを示しています。
http://host
:9002/wlevs
host
は、Oracle CEP サーバをホストするコンピュータです。ブラウザを実行しているのと同じコンピュータである場合は、localhost
とすることができます。
ユーザ名 wlevs
とパスワード wlevs
を使用して Visualizer にログインします。
WLEventServerDomain|NonClusteredServer|Applications|recplay|Stages|simpleEventSource
] をクリックします。
ボタンをクリックするとすぐに、イベントが simpleEventSource
コンポーネントから離れ始め、コンフィグレーションされたデータベースに格納されます。[Start Recording] および [Stop Recording] フィールドを使用して、イベントをいつ記録するかをさらにコンフィグレーションできます。
eventStream
コンポーネントをクリックします ([WLEventServerDomain|NonClusteredServer|Applications|recplay|Stages|eventStream
])。
ボタンをクリックするとすぐに、simpleEventSource コンポーネントで記録されたイベントが simpleStream コンポーネントで再生されます。Oracle CEP サーバを起動したコマンド ウィンドウに次のメッセージが出力され、元のイベントと再生イベントの両方が EPN を介してストリーミングされていることを示します。
SimpleEvent created at: 14:33:11.501
Played back: Original time=14:15:23.141 Playback time=14:33:11.657
再生されるイベントが記録された期間や再生速度などの再生パラメータをさらにコンフィグレーションできます。そのためには、適切なフィールドを更新し、[Change Parameters] ボタンをクリックします。再生パラメータを変更した後、再生を再開する必要があります。
playbackHttpPublisher
アダプタがチャネルにパブリッシュしているイベントを表示するには、以下の手順を実行します。
記録と再生のサンプルのソース ディレクトリには、Java ソースと、アプリケーションを構成する他の必須リソース (コンフィグレーション XML ファイル、EPN アセンブリ ファイルなど) が含まれます。build.xml
Ant ファイルには、アプリケーションをビルドして signalgeneration_domain ドメインにデプロイするためのターゲットが含まれています (「記録と再生をビルドする Ant ターゲットの説明」を参照)。
記録と再生アプリケーションをビルドおよびデプロイするには、以下の手順を実行します。
ORACLE_CEP_HOME
\ocep_10.3\samples\source\applications\recplay
にある記録/再生ソース ディレクトリに移動します。ORACLE_CEP_HOME
は、d:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。prompt> cd d:\oracle_cep\ocep_10.3\samples\source\applications\recplay
all
Ant ターゲットを実行してアプリケーションをコンパイルし、JAR ファイルを作成します。prompt> ant all
deploy
Ant ターゲットを実行してアプリケーション JAR ファイルを ORACLE_CEP_HOME
\ocep_10.3\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
このメッセージは、記録と再生のサンプルが再デプロイされ、正しく実行されていることを示します。
記録/再生のソースの最上位レベル ディレクトリにある build.xml
ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。
clean
—このターゲットは、現在のディレクトリの下にある dist
および output
作業ディレクトリを削除します。all
—このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.recplay_3.0.0.0.jar
という JAR ファイルを生成し、生成した JAR ファイルを現在のディレクトリ下の dist
ディレクトリに格納します。deploy
—このターゲットは、Deployer ユーティリティを使用して JAR ファイルを Oracle CEP にデプロイします。Deployer ユーティリティの詳細なリファレンス情報については、「Deployer コマンドライン リファレンス」を参照してください。
記録と再生のサンプルを実装するには、通常、「Oracle CEP アプリケーションの作成 : 一般的な手順」に従います。タスク指向の手順を示して一般的な開発プロセスを説明している節を参照してください。
このサンプルで使用するすべてのファイルは、ORACLE_CEP_HOME
\ocep_10.3\samples\source\applications\recplay
ディレクトリを基準にして相対的な場所にあります。ORACLE_CEP_HOME
は、c:\oracle_cep
などの Oracle CEP メイン インストール ディレクトリです。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお勧めします。ただし、これは必須条件ではありません。
サンプルでは、このファイルは com.bea.wlevs.example.recplay-context.xml
という名前で、META-INF/spring
ディレクトリにあります。
simpleEventSource
アダプタの Java ソース ファイル。
サンプルでは、このファイルは SimpleEventSource.java
という名前で、src/com/bea/wlevs/adapter/example/recplay
ディレクトリにあります。
このファイルの詳細な説明と、アダプタ Java ファイルの一般的なプログラミング方法については、「カスタム アダプタとイベント Bean の作成」を参照してください。
PlayedBackEvent
および SimpleEvent
イベント タイプを記述する Java ソース ファイル。SimpleEvent
イベント タイプは、最初にアダプタによって生成されたイベントですが、PlayedBackEvent
イベント タイプは、記録された後に再生されるイベントに対して使用します。PlayedBackEvents
は、SimpleEvent
とほぼ同じですが、イベントが記録された時刻を示す追加フィールドがあります。
サンプルでは、2 つのイベントは SimpleEvent.java
および PlayedBackEvent.java
という名前で、src/com/bea/wlevs/event/example/recplay
ディレクトリにあります。
このファイルの詳細な説明と、イベント タイプのプログラミングの概要については、「イベント タイプの作成」を参照してください。
recplayEventSink
イベント Bean を実装する Java ファイルは、simpleEventSource
アダプタからリアルタイム イベントと再生イベントの両方を受け取るイベント シンクです。
サンプルでは、このファイルは RecplayEventSink.java
という名前で、src/com/bea/wlevs/example/recplay
ディレクトリにあります。
このファイルの詳細と、イベント Bean でのビジネス ロジックのプログラミングの概要については、「カスタム アダプタとイベント Bean の作成」を参照してください。
simpleEventSource
アダプタと eventStream
ストリーム コンポーネントをコンフィグレーションする XML ファイル。コンポーネントを指定する <record-parameters>
要素を含むアダプタは、イベントをイベント ストアに記録します。同様に、ストリームには再生イベントを受け取るように指定する <playback-parameters>
要素が含まれます。
サンプルでは、このファイルは config.xml
という名前で、META-INF/wlevs
ディレクトリにあります。
MANIFEST.MF
ファイル。
サンプルでは、MANIFEST.MF
ファイルが META-INF
ディレクトリにあります。
このファイルの作成方法と、Oracle CEP にデプロイする OSGi バンドルの作成方法については、「Oracle CEP アプリケーションのアセンブル : 主な手順」を参照してください。
記録/再生のサンプルでは、OSGi バンドルのコンパイル、アセンブル、およびデプロイに build.xml
Ant ファイルを使用します。開発環境でも Ant を使用する場合、この build.xml
ファイルの詳細については、「ソース ディレクトリからビルドおよびデプロイするイベントの記録/再生のサンプル」を参照してください。
![]() ![]() ![]() |