ヘッダーをスキップ
Oracle® CEP 入門
リリース 11gR1 (11.1.1)
B55583-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

3 Oracle CEP のサンプル

この節では、以下の項目について説明します。

3.1 配布キットで提供されるサンプルの概要

Oracle CEP には、次のサンプルが含まれます。

これらのサンプルは次の 2 つの形式で提供されます。

サンプルでは Ant を開発ツールとして使用しています。Ant の詳細とコンピュータへのインストールについては、http://ant.apache.org/ を参照してください。

3.1.1 すぐに使用できるサンプル

アセンブルしたアプリケーションをデプロイするための、すぐに使用できるサンプル ドメインが事前にコンフィグレーションされています。わかりやすくするために、サンプルごとに固有のドメインが用意されています。各ドメインはスタンドアロンのサーバ ドメインです。サーバ ファイルは、ドメイン ディレクトリの defaultserver サブディレクトリに格納されます。アプリケーションをデプロイするには、ドメインのデフォルト サーバを起動するだけです。

3.1.2 サンプルのソース

各サンプルの Java ソースとコンフィグレーション XML ソースは、サンプルの開発環境を示す個別のソース ディレクトリで提供されます。

  • HelloWorld ソース ディレクトリは、ORACLE_CEP_HOME\ocep_11.1\samples\source\applications\helloworld にあります。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

    詳細については、節 3.6.4「HelloWorld のサンプルの実装」を参照してください。

  • 外国為替取引のソース ディレクトリは、ORACLE_CEP_HOME\ocep_11.1\samples\source\applications\fx にあります。

    詳細については、節 3.7.4「FX のサンプルの実装」を参照してください。

  • シグナル生成のソース ディレクトリは、ORACLE_CEP_HOME\ocep_11.1\samples\source\applications\signalgeneration にあります。

    詳細については、節 3.8.4「シグナル生成のサンプルの実装」を参照してください。

  • 記録と再生のソース ディレクトリは、ORACLE_CEP_HOME\ocep_11.1\\samples\source\applications\recplay にあります。

    詳細については、節 3.9.4「記録と再生のサンプルの実装」を参照してください。

  • CQL のソース ディレクトリは、ORACLE_CEP_HOME\ocep_11.1\\samples\source\applications\cql にあります。

    詳細については、節 3.10.4「CQL のサンプルの実装」を参照してください。

3.2 サンプルのインストール

Oracle CEP を初めてインストールする場合、サンプルをインストールするには、[Custom] オプションを選択する必要があります。[Typical] オプションでは、サンプルは含まれません。

以前に [Typical] オプションを使用して Oracle CEP をインストールしている場合に、サンプルもインストールするには、Oracle CEP インストール プロセスを再実行し、同じ Oracle CEP ホーム ディレクトリを指定します。インストール プロセスの後半のステップで、サンプルのみをインストールできます。

3.3 サンプルでの Oracle CEP Visualizer の使用

Oracle CEP Visualizer は、Oracle CEP からのデータを使用し、そのデータを便利で直感的な方法でシステム管理者やオペレータに表示し、さらに特定のタスクにおいてコンフィグレーションの変更を行うために受け入れたデータを再び Oracle CEP に返す Web 2.0 アプリケーションです。

Visualizer 自身は各サーバ インスタンスに自動的にデプロイされる Oracle CEP アプリケーションです。サンプルで Visualizer を使用するには、以下の各サンプルに示されている手順に従ってサーバを起動済みであることを確認し、ブラウザで次の URL を起動します。

   http://host:9002/wlevs

host は、Oracle CEP をホストするコンピュータ名です。ブラウザを実行しているのと同じコンピュータである場合は、localhost とすることができます。

HelloWorld アプリケーションではセキュリティが無効になるため、ログイン画面でユーザ名とパスワードを入力せずに [Logon] をクリックできます。ただし、FX およびシグナル生成のサンプルでは、セキュリティが有効になるため、以下の情報を使用してログインします。

   User Id : wlevs   Password : wlevs 

Visualizer の詳細については、節 1.8「Oracle CEP Visualizer」を参照してください。

3.4 サンプルのパフォーマンスの向上

サンプルおよび Oracle CEP アプリケーション全般について、実行時のスループットとレイテンシを向上させるには、次の処理をお勧めします。

3.5 開発環境の設定

Oracle CEP インスタンスを起動してサンプルを実行する前に、開発環境を設定する必要があります。特に、正しいバージョンの JRockit JDK を使用するように PATH および JAVA_HOME 環境変数を設定する必要があります。

JRockit をコンピュータにインストールするときに使用された可能性がある方法として、次の 2 つの方法があります。

アプリケーションのコンポーネント コンフィグレーション ファイルでは必須ではありませんが、最適な結果を得るためには、Oracle JRockit Real Time 3.0 に含まれる JRockit JDK バージョンを使用して Oracle CEP を実行することをお勧めします。以下の手順では、いずれの場合にも適用できる環境の設定方法を説明します。

JRockit の詳細については、節 3.4「サンプルのパフォーマンスの向上」を参照してください。

この節では、以下の内容について説明します。

3.5.1 Windows で開発環境を設定する方法

この手順では、Windows で開発環境を設定する方法について説明します。

setEnv.cmd などのコマンド ファイルを作成して、この節で説明する set コマンドを指定しておくと、セッションからログアウトした後に開発環境を簡単にリセットできます。

Windows コンピュータで、[コントロール パネル|システム] ウィンドウを呼び出し、[詳細設定] タブ、[環境変数] ボタンの順にクリックして、必要な環境変数を永続的に設定することもできます。環境変数は、現在のユーザに対して、またはシステム全体に対して設定できます。

Windows で開発環境を設定するには、次の手順に従います。

  1. JRockit JDK の bin ディレクトリを含むように PATH 環境変数を更新します。また、PATH 環境変数に Ant のインストール先の bin ディレクトリが含まれていることを確認してください。

    1. 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%
      
    2. Oracle CEP リリース 11gR1 (11.1.1) と一緒にインストールされた JRockit JDK を使用する場合

      Oracle CEP が d:\oracle_cep ディレクトリにインストールされていて、Ant が d:\ant ディレクトリにインストールされている場合は、PATH 環境変数を次のように設定します。

      prompt> set PATH=d:\oracle_cep\jrockit-R27.6.0-50-1.6.0_05\bin;d:\ant\bin;%PATH%
      
  2. サーバ起動スクリプトの JAVA_HOME 変数が正しい JRockit JDK を参照していることを確認します。正しくない場合は、スクリプトを編集します。

    サーバ起動スクリプト (startwlevs.cmd) は、メイン ドメイン ディレクトリの defaultserver サブディレクトリにあります。defaultserver サブディレクトリには、各ドメインのスタンドアロン サーバのファイルが含まれます。たとえば、HelloWorld ドメインは、ORACLE_CEP_HOME\ocep_11.1\samples\domains\helloworld_domain にあります。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

    1. Oracle JRockit Real Time 3.0 と一緒にインストールされた JRockit JDK を使用する場合

      set コマンドを次のように指定します。

      set JAVA_HOME=d:\jrockit\jrrt-3.0.0-1.6.0
      
    2. Oracle CEP リリース 11gR1 (11.1.1) と一緒にインストールされた JRockit JDK を使用する場合

      set コマンドを次のように指定します。

      set JAVA_HOME=d:\oracle_cep\jrockit-R27.6.0-50-1.6.0_05
      
  3. 独自の開発環境の JAVA_HOME 変数を、JRockit JDK を参照するように設定します。

    1. Oracle JRockit Real Time 3.0 と一緒にインストールされた JRockit JDK を使用する場合

      set コマンドを次のように指定します。

      prompt> set JAVA_HOME=d:\jrockit\jrrt-3.0.0-1.6.0
      
    2. Oracle CEP リリース 11gR1 (11.1.1) と一緒にインストールされた JRockit JDK を使用する場合

      set コマンドを次のように指定します。

      prompt> set JAVA_HOME=d:\oracle_cep\jrockit-R27.6.0-50-1.6.0_05
      

3.5.2 UNIX で開発環境を設定する方法

この手順では、UNIX で開発環境を設定する方法について説明します。

setEnv.sh などのコマンド ファイルを作成して、この節で説明する set コマンドを指定しておくと、セッションからログアウトした後に開発環境を簡単にリセットできます。

UNIX で開発環境を設定するには、次の手順に従います。

  1. JRockit JDK の bin ディレクトリを含むように PATH 環境変数を更新します。また、PATH 環境変数に Ant のインストール先の bin ディレクトリが含まれていることを確認してください。

    1. 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
      
    2. 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
      
  2. サーバ起動スクリプトの JAVA_HOME 変数が正しい JRockit JDK を参照していることを確認します。正しくない場合は、スクリプトを編集します。

    サーバ起動スクリプト (startwlevs.sh) は、メイン ドメイン ディレクトリの defaultserver サブディレクトリにあります。defaultserver サブディレクトリには、各ドメインのスタンドアロン サーバのファイルが含まれます。たとえば、HelloWorld ドメインは、ORACLE_CEP_HOME/ocep_11.1/samples/domains/helloworld_domain にあります。ORACLE_CEP_HOME は、/oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

    1. Oracle JRockit Real Time 3.0 と一緒にインストールされた JRockit JDK を使用する場合

      JAVA_HOME 変数を次のように設定します。

      JAVA_HOME=/jrockit/jrrt-3.0.0-1.6.0
      
    2. Oracle CEP リリース 11gR1 (11.1.1) と一緒にインストールされた JRockit JDK を使用する場合

      JAVA_HOME 変数を次のように設定します。

      JAVA_HOME=/oracle_cep/jrockit-R27.6.0-50-1.6.0_05
      
  3. 開発環境の JAVA_HOME 変数を、JRockit JDK を参照するように設定します。

    1. Oracle JRockit Real Time 3.0 と一緒にインストールされた JRockit JDK を使用する場合

      JAVA_HOME 変数を次のように設定します。

      prompt> JAVA_HOME=/jrockit/jrrt-3.0.0-1.6.0
      
    2. Oracle CEP リリース 11gR1 (11.1.1) と一緒にインストールされた JRockit JDK を使用する場合

      JAVA_HOME 変数を次のように設定します。

      prompt> JAVA_HOME=/oracle_cep/jrockit-R27.6.0-50-1.6.0_05
      

3.6 HelloWorld のサンプル

Oracle CEP アプリケーションの作成方法を示す最初のサンプルは、広く知られている HelloWorld です。

図 3-1 は、HelloWorld のサンプルのイベント処理ネットワーク (EPN) を示します。EPN は、アプリケーションを構成する各コンポーネントと、それらの連結を示しています。

図 3-1 HelloWorld のサンプルのイベント処理ネットワーク

図 3-1 の説明
「図 3-1 HelloWorld のサンプルのイベント処理ネットワーク」の説明

このサンプルには次のコンポーネントが含まれています。

3.6.1 helloworld ドメインから実行する HelloWorld のサンプル

HelloWorld アプリケーションは、helloworld ドメインにあらかじめデプロイされています。アプリケーションを実行するには、Oracle CEP サーバのインスタンスを起動するだけです。

helloworld ドメインから HelloWorld のサンプルを実行するには、次の手順に従います。

  1. コマンド ウィンドウを開き、ORACLE_CEP_HOME\ocep_11.1\samples\domains\helloworld_domain\defaultserver にある helloworld ドメイン ディレクトリのデフォルト サーバ ディレクトリに移動します。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

    prompt> cd d:\oracle_cep\ocep_11.1\samples\domains\helloworld_domain\defaultserver
    
  2. サーバ起動スクリプトで環境が正しく設定されていることを確認します。

    詳細については、節 3.5「開発環境の設定」を参照してください。

  3. 正しいコマンドライン引数を使用して適切なスクリプトを実行し、Oracle CEP を起動します。

    1. Windows の場合

      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc パラメータを渡して確定的ガベージ コレクタを有効にします。

        prompt> startwlevs.cmd -dgc
        
      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合

        prompt> startwlevs.cmd
        
    2. UNIX の場合

      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc パラメータを渡して確定的ガベージ コレクタを有効にします。

        prompt> startwlevs.sh -dgc
        
      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合

        prompt> startwlevs.sh
        

    サーバ ステータス メッセージがスクロールされた後、約 1 秒ごとに次のメッセージが出力されます。

    Message: HelloWorld - the current time is: 3:56:57 PM
    

    このメッセージは、HelloWorld のサンプルが正しく実行されていることを示しています。

3.6.2 ソース ディレクトリからビルドおよびデプロイする HelloWorld のサンプル

HelloWorld サンプルのソース ディレクトリには、Java ソースと、HelloWorld アプリケーションを構成する他の必須リソース (コンフィグレーション XML ファイルなど) が含まれます。build.xml Ant ファイルには、アプリケーションをビルドして helloworld ドメインにデプロイするためのターゲットが含まれています。

詳細については、節 3.6.3「Hello World をビルドする Ant ターゲットの説明」を参照してください。

ソース ディレクトリから HelloWorld のサンプルをビルドおよびデプロイするには、次の手順に従います。

  1. helloworld の Oracle CEP インスタンスがまだ実行されていない場合は、節 3.6.1「helloworld ドメインから実行する HelloWorld のサンプル」の手順に従ってサーバを起動します。

    再ビルドしたアプリケーションを正常にデプロイするには、サーバが実行中である必要があります。

  2. 新しいコマンド ウィンドウを開き、ORACLE_CEP_HOME\ocep_11.1\samples\source\applications\helloworld にある HelloWorld ソース ディレクトリに移動します。ORACLE_CEP_HOME は Oracle CEP がインストールされているディレクトリです。

    例を示します。

    prompt> cd d:\oracle_cep\ocep_11.1\samples\source\applications\helloworld
    
  3. 開発環境を設定します。

    詳細については、節 3.5「開発環境の設定」を参照してください。

  4. all Ant ターゲットを実行してアプリケーションをコンパイルし、JAR ファイルを作成します。

    prompt> ant all
    
  5. deploy Ant ターゲットを実行してアプリケーション JAR ファイルを Oracle CEP にデプロイします。

    prompt> ant -Daction=update deploy
    

    注意 :

    このターゲットは、ドメイン ディレクトリにある既存の helloworld アプリケーション JAR ファイルを上書きします。

出力先に約 1 秒ごとに次のメッセージが出力されます。

    Message: HelloWorld - the current time is: 3:56:57 PM

このメッセージは、HelloWorld のサンプルが再デプロイされ、正しく実行されていることを示しています。

3.6.3 Hello World をビルドする Ant ターゲットの説明

HelloWorld ソース ディレクトリの最上位レベルにある build.xml ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。

  • clean - このターゲットは、現在のディレクトリの下にある dist および output 作業ディレクトリを削除します。

  • all - このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.helloworld_3.0.0.0.jar という JAR ファイルを生成し、生成した JAR ファイルを現在のディレクトリの下の dist ディレクトリに格納します。

  • deploy - このターゲットは、Deployer ユーティリティを使用して JAR ファイルを Oracle CEP にデプロイします。

    詳細については、『Oracle CEP 管理者ガイド』の「Deployer コマンドライン リファレンス」を参照してください。

3.6.4 HelloWorld のサンプルの実装

HelloWorld のサンプルを実装するには、通常、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP アプリケーションの作成 : 一般的な手順」に従います。

タスク指向の手順を示して一般的な開発プロセスを説明している節を参照してください。

HelloWorld のサンプルは比較的単純であるため、Oracle CEP アプリケーションを作成するための一般的な手順で説明されているすべてのコンポーネントやコンフィグレーション ファイルを使用するわけではありません。

このサンプルで使用するすべてのファイルは、ORACLE_CEP_HOME\ocep_11.1\samples\source\applications\helloworld ディレクトリを基準にして相対的な場所にあります。ORACLE_CEP_HOME は、c:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお勧めします。ただし、これは必須条件ではありません。

HelloWorld のサンプルで使用するファイルは次のとおりです。

  • アプリケーションの各コンポーネントと、すべてのコンポーネントの接続方法を記述した EPN アセンブリ ファイル。EPN アセンブリ ファイルは標準の Spring コンテキスト ファイルを拡張します。また、このファイルはアプリケーションで使用されるイベント タイプを登録します。この XML ファイルを Oracle CEP アプリケーションに組み込む必要があります。

    サンプルでは、このファイルは com.bea.wlevs.example.helloworld-context.xml という名前で、META-INF/spring ディレクトリにあります。

    詳細については、節 3.6.5「HelloWorld EPN アセンブリ ファイル」を参照してください。

  • helloworldAdapter コンポーネントの Java ソース ファイル。

    サンプルでは、このファイルは HelloWorldAdapter.java という名前で、src/com/bea/wlevs/adapter/example/helloworld ディレクトリにあります。

    このファイルの詳細な説明と、アダプタの Java ファイルの一般的なプログラミング方法については、『Oracle CEP IDE Eclipse 開発者ガイド』の「イベント ソースとしてのアダプタおよびイベント Bean クラスのプログラミング : ガイドライン」を参照してください。

  • HelloWorldEvent イベント タイプを記述した Java ソース ファイル。

    サンプルでは、このファイルは HelloWorldEvent.java という名前で、src/com/bea/wlevs/event/example/helloworld ディレクトリにあります。

    このファイルの詳細な説明と、イベント タイプのプログラミングの概要については、『Oracle CEP IDE Eclipse 開発者ガイド』の「イベント タイプの作成」を参照してください。

  • helloworldProcessor および helloworldOutputChannel コンポーネントをコンフィグレーションする XML ファイル。このファイルの重要な部分は、HelloWorld アプリケーションで処理するイベント セットを選択するための EPL ルール セットです。プロセッサ コンフィグレーション ファイルを Oracle CEP アプリケーションに組み込む必要があります。アダプタとチャネルのコンフィグレーションは省略可能です。

    サンプルでは、このファイルは config.xml という名前で、META-INF/wlevs ディレクトリにあります。

    詳細については、節 3.6.6「HelloWorld コンポーネント コンフィグレーション ファイル」を参照してください。

  • アプリケーションの helloworldBean コンポーネント (ビジネス ロジックを含む POJO) を実装する Java ファイル。

    サンプルでは、このファイルは HelloWorldBean.java という名前で、src/com/bea/wlevs/example/helloworld ディレクトリにあります。

    このファイルの詳細な説明と、イベント シンクのプログラミングの概要については、『Oracle CEP IDE Eclipse 開発者ガイド』の「イベント シンクのプログラミング : ガイドライン」を参照してください。

  • Oracle CEP にデプロイされる OSGi バンドルのコンテンツを記述した MANIFEST.MF ファイル。

    サンプルでは、MANIFEST.MF ファイルが META-INF ディレクトリにあります。

    このファイルの作成方法と、Oracle CEP にデプロイする OSGi バンドルの作成方法については、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP アプリケーションのアセンブル : 主な手順」を参照してください。

HelloWorld のサンプルでは、OSGi バンドルのコンパイル、アセンブリ、およびデプロイに build.xml Ant ファイルを使用します。開発環境でも Ant を使用する場合、この build.xml ファイルの詳細については、節 3.6.2「ソース ディレクトリからビルドおよびデプロイする HelloWorld のサンプル」を参照してください。

3.6.5 HelloWorld EPN アセンブリ ファイル

EPN アセンブリ ファイルの主な目的の 1 つは、アプリケーションのコンポーネントを宣言してイベント処理ネットワークを定義し、これらすべてのコンポーネントの接続方法、つまりどのコンポーネントが他のどのコンポーネントをリスンするかを定義することです。Oracle CEP には、ネットワークの宣言に使用するカスタム Spring タグのセットが用意されています。また、EPN アセンブリ ファイルは、アプリケーションで使用するイベント タイプとアプリケーションの EPL ルールを登録するためにも使用します。

EPN アセンブリ ファイルを通常の方法で使用して、 Spring アプリケーション コンテキストで アプリケーション コンポーネント Bean を定義します。アプリケーション コンポーネント Bean は、 Java クラスで実装される「アダプタ」や 「ビジネス ロジックを含む POJO」などです。

詳細については、以下を参照してください。

例 3-1 は、HelloWorld サンプル アプリケーションで使用する EPN アセンブリ ファイルを示します。太字のエントリの詳細については、サンプルの後にある説明を参照してください。

例 3-1 HelloWorld EPN アセンブリ ファイル

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:osgi="http://www.springframework.org/schema/osgi"
       xmlns:wlevs="http://www.bea.com/ns/wlevs/spring"
       xsi:schemaLocation="
  http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/osgi
  http://www.springframework.org/schema/osgi/spring-osgi.xsd
  http://www.bea.com/ns/wlevs/spring
  http://www.bea.com/ns/wlevs/spring/spring-wlevs-v11_0_0_0.xsd">
    <wlevs:event-type-repository>
        <wlevs:event-type type-name="HelloWorldEvent">
            <wlevs:class>com.bea.wlevs.event.example.helloworld.HelloWorldEvent</wlevs:class>
        </wlevs:event-type>
    </wlevs:event-type-repository>
    <wlevs:adapter id="helloworldAdapter" class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter" >
        <wlevs:instance-property name="message" value="HelloWorld - the currenttime is:"/>
    </wlevs:adapter>
    <wlevs:processor id="helloworldProcessor" />
    <wlevs:channel id="helloworldInstream" >
        <wlevs:listener ref="helloworldProcessor"/>
        <wlevs:source ref="helloworldAdapter"/>
    </wlevs:channel>
    <wlevs:channel id="helloworldOutstream" manageable="true">
        <wlevs:listener>
            <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
        </wlevs:listener>
        <wlevs:source ref="helloworldProcessor"/>
    </wlevs:channel>
</beans>

上記の例では、以下のことが行われます。

  • wlevs:event-type-repository 要素は、アプリケーション全体で使用するイベント タイプを登録します。HelloWorld アプリケーションには、イベント タイプが 1 つしか存在しません。このイベント タイプは、com.bea.wlevs.event.example.helloworld.HelloWorldEvent クラスで実装される HelloWorldEvent です。Oracle CEP は、必要に応じてこのデータ型のインスタンスを自動的に作成します。アプリケーションの EPL ルールでもこのデータ型を参照できます。

  • wlevs:adapterwlevs:processor、および wlevs:channel 要素は、ネットワークの各コンポーネントを宣言することによって、イベント処理ネットワークを共に定義します。

    • wlevs:adapter 要素は、HelloWorld アプリケーションのアダプタ コンポーネントを定義します。

      <wlevs:adapter id="helloworldAdapter" 
            class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter" >
          <wlevs:instance-property name="message" value="HelloWorld - the currenttime is:"/>
      </wlevs:adapter>
      

      id 属性は、このコンポーネントのユニークな識別子を指定します。id は、他のコンポーネントによって後で参照されます。class 属性で指定するクラスは、アダプタを実装します。この場合は com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter です。

      wlevs:instance-property 子要素は、インスタンスの変数をアダプタ インスタンスに渡します。変数の名前は message で、値は HelloWorld - the current time is: です。

    • wlevs:processor 要素は、アプリケーションのプロセッサ コンポーネントを定義します。

      <wlevs:processor id="helloworldProcessor" />
      

      id 属性は、wlevs:adapter 要素の属性と同じように機能します。

    • wlevs:channel 要素は、アプリケーションの 2 つのチャネル コンポーネントを定義します。

      <wlevs:channel id="helloworldInstream" >
          <wlevs:listener ref="helloworldProcessor"/>
          <wlevs:source ref="helloworldAdapter"/>
      </wlevs:channel>
      <wlevs:channel id="helloworldOutstream" manageable="true">
          <wlevs:listener>
              <bean class="com.bea.wlevs.example.helloworld.HelloWorldBean"/>
          </wlevs:listener>
          <wlevs:source ref="helloworldProcessor"/>
      </wlevs:channel>
      

      ストリームの id 属性は、wlevs:adapter の属性と同様に機能します。manageable 属性は、チャネルのモニタを有効にします。コンポーネントの管理容易性はデフォルトで無効になっています。

      id="helloworldInstream を持つ wlevs:channel 要素は、wlevs:listener 子要素を使用して、helloworldProcessor がチャネルをリスンするように指定します。また、wlevs:source 子要素を使用して、チャネルが helloworldAdapter コンポーネントからイベントを取得するように指定します。

      id="helloworldOutstream を持つ wlevs:channel 要素も、これらの listener タグと source タグを使用します。ただし、1 つ異なる点として、helloworldOutstream タグはユニークな識別子を参照するのではなく、wlevs:listener 要素でビジネス ロジック POJO の定義を直接ネストします。この場合、ネストされたタグは、POJO が com.bea.wlevs.example.helloworld.HelloWorldBean クラスで実装されることを指定する Spring 標準の bean 要素です。

3.6.6 HelloWorld コンポーネント コンフィグレーション ファイル

HelloWorld アプリケーションのコンポーネント コンフィグレーション ファイルでは、ストリームの 1 つとプロセッサを例 3-2 に示すようにコンフィグレーションしています。

例 3-2 HelloWorld コンポーネント コンフィグレーション ファイル

<?xml version="1.0" encoding="UTF-8"?><n1:config xmlns:n1="http://www.bea.com/ns/wlevs/config/application"           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  <processor>    <name>helloworldProcessor</name>    <rules>      <query id="helloworldRule">        <![CDATA[ select * from helloworldInputChannel [Now] ]]>      </query>    </rules>  </processor></n1:config>

アプリケーションに複数のプロセッサ、アダプタ、またはストリームがある場合は、それらすべてを 1 つのコンフィグレーション ファイルで宣言することも、コンポーネントごとに個別のコンフィグレーション ファイルを作成することもできます。どちらか管理しやすい方法を選択してください。

コンフィグレーションするコンポーネントごとに name 子要素を追加し、参照する特定のコンポーネントを明示的に宣言する必要があります。name 要素の値は、EPN アセンブリ ファイルで宣言したコンポーネントのユニークな識別子に対応している必要があります。

たとえば、プロセッサが EPN アセンブリ ファイルで次のように宣言されているとします。

<wlevs:processor id="helloworldProcessor" ...>

対応する XML コンフィグレーションは次のようになります。

<processor>
    <name>helloworldProcessor</name>
    ...
</processor>

HelloWorld のサンプルでは、helloworldProcessor という名前の 1 つのプロセッサに対して、1 つのコンフィグレーション ファイルを使用します。この名前は EPN アセンブリ ファイルでのコンポーネントの宣言に対応しています。

processor 要素は、プロセッサ コンポーネントをコンフィグレーションします。プロセッサ コンフィグレーションの重要な部分は、このプロセッサで実行する Oracle Continuous Query Language (Oracle CQL) のルール セットの宣言です。これらのルールは最終的にアプリケーション ビジネス オブジェクトに渡されるイベント セットを選択します。各ルールは、XML の <![CDATA[...]]> セクションを使用して query または relation 要素で宣言されます。すべての query および relation 要素は単一の rules 要素によってグループ化されます。特定のプロセッサ用に必要な数だけルールを定義できます。

HelloWorld アプリケーションには、ごく単純なルールが 1 つあるだけです。

select * from helloworldInputChannel [Now]

この時間ベースの範囲枠は出力リレーションを定義します。つまり、T = 0 の場合、時間 t のリレーションはタイムスタンプ t を持つ helloworldInputChannel の要素で取得されたタプルで構成されます。

Oracle CEP クエリ言語の使用に関する追加情報およびサンプルについては、以下を参照してください。


注意 :

Oracle EPL は Oracle CQL に取って代わられます。

3.7 外国為替取引 (FX) のサンプル

外国為替取引のサンプル (簡単に FX と呼びます) は、複数のデータ フィードから読み込んだ情報を処理するために複数のプロセッサを使用しているので、HelloWorld のサンプルよりも複雑です。FX のサンプルでは、Oracle CEP load generator ユーティリティを使用してデータ フィードをシミュレートします。

図 3-2 は、FX のサンプルのイベント処理ネットワーク (EPN) を示します。EPN は、アプリケーションを構成する各コンポーネントと、それらの連結を示しています。

図 3-2 FX のサンプルのイベント処理ネットワーク

図 3-2 の説明
「図 3-2 FX のサンプルのイベント処理ネットワーク」の説明

シナリオでは、load generator を使用してシミュレートした 3 つのデータ フィードにより、世界各地から定数の値のペアが送信されます。値のペアは通貨を組み合わせたもので、たとえば USDEUR は米ドルと欧州ユーロの組み合わせを表します。値のペアと共に 2 つの通貨間の為替レートも送信されます。fxMarketXXX アダプタはフィードからデータを受信し、受信したデータをイベントに変換して preprocessorXXX プロセッサに渡します。各プロセッサは、初期期限切れチェックを実行し、発生からの経過時間が 10 秒を超えているイベントがないことを確認します。さらに境界チェックを実行し、2 つの通貨間の為替レートが現在の境界の範囲内にあることを確認します。サーバは、特定のチャネルから特定の通貨のペアのみを選択します。たとえば、シミュレートされた米国のデータ フィードからは USDEUR を選択し、USDAUD (オーストラリア ドル) などの他のすべてのペアを拒否します。

各データ フィード プロバイダからのデータがこの初期準備フェーズを通過すると、spreader という別のプロセッサが、すべてのプロバイダのすべてのイベントを結合し、最大レートと最小レートの中間点を計算して、トレーダが指定したスプレッドを適用します。最後に、プロセッサはビジネス コードを含む POJO にレートを転送します。このサンプルでは、POJO は単純にレートをクライアントにパブリッシュします。

Oracle CEP モニタは、直前のステップのイベント レイテンシが特定のしきい値を超えていないか (たとえば、30 秒という時間内に更新されたレートがないか)、また同じ通貨のペアで 2 つの連続的なレート間の偏差が大きすぎないかを監視するようにコンフィグレーションされています。最後に、通貨の各ペアの直前のレートがダッシュボードに転送されます。

3.7.1 外国為替取引のサンプルの実行

最適なデモンストレーションの目的のためには、複数の CPU または 3GHz のデュアルコア Intel と 2GB 以上の RAM を搭載した強力なコンピュータでこのサンプルを実行することをお勧めします。

外国為替取引 (FX) アプリケーションは、fx_domain ドメインにあらかじめデプロイされています。アプリケーションを実行するには、Oracle CEP サーバのインスタンスを起動するだけです。

外国為替取引のサンプルを実行するには、次の手順に従います。

  1. コマンド ウィンドウを開き、ORACLE_CEP_HOME\ocep_11.1\samples\domains\fx_domain\defaultserver にある fx ドメイン ディレクトリのデフォルトのサーバ ディレクトリに移動します。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

    prompt> cd d:\oracle_cep\ocep_11.1\samples\domains\fx_domain\defaultserver
    
  2. 節 3.5「開発環境の設定」の説明に従って、開発環境を設定します。

  3. 正しいコマンドライン引数を使用して適切なスクリプトを実行し、Oracle CEP を起動します。

    1. Windows の場合

      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc パラメータを渡して確定的ガベージ コレクタを有効にします。

        prompt> startwlevs.cmd -dgc
        
      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合

        prompt> startwlevs.cmd
        
    2. UNIX の場合

      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc パラメータを渡して確定的ガベージ コレクタを有効にします。

        prompt> startwlevs.sh -dgc
        
      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合

        prompt> startwlevs.sh
        

    これで、FX アプリケーションでデータ フィードからデータを受信する準備ができました。

  4. 米国のデータ フィードをシミュレートするには、新しいコマンド ウィンドウを開き、節 3.5「開発環境の設定」の説明に従って環境を設定します。

  5. ORACLE_CEP_HOME\ocep_11.1\utils\load-generator ディレクトリに移動します。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

  6. fxAmer.prop プロパティ ファイルを使用して load generator を実行します。

    1. Windows の場合

      prompt> runloadgen.cmd fxAmer.prop
      
    2. UNIX の場合

      prompt> runloadgen.sh fxAmer.prop
      
  7. fxAsia.prop プロパティ ファイルを使用して手順 46 を繰り返し、アジアのデータ フィードをシミュレートします。

    1. Windows の場合

      prompt> runloadgen.cmd fxAsia.prop
      
    2. UNIX の場合

      prompt> runloadgen.sh fxAsia.prop
      
  8. fxEuro.prop プロパティ ファイルを使用して手順 46 を繰り返し、ヨーロッパのデータ フィードをシミュレートします。

    1. Windows の場合

      prompt> runloadgen.cmd fxEuro.prop
      
    2. UNIX の場合

      prompt> runloadgen.sh fxEuro.prop
      

    サーバを起動したコマンド ウィンドウでサーバ ステータス メッセージがスクロールされ、3 つの load generator が起動した後、サーバ コマンド ウィンドウに次のようなメッセージが出力されます。

    OutputBean:onEvent() + <TupleValue><EventType>SpreaderOuputEvent</EventType><ObjectName>FindCrossRatesRule</ObjectName><Timestamp>1843704855846</Timestamp><TupleKind>null</TupleKind><DoubleAttribute><Value>90.08350000074516</Value></DoubleAttribute><CharAttribute><Value>USD</Value><Length>3</Length></CharAttribute><CharAttribute><Value>JPY</Value><Length>3</Length></CharAttribute><IsTotalOrderGuarantee>false</IsTotalOrderGuarantee></TupleValue>
    

    これらのメッセージは、外国為替取引のサンプルが正しく実行されていることを示しています。出力では、米ドル対日本円および米ドル対英国ポンドのクロス レートが示されています。

3.7.2 ソース ディレクトリからビルドおよびデプロイする外国為替取引のサンプル

外国為替取引 (FX) サンプルのソース ディレクトリには、Java ソースと、FX アプリケーションを構成する他の必須リソース (コンフィグレーション XML ファイルなど) が含まれます。build.xml Ant ファイルには、アプリケーションをビルドして fx_domain ドメインにデプロイするためのターゲットが含まれています (節 3.7.3「FX をビルドする Ant ターゲットの説明」を参照)。

外国為替取引のサンプルをソース ディレクトリからビルドおよびデプロイするには、以下の手順を実行します。

  1. FX の Oracle CEP インスタンスがまだ実行されていない場合は、節 3.7.1「外国為替取引のサンプルの実行」の手順に従ってサーバを起動します。

    再ビルドしたアプリケーションを正常にデプロイするには、サーバが実行中である必要があります。

  2. 新しいコマンド ウィンドウを開き、ORACLE_CEP_HOME\ocep_11.1\samples\source\applications\fx にある FX ソース ディレクトリに移動します。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

    prompt> cd d:\oracle_cep\ocep_11.1\samples\source\applications\fx
    
  3. 節 3.5「開発環境の設定」の説明に従って、開発環境を設定します。

  4. all Ant ターゲットを実行してアプリケーションをコンパイルし、JAR ファイルを作成します。

    prompt> ant all
    
  5. deploy Ant ターゲットを実行してアプリケーション JAR ファイルを Oracle CEP にデプロイします。

    prompt> ant -Dusername=wlevs -Dpassword=wlevs -Daction=update deploy
    

    注意 :

    このターゲットは、ドメイン ディレクトリにある既存の FX アプリケーション JAR ファイルを上書きします。

  6. FX アプリケーションで必要な load generator が実行されていない場合は、節 3.7.1「外国為替取引のサンプルの実行」の説明に従って起動します。

    サーバ ステータス メッセージがスクロールされた後、出力先に次のメッセージが出力されます。

    {crossRate=USDJPY, internalPrice=119.09934499999781}, {crossRate=USDGBP, internalPrice=0.5031949999999915}, {crossRate=USDJPY, internalPrice=117.73945624999783}
    

    このメッセージは、FX のサンプルが再デプロイされ、正しく実行されていることを示しています。

3.7.3 FX をビルドする Ant ターゲットの説明

FX ソースの最上位レベル ディレクトリにある build.xml ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。

  • clean - このターゲットは、現在のディレクトリの下にある dist および output 作業ディレクトリを削除します。

  • all - このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.fx_3.0.0.0.jar という JAR ファイルを生成し、生成した JAR ファイルを現在のディレクトリの下の dist ディレクトリに格納します。

  • deploy - このターゲットは、Deployer ユーティリティを使用して JAR ファイルを Oracle CEP にデプロイします。

    詳細については、『Oracle CEP 管理者ガイド』の「Deployer コマンドライン リファレンス」を参照してください。

3.7.4 FX のサンプルの実装

外国為替取引 (FX) のサンプルを実装するには、通常、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP アプリケーションの作成 : 一般的な手順」に従います。

タスク指向の手順を示して一般的な開発プロセスを説明している節を参照してください。

FX のサンプルで使用するすべてのファイルは、ORACLE_CEP_HOME\ocep_11.1\samples\source\applications\fx ディレクトリを基準にして相対的な場所にあります。ORACLE_CEP_HOME は、c:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお勧めします。ただし、これは必須条件ではありません。

FX のサンプルで使用するファイルは次のとおりです。

  • アプリケーションの各コンポーネントと、すべてのコンポーネントの接続方法を記述した EPN アセンブリ ファイル。この XML ファイルを Oracle CEP アプリケーションに組み込む必要があります。

    サンプルでは、このファイルは com.bea.wlevs.example.fx-context.xml という名前で、META-INF/spring ディレクトリにあります。

    詳細については、節 3.7.5「FX EPN アセンブリ ファイル」を参照してください。

  • アプリケーションのプロセッサ コンポーネントをコンフィグレーションする 2 つの XML ファイル。

    1 つ目の XML ファイルは、preprocessorAmerpreprocessorAsia、および preprocessorEuro コンポーネントをすべて 1 つのファイルにコンフィグレーションします。この XML ファイルは、シミュレートされた特定のマーケット フィードから特定の通貨ペアを選択する EPL ルールを含み、サンプルの概要で説明している境界条件を実行します。サンプルでは、このファイルは preprocessors.xml という名前で、META-INF/wlevs ディレクトリにあります。

    もう 1 つの XML ファイルは、spreader プロセッサをコンフィグレーションします。このコンポーネントはプリプロセッサで選択されたすべてのイベントを結合し、特定の通貨ペアの内部価格を計算した後、クロス レートを計算します。このファイルは spreader.xml という名前で、META-INF/wlevs ディレクトリにあります。

    詳細については、節 3.7.6「FX プロセッサ コンポーネント コンフィグレーション ファイル」を参照してください。

  • アプリケーションの OutputBean コンポーネント (ビジネス ロジックを含む POJO) を実装する Java ファイル。この POJO は、受信したイベント (onEvent メソッドでプログラミングされたもの) を画面に出力します。また、イベント タイプ リポジトリに ForeignExchangeEvent イベント タイプを登録します。

    サンプルでは、このファイルは OutputBean.java という名前で、src/com/bea/wlevs/example/fx ディレクトリにあります。

    POJO で参照されている Oracle CEP API の詳細については、『Oracle CEP Java API Reference』を参照してください。

  • ForeignExchangeEvents を生成するファクトリである ForeignExchangeBuilderFactory を実装する Java ファイル。

    サンプルでは、このファイルは ForeignExchangeBuilderFactory.java という名前で、src/com/bea/wlevs/example/fx ディレクトリにあります。

    ForeignExchangeBuilderFactory で参照されている Oracle CEP API の詳細については、『Oracle CEP Java API Reference』を参照してください。

  • Oracle CEP にデプロイされる OSGi バンドルのコンテンツを記述した MANIFEST.MF ファイル。

    サンプルでは、MANIFEST.MF ファイルが META-INF ディレクトリにあります。

    このファイルの作成方法と、Oracle CEP にデプロイする OSGi バンドルの作成方法については、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP アプリケーションのアセンブル : 主な手順」を参照してください。

    FX のサンプルでは、OSGi バンドルのコンパイル、アセンブル、およびデプロイに build.xml Ant ファイルを使用します。開発環境でも Ant を使用する場合、この build.xml ファイルの詳細については、節 3.7.2「ソース ディレクトリからビルドおよびデプロイする外国為替取引のサンプル」を参照してください。

3.7.5 FX EPN アセンブリ ファイル

EPN アセンブリ ファイルの主な目的の 1 つは、アプリケーションのコンポーネントを宣言してイベント処理ネットワークを定義し、これらすべてのコンポーネントの接続方法、つまりどのコンポーネントが他のどのコンポーネントをリスンするかを定義することです。Oracle CEP には、ネットワークの宣言に使用するカスタム Spring タグのセットが用意されています。また、EPN アセンブリ ファイルは、アプリケーションで使用するイベント タイプとアプリケーションの Oracle CQL または EPL ルールを登録するためにも使用します。

EPN アセンブリ ファイルを通常の方法で使用して、 Spring アプリケーション コンテキストで アプリケーション コンポーネント Bean を定義します。アプリケーション コンポーネント Bean は、 Java クラスで実装される「アダプタ」や 「ビジネス ロジックを含む POJO」などです。

詳細については、以下を参照してください。

例 X は、FX サンプル アプリケーションで使用する EPN アセンブリ ファイルを示しています。太字のエントリの詳細については、サンプルの後にある説明を参照してください。

例 3-3 FX EPN アセンブリ ファイル

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:osgi="http://www.springframework.org/schema/osgi"
       xmlns:wlevs="http://www.bea.com/ns/wlevs/spring"
       xsi:schemaLocation="
  http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/osgi
  http://www.springframework.org/schema/osgi/spring-osgi.xsd
  http://www.bea.com/ns/wlevs/spring
  http://www.bea.com/ns/wlevs/spring/spring-wlevs-v11_0_0_0.xsd">
    <wlevs:event-type-repository>
        <wlevs:event-type type-name="ForeignExchangeEvent">
          <wlevs:class>com.bea.wlevs.example.fx.OutputBean$ForeignExchangeEvent</wlevs:class>
          <wlevs:property name="builderFactory">
                <bean id="builderFactory" class="com.bea.wlevs.example.fx.ForeignExchangeBuilderFactory"/>
            </wlevs:property>
        </wlevs:event-type>
    </wlevs:event-type-repository>
    <!-- EPN (イベント処理ネットワーク) をアセンブルします -->
    <wlevs:adapter id="fxMarketAmer" provider="loadgen">
        <wlevs:instance-property name="port" value="9011"/>
    </wlevs:adapter>
    <wlevs:adapter id="fxMarketAsia" provider="loadgen">
        <wlevs:instance-property name="port" value="9012"/>
    </wlevs:adapter>
    <wlevs:adapter id="fxMarketEuro" provider="loadgen">
        <wlevs:instance-property name="port" value="9013"/>
    </wlevs:adapter>
    <wlevs:processor id="preprocessorAmer" listeners="spreaderIn"/>
    <wlevs:processor id="preprocessorAsia" listeners="spreaderIn"/>
    <wlevs:processor id="preprocessorEuro" listeners="spreaderIn"/>
    <wlevs:channel id="fxMarketAmerOut">
        <wlevs:listener ref="preprocessorAmer"/>
        <wlevs:source ref="fxMarketAmer"/>
    </wlevs:channel>
    <wlevs:channel id="fxMarketAsiaOut">
        <wlevs:listener ref="preprocessorAsia"/>
        <wlevs:source ref="fxMarketAsia"/>
    </wlevs:channel>
    <wlevs:channel id="fxMarketEuroOut">
        <wlevs:listener ref="preprocessorEuro"/>
        <wlevs:source ref="fxMarketEuro"/>
    </wlevs:channel>
    <wlevs:channel id="spreaderOut" manageable="true">
        <wlevs:listener>
            <!-- ビジネス オブジェクトを作成します -->
            <bean id="outputBean" 
                  class="com.bea.wlevs.example.fx.OutputBean"
                  autowire="byName"/>
        </wlevs:listener>
    </wlevs:channel>
    <!-- ルール コンフィグレーションをインポートできるようプロセッサ ID が認識されている必要があります -->
    <wlevs:processor id="spreader">
        <wlevs:listener ref="spreaderOut"/>
    </wlevs:processor>
    <wlevs:channel id="spreaderIn">
        <wlevs:listener ref="spreader"/>
    </wlevs:channel>
</beans>

上記の例では、以下のことが行われます。

  • wlevs:event-type-repository 要素は、アプリケーション全体で使用するイベント タイプを登録します。FX アプリケーションには、イベント タイプが 1 つしか存在しません。このイベント タイプは、com.bea.wlevs.example.fx.OutputBean POJO クラスの ForeignExchangeEvent 内部クラスで実装される ForeignExchangeEvent です。name="builderFactory" を含む wlevs:property 子要素は、FX アプリケーションのイベント ビルダ ファクトリ クラスが com.bea.wlevs.example.fx.ForeignExchangeBuilderFactory によって実装されるように指定します。

    Oracle CEP は、必要に応じて ForeignExchangeEvent タイプのインスタンスを自動的に作成します。アプリケーションの EPL ルール、アダプタ Java クラス、および POJO でこのデータ型を参照できます。

  • wlevs:adapterwlevs:processor、および wlevs:channel 要素のセットは、ネットワークの各コンポーネントを宣言することによって、イベント処理ネットワークを設定します。このネットワークは、3 つのアダプタ、4 つのプロセッサ、および 5 つのストリームで構成されます (図 3-2 を参照)。

    各コンポーネントにはユニークな ID が指定されます。この ID は、他のコンポーネントがリスナとソースを宣言するときに参照することができます。

    • wlevs:adapter 要素は 3 つのアダプタを指定します。次に例を示します。

      <wlevs:adapter id="fxMarketAmer" provider="loadgen">
          <wlevs:instance-property name="port" value="9011"/>
      </wlevs:adapter>
      

      wlevs:adapter 要素の provider="loadgen" 属性は、アダプタが Oracle CEP load generator ユーティリティからデータを取得するように指定します。wlevs:instance-property 子要素は、アダプタがリスンするポート番号を指定します。

    • wlevs:processor 要素は、4 つの複合イベント プロセッサを指定します。次に例を示します。

      <wlevs:processor id="preprocessorAmer" listeners="spreaderIn"/>
      

      すべてのコンポーネント要素に共通の listeners 属性は、プロセッサをリスンするコンポーネントを指定します。このサンプルでは、このコンポーネントは spreaderIn という名前のチャネルです。

      次のように wlevs:listeners 子要素を使用してコンポーネントのリスナを指定することもできます。

      <wlevs:processor id="spreader">
          <wlevs:listener ref="spreaderOut"/>
      </wlevs:processor>
      

      サンプルでは、spreaderOut チャネルが spreader プロセッサをリスンします。

    • wlevs:channel 要素は 4 つのストリームを指定します。次に例を示します。

      <wlevs:channel id="fxMarketAmerOut">
          <wlevs:listener ref="preprocessorAmer"/>
          <wlevs:source ref="fxMarketAmer"/>
      </wlevs:channel>
      

      他のすべてのコンポーネントと同様に、wlevs:listener および wlevs:source 子要素を使用して、このコンポーネントに対してリスナおよびソースとして機能する他のコンポーネントを指定できます。

      サンプルでは、preprocessorAmer プロセッサが fxMarketAmerOut チャネルをリスンし、このストリームは fxMarketAmer アダプタをリスンします。

      例 3-4 は、wlevs:listener 要素内にコンポーネントの定義をネストする方法を示しています。

      例 3-4 ネストされたコンポーネントの定義

      <wlevs:channel id="spreaderOut" manageable="true">
          <wlevs:listener>
              <!-- Create business object -->
              <bean id="outputBean" 
                    class="com.bea.wlevs.example.fx.OutputBean" 
                    autowire="byName"/>
          </wlevs:listener>
      </wlevs:channel>
      

      例 3-4 では、<bean> タグを使用して標準の Spring Bean として宣言される outBean POJO は、spreaderOut チャネルをリスンします。spreaderOut チャネルの manageable="true" 属性は、チャネルのモニタを有効にします。デフォルトでは、コンポーネントの管理容易性は無効になっています。

3.7.6 FX プロセッサ コンポーネント コンフィグレーション ファイル

FX アプリケーションは 4 つのプロセッサを使用します。3 つのプロセッサで 3 つのデータ フィードを処理し、1 つのプロセッサで結果イベントを結合します。最初の 3 つのプロセッサは、preprocessor.xml という名前の 1 つの XML ファイルで、例 3-5 に示すようにコンフィグレーションされます。

例 3-5 FX プロセッサ コンポーネント コンフィグレーション ファイル : preprocessor.xml

<?xml version="1.0" encoding="UTF-8"?>
<n1:config xmlns:n1="http://www.bea.com/ns/wlevs/config/application" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<processor>
    <name>preprocessorAmer</name>
    <rules>
      <rule id="UsdToEurRule"><![CDATA[
      insert into ForeignExchangeEvent
      select avg(lastPrice) as price, 'USD' as fromRate, 'EUR' as toRate
      from (select * from StockTick where symbol='USDEUR') retain 1 sec
      where lastPrice < 3.0 and lastPrice > 0.25
      ]]></rule>
    </rules>
  </processor>
  <processor>
    <name>preprocessorAsia</name>
    <rules>
      <rule id="EurToJpyRule"><![CDATA[
      insert into ForeignExchangeEvent
      select avg(lastPrice) as price, 'EUR' as fromRate, 'JPY' as toRate
      from (select * from StockTick where symbol='EURJPY') retain 1 sec
      where lastPrice < 200.0 and lastPrice > 100.0
      ]]></rule>
    </rules>
  </processor>
  <processor>
    <name>preprocessorEuro</name>
    <rules>
      <rule id="EurToGbpRule"><![CDATA[
      insert into ForeignExchangeEvent
      select avg(lastPrice) as price, 'EUR' as fromRate, 'GBP' as toRate
      from (select * from StockTick where symbol='EURGBP') retain 1 sec
      where lastPrice < 1.5 and lastPrice > 0.5
      ]]></rule>
    </rules>
  </processor>
</n1:config>

このファイル内の 3 つのプロセッサは、すべて本質的には同じであり、データ フィードに対して異なる項目を照会するため、また異なる境界条件を適用するために Oracle CQL クエリで使用される値だけが異なります。このため、この節では、プロセッサの 1 つである preprocessorAmer のみについて説明します。

米国のデータ フィードで起動される Oracle CQL ルールは次のとおりです。

      insert into ForeignExchangeEvent
      select avg(lastPrice) as price, 'USD' as fromRate, 'EUR' as toRate
      from (select * from StockTick where symbol='USDEUR') retain 1 sec
      where lastPrice < 3.0 and lastPrice > 0.25

このクエリを理解するには、次のように、さまざまな句を確認する必要があります。

  • insert 句では、この Oracle CQL ルールによって選択されたイベントを ForeignExchangeEvent に挿入する必要があることを指定しています。ForeignExchangeEvent は、ネットワークにある次のプロセッサである spreader が、独自の Oracle CQL クエリを実行する対象のオブジェクトです。

  • from 句では、プロセッサが StockTick データ フィードから、symbol 値が USDEUR (米ドルと欧州ユーロの為替レート) である項目のみを受け入れ、その他すべての項目を拒否するように指定しています。さらに、from 句では、この Oracle CQL クエリを実行する時間枠を 1 秒に指定しています。

  • where 句では、フィードから読み込む特定の項目のレートが許容範囲内であることが保証されるように、境界条件を指定しています。このサンプルでは、フィードから読み込む特定の項目の LastPrice が 3.00 ドルから 0.25 ドルの間である必要があります。

  • select 句では、選択された項目から ForeignExchangeEvent オブジェクトに挿入する必要がある値を指定しています。このサンプルでは、ウィンドウ (1 秒) 内の全価格の平均、換算元の通貨として USD、換算先の通貨として EUR を指定しています。

spreader プロセッサは、spreader.xml ファイルを使用して例 3-6 に示すようにコンフィグレーションされています。

例 3-6 FX プロセッサ コンポーネント コンフィグレーション ファイル : spreader.xml

<?xml version="1.0" encoding="UTF-8"?>
<n1:config xmlns:n1="http://www.bea.com/ns/wlevs/config/application"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<processor>
    <name>spreader</name>
    <rules>
      <rule id="spreaderRule"><![CDATA[
      select ((a.price * b.price) + 0.05) as internalPrice, a.fromRate || b.toRate as crossRate
      from ForeignExchangeEvent a, ForeignExchangeEvent b
      retain 10 sec with unique a.toRate partition by a.fromRate
      where a.toRate = b.fromRate and a.fromRate != b.toRate
      ]]></rule>
    </rules>
  </processor>
</n1:config>

spreader Oracle CQL ルールでは、以下のことが行われます。

  • from 句と where 句では、ForeignExchangeEvent オブジェクト (3 つの preprocessorXXX コンポーネントによって選択されたイベントを含む) から、toRatefromRate の値が同じである 2 つのイベントを結合します。さらに、from 句では、処理時間ウィンドウを再び 1 秒と設定しています。

  • select 句では、特定の通貨の内部価格を計算しています。この価格は、通貨の換算元レートと換算先レートの平均を求め、0.05 ドルの手数料を加算して算出します。また、クロス レートも計算します。クロス レートは、1 つの通貨の、第 3 国市場の別の通貨に対する価格であると定義されます。

このクエリの結果は、ビジネス オブジェクト POJO に送信されます。

Oracle CEP クエリ言語の使用に関する追加情報およびサンプルについては、以下を参照してください。


注意 :

Oracle EPL は Oracle CQL に取って代わられます。

3.8 シグナル生成のサンプル

シグナル生成のサンプル アプリケーションは、シミュレートされたマーケット データを受信し、証券の価格変動が 2% を超えたかどうかを検証します。このアプリケーションは、特定の銘柄の連続的な株価を追跡することにより、トレンドの発生も検出します。変動が 2% を上回る価格が連続 3 回を超えた場合に、トレンドと見なします。

図 3-3 は、シグナル生成のサンプルのイベント処理ネットワーク (EPN) を示します。EPN は、アプリケーションを構成する各コンポーネントと、それらの連結を示しています。

図 3-3 シグナル生成のサンプルのイベント処理ネットワーク

図 3-3 の説明
「図 3-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 とキャッシュの両方にイベントが送信されます。

サンプルでは、Oracle CQL クエリの使用方法も示されています。

3.8.1 シグナル生成のサンプルの実行

最適なデモンストレーションの目的のためには、複数の CPU または 3GHz のデュアルコア Intel と 2GB 以上の RAM を搭載した強力なコンピュータでこのサンプルを実行することをお勧めします。

signalgeneration_domain ドメインには、単一のアプリケーションであるシグナル生成サンプル アプリケーションが含まれています。シグナル生成アプリケーションを実行するには、ドメインの Oracle CEP インスタンスを起動するだけです。

シグナル生成のサンプルを実行するには、次の手順に従います。

  1. コマンド ウィンドウを開き、ORACLE_CEP_HOME\ocep_11.1\samples\domains\signalgeneration_domain\defaultserver にある signalgeneration_domain ドメイン ディレクトリのデフォルト サーバ ディレクトリに移動します。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

    prompt> cd d:\oracle_cep\ocep_11.1\samples\domains\signalgeneration_domain\defaultserver
    
  2. 節 3.5「開発環境の設定」の説明に従って、開発環境を設定します。

  3. 正しいコマンドライン引数を使用して適切なスクリプトを実行し、Oracle CEP を起動します。

    1. Windows の場合

      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc パラメータを渡して確定的ガベージ コレクタを有効にします。

        prompt> startwlevs.cmd -dgc
        
      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合

        prompt> startwlevs.cmd
        
    2. UNIX の場合

      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc パラメータを渡して確定的ガベージ コレクタを有効にします。

        prompt> startwlevs.sh -dgc
        
      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合

        prompt> startwlevs.sh
        
  4. 次のようなコンソール メッセージが表示されるまで待機します。

    <Apr 24, 2009 11:40:37 AM EDT> <Notice> <Server> <BEA-2046000> <Server STARTED>
    Throughput (msg per second): 0. Average latency (microseconds): 0
    Throughput (msg per second): 0. Average latency (microseconds): 0
    Throughput (msg per second): 0. Average latency (microseconds): 0
    Throughput (msg per second): 0. Average latency (microseconds): 0
    ...
    

    これで、シグナル生成アプリケーションでデータ フィードからデータを受信する準備ができました。

    次に、データ フィードをシミュレートするには、このサンプル専用にプログラミングされた load generator を使用します。

  5. 新しいコマンド ウィンドウを開きます。

  6. ORACLE_CEP_HOME\ocep_11.1\samples\domains\signalgeneration_domain\defaultserver\utils ディレクトリに移動します。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

  7. startDataFeed コマンドを実行します。

    1. Windows の場合

      prompt> startDataFeed.cmd
      
    2. UNIX の場合

      prompt> startDataFeed.sh
      
  8. ブラウザを起動し、次の HTML ページを開いて、サンプルのダッシュボードを起動します。

       http://host:9002/signalgeneration/dashboard.html
    

    host は、Oracle CEP を実行しているコンピュータの名前に置き換えます。ブラウザと同じコンピュータである場合は、localhost とすることができます。

  9. ブラウザで HTML ページの [Start] をクリックします。

    このサンプルにコンフィグレーションされた Oracle CQL ルールに一致するイベントが、図 3-4 のように表示されます。

    図 3-4 シグナル生成ダッシュボード

    図 3-4 の説明
    「図 3-4 シグナル生成ダッシュボード」の説明

3.8.2 ソース ディレクトリからビルドおよびデプロイするシグナル生成のサンプル

シグナル生成サンプルのソース ディレクトリには、Java ソースと、シグナル生成アプリケーションを構成する他の必須のリソース (コンフィグレーション XML ファイル、EPN アセンブリ ファイル、DOJO クライアント JavaScript ライブラリなど) が含まれます。build.xml Ant ファイルには、アプリケーションをビルドして signalgeneration_domain ドメインにデプロイするためのターゲットが含まれています (節 3.8.3「シグナル生成をビルドする Ant ターゲットの説明」を参照)。

ソース ディレクトリからシグナル生成のサンプルをビルドおよびデプロイするには、以下の手順を実行します。

  1. シグナル生成の Oracle CEP インスタンスがまだ実行されていない場合は、節 3.8.1「シグナル生成のサンプルの実行」の手順に従ってサーバを起動します。再ビルドしたアプリケーションを正常にデプロイするには、サーバが実行中である必要があります。

  2. 新しいコマンド ウィンドウを開き、ORACLE_CEP_HOME\ocep_11.1\samples\source\applications\signalgeneration にあるシグナル生成ソース ディレクトリに移動します。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

    prompt> cd d:\oracle_cep\ocep_11.1\samples\source\applications\signalgeneration
    
  3. 節 3.5「開発環境の設定」の説明に従って、開発環境を設定します。

  4. all Ant ターゲットを実行してアプリケーションをコンパイルし、JAR ファイルを作成します。

    prompt> ant all
    
  5. deploy Ant ターゲットを実行してアプリケーション JAR ファイルを ORACLE_CEP_HOME\ocep_11.1\samples\domains\signalgeneration_domain\defaultserver\applications\signalgeneration ディレクトリにデプロイします。

    prompt> ant deploy
    

    注意 :

    このターゲットは、ドメイン ディレクトリにある既存のシグナル生成アプリケーション JAR ファイルを上書きします。

  6. シグナル生成アプリケーションで必要な load generator が実行されていない場合は、節 3.8.1「シグナル生成のサンプルの実行」の説明に従って起動します。

  7. 節 3.8.1「シグナル生成のサンプルの実行」の説明に従って、サンプルのダッシュボードを起動します。

3.8.3 シグナル生成をビルドする Ant ターゲットの説明

シグナル生成のサンプルのソースの最上位レベル ディレクトリにある build.xml ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。

  • clean - このターゲットは、現在のディレクトリの下にある dist および output 作業ディレクトリを削除します。

  • all - このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.signalgen_3.0.0.0.jar という JAR ファイルを生成し、生成した JAR ファイルを現在のディレクトリの下の dist ディレクトリに格納します。

  • deploy - このターゲットは、Deployer ユーティリティを使用して JAR ファイルを Oracle CEP にデプロイします。

    詳細については、『Oracle CEP 管理者ガイド』の「Deployer コマンドライン リファレンス」を参照してください。

3.8.4 シグナル生成のサンプルの実装

シグナル生成のサンプルを実装するには、通常、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP アプリケーションの作成 : 一般的な手順」に従います。

タスク指向の手順を示して一般的な開発プロセスを説明している節を参照してください。

シグナル生成で使用するすべてのファイルは、ORACLE_CEP_HOME\ocep_11.1\samples\source\applications\signalgeneration ディレクトリを基準にして相対的な場所にあります。ORACLE_CEP_HOME は、c:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお勧めします。ただし、これは必須条件ではありません。

シグナル生成のサンプルで使用するファイルは次のとおりです。

  • アプリケーションの各コンポーネントと、すべてのコンポーネントの接続方法を記述した EPN アセンブリ ファイル。

    サンプルでは、このファイルは epn_assembly.xml という名前で、META-INF/spring ディレクトリにあります。

    詳細については、節 3.8.5「シグナル生成 EPN アセンブリ ファイル」を参照してください。

  • アプリケーションのプロセッサ コンポーネントをコンフィグレーションする XML ファイル。このファイルは config.xml という名前で、META-INF/wlevs ディレクトリにあります。

    config.xml ファイルは processor1 Oracle CQL プロセッサをコンフィグレーションします。特に、証券の価格変動が 2% を超えたかどうか、および価格にトレンドが発生したかどうかを検証する Oracle CQL ルールをコンフィグレーションします。

    詳細については、節 3.8.6「シグナル生成コンポーネント コンフィグレーション ファイル」を参照してください。

  • アプリケーションの SignalgenOutputBean コンポーネント (ビジネス ロジックを含む POJO) を実装する Java ファイル。この POJO は、HttpServlet および EventSink です。この onEvent メソッドは、PercentTick および TrendTick イベント インスタンスを使用し、レイテンシを計算して、ダッシュボード情報を表示します。

    サンプルでは、このファイルは SignalgenOutputBean.java という名前で、src/oracle/cep/example/signalgen ディレクトリにあります。

    このファイルの詳細な説明と、イベント シンクのプログラミングの概要については、『Oracle CEP IDE Eclipse 開発者ガイド』の「ストリーム ソースとストリーム シンク、リレーション ソースとリレーション シンク」を参照してください。

  • Oracle CEP にデプロイされる OSGi バンドルのコンテンツを記述した MANIFEST.MF ファイル。

    サンプルでは、MANIFEST.MF ファイルが META-INF ディレクトリにあります。

    このファイルの作成方法と、Oracle CEP にデプロイする OSGi バンドルの作成方法については、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP アプリケーションのアセンブル : 主な手順」を参照してください。

  • メイン サンプル ディレクトリにある dashboard.html ファイル。この HTML ファイルは、実行中のシグナル生成アプリケーションのイベントおよびレイテンシを表示するサンプル ダッシュボードです。HTML ファイルは dojo ディレクトリにある Dojo Javascript ライブラリ (http://dojotoolkit.org/) を使用します。

ForeignExchangeBuilderFactory で参照されている Oracle CEP API の詳細については、『Oracle CEP Java API Reference』を参照してください。

シグナル生成のサンプルでは、OSGi バンドルのコンパイル、アセンブリ、およびデプロイに build.xml Ant ファイルを使用します。開発環境でも Ant を使用する場合、この build.xml ファイルの詳細については、節 3.8.2「ソース ディレクトリからビルドおよびデプロイするシグナル生成のサンプル」を参照してください。

3.8.5 シグナル生成 EPN アセンブリ ファイル

EPN アセンブリ ファイルの主な目的の 1 つは、アプリケーションのコンポーネントを宣言してイベント処理ネットワークを定義し、これらすべてのコンポーネントの接続方法、つまりどのコンポーネントが他のどのコンポーネントをリスンするかを定義することです。Oracle CEP には、ネットワークの宣言に使用するカスタム Spring タグのセットが用意されています。また、EPN アセンブリ ファイルは、アプリケーションで使用するイベント タイプとアプリケーションの Oracle CQL ルールを登録するためにも使用します。

EPN アセンブリ ファイルを通常の方法で使用して、 Spring アプリケーション コンテキストで アプリケーション コンポーネント Bean を定義します。アプリケーション コンポーネント Bean は、 Java クラスで実装される「アダプタ」や 「ビジネス ロジックを含む POJO」などです。

詳細については、以下を参照してください。

例 3-7 は、シグナル生成サンプル アプリケーションで使用する EPN アセンブリ ファイルを示しています。太字のエントリの詳細については、サンプルの後にある説明を参照してください。

例 3-7 シグナル生成 EPN アセンブリ ファイル

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:osgi="http://www.springframework.org/schema/osgi" xmlns:wlevs="http://www.bea.com/ns/wlevs/spring" xmlns:cqlx="http://www.oracle.com/schema/cqlx" xsi:schemaLocation="  http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd  http://www.springframework.org/schema/osgi  http://www.springframework.org/schema/osgi/spring-osgi.xsd  http://www.bea.com/ns/wlevs/spring  http://www.bea.com/ns/wlevs/spring/spring-wlevs-v11_0_0_0.xsd">
 
    <wlevs:event-type-repository>
        <wlevs:event-type type-name="TrendTick">
            <wlevs:properties>
                <wlevs:property name="symbol" type="char"/>
                <wlevs:property name="lastPrice" type="double"/>
                <wlevs:property name="trendLastPrice" type="bigint"/>
                <wlevs:property name="startTimestamp" type="bigint"/>
            </wlevs:properties>
        </wlevs:event-type>
        <wlevs:event-type type-name="PercentTick">
            <wlevs:properties>
                <wlevs:property name="symbol" type="char"/>
                <wlevs:property name="lastPrice" type="double"/>
                <wlevs:property name="percentLastPrice" type="double"/>
                <wlevs:property name="startTimestamp" type="bigint"/>
            </wlevs:properties>
        </wlevs:event-type>
        <wlevs:event-type type-name="Symbols">
            <wlevs:properties>
                <wlevs:property name="symbol" type="char" length="10"/>
            </wlevs:properties>
        </wlevs:event-type>
    </wlevs:event-type-repository>
 
    <wlevs:adapter id="loadgenAdapter" provider="loadgen">
        <wlevs:instance-property name="port" value="9001"/>
        <wlevs:instance-property name="threadContextTimestamp" value="true"/>
    </wlevs:adapter>
 
    <!-- シンボルを保持するキャッシュの定義 -->
    <wlevs:caching-system id="signalgenCachingSystem"/>
    <wlevs:cache id="symbolsCache" key-properties="symbol" value-type="Symbols">
        <wlevs:caching-system ref="signalgenCachingSystem"/>
        <wlevs:cache-loader ref="symbolsCacheLoader"/>
    </wlevs:cache>
 
    <wlevs:processor id="processor1">
        <wlevs:cache-source ref="symbolsCache"/>
    </wlevs:processor>
 
    <!-- このシナリオではストリームはプレースホルダであり、単にパススルーされます -->
    <wlevs:channel id="StockTickStream" max-threads="0" max-size="0" event-type="OracleStockTick">
        <wlevs:listener ref="processor1"/>
        <wlevs:source ref="loadgenAdapter"/>
    </wlevs:channel>
 
    <!-- モニタのための公開 -->
    <wlevs:channel id="TrendStream" max-threads="0" max-size="0" advertise="true" event-type="TrendTick">
        
        <wlevs:listener ref="outputbean"/>
        <wlevs:source ref="processor1"/>
    </wlevs:channel>
 
    <wlevs:channel id="PercentStream" max-threads="0" max-size="0" advertise="true" event-type="PercentTick">
        
        <wlevs:listener ref="outputbean"/>
        <wlevs:source ref="processor1"/>
    </wlevs:channel>
 
    <bean id="outputbean" class="oracle.cep.example.signalgen.SignalgenOutputBean">
        <property name="timestampProperty" value="startTimestamp"/>
    </bean>
 
    <bean id="symbolsCacheLoader" class="oracle.cep.example.signalgen.SymbolsCacheLoader">
        <property name="symbolsFileName" value="applications/MySigGen/symbols.txt"/>
        <property name="eventTypeName" value="Symbols"/>
    </bean>
 
</beans>

上記の例では、以下のことが行われます。

  • wlevs:event-type-repository 要素は、アプリケーション全体でタプルとして使用されるイベント タイプを作成します。シグナル生成アプリケーションには、次のイベントがあります。

    • TrendTick : EPN アセンブリ ファイルで定義されます。

    • PercentTick : EPN アセンブリ ファイルで定義されます。

    • Symbols : EPN アセンブリ ファイルで定義されます。

  • wlevs:adapterwlevs:processorwlevs:channel、および wlevs:caching-system エントリのセットは、ネットワークの各コンポーネントを宣言することによって、イベント処理ネットワークを設定します (図 3-3 を参照)。

    各コンポーネントにはユニークな ID が指定されます。この ID は、他のコンポーネントがリスナとソースを宣言するときに参照することができます。

    • wlevs:adapter 要素はアダプタを指定します。例を示します。

      <wlevs:adapter id="loadgenAdapter" provider="loadgen">
          <wlevs:instance-property name="port" value="9001"/>
          <wlevs:instance-property name="threadContextTimestamp" value="true"/>
      </wlevs:adapter>
      

      wlevs:adapter 要素の provider="loadgen" 属性は、アダプタが Oracle CEP load generator ユーティリティからデータを取得するように指定します。wlevs:instance-property 子要素は、アダプタがリスンするポート番号を指定します。

    • wlevs:processor 要素は Oracle CQL プロセッサを指定します。例を示します。

      <wlevs:processor id="processor1">
          <wlevs:cache-source ref="symbolsCache"/>
      </wlevs:processor>
      

      すべてのコンポーネント タグに共通の listener 属性は、プロセッサをリスンするコンポーネントを指定します。この場合、リスナは symbolsCache です。

    • wlevs:caching-system 要素は、アプリケーションのパフォーマンス向上のために使用される Oracle CEP ローカル イベント キャッシュを指定します。例を示します。

      <wlevs:caching-system id="signalgenCachingSystem"/>
      <wlevs:cache id="symbolsCache" key-properties="symbol" value-type="Symbols">
          <wlevs:caching-system ref="signalgenCachingSystem"/>
          <wlevs:cache-loader ref="symbolsCacheLoader"/>
      </wlevs:cache>
      

      キャッシュの詳細については、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP キャッシングのコンフィグレーション」を参照してください。

3.8.6 シグナル生成コンポーネント コンフィグレーション ファイル

シグナル生成アプリケーションは、例 3-8 に示すコンポーネント コンフィグレーション ファイルのプロセッサおよびキャッシュをコンフィグレーションします。

例 3-8 シグナル生成コンポーネント コンフィグレーション ファイル

<?xml version="1.0" encoding="UTF-8"?>
<!-- this is here to test that we ignore this file  -->
<n1:config xsi:schemaLocation="http://www.bea.com/ns/wlevs/config/application wlevs_application_config.xsd"
    xmlns:n1="http://www.bea.com/ns/wlevs/config/application" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <processor>
    <name>processor1</name>
    <rules>
      <view id="S" schema="symbol price">
        <![CDATA[
          RStream(select T.symbol, T.lastPrice from StockTickStream[now] as T, symbolsCache as R where T.symbol = R.symbol)
        ]]> 
      </view>
      <query id="percent">
        <![CDATA[  
        select symbol, lastPrice, percentLastPrice, startTimestamp
        from S MATCH_RECOGNIZE (
          PARTITION BY symbol
          MEASURES
            B.symbol as symbol,
            B.price as lastPrice,
            100*(B.price - A.price)/A.price as percentLastPrice,
                B.ELEMENT_TIME as startTimestamp
              ALL MATCHES
          PATTERN (A B)
          DEFINE
            B AS (100*(B.price - A.price)/A.price > 2.0
                  or    100*(B.price - A.price)/A.price < -2.0
                 )
            ) as T
        ]]>
     </query> 
     <view id="vTrend" schema="symbol lastPrice trendLastPrice">
        <![CDATA[
            select symbol, lastPrice, trendLastPrice
            from S MATCH_RECOGNIZE (
             PARTITION BY symbol
             MEASURES
                Z.symbol as symbol,
                Z.price as lastPrice,
                count(A.*)-count(B.*) as trendLastPrice
             ALL MATCHES
             PATTERN (X (A|B|C) (A|B|C) (A|B|C) (A|B|C) )
             SUBSET Z = (A, B, C)
             DEFINE
                A AS (A.price > PREV(A.price)),  
                B AS (B.price < PREV(B.price)),
                C AS (C.price = PREV(C.price))
            ) as T
        ]]>
     </view>
     <query id="trend">
        <![CDATA[
         select symbol, lastPrice, trendLastPrice, ELEMENT_TIME as startTimestamp from vTrend where trendLastPrice > 2
        ]]>    
     </query>
    </rules>
 </processor>
 <channel>
    <name>TrendStream</name>
    <selector>trend</selector>
 </channel>
 <channel>
    <name>PercentStream</name>
    <selector>percent</selector>
 </channel>
</n1:config>

アプリケーションに複数のプロセッサ、アダプタ、またはチャネルがある場合は、それらすべてを 1 つのコンフィグレーション ファイルで宣言することも、コンポーネントごとに個別のコンフィグレーション ファイルを作成することもできます。どちらか管理しやすい方法を選択してください。

コンフィグレーションするコンポーネントごとに name 子要素を追加し、参照する特定のコンポーネントを明示的に宣言する必要があります。name 要素の値は、EPN アセンブリ ファイルで宣言したコンポーネントのユニークな識別子に対応している必要があります。

たとえば、プロセッサが EPN アセンブリ ファイルで次のように宣言されているとします。

<wlevs:processor id="processor1" ...>

対応する XML コンフィグレーションは次のようになります。

<processor>
    <name>processor1</name>
    ...
</processor>

シグナル生成のサンプルでは、processor1 という名前の 1 つのプロセッサと、symbolsCache という名前の 1 つのキャッシュに対して、1 つのコンフィグレーション ファイルを使用しています。これらの名前は EPN アセンブリ ファイルでのコンポーネントの宣言に対応しています。

processor 要素は、プロセッサ コンポーネントをコンフィグレーションします。プロセッサ コンフィグレーションの重要な部分は、このプロセッサで実行する Oracle Continuous Query Language (Oracle CQL) のルール セットの宣言です。これらのルールは最終的にアプリケーション ビジネス オブジェクトに渡されるイベント セットを選択します。各ルールは、XML の <![CDATA[...]]> セクションを使用して query または relation 要素で宣言されます。すべての query および relation 要素は単一の rules 要素によってグループ化されます。特定のプロセッサ用に必要な数だけルールを定義できます。

シグナル生成アプリケーションには次のルールがあります。

    <rules>
      <view id="S" schema="symbol price">
        <![CDATA[
          RStream(select T.symbol, T.lastPrice from StockTickStream[now] as T, symbolsCache as R where T.symbol = R.symbol)
        ]]> 
      </view>
      <query id="percent">
        <![CDATA[  
        select symbol, lastPrice, percentLastPrice, startTimestamp
        from S MATCH_RECOGNIZE (
          PARTITION BY symbol
          MEASURES
            B.symbol as symbol,
            B.price as lastPrice,
            100*(B.price - A.price)/A.price as percentLastPrice,
                B.ELEMENT_TIME as startTimestamp
              ALL MATCHES
          PATTERN (A B)
          DEFINE
            B AS (100*(B.price - A.price)/A.price > 2.0
                  or    100*(B.price - A.price)/A.price < -2.0
                 )
            ) as T
        ]]>
     </query> 
     <view id="vTrend" schema="symbol lastPrice trendLastPrice">
        <![CDATA[
            select symbol, lastPrice, trendLastPrice
            from S MATCH_RECOGNIZE (
             PARTITION BY symbol
             MEASURES
                Z.symbol as symbol,
                Z.price as lastPrice,
                count(A.*)-count(B.*) as trendLastPrice
             ALL MATCHES
             PATTERN (X (A|B|C) (A|B|C) (A|B|C) (A|B|C) )
             SUBSET Z = (A, B, C)
             DEFINE
                A AS (A.price > PREV(A.price)),  
                B AS (B.price < PREV(B.price)),
                C AS (C.price = PREV(C.price))
            ) as T
        ]]>
     </view>
     <query id="trend">
        <![CDATA[
         select symbol, lastPrice, trendLastPrice, ELEMENT_TIME as startTimestamp from vTrend where trendLastPrice > 2
        ]]>    
     </query>
    </rules>

詳細については、『Oracle CEP CQL 言語リファレンス』を参照してください。

3.9 イベントの記録と再生のサンプル

記録と再生のサンプルは、1 つのコンポーネントをコンフィグレーションしてイベントをイベント ストアに記録し、ネットワークの別のコンポーネントをコンフィグレーションしてストアにあるイベントを再生する方法を示します。サンプルは、Oracle CEP で提供されるデータベース サーバである Apache Derby を使用してイベントを格納します。サンプルでは、イベント処理ネットワークのノードとしてパブリッシュ用 HTTP pub-sub アダプタをコンフィグレーションする方法も示します。

図 3-5 は、イベントの記録と再生のサンプルのイベント処理ネットワーク (EPN) を示します。EPN は、アプリケーションを構成する各コンポーネントと、それらの連結を示しています。

図 3-5 イベントの記録と再生のサンプルのイベント処理ネットワーク

図 3-5 の説明
「図 3-5 イベントの記録と再生のサンプルのイベント処理ネットワーク」の説明

このアプリケーションのイベント処理ネットワークには次の 4 つのコンポーネントが含まれています。

3.9.1 イベントの記録/再生のサンプルの実行

recplay_domain ドメインには、記録と再生のサンプル アプリケーションという単一のアプリケーションが含まれています。このアプリケーションを実行するには、以下の手順に示すように、最初にドメインの Oracle CEP インスタンスを起動します。

その後の手順では、Oracle CEP Visualizer を使用して simpleEventSource および eventStream コンポーネントでイベントの記録と再生をそれぞれ開始する方法を示しています。手順の最後では、Oracle CEP Visualizer を使用して、playbackHttpPublisher アダプタによってチャネルにパブリッシュされるイベントのストリームを表示する方法を示しています。

イベントの記録/再生のサンプルを実行するには、次の手順に従います。

  1. コマンド ウィンドウを開き、ORACLE_CEP_HOME\ocep_11.1\samples\domains\recplay_domain\defaultserver にある recplay_domain ドメイン ディレクトリのデフォルト サーバ ディレクトリに移動します。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

    prompt> cd d:\oracle_cep\ocep_11.1\samples\domains\recplay_domain\defaultserver
    
  2. 節 3.5「開発環境の設定」の説明に従って、開発環境を設定します。

  3. 正しいコマンドライン引数を使用して適切なスクリプトを実行し、Oracle CEP を起動します。

    1. Windows の場合

      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc パラメータを渡して確定的ガベージ コレクタを有効にします。

        prompt> startwlevs.cmd -dgc
        
      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合

        prompt> startwlevs.cmd
        
    2. UNIX の場合

      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc パラメータを渡して確定的ガベージ コレクタを有効にします。

        prompt> startwlevs.sh -dgc
        
      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合

        prompt> startwlevs.sh
        

    サーバ ステータス メッセージがスクロールされた後、出力先に次のメッセージが出力されます。

        SimpleEvent created at: 14:33:40.441
    

    このメッセージは、Oracle CEP サーバが正しく起動され、simpleEventSource コンポーネントがイベントを作成していることを示しています。

  4. ブラウザで以下の URL を起動します。

    http://host:port/wlevs
    

    host は、Oracle CEP が実行中のコンピュータ名を指します。port は、サーバにコンフィグレーションされている Jetty NetIO ポートを指します (デフォルト値 9002)。

    図 3-6 に示すように、ログオン画面が表示されます。

    図 3-6 Oracle CEP Visualizer ログオン画面

    図 3-6 の説明
    「図 3-6 Oracle CEP Visualizer ログオン画面」の説明

  5. ログオン画面で、[User Id] に wlevs、[Password] に wlevs と入力し、[Log In] をクリックします。

    図 3-40 に示すように、Oracle CEP Visualizer ダッシュボードが表示されます。

    図 3-7 Oracle CEP Visualizer ダッシュボード

    図 3-7 の説明
    「図 3-7 Oracle CEP Visualizer ダッシュボード」の説明

    Oracle CEP Visualizer のユーザ インタフェースの詳細については、『Oracle CEP Visualizer ユーザ ガイド』の「Oracle CEP Visualizer のユーザ インタフェースについて」を参照してください。

  6. 左ペインで、[WLEventServerDomainNonClusteredServerApplicationsrecplayStagessimpleEventSource] を選択します。

  7. 右ペインで、[Record] タブを選択します (図 3-8 を参照)。

    図 3-8 イベントの [Record] タブ

    図 3-8 の説明
    「図 3-8 イベントの [Record] タブ」の説明

    [DataSet Name] フィールドには、simpleEventSource アダプタ アプリケーション コンフィグレーション ファイル ORACLE-CEP-HOME\ocep_11.1\samples\domains\recplay_domain\defaultserver\applications\recplay\config.xml からの record-parameters 子要素の値の dataset-name 要素が含まれています (例 3-9 を参照)。

    例 3-9 recplay アプリケーション コンフィグレーション ファイル config.xml: adapter 要素

    <adapter>
        <name>simpleEventSource</name>
        <record-parameters>
            <dataset-name>recplay_sample</dataset-name>
            <event-type-list>
                <event-type>SimpleEvent</event-type>
            </event-type-list>
            <provider-name>test-rdbms-provider</provider-name>
            <batch-size>1</batch-size>
            <batch-time-out>10</batch-time-out>
        </record-parameters>
    </adapter>
    

    [Provider Name] には、data-source 子要素 name に対応する rdbms-event-store-provider 子要素の値 name が含まれています (例 3-10 を参照)。

    例 3-10 recplay Oracle CEP Server コンフィグレーション ファイル config.xml: data-source および rdbms-event-store-provider 要素

    <data-source>
        <name>derby1</name>
        <connection-pool-params>
            <initial-capacity>15</initial-capacity>
            <max-capacity>50</max-capacity>
        </connection-pool-params>
        <driver-params>
            <url>jdbc:derby:dbtest1;create=true</url>
            <driver-name>org.apache.derby.jdbc.EmbeddedDriver</driver-name>
        </driver-params>
    </data-source>
    <rdbms-event-store-provider>
        <name>test-rdbms-provider</name>
        <data-source-name>derby1</data-source-name>
    </rdbms-event-store-provider>
    
  8. [Record] タブの下部にある [Start] をクリックします。

    図 3-9 に示すように、[Alert] ダイアログが表示されます。

    図 3-9 記録開始の [Alert] ダイアログ

    図 3-9 の説明
    「図 3-9 記録開始の [Alert] ダイアログ」の説明

  9. [OK] をクリックします。

    [Current Status] フィールドには「Recording...」と表示されます。

    [OK] をクリックするとすぐに、イベントが simpleEventSource コンポーネントから離れ始め、コンフィグレーションされたデータベースに格納されます。

    [Start Recording] および [Stop Recording] フィールドを使用して、イベントをいつ記録するかをさらにコンフィグレーションできます。

  10. 左ペインで、[eventStream] を選択します。

  11. 右ペインで、[Playback] タブをクリックします (図 3-10 を参照)。

    図 3-10 イベントの [Playback] タブ

    図 3-10 の説明
    「図 3-10 イベントの [Playback] タブ」の説明

  12. タブの下部にある [Start] をクリックします。

    図 3-11 に示すように、[Alert] ダイアログが表示されます。

    図 3-11 再生開始の [Alert] ダイアログ

    図 3-11 の説明
    「図 3-11 再生開始の [Alert] ダイアログ」の説明

  13. [OK] をクリックします。

    [Current Status] フィールドには「Playing...」と表示されます。

    [OK] をクリックするとすぐに、simpleEventSource コンポーネントで記録されたイベントが simpleStream コンポーネントで再生されます。

    Oracle CEP サーバを起動したコマンド ウィンドウに次のメッセージが出力され、元のイベントと再生イベントの両方が EPN を介してストリーミングされていることを示します。

    SimpleEvent created at: 14:33:11.501
    Played back: Original time=14:15:23.141 Playback time=14:33:11.657
    

    再生されるイベントが記録された期間や再生速度などの再生パラメータをさらにコンフィグレーションできます。そのためには、適切なフィールドを更新し、[Change Parameters] をクリックします。再生パラメータを変更した後、再生を再開する必要があります。

  14. playbackHttpPublisher アダプタがチャネルにパブリッシュしているイベントを表示するには、以下の手順を実行します。

    1. 上ペインで、[Viewstream] ボタンをクリックします。

      図 3-12 に示すように、Viewstream ウィンドウが表示されます。

      図 3-12 [Stream Visualizer]

      図 3-12 の説明
      「図 3-12 [Stream Visualizer]」の説明

    2. 右ペインで、[Initialize Client] をクリックします。

    3. [Subscribe Channel] テキスト ボックスに /playbackchannel と入力します。

    4. [Subscribe] をクリックします。

    [Received Messages] テキスト ボックスに、再生されたイベントの詳細が表示されます。再生されたイベントは、イベントの作成時刻と再生時刻を示します。

3.9.2 ソース ディレクトリからビルドおよびデプロイするイベントの記録/再生のサンプル

記録と再生のサンプルのソース ディレクトリには、Java ソースと、アプリケーションを構成する他の必須リソース (コンフィグレーション XML ファイル、EPN アセンブリ ファイルなど) が含まれます。build.xml Ant ファイルには、アプリケーションをビルドして signalgeneration_domain ドメインにデプロイするためのターゲットが含まれています (節 3.9.3「記録と再生のサンプルをビルドする Ant ターゲットの説明」を参照)。

ソース ディレクトリからイベントの記録/再生のサンプルをビルドおよびデプロイするには、次の手順を実行します。

  1. 記録/再生の Oracle CEP インスタンスがまだ実行されていない場合は、節 3.9.1「イベントの記録/再生のサンプルの実行」の手順に従ってサーバを起動します。再ビルドしたアプリケーションを正常にデプロイするには、サーバが実行中である必要があります。

  2. 新しいコマンド ウィンドウを開き、ORACLE_CEP_HOME\ocep_11.1\samples\source\applications\recplay にある記録/再生ソース ディレクトリに移動します。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

    prompt> cd d:\oracle_cep\ocep_11.1\samples\source\applications\recplay
    
  3. 節 3.5「開発環境の設定」の説明に従って、開発環境を設定します。

  4. all Ant ターゲットを実行してアプリケーションをコンパイルし、JAR ファイルを作成します。

    prompt> ant all
    
  5. deploy Ant ターゲットを実行してアプリケーション JAR ファイルを ORACLE_CEP_HOME\ocep_11.1\samples\domains\recplay_domain\defaultserver\applications\recplay ディレクトリにデプロイします。

    prompt> ant -Dusername=wlevs -Dpassword=wlevs -Daction=update deploy
    

    注意 :

    このターゲットは、ドメイン ディレクトリにある既存のイベントの記録/再生アプリケーション JAR ファイルを上書きします。

    アプリケーション再デプロイ メッセージの後、約 1 秒ごとに次のメッセージが出力先に出力されます。

        SimpleEvent created at: 14:33:40.441
    

    このメッセージは、記録と再生のサンプルが再デプロイされ、正しく実行されていることを示します。

  6. 節 3.9.1「イベントの記録/再生のサンプルの実行」 (手順 4 以降) に従って Oracle CEP Visualizer を起動し、イベントの記録と再生を開始します。

3.9.3 記録と再生のサンプルをビルドする Ant ターゲットの説明

記録/再生のソースの最上位レベル ディレクトリにある build.xml ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。

  • clean - このターゲットは、現在のディレクトリの下にある dist および output 作業ディレクトリを削除します。

  • all - このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.recplay_3.0.0.0.jar という JAR ファイルを生成し、生成した JAR ファイルを現在のディレクトリ下の dist ディレクトリに格納します。

  • deploy - このターゲットは、Deployer ユーティリティを使用して JAR ファイルを Oracle CEP にデプロイします。

    詳細については、『Oracle CEP 管理者ガイド』の「Deployer コマンドライン リファレンス」を参照してください。

3.9.4 記録と再生のサンプルの実装

シグナル生成のサンプルを実装するには、通常、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP アプリケーションの作成 : 一般的な手順」に従います。

タスク指向の手順を示して一般的な開発プロセスを説明している節を参照してください。

このサンプルで使用するすべてのファイルは、ORACLE_CEP_HOME\ocep_11.1\samples\source\applications\recplay ディレクトリを基準にして相対的な場所にあります。ORACLE_CEP_HOME は、c:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。実際の環境でも、このサンプルのとおりのディレクトリ設定を使用することをお勧めします。ただし、これは必須条件ではありません。

記録と再生のサンプルで使用するファイルは次のとおりです。

  • アプリケーションの各コンポーネントと、すべてのコンポーネントの接続方法を記述した EPN アセンブリ ファイル (図 3-5 を参照)。

    サンプルでは、このファイルは com.bea.wlevs.example.recplay-context.xml という名前で、META-INF/spring ディレクトリにあります。

  • simpleEventSource アダプタの Java ソース ファイル。

    サンプルでは、このファイルは SimpleEventSource.java という名前で、src/com/bea/wlevs/adapter/example/recplay ディレクトリにあります。

    このファイルの詳細な説明と、アダプタ Java ファイルの一般的なプログラミング方法については、『Oracle CEP IDE Eclipse 開発者ガイド』の「カスタム アダプタとイベント Bean の作成」を参照してください。

  • PlayedBackEvent および SimpleEvent イベント タイプを記述する Java ソース ファイル。SimpleEvent イベント タイプは、最初にアダプタによって生成されたイベントですが、PlayedBackEvent イベント タイプは、記録された後に再生されるイベントに対して使用します。PlayedBackEvents は、SimpleEvent とほぼ同じですが、イベントが記録された時刻を示す追加フィールドがあります。

    サンプルでは、2 つのイベントは SimpleEvent.java および PlayedBackEvent.java という名前で、src/com/bea/wlevs/event/example/recplay ディレクトリにあります。

    このファイルの詳細な説明と、イベント タイプのプログラミングの概要については、『Oracle CEP IDE Eclipse 開発者ガイド』の「イベント タイプの作成」を参照してください。

  • アプリケーションの recplayEventSink イベント Bean を実装する Java ファイルは、simpleEventSource アダプタからリアルタイム イベントと再生イベントの両方を受け取るイベント シンクです。

    サンプルでは、このファイルは RecplayEventSink.java という名前で、src/com/bea/wlevs/example/recplay ディレクトリにあります。

    このファイルの詳細な説明と、アダプタ Java ファイルの一般的なプログラミング方法については、『Oracle CEP IDE Eclipse 開発者ガイド』の「カスタム アダプタとイベント Bean の作成」を参照してください。

  • simpleEventSource アダプタと eventStream チャネル コンポーネントをコンフィグレーションする XML ファイル。コンポーネントを指定する <record-parameters> 要素を含むアダプタは、イベントをイベント ストアに記録します。同様に、チャネルには再生イベントを受け取るように指定する <playback-parameters> 要素が含まれます。

    サンプルでは、このファイルは config.xml という名前で、META-INF/wlevs ディレクトリにあります。

  • Oracle CEP にデプロイされる OSGi バンドルのコンテンツを記述した MANIFEST.MF ファイル。

    サンプルでは、MANIFEST.MF ファイルが META-INF ディレクトリにあります。

    このファイルの作成方法と、Oracle CEP にデプロイする OSGi バンドルの作成方法については、『Oracle CEP IDE Eclipse 開発者ガイド』の「Oracle CEP アプリケーションのアセンブル : 主な手順」を参照してください。

記録/再生のサンプルでは、OSGi バンドルのコンパイル、アセンブル、およびデプロイに build.xml Ant ファイルを使用します。開発環境でも Ant を使用する場合、この build.xml ファイルの詳細については、節 3.9.2「ソース ディレクトリからビルドおよびデプロイするイベントの記録/再生のサンプル」を参照してください。

3.10 Oracle Continuous Query Language (CQL) のサンプル

CQL のサンプルでは、Oracle CEP Visualizer Query Wizard を使用してさまざまな種類の Oracle CQL クエリを作成する方法を示します。

図 3-13 は、CQL サンプルのイベント処理ネットワーク (EPN) を示します。EPN は、アプリケーションを構成する各コンポーネントと、それらの連結を示しています。

図 3-13 CQL のサンプルのイベント処理ネットワーク

図 3-13 の説明
「図 3-13 CQL のサンプルのイベント処理ネットワーク」の説明

アプリケーションには EPN の個別の 3 つのイベント パスがあります。


注意 :

EPN の各種コンポーネントの詳細については、このブックの他のサンプルを参照してください。

3.10.1 CQL のサンプルの実行

最適なデモンストレーションの目的のためには、複数の CPU または 3GHz のデュアルコア Intel と 2GB 以上の RAM を搭載した強力なコンピュータでこのサンプルを実行することをお勧めします。

CQL アプリケーションは cql_domain ドメインにあらかじめデプロイされています。アプリケーションを実行するには、Oracle CEP サーバのインスタンスを起動するだけです。

CQL のサンプルを実行するには、次の手順に従います。

  1. コマンド ウィンドウを開き、ORACLE_CEP_HOME\ocep_11.1\samples\domains\cql_domain\defaultserver にある CQL ドメイン ディレクトリのデフォルト サーバ ディレクトリに移動します。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

    prompt> cd d:\oracle_cep\ocep_11.1\samples\domains\cql_domain\defaultserver
    
  2. 節 3.5「開発環境の設定」の説明に従って、開発環境を設定します。

  3. 正しいコマンドライン引数を使用して適切なスクリプトを実行し、Oracle CEP を起動します。

    1. Windows の場合

      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc パラメータを渡して確定的ガベージ コレクタを有効にします。

        prompt> startwlevs.cmd -dgc
        
      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合

        prompt> startwlevs.cmd
        
    2. UNIX の場合

      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用している場合は、コマンドに -dgc パラメータを渡して確定的ガベージ コレクタを有効にします。

        prompt> startwlevs.sh -dgc
        
      • Oracle JRockit Real Time 3.0 に含まれる JRockit JDK を使用しない場合

        prompt> startwlevs.sh
        

    これで、CQL アプリケーションでデータ フィードからデータを受信する準備ができました。

  4. 不足イベント クエリのデータ フィードをシミュレートするには、新しいコマンド ウィンドウを開き、節 3.5「開発環境の設定」の説明に従って環境を設定します。

  5. ORACLE_CEP_HOME\ocep_11.1\utils\load-generator ディレクトリに移動します。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

  6. orderData.prop プロパティ ファイルを使用して load generator を実行します。

    1. Windows の場合

      prompt> runloadgen.cmd orderData.prop
      
    2. UNIX の場合

      prompt> runloadgen.sh orderData.prop
      
  7. 移動平均クエリのデータ フィードをシミュレートするには、新しいコマンド ウィンドウを開き、節 3.5「開発環境の設定」の説明に従って環境を設定します。

  8. ORACLE_CEP_HOME\ocep_11.1\utils\load-generator ディレクトリに移動します。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

  9. stockData.prop プロパティ ファイルを使用して load generator を実行します。

    1. Windows の場合

      prompt> runloadgen.cmd stockData.prop
      
    2. UNIX の場合

      prompt> runloadgen.sh stockData.prop
      
  10. キャッシュ クエリのデータ フィードをシミュレートするには、サンプルを実行するだけで済みます。

    Adaptor.java で負荷データが生成され、Loader.java でキャッシュ データが生成されます。Oracle CEP Visualizer Query Plan で統計を有効にすることで、データの流れを確認できます。

3.10.2 CQL のサンプルのビルドおよびデプロイ

CQL サンプル ソース ディレクトリには、Java ソースと、CQL アプリケーションを構成する他の必要なリソース (コンフィグレーション XML ファイルなど) が含まれています。build.xml Ant ファイルには、アプリケーションをビルドして cql_domain ドメインにデプロイするためのターゲットが含まれています (節 3.10.3「CQL のサンプルをビルドする Ant ターゲットの説明」を参照)。

ソース ディレクトリから CQL のサンプルをビルドおよびデプロイするには、次の手順に従います。

  1. CQL の Oracle CEP インスタンスがまだ実行されていない場合は、節 3.10.1「CQL のサンプルの実行」の手順に従ってサーバを起動します。

    再ビルドしたアプリケーションを正常にデプロイするには、サーバが実行中である必要があります。

  2. 新しいコマンド ウィンドウを開き、ORACLE_CEP_HOME\ocep_11.1\samples\source\applications\cql にある CQL ソース ディレクトリに移動します。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

    prompt> cd d:\oracle_cep\ocep_11.1\samples\source\applications\cql
    
  3. 節 3.5「開発環境の設定」の説明に従って、開発環境を設定します。

  4. all Ant ターゲットを実行してアプリケーションをコンパイルし、JAR ファイルを作成します。

    prompt> ant all
    
  5. deploy Ant ターゲットを実行してアプリケーション JAR ファイルを Oracle CEP にデプロイします。

    prompt> ant -Dusername=wlevs -Dpassword=wlevs -Daction=update deploy
    

    注意 :

    このターゲットは、ドメイン ディレクトリにある既存の CQL アプリケーション JAR ファイルを上書きします。

  6. CQL アプリケーションで必要な load generator が実行されていない場合は、節 3.10.1「CQL のサンプルの実行」の説明に従って起動します。

3.10.3 CQL のサンプルをビルドする Ant ターゲットの説明

CQL ソースの最上位レベル ディレクトリにある build.xml ファイルには、アプリケーションをビルドおよびデプロイするための次のターゲットが含まれています。

  • clean - このターゲットは、現在のディレクトリの下にある dist および output 作業ディレクトリを削除します。

  • all - このターゲットは、アプリケーションをクリーンアップしてコンパイルし、com.bea.wlevs.example.cql_3.0.0.0.jar という JAR ファイルを生成し、生成した JAR ファイルを現在のディレクトリの下の dist ディレクトリに格納します。

  • deploy - このターゲットは、Deployer ユーティリティを使用して JAR ファイルを Oracle CEP にデプロイします。

    詳細については、『Oracle CEP 管理者ガイド』の「Deployer コマンドライン リファレンス」を参照してください。

3.10.4 CQL のサンプルの実装

この節では、CQL サンプルで使用されるクエリを作成する方法について説明します。以下の節で構成されています。

3.10.4.1 不足イベント クエリの作成

この節では、Oracle CEP Visualizer Query Wizard を使用して、不足しているイベントを検出するために cqlProc プロセッサで実行される Oracle CQL パターン マッチング クエリを作成する方法を示します。

Oracle CEP システムに入力される顧客注文ワークフロー イベントが含まれている顧客注文ワークフローを考えます。

有効なシナリオでは、表 3-1 に示す順序でイベントが発生します。

表 3-1 有効な注文ワークフロー

イベントの種類 説明

C

顧客注文

A

承認

S

出荷


しかし、表 3-2 のように承認イベントなしで注文が出荷された場合はエラーです。

表 3-2 無効な注文ワークフロー

イベントの種類 説明

C

顧客注文

S

出荷


不足している承認イベントを検出し、警告イベントを生成するクエリを作成およびテストします。

不足イベント クエリを作成するには :

  1. CQL の Oracle CEP インスタンスがまだ実行されていない場合は、節 3.10.1「CQL のサンプルの実行」の手順に従ってサーバを起動します。

    Oracle CEP Visualizer を使用するにはサーバが実行中である必要があります。

  2. ブラウザで以下の URL を起動します。

    http://host:port/wlevs
    

    host は、Oracle CEP が実行中のコンピュータ名を指します。port は、サーバにコンフィグレーションされている Jetty NetIO ポートを指します (デフォルト値 9002)。

    図 3-14 に示すように、ログオン画面が表示されます

    図 3-14 Oracle CEP Visualizer ログオン画面

    図 3-14 の説明
    「図 3-14 Oracle CEP Visualizer ログオン画面」の説明

  3. ログオン画面で、[User Id] に wlevs、[Password] に wlevs と入力し、[Log In] をクリックします。

    図 3-40 に示すように、Oracle CEP Visualizer ダッシュボードが表示されます。

    図 3-15 Oracle CEP Visualizer ダッシュボード

    図 3-15 の説明
    「図 3-15 Oracle CEP Visualizer ダッシュボード」の説明

    Oracle CEP Visualizer のユーザ インタフェースの詳細については、『Oracle CEP Visualizer ユーザ ガイド』の「Oracle CEP Visualizer のユーザ インタフェースについて」を参照してください。

  4. 右側のペインで、[WLEventServerDomain|NonClusteredServer|Applications] を展開します。

  5. [cql] ノードを選択します。

    図 3-41 に示すように、CQL アプリケーション画面が表示されます。

    図 3-16 CQL アプリケーション画面 : [General] タブ

    図 3-16 の説明
    「図 3-16 CQL アプリケーション画面 : [General] タブ」の説明

  6. [Event Processing Network] タブを選択します。

    図 3-42 に示すように、[Event Processing Network] 画面が表示されます。

    図 3-17 CQL アプリケーション : [Event Processing Network] タブ

    図 3-17 の説明
    「図 3-17 CQL アプリケーション : [Event Processing Network] タブ」の説明

  7. [orderProcessor] Oracle CQL プロセッサ アイコンをダブルクリックします。

    図 3-43 に示すように、Oracle CQL プロセッサ画面が表示されます。

    図 3-18 Oracle CQL プロセッサ : [General] タブ

    図 3-18 の説明
    「図 3-18 Oracle CQL プロセッサ : [General] タブ」の説明

  8. [Query Wizard] タブを選択します。

    図 3-44 に示すように、[Query Wizard] 画面が表示されます。

    図 3-19 Oracle CQL プロセッサ : [Query Wizard] タブ

    図 3-19 の説明
    「図 3-19 Oracle CQL プロセッサ : [Query Wizard] タブ」の説明

    Oracle CQL Query Wizard を使用すると、テンプレートまたは個別の Oracle CQL 構成体から Oracle CQL クエリを作成できます。

    この手順では、テンプレートから Oracle CQL クエリを作成します。

    詳細については、『Oracle CEP Visualizer ユーザ ガイド』の「Query Wizard を使用した Oracle CQL プロセッサ内のルールの作成」を参照してください。

  9. [Templates] タブをクリックします。

    図 3-20 に示すように、[Templates] タブが表示されます。

    図 3-20 [Templates] タブ

    図 3-20 の説明
    「図 3-20 [Templates] タブ」の説明

  10. [Templates] パレットから [Pattern Match Template] をクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-20 を参照)。

  11. [SSource] アイコンをダブルクリックします。

    図 3-46 に示すように、[SSource] コンフィグレーション画面が表示されます。

    図 3-21 [SSource] コンフィグレーション ダイアログ

    図 3-21 の説明
    「図 3-21 [SSource] コンフィグレーション ダイアログ」の説明

    クエリのソースは orderChannel ストリームになります。

  12. SSource を次のようにコンフィグレーションします。

    • [Type] で [Stream] を選択します。

    • [Select a source] プルダウン メニューから [orderChannel] を選択します。

  13. [Save] をクリックします。

  14. [Save Query] をクリックします。

  15. [Pattern] アイコンをダブルクリックします。

    図 3-22 に示すように、[Pattern] コンフィグレーション画面が表示されます。

    図 3-22 [Pattern] コンフィグレーション ダイアログ : [Pattern] タブ

    図 3-22 の説明
    「図 3-22 [Pattern] コンフィグレーション ダイアログ : [Pattern] タブ」の説明

    [Pattern] タブを使用して、不足しているイベントが発生した場合に一致するパターン式を定義します。式は、後の手順で [Define] タブで指定する名前付き条件として作成されます。

  16. [Pattern Expression] フィールドに次の式を入力します。

    CustOrder NoApproval*? Shipment 
    

    このパターンでは、表 3-3 に示す Oracle CQL パターン量指定子を使用しています。パターン量指定子を使用して、パターン一致の許容範囲を指定します。1 文字のパターン量指定子は最大を表し、可能な限り多くの量の一致を先に試みます。2 文字のパターン量指定子は最小を表し、可能な限り少ない量の一致を先に試みます。

    表 3-3 MATCH_RECOGNIZE パターン量指定子

    最大 最小 説明

    *

    *?

    0 回以上。

    +

    +?

    1 回以上。

    ?

    ??

    0 または 1 回。


    詳細については、以下を参照してください。

  17. [Partition By] プルダウン メニューから [orderid] を選択し、プラス記号のボタンをクリックして PARTITION BY 句にこのプロパティを追加します。

    これにより、Oracle CEP では各注文で不足イベント クエリが評価されます。

  18. [Alias] フィールドに Orders と入力します。

    後からクエリで簡単に使用できるように、パターンのエリアス (Orders) を割り当てます。

  19. [Define] タブをクリックします。

    図 3-23 に示すように、[Define] タブが表示されます

    図 3-23 [Pattern] コンフィグレーション ダイアログ : [Define] タブ

    図 3-23 の説明
    「図 3-23 [Pattern] コンフィグレーション ダイアログ : [Define] タブ」の説明

    パターン句に指定した、表 3-4 の各条件を定義します。

    表 3-4 条件の定義

    条件名 定義

    CustOrder

    orderChannel.eventType = 'C'

    NoApproval

    NOT(orderChannel.eventType = 'A')

    Shipment

    orderChannel.eventType = 'C'


  20. [Object Name] フィールドに CustOrder と入力します。

  21. 式ビルダ ボタンをクリックし、[Expression Builder] を次のようにコンフィグレーションします (図 3-24 を参照)。

    • [Variables] リストで、[eventType] をダブルクリックします。

    • [Operands] リストで、[=] をダブルクリックします。

    • = 演算子の後に、値 'C' を入力します。

    図 3-24 [Expression Builder] : CustOrder

    図 3-24 の説明
    「図 3-24 [Expression Builder] : CustOrder」の説明

  22. [Save] をクリックします。

  23. プラス記号のボタンをクリックします。

    図 3-25 に示すように、条件の定義が [Object List] に追加されます

    図 3-25 [Pattern] コンフィグレーション ダイアログ : CustOrder 条件の [Define] タブ

    図 3-25 の説明
    「図 3-25 [Pattern] コンフィグレーション ダイアログ : CustOrder 条件の [Define] タブ」の説明

  24. [Object Name] フィールドに NoApproval と入力します。

  25. 式ビルダ ボタンをクリックし、[Expression Builder] を次のようにコンフィグレーションします (図 3-24 を参照)。

    • [Variables] リストで、[eventType] をダブルクリックします。

    • [Operands] リストで、[=] をダブルクリックします。

    • = 演算子の後に、値 'A' を入力します。

    • 式を丸括弧で囲みます。

    • 式の先頭 (開き括弧の前) に挿入カーソルを合わせます。

    • [Operands] リストで、[NOT] をダブルクリックします。

    図 3-26 [Expression Builder] : NoApproval

    図 3-26 の説明
    「図 3-26 [Expression Builder] : NoApproval」の説明

  26. [Save] をクリックします。

  27. プラス記号のボタンをクリックします。

    条件の定義が [Object List] に追加されます。

  28. [Object Name] フィールドに Shipment と入力します。

  29. 式ビルダ ボタンをクリックし、[Expression Builder] を次のようにコンフィグレーションします (図 3-24 を参照)。

    • [Variables] リストで、[eventType] をダブルクリックします。

    • [Operands] リストで、[=] をダブルクリックします。

    • = 演算子の後に、値 'S' を入力します。

    図 3-27 [Expression Builder] : Shipment

    図 3-27 の説明
    「図 3-27 [Expression Builder] : Shipment」の説明

  30. [Save] をクリックします。

  31. プラス記号のボタンをクリックします。

    [Define] タブは、図 3-28 のようになります。

    図 3-28 [Pattern] コンフィグレーション ダイアログ : [Define] タブの完了

    図 3-28 の説明
    「図 3-28 [Pattern] コンフィグレーション ダイアログ : [Define] タブの完了」の説明

  32. [Measure] タブをクリックします。

    図 3-29 に示すように、[Measure] タブが表示されます。

    図 3-29 [Measure] タブ

    図 3-29 の説明
    「図 3-29 [Measure] タブ」の説明

    [Measure] タブを使用して、MATCH_RECOGNIZE 条件の式を定義し、DEFINE 句の条件に一致するストリーム要素をクエリの SELECT 文に含めることのできる引数にバインドします。

    [Measure] タブを使用して次を指定します。

    • CustOrder.orderid AS orderid

    • CustOrder.amount AS amount

    詳細については、以下を参照してください。

  33. [Object Name] フィールドに orderid と入力します。

  34. 式ビルダ ボタンをクリックし、[Expression Builder] を次のようにコンフィグレーションします (図 3-24 を参照)。

    • [Variables] リストで、[CustOrder.orderid] をダブルクリックします。

    図 3-30 [Expression Builder] : orderid

    図 3-30 の説明
    「図 3-30 [Expression Builder] : orderid」の説明

  35. [Save] をクリックします。

  36. プラス記号のボタンをクリックします。

  37. [Object Name] フィールドに amount と入力します。

  38. 式ビルダ ボタンをクリックし、[Expression Builder] を次のようにコンフィグレーションします (図 3-24 を参照)。

    • [Variables] リストで、[CustOrder.amount] をダブルクリックします。

    図 3-31 [Expression Builder] : amount

    図 3-31 の説明
    「図 3-31 [Expression Builder] : amount」の説明

  39. [Save] をクリックします。

  40. プラス記号のボタンをクリックします。

    [Measure] タブは、図 3-32 のようになります。

    図 3-32 [Measure] タブ : 完了

    図 3-32 の説明
    「図 3-32 [Measure] タブ : 完了」の説明

  41. [Save] をクリックします。

  42. [Select] アイコンをダブルクリックします。

    図 3-33 に示すように、[Select] コンフィグレーション画面が表示されます。

    図 3-33 [Select] コンフィグレーション ダイアログ : [Project] タブ

    図 3-33 の説明
    「図 3-33 [Select] コンフィグレーション ダイアログ : [Project] タブ」の説明

  43. [Project] タブを次のようにコンフィグレーションします。

    • [Select or Input Event Type] プルダウン メニューから [AlertEvent] を選択します。

    • [Select a source] プルダウン メニューから [Orders] を選択します。

  44. [Properties] リストで [orderid] をダブルクリックし、[Select or Input Alias] プルダウン メニューから [orderid] を選択します。

  45. プラス記号のボタンをクリックして [Generated CQL Statement] にプロパティを追加します。

  46. [Properties] リストで [amount] をダブルクリックし、[Select or Input Alias] プルダウン メニューから [amount] を選択します。

  47. プラス記号のボタンをクリックして [Generated CQL Statement] にプロパティを追加します。

  48. [Project Expression] フィールドをクリックして値 "Error - Missing Approval" を入力し、[Select or Input Alias] プルダウン メニューから [alertType] を選択します。

  49. プラス記号のボタンをクリックして [Generated CQL Statement] にプロパティを追加します。

    [Project] タブは、図 3-34 のようになります。

    図 3-34 [Select] コンフィグレーション ダイアログ : [Project] タブの完了

    図 3-34 の説明
    「図 3-34 [Select] コンフィグレーション ダイアログ : [Project] タブの完了」の説明

  50. [Save] をクリックします。

  51. [Save Query] をクリックします。

  52. [Output] アイコンをダブルクリックします。

    図 3-83 に示すように、[Output] コンフィグレーション画面が表示されます。

    図 3-35 [Output] コンフィグレーション ダイアログ

    図 3-35 の説明
    「図 3-35 [Output] コンフィグレーション ダイアログ」の説明

  53. [Output] を次のようにコンフィグレーションします。

    • [Query] を選択します。

    • [Query Name] に Tracking と入力します。

  54. [Inject Rule] をクリックします。

    図 3-57 に示すように、[Inject Rule] 確認ダイアログが表示されます。

    図 3-36 [Inject Rule] 確認ダイアログ

    図 3-36 の説明
    「図 3-36 [Inject Rule] 確認ダイアログ」の説明

  55. [OK] をクリックします。

    Query Wizard で cqlProc プロセッサにルールが追加されます。

  56. [Save] をクリックします。

  57. [CQLRules] タブをクリックします。

    図 3-58 に示すように、[CQLRules] タブが表示されます。

  58. [Query] ラジオ ボタンをクリックします。

    Tracking クエリが表示されていることを確認します。

    図 3-37 Tracking クエリが表示された [CQLRules] タブ

    図 3-37 の説明
    「図 3-37 Tracking クエリが表示された [CQLRules] タブ」の説明

不足イベント クエリをテストするには :

  1. 不足イベント クエリのデータ フィードをシミュレートするには、新しいコマンド ウィンドウを開き、節 3.5「開発環境の設定」の説明に従って環境を設定します。

  2. ORACLE_CEP_HOME\ocep_11.1\utils\load-generator ディレクトリに移動します。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

  3. data-aggre.prop プロパティ ファイルを使用して load generator を実行します。

    1. Windows の場合

      prompt> runloadgen.cmd data-aggre.prop
      
    2. UNIX の場合

      prompt> runloadgen.sh data-aggre.prop
      
  4. Oracle CEP Visualizer で、上ペインにある [ViewStream] ボタンをクリックします。

    図 3-38 に示すように、[Stream Visualizer] 画面が表示されます。

    図 3-38 [Stream Visualizer] : 不足しているイベントの表示

    図 3-38 の説明
    「図 3-38 [Stream Visualizer] : 不足しているイベントの表示」の説明

  5. [Initialize Client] をクリックします。

  6. [Inititalize client] フィールドで /orderalert と入力します。

  7. [Subscribe] をクリックします。

    不足しているイベントが検出されると、生成された AlertEvents を表示する [Received Messages] 領域が更新されます。

3.10.4.2 移動平均クエリの作成

この節では、Oracle CEP Visualizer Query Wizard を使用して、stockProc プロセッサで実行される Oracle CQL 移動平均クエリを作成する方法を示します。

この作業には、2 つのステップがあります。

移動平均クエリのビュー ソースを作成するには :

  1. CQL の Oracle CEP インスタンスがまだ実行されていない場合は、節 3.10.1「CQL のサンプルの実行」の手順に従ってサーバを起動します。

    Oracle CEP Visualizer を使用するにはサーバが実行中である必要があります。

  2. ブラウザで以下の URL を起動します。

    http://host:port/wlevs
    

    host は、Oracle CEP が実行中のコンピュータ名を指します。port は、サーバにコンフィグレーションされている Jetty NetIO ポートを指します (デフォルト値 9002)。

    図 3-39 に示すように、ログオン画面が表示されます

    図 3-39 Oracle CEP Visualizer ログオン画面

    図 3-39 の説明
    「図 3-39 Oracle CEP Visualizer ログオン画面」の説明

  3. ログオン画面で、[User Id] に wlevs、[Password] に wlevs と入力し、[Log In] をクリックします。

    図 3-40 に示すように、Oracle CEP Visualizer ダッシュボードが表示されます。

    図 3-40 Oracle CEP Visualizer ダッシュボード

    図 3-40 の説明
    「図 3-40 Oracle CEP Visualizer ダッシュボード」の説明

    Oracle CEP Visualizer のユーザ インタフェースの詳細については、『Oracle CEP Visualizer ユーザ ガイド』の「Oracle CEP Visualizer のユーザ インタフェースについて」を参照してください。

  4. 右側のペインで、[WLEventServerDomain|NonClusteredServer|Applications] を展開します。

  5. [cql] ノードを選択します。

    図 3-41 に示すように、CQL アプリケーション画面が表示されます。

    図 3-41 CQL アプリケーション画面 : [General] タブ

    図 3-41 の説明
    「図 3-41 CQL アプリケーション画面 : [General] タブ」の説明

  6. [Event Processing Network] タブを選択します。

    図 3-42 に示すように、[Event Processing Network] 画面が表示されます。

    図 3-42 CQL アプリケーション : [Event Processing Network] タブ

    図 3-42 の説明
    「図 3-42 CQL アプリケーション : [Event Processing Network] タブ」の説明

  7. [stockProcessor] Oracle CQL プロセッサ アイコンをダブルクリックします。

    図 3-43 に示すように、Oracle CQL プロセッサ画面が表示されます。

    図 3-43 Oracle CQL プロセッサ : [General] タブ

    図 3-43 の説明
    「図 3-43 Oracle CQL プロセッサ : [General] タブ」の説明

  8. [Query Wizard] タブを選択します。

    図 3-44 に示すように、[Query Wizard] 画面が表示されます。

    図 3-44 Oracle CQL プロセッサ : [Query Wizard] タブ

    図 3-44 の説明
    「図 3-44 Oracle CQL プロセッサ : [Query Wizard] タブ」の説明

    Oracle CQL Query Wizard を使用すると、テンプレートまたは個別の Oracle CQL 構成体から Oracle CQL クエリを作成できます。

    この手順では、個別の Oracle CQL 構成体から Oracle CQL のビューとクエリを作成します。

    詳細については、『Oracle CEP Visualizer ユーザ ガイド』の「Query Wizard を使用した Oracle CQL プロセッサ内のルールの作成」を参照してください。

  9. [CQL Constructs] パレットから [SSource] アイコン (ストリーム ソース) をクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-65 を参照)。

    図 3-45 [Query Wizard] : [SSource]

    図 3-45 の説明
    「図 3-45 [Query Wizard] : [SSource]」の説明

  10. [SSource] アイコンをダブルクリックします。

    図 3-46 に示すように、[SSource] コンフィグレーション画面が表示されます。

    図 3-46 [SSource] コンフィグレーション ダイアログ

    図 3-46 の説明
    「図 3-46 [SSource] コンフィグレーション ダイアログ」の説明

    ビューのソースは stockChannel ストリームです。量が 1000 を超える場合に、このストリームから銘柄イベントを選択します。これが、移動平均クエリのソースになります。

  11. SSource を次のようにコンフィグレーションします。

    • [Type] で [Stream] を選択します。

      ビューのソースは stockChannel ストリームです。

    • [Select a source] プルダウン メニューから [stockChannel] を選択します。

    • [AS] フィールドにエリアス StockVolGt1000 を入力します。

  12. [Save] をクリックします。

  13. [Save Query] をクリックします。

    次に、Oracle CQL のフィルタを追加します。

  14. [CQL Constructs] パレットから [Filter] アイコンをクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-47 を参照)。

    図 3-47 [Query Wizard] : [Filter]

    図 3-47 の説明
    図 3-47 [Query Wizard] : [Filter]

  15. [SSource] アイコンをクリックして [Window] アイコンにドラッグし、Oracle CQL の構成体を接続します (図 3-48 を参照)。

    図 3-48 [SSource] と [Filter] アイコンの接続

    図 3-48 の説明
    「図 3-48 [SSource] と [Filter] アイコンの接続」の説明

  16. [Filter] アイコンをダブルクリックします。

    図 3-49 に示すように、[Filter] コンフィグレーション画面が表示されます。

    図 3-49 [Filter] コンフィグレーション ダイアログ

    図 3-49 の説明
    図 3-49 [Filter] コンフィグレーション ダイアログ

  17. 式ビルダ ボタンをクリックします。

    図 3-50 に示すように、[Expression Builder] ダイアログが表示されます。

    図 3-50 [Filter] の [Expression Builder]

    図 3-50 の説明
    「図 3-50 [Filter] の [Expression Builder]」の説明

  18. [Expression Builder] を次のようにコンフィグレーションします。

    • [Select an Event Type] プルダウン メニューから [StockVolGt100] を選択し、この式で使用できる変数を定義します。

    • [symbol] 変数をダブルクリックし、[Expression Builder] フィールドに追加します。

    • [Operands] リストの [>] をダブルクリックし、[Expression Builder] フィールドに追加します。

    • > 演算子の後に、値 1000 を入力します。

  19. [Save] をクリックします。

  20. [Add Filter] をクリックします。

    [Query Wizard] で [Generated CQL Statement] に式が追加されます (図 3-51 を参照)。

    図 3-51 [Filter] コンフィグレーション ダイアログ : フィルタの追加後

    図 3-51 の説明
    「図 3-51 [Filter] コンフィグレーション ダイアログ : フィルタの追加後」の説明

  21. [Save] をクリックします。

  22. [Save Query] をクリックします。

    次に、SELECT 文を追加します。

  23. [CQL Constructs] パレットから [Select] アイコンをクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-52 を参照)。

    図 3-52 [Query Wizard] : [Select]

    図 3-52 の説明
    「図 3-52 [Query Wizard] : [Select]」の説明

  24. [Filter] アイコンをクリックし、[Select] アイコンにドラッグして、Oracle CQL の構成体を接続します。

  25. [Select] アイコンをダブルクリックします。

    図 3-53 に示すように、[Select] コンフィグレーション画面が表示されます。

    図 3-53 [Select] コンフィグレーション ダイアログ

    図 3-53 の説明
    「図 3-53 [Select] コンフィグレーション ダイアログ」の説明

    StockVolGt1000 ストリームから pricesymbol、および volume を選択します。

  26. [Select] を次のようにコンフィグレーションします。

    • [Select a source] プルダウン メニューから [StockVolGt1000] を選択します。

    • [price] プロパティを選択し、プラス記号のボタンをクリックします。

      [Query Wizard] で [Generated CQL Statement] にプロパティが追加されます。

    • [symbol] および [volume] プロパティでも同様に繰り返します。

    [Select] コンフィグレーション ダイアログは、図 3-54 のようになります。

    図 3-54 [Select] コンフィグレーション ダイアログ : プロパティの選択

    図 3-54 の説明
    「図 3-54 [Select] コンフィグレーション ダイアログ : プロパティの選択」の説明

  27. [Save] をクリックします。

  28. [Save Query] をクリックします。

    最後に、[Output] を追加します。

  29. [CQL Constructs] パレットから [Output] アイコンをクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-55 を参照)。

    図 3-55 [Query Wizard] : [Output]

    図 3-55 の説明
    「図 3-55 [Query Wizard] : [Output]」の説明

  30. [Select] アイコンをクリックし、[Output] アイコンにドラッグして、Oracle CQL の構成体を接続します。

  31. [Output] アイコンをダブルクリックします。

    図 3-56 に示すように、[Output] コンフィグレーション画面が表示されます。

    図 3-56 [Output] コンフィグレーション ダイアログ

    図 3-56 の説明
    「図 3-56 [Output] コンフィグレーション ダイアログ」の説明

  32. [Output] を次のようにコンフィグレーションします。

    • [View] を選択します。

    • [View Name] を StockVolGt1000 にコンフィグレーションします。

    • [View Schema] フィールドの内容を削除します。

      Oracle CEP サーバで自動的にビュー スキーマが定義されるようにします。

  33. [Inject Rule] をクリックします。

    図 3-57 に示すように、[Inject Rule] 確認ダイアログが表示されます。

    図 3-57 [Inject Rule] 確認ダイアログ

    図 3-57 の説明
    「図 3-57 [Inject Rule] 確認ダイアログ」の説明

  34. [OK] をクリックします。

    Query Wizard で cqlProc プロセッサにルールが追加されます。

  35. [Save] をクリックします。

  36. [CQLRules] タブをクリックします。

    図 3-58 に示すように、[CQLRules] タブが表示されます。

  37. [View] ラジオ ボタンをクリックします。

    StockVolGt1000 ビューが表示されていることを確認します。

    図 3-58 ビュー StockVolGt1000 が表示された [CQLRules] タブ

    図 3-58 の説明
    「図 3-58 ビュー StockVolGt1000 が表示された [CQLRules] タブ」の説明

ビュー ソースを使用して移動平均クエリを作成するには :

  1. CQL の Oracle CEP インスタンスがまだ実行されていない場合は、節 3.10.1「CQL のサンプルの実行」の手順に従ってサーバを起動します。

    Oracle CEP Visualizer を使用するにはサーバが実行中である必要があります。

  2. ブラウザで以下の URL を起動します。

    http://host:port/wlevs
    

    host は、Oracle CEP が実行中のコンピュータ名を指します。port は、サーバにコンフィグレーションされている Jetty NetIO ポートを指します (デフォルト値 9002)。

    図 3-59 に示すように、ログオン画面が表示されます。

    図 3-59 Oracle CEP Visualizer ログオン画面

    図 3-59 の説明
    「図 3-59 Oracle CEP Visualizer ログオン画面」の説明

  3. ログオン画面で、[User Id] に wlevs、[Password] に wlevs と入力し、[Log In] をクリックします。

    図 3-40 に示すように、Oracle CEP Visualizer ダッシュボードが表示されます。

    図 3-60 Oracle CEP Visualizer ダッシュボード

    図 3-60 の説明
    「図 3-60 Oracle CEP Visualizer ダッシュボード」の説明

    Oracle CEP Visualizer のユーザ インタフェースの詳細については、『Oracle CEP Visualizer ユーザ ガイド』の「Oracle CEP Visualizer のユーザ インタフェースについて」を参照してください。

  4. 右側のペインで、[WLEventServerDomain|NonClusteredServer|Applications] を展開します。

  5. [cql] ノードを選択します。

    図 3-41 に示すように、CQL アプリケーション画面が表示されます。

    図 3-61 CQL アプリケーション画面 : [General] タブ

    図 3-61 の説明
    「図 3-61 CQL アプリケーション画面 : [General] タブ」の説明

  6. [Event Processing Network] タブを選択します。

    図 3-42 に示すように、[Event Processing Network] 画面が表示されます。

    図 3-62 CQL アプリケーション : [Event Processing Network] タブ

    図 3-62 の説明
    「図 3-62 CQL アプリケーション : [Event Processing Network] タブ」の説明

  7. [stockProcessor] Oracle CQL プロセッサ アイコンをダブルクリックします。

    図 3-43 に示すように、Oracle CQL プロセッサ画面が表示されます。

    図 3-63 Oracle CQL プロセッサ : [General] タブ

    図 3-63 の説明
    「図 3-63 Oracle CQL プロセッサ : [General] タブ」の説明

  8. [Query Wizard] タブを選択します。

    図 3-44 に示すように、[Query Wizard] 画面が表示されます。

    図 3-64 Oracle CQL プロセッサ : [Query Wizard] タブ

    図 3-64 の説明
    「図 3-64 Oracle CQL プロセッサ : [Query Wizard] タブ」の説明

    Oracle CQL Query Wizard を使用すると、テンプレートまたは個別の Oracle CQL 構成体から Oracle CQL クエリを作成できます。

    この手順では、個別の Oracle CQL 構成体から Oracle CQL のビューとクエリを作成します。

    詳細については、『Oracle CEP Visualizer ユーザ ガイド』の「Query Wizard を使用した Oracle CQL プロセッサ内のルールの作成」を参照してください。

  9. [CQL Constructs] パレットから [SSource] アイコン (ストリーム ソース) をクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-65 を参照)。

    図 3-65 [Query Wizard] : 移動平均クエリの [SSource]

    図 3-65 の説明
    「図 3-65 [Query Wizard] : 移動平均クエリの [SSource]」の説明

  10. [SSource] アイコンをダブルクリックします。

    図 3-66 に示すように、[SSource] コンフィグレーション画面が表示されます。

    図 3-66 [SSource] コンフィグレーション ダイアログ : 移動平均クエリ

    図 3-66 の説明
    「図 3-66 [SSource] コンフィグレーション ダイアログ : 移動平均クエリ」の説明

  11. [SSource] ダイアログを次のようにコンフィグレーションします。

    • [Type] で [View] を選択します。

    • [Select a source] プルダウン メニューから [StockVolGt1000] を選択します。

  12. [Save] をクリックします。

  13. [Save Query] をクリックします。

  14. [CQL Constructs] パレットから [Window] アイコンをクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-67 を参照)。

    図 3-67 [Query Wizard] : 移動平均クエリの [Window]

    図 3-67 の説明
    「図 3-67 [Query Wizard] : 移動平均クエリの [Window]」の説明

  15. [SSource] アイコンをクリックし、[Window] アイコンにドラッグして、Oracle CQL の構成体を接続します。

  16. [Window] アイコンをダブルクリックします。

    図 3-66 に示すように、[SSource] コンフィグレーション画面が表示されます。

    図 3-68 [Window] コンフィグレーション ダイアログ : 移動平均クエリ

    図 3-68 の説明
    「図 3-68 [Window] コンフィグレーション ダイアログ : 移動平均クエリ」の説明

    symbol で分割された、最新の 2 件のイベントに対するスライド枠を作成します。

  17. [Window] ダイアログを次のようにコンフィグレーションします。

    • [Source Property List] の [symbol] を選択し、[Partition List] に追加します。

    • [Type] で [Partition] を選択します。

    • [Row Based] を選択し、[Row Based] フィールドに 2 と入力します。

  18. [Add Window] をクリックします。

    [Query Wizard] で [Generated CQL Statement] にスライド枠が追加されます (図 3-69 を参照)。

    図 3-69 [Window] コンフィグレーション ダイアログ : ウィンドウの追加後

    図 3-69 の説明
    「図 3-69 [Window] コンフィグレーション ダイアログ : ウィンドウの追加後」の説明

  19. [Save] をクリックします。

  20. [Save Query] をクリックします。

  21. [CQL Constructs] パレットから [Select] アイコンをクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-67 を参照)。

    図 3-70 [Query Wizard] : 移動平均クエリの [Select]

    図 3-70 の説明
    「図 3-70 [Query Wizard] : 移動平均クエリの [Select]」の説明

  22. [Window] アイコンをクリックし、[Select] アイコンにドラッグして、Oracle CQL の構成体を接続します。

  23. [Select] アイコンをダブルクリックします。

    図 3-66 に示すように、[Select] コンフィグレーション画面が表示されます。

    図 3-71 [Select] コンフィグレーション ダイアログ : ソース プロパティ symbol の選択

    図 3-71 の説明
    「図 3-71 [Select] コンフィグレーション ダイアログ : ソース プロパティ symbol の選択」の説明

  24. [Select a source] プルダウン メニューから [StockVolGt1000] を選択します。

    これは、移動平均クエリのソースとなる、前の手順で作成したビューです (「移動平均クエリのビュー ソースを作成するには :」を参照)。

  25. [Select or Input Event Type] プルダウン メニューから [MovingAvgEvent] を選択します。

    これは、移動平均クエリで生成される出力イベントです。ソース イベントのプロパティをこの出力イベントにマップします。

  26. [Source Properties] リストで、[symbol] を選択します。

    図 3-72 に示すように、選択されたソース プロパティが [Project Expression] に追加されます。

    図 3-72 [Select] コンフィグレーション ダイアログ : ソース プロパティ symbol の選択

    図 3-72 の説明
    「図 3-72 [Select] コンフィグレーション ダイアログ : ソース プロパティ symbol の選択」の説明

    ここでは、ソース プロパティ symbol を出力イベント プロパティ symbol にそのままマップします。

  27. [AS] フィールドの横のプルダウン メニューをクリックし、[symbol] を選択します。

  28. プラス記号のボタンをクリックします。

    [Generated CQL Statement] のプロジェクト式にソース プロパティが追加されます (図 3-73 を参照)。

    図 3-73 [Select] コンフィグレーション ダイアログ : ソース プロパティ symbol の出力イベント プロパティへのマップ

    図 3-73 の説明
    「図 3-73 [Select] コンフィグレーション ダイアログ : ソース プロパティ symbol の出力イベント プロパティへのマップ」の説明

  29. [Source Properties] リストで、[price] を選択します。

    図 3-74 に示すように、選択されたソース プロパティが [Project Expression] に追加されます。

    図 3-74 [Select] コンフィグレーション ダイアログ : ソース プロパティ price の選択

    図 3-74 の説明
    「図 3-74 [Select] コンフィグレーション ダイアログ : ソース プロパティ price の選択」の説明

    ここでは、出力イベントにマップする前にソース プロパティ price を処理する必要があります。

  30. 式ビルダ ボタンをクリックします。

    [Expression Builder] ダイアログが図 3-75 のように表示されます。

    図 3-75 [Expression Builder] ダイアログ

    図 3-75 の説明
    「図 3-75 [Expression Builder] ダイアログ」の説明

  31. [Select a function type] プルダウン メニューから [Aggregate Functions] を選択します。

    Oracle CQL で提供される集約関数のリストが表示されます。[AVG] 関数を使用します。

  32. [Expression Builder] フィールドで、[StockVolGt1000.price] を選択します。

  33. [AVG] 関数をダブルクリックします。

    図 3-76 に示すように、AVG() 関数が [Expression Builder] フィールドで選択した部分に適用されます。

    図 3-76 [Expression Builder] : AVG 関数の適用

    図 3-76 の説明
    「図 3-76 [Expression Builder] : AVG 関数の適用」の説明

  34. [Save] をクリックします。

    図 3-77 に示すように、[Project Expression] フィールドに式が追加されます。

    図 3-77 [Select] コンフィグレーション ダイアログ : 式の追加

    図 3-77 の説明
    「図 3-77 [Select] コンフィグレーション ダイアログ : 式の追加」の説明

  35. [As] フィールドの横のプルダウン メニューをクリックし、[movingAvgPrice] を選択します。

  36. プラス記号のボタンをクリックします。

    図 3-78 に示すように、[Generated CQL Statement] のプロジェクト式にソース プロパティが追加されます。

    図 3-78 [Select] コンフィグレーション ダイアログ : ソース プロパティ price の出力イベント プロパティへのマップ

    図 3-78 の説明
    「図 3-78 [Select] コンフィグレーション ダイアログ : ソース プロパティ price の出力イベント プロパティへのマップ」の説明

  37. [Validate] をクリックします。

    図 3-79 に示すように、検証エラーのダイアログが表示されます。

    図 3-79 検証エラー : GROUP BY

    図 3-79 の説明
    「図 3-79 検証エラー : GROUP BY」の説明

    分割を行うため、GROUP BY 句を指定する必要があります。

  38. [Group] タブを選択します。

    図 3-80 に示すように [Group] タブが表示されます。

    図 3-80 [Group] タブ

    図 3-80 の説明
    「図 3-80 [Group] タブ」の説明

  39. [Group] タブを次のようにコンフィグレーションします。

    • [Select a source] プルダウン メニューから [StockVolGt1000] を選択します。

    • [Properties] リストから [symbol] を選択します。

    • プラス記号のボタンをクリックします。

    図 3-81 に示すように、symbol プロパティが GROUP BY 句に追加されます。

    図 3-81 [Group] タブ : symbol グループ化プロパティの追加

    図 3-81 の説明
    「図 3-81 [Group] タブ : symbol グループ化プロパティの追加」の説明

  40. [Save] をクリックします。

  41. [Save Query] をクリックします。

    次に、クエリを出力に接続します。

  42. [CQL Constructs] パレットから [Output] アイコンをクリックしてドラッグし、[Query Wizard] キャンバスの任意の場所にドロップします (図 3-82 を参照)。

    図 3-82 [Query Wizard] : [Output]

    図 3-82 の説明
    「図 3-82 [Query Wizard] : [Output]」の説明

  43. [Select] アイコンをクリックし、[Output] アイコンにドラッグして、Oracle CQL の構成体を接続します。

  44. [Output] アイコンをダブルクリックします。

    図 3-83 に示すように、[Output] コンフィグレーション画面が表示されます。

    図 3-83 [Output] コンフィグレーション ダイアログ

    図 3-83 の説明
    「図 3-83 [Output] コンフィグレーション ダイアログ」の説明

  45. [Output] を次のようにコンフィグレーションします。

    • [Query] を選択します。

    • [Query Name] に MovingAverage と入力します。

  46. [Inject Rule] をクリックします。

    図 3-57 に示すように、[Inject Rule] 確認ダイアログが表示されます。

    図 3-84 [Inject Rule] 確認ダイアログ

    図 3-84 の説明
    「図 3-84 [Inject Rule] 確認ダイアログ」の説明

  47. [OK] をクリックします。

    Query Wizard で cqlProc プロセッサにルールが追加されます。

  48. [Save] をクリックします。

  49. [CQLRules] タブをクリックします。

    図 3-58 に示すように、[CQLRules] タブが表示されます。

  50. [Query] ラジオ ボタンをクリックします。

    MovingAverage クエリが表示されていることを確認します。

    図 3-85 ビュー MovingAverage が表示された [CQLRules] タブ

    図 3-85 の説明
    「図 3-85 ビュー MovingAverage が表示された [CQLRules] タブ」の説明

移動平均クエリをテストするには :

  1. 移動平均クエリのデータ フィードをシミュレートするには、新しいコマンド ウィンドウを開き、節 3.5「開発環境の設定」の説明に従って環境を設定します。

  2. ORACLE_CEP_HOME\ocep_11.1\utils\load-generator ディレクトリに移動します。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。

  3. stockData.prop プロパティ ファイルを使用して load generator を実行します。

    1. Windows の場合

      prompt> runloadgen.cmd stockData.prop
      
    2. UNIX の場合

      prompt> runloadgen.sh stockData.prop
      
  4. Oracle CEP Visualizer で、上ペインにある [ViewStream] ボタンをクリックします。

    図 3-38 に示すように、[Stream Visualizer] 画面が表示されます。

    図 3-86 [Stream Visualizer] : 移動平均クエリの出力表示

    図 3-86 の説明
    「図 3-86 [Stream Visualizer] : 移動平均クエリの出力表示」の説明

  5. [Initialize Client] をクリックします。

  6. [Inititalize client] フィールドに /alertOutput と入力します。

  7. [Subscribe] をクリックします。

    移動平均クエリによってイベントが出力されると、Oracle CEP では生成されたイベントを表示する [Received Messages] 領域が更新されます。