ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Event Processing開発者ガイド
11gリリース1 (11.1.1.7) for Eclipse
B61654-06
  目次へ移動
目次

前
 
次
 

8 ウォークスルー: 単純なアプリケーションのアセンブル

この章では、単純なアプリケーションを作成するウォークスルーを使用したOracle Event Processingアプリケーションの作成方法について説明します。途中で、主要な概念の概要を示します。

この章の内容は次のとおりです。

8.1 単純なアプリケーションのウォークスルーの概要

このウォークスルーは、Eclipse IDEを使用してOracle Event Processingアプリケーションを作成する基本について説明します。主要なOracle Event Processing概念の調査を目的とし、それぞれ詳細に調査できる出発点となります。

このウォークスルーで作成するアプリケーションは、単純な株式取引アラート・システムをモデル化します。アプリケーションは、株式取引のデータのサンプルを受信し、特定の特性のデータを調査し、一部のデータをコンソールに出力します。次の図は、アプリケーションの終了したEPNダイアグラムを示します。

tradereport_finishedepn.pngの説明が続きます
図tradereport_finishedepn.pngの説明

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

このウォークスルーは、8.2項「ワークスペースおよびプロジェクトの作成」で開始します。

8.1.1 このウォークスルーの主要な概念

このウォークスルーでは、通常作成するOracle Event Processingアプリケーションの一部である次の概念について説明します。

  • プロジェクト・タイプ、イベント処理ネットワークを設計するグラフィカル・エディタおよびプロジェクト固有の構成ファイルの検証サポートを含む、Oracle Event Processingアプリケーションの作成を容易にするよう設計されたIDE機能。

  • イベント処理ネットワーク(EPN)としてのアプリケーションの作成、アプリケーションを通過する場合にストリーミング・データを受信し、そのデータを操作するアプリケーションの動作をモデル化するコア設計構築。

  • イベントをモデル化するイベント・タイプの設計、アプリケーション内のコードとともに使用するイベント・データの正規化。

  • アダプタを使用したストリーミング・データのソースを含む外部コンポーネントとのやり取りの管理。

  • イベント処理ネットワーク内のイベントを送受信できるJavaクラスの実装。

  • Oracle Continuous Query Language (Oracle CQL)を使用したイベント内の特定のプロパティに基づいたイベントのフィルタ処理。

8.1.2 開始する前に

Oracle Event ProcessingおよびEclipse IDEをインストールする必要があります。また、Oracle Event Processingに付属するプラグインとともにEclipse IDEを更新する必要があります。

Oracle Event Processingに固有の機能を説明しますが、このウォークスルーは基本的なJavaプログラミングを理解していることを前提とします。

詳細については、次のトピックを参照してください。

8.2 ワークスペースおよびプロジェクトの作成

この最初の手順では、IDEを使用してアプリケーションを開発するワークスペースおよびプロジェクトを作成します。Oracle Event Processingアプリケーションの開発を容易にするため、IDEはOracle Event Processingアプリケーション・プロジェクト・タイプを提供します。このプロジェクト・タイプには、アプリケーション固有のコードの書込みを容易にする通常のOracle Event Processingアプリケーションで必要なアーティファクトおよび依存性が含まれます。

Oracle Event Processingサーバーを実行するベスト・プラクティスの選択肢であるJRockit JREの場所を認識するためにIDEプリファレンスをすでに構成している必要があります。

ウォークスルー・ワークスペースおよびTradeReportプロジェクトの作成

  1. Eclipse IDEを起動します。

  2. ワークスペースを選択するプロンプトが表示されたら、walkthroughsと呼ばれるワークスペースを作成します。

  3. 「ファイル」メニューから、「新規」>「プロジェクト」を選択して、新しいプロジェクトの作成を開始します。

  4. 「新規プロジェクト」ダイアログで、Oracle Event Processingを展開し、Oracle Event Processingアプリケーション・プロジェクト「次」の順にクリックします。

    newproject_oep.pngの説明が続きます
    図newproject_oep.pngの説明

  5. 新規Oracle Event Processingアプリケーション・プロジェクト・ダイアログの「プロジェクト名」ボックスで、TradeReportを入力します。

    「デフォルトのロケーションを使用」チェック・ボックスを選択したままにして、作成したワークスペースの場所に新しいプロジェクトを作成します。

  6. 「ターゲット・ランタイム」で、ランタイムがドロップダウンに表示されない場合は、次の手順を実行します。

    1. 「新規」ボタンをクリックします。

    2. 新しいサーバー・ランタイム環境ダイアログで、「Oracle」を展開し、Oracle Event Processing v11.1を選択して、「次」をクリックします。

    3. 「次へ」をクリックします。

    4. 新しいOracle Event Processing v11.1ランタイムで、「Oracle Middlewareホーム・ディレクトリ」ボックスの横にある「参照」をクリックします。

    5. フォルダの参照ダイアログで、Middlewareホーム・ディレクトリを特定して、「OK」をクリックします。

      デフォルトでは、Middlewareホーム・ディレクトリはORACLE_HOME/Middlewareにあります。

    6. JREドロップダウンで、JRockit JREを選択します。

      Oracle Event Processingサーバーは、JRockit JREとともに使用するために最適化されます。リストからJRockit JREを使用できない場合、次の手順を使用してOracle Event Processingに付属するJREを特定します。

      1. インストールされているJREのプリファレンスリンクをクリックします。

      2. 「プリファレンス」ダイアログで、インストールされているJREリストの横にある「追加」ボタンをクリックします。

      3. JREの追加ダイアログで、インストールされたJREタイプの下の標準VMを選択して、「次」をクリックします。

      4. JREホームボックスの横にある「ディレクトリ」ボタンをクリックして、JRockit JREの場所を参照します。

      5. フォルダの参照ダイアログで、Middlewareホーム・ディレクトリ、jrockit_160_29ディレクトリの順に展開し、JREディレクトリ、「OK」の順にクリックします。

      6. JREの追加ダイアログがJREホーム・ディレクトリ、名前およびシステム・ライブラリを表示した後、ダイアログの「終了」ボタンをクリックします。

        tradereport_jredef.pngの説明が続きます
        図tradereport_jredef.pngの説明

      7. 「プリファレンス」ダイアログで、追加したJREのチェック・ボックスを選択して、「OK」をクリックします。

      8. JREドロップダウンから新しいサーバー・ランタイム環境ダイアログで、追加したJREを選択します。

    7. 「終了」をクリックします。

  7. 新規Oracle Event Processingアプリケーション・プロジェクトダイアログで、Oracle Event Processing v11.1ターゲット・ランタイムを選択したままにして、「次」をクリックします。

  8. Oracle Event Processingアプリケーションのコンテンツで、作成するプロジェクトのプロパティを確認します。

    tradereport_bundleprop.pngの説明が続きます
    図tradereport_bundleprop.pngの説明

  9. 「終了」をクリックします。

プロジェクトを作成した後、IDEは、作成するイベント処理ネットワークの空のエディタとともにプロジェクトのアーティファクトの階層リストを含むプロジェクト・エクスプローラを表示します。

イベント処理ネットワーク(EPN)は、Oracle Event Processingアプリケーションの中心の設計上の概念です。EPNは、ステージ間でイベントを移動するパスとともに、アプリケーションを構成するステージと呼ばれるコンポーネントを表します。アプリケーションを開発する場合、EPNエディタは追加するステージおよびステージ間の接続を表示します。概念的に、イベント・データは左側からアプリケーションに届き、右側にステージ間を移動します。

EPNエディタで示す設計は、EPNの基礎となる構成のグラフィカル表現です。EPNエディタを介してステージまたは接続を追加する場合、IDEは、構成XMLを基礎となるアセンブリ・ファイルに書き込みます(XMLファイルを直接編集してEPNエディタのグラフィカル設計が更新されるのと同様)。EPNアセンブリ・ファイルには、各EPNステージのデフォルト構成が含まれます。これは、アプリケーションを再デプロイすることなく実行時にサーバーで変更できないデフォルト構成です。実行時に編集できる構成では、後で示すように別の種類の構成ファイルを使用できます。


注意:

EPNアセンブリ・ファイルのXMLスキーマは、Springフレームワーク構成ファイルの拡張です。Springの詳細は、Spring Webサイトを参照してください。


プロジェクト・エクスプローラを確認してください。次の図に示されているようなプロジェクト階層があります。

tradereport_projexp.pngの説明が続きます
図tradereport_projexp.pngの説明

IDEを使用したことがある場合は、このほとんどの内容を理解できます。Javaソース・コード、JREシステム・ライブラリおよび作成出力の通常の場所以外に、次も確認します。

プロジェクトを作成したので、8.3項「イベント・データを移動するイベント・タイプの作成」で、イベント処理ネットワークのアセンブルを開始します。アプリケーションのロジックの着信イベント・データを表すイベント・タイプの作成を開始します。

8.3 イベント・データを移動するイベント・タイプの作成

Oracle Event Processingアプリケーションは、イベントを受信、処理および送信します。イベントは、ほぼすべての構造化された形式になる可能性があるイベント・データとして開始します。イベント・データはraw形式でアプリケーションに到着し、定義するイベント・タイプにバインドされます。固有のイベント・タイプを使用すると、Oracle CQL問合せ、Javaコードなどを含むアプリケーションの残りのコードのデータの処理を予測できます。(変換はアダプタによって実行されます。詳細は後で説明します。)

そのため、イベント処理ネットワークを定義する早期タスクは、ソースからのデータの構造を明確にし、EPN内で使用するためにデータを変換する形式を定義します。この項では、株式取引データの例の構造から処理してデータがバインドされるイベント・タイプを定義します。

ここで作成するアプリケーションの場合、サンプルの着信イベント・データはカンマ区切り値の行として到着します。各行には、発生した特定の対象(ここでは株式取引)のデータが含まれます。値の構造は行ごとに一貫性があります。いくつかの行の例を次に示します。

IBM,15.5,3.333333333,3000,15
SUN,10.8,-1.818181818,5000,11
ORCL,14.1,0.714285714,6000,14
GOOG,30,-6.25,4000,32
YHOO,7.8,-2.5,1000,8

CSVファイルでラベル付けされていませんが、次のように値をラベル付けできます。

stock symbol, price, percentage change, volume of shares purchased, last price

着信取引イベント・データの構造です。アプリケーションのデータを処理する(問合せ、フィルタ処理、計算など)には、データをそれらの機能の実行をサポートする新しい構造に割り当てる必要があります。特に、新しい構造は、特定のタイプのプロパティを指定する機能を持ちます。タイプが予測される値と一致すると、コードの値の処理が容易になります。

データおよびラベルの例を確認すると、次のJavaタイプのプロパティにバインドされる各行の各値を想定できます。

StringDoubleDoubleIntegerDouble

Oracle Event Processingは、新しいイベント・タイプのベースにできるいくつかの形式をサポートします。これらには、JavaBeanクラス、タプルおよびjava.util.Mapインスタンスが含まれます。JavaBeanクラスは新しいイベント・タイプのベスト・プラクティス・タイプなので、ここで取引イベントのために使用します。

使用したことがない場合、JavaBeansが予測できるように設計された特定の標準ルールに従うJavaクラスであることがわかります。通常、クラスに対して内部にデータ(取引イベントの銘柄記号など)を保持する変数およびデータをクラスの外側のコードで取得または設定できるメソッドを提供します。"setSymbol"や"getSymbol"などの予測できる名前でメソッドに名前を付けると、クラスの外側のコードにクラスの内側のデータを使用する予測可能な方法を提供します。たとえば、Oracle Event Processingで着信イベント・データをイベント・タイプにバインドする必要がある場合、イベント・タイプJavaBeanの新しいインスタンスを作成し、Beanの"set"メソッドを使用してクラスの内側の適切な場所のデータを設定します。書き込む予定のJavaコードやOracle CQLコードなどのアプリケーションの後のコードは、Beanの"get"メソッドを呼び出して再度データを抽出できます。

次の項では、イベント・タイプの背後にあるコードとしてJavaBeanを作成し、イベント・タイプを構成してJavaBeanを使用します。

TradeEvent JavaBeanの作成

この項では、着信取引イベント・データのイベント・タイプとして使用されるTradeEvent JavaBeanクラスを作成します。

  1. IDEで、srcディレクトリを右クリックして、「新規」>「クラス」をクリックします。

  2. 新規Javaクラスダイアログの「パッケージ」ボックスで、com.oracle.oep.example.tradereportを入力します。

  3. 「名前」ボックスで、TradeEventを入力します。

    tradereport_tradeevt.pngの説明が続きます
    図tradereport_tradeevt.pngの説明

  4. 「終了」をクリックします。

    TradeEventクラスの宣言とともにTradeEvent.javaソース・コード・ウィンドウが表示されます。

  5. TradeEventクラスのTradeEventクラス宣言の下で、次の例に示すように必要な各プロパティのプライベート変数を追加します。

    public class TradeEvent {
        // One variable for each field in the event data.
        private String symbol;
        private Double price;
        private Double lastPrice;
        private Double percChange;
        private Integer volume;
    }
    
  6. すべての変数のコードを選択して、「ソース」メニューをクリックして、ゲッターおよびセッターの生成をクリックします。

    tradereport_genaccess.pngの説明が続きます
    図tradereport_genaccess.pngの説明

  7. ゲッターおよびセッターの生成ダイアログで、選択した各変数のチェック・ボックス(つまり、すべて)を選択します。

  8. 挿入ポイントドロップダウンで、最後のメンバーを選択します。

    tradereport_gendialog.pngの説明が続きます
    図tradereport_gendialog.pngの説明

  9. 「OK」をクリックします。

    TradeEventソース・コード・ウィンドウで、追加した変数の値を取得または設定するメソッドのペアを作成したことを確認します。

  10. TradeEvent.javaファイルを保存して、コード・ウィンドウを閉じます。

これで、JavaBeanの作成は完了です(少なくともこの場合)。次の手順は、JavaBeanをイベント・タイプとして使用することをアプリケーションに通知します。

TradeEventイベント・タイプの構成

この項では、TradeEvent JavaBeanをイベント・タイプとして使用することをTradeReportアプリケーションに通知します。

  1. IDEで、空のTradeReport EPNエディタが開いていることを確認します。ウィンドウの上部にあるタブには、EPN: TradeReportが表示されます。

  2. デザイナ・ウィンドウの下で、「イベント・タイプ」タブをクリックします。

  3. 「イベント・タイプの定義」で、TradeReport.context.xmlを選択します。これがEPN設計の基礎となるEPNアセンブリ・ファイルです。

    これは、プロジェクト・エクスプローラのMETA-INF/springディレクトリで確認したファイルでもあります。構成するイベント・タイプがそのファイルで定義されていることを確認するため、ここで選択します。

  4. 「イベント・タイプの定義」で、プラス記号をクリックして新しいイベント定義を追加します。

  5. 作成されたnewEventエントリをクリックします。

  6. 「イベント・タイプの詳細」「タイプ名」ボックスで、イベント・タイプ名をTradeEventに変更します。(JavaBeanクラスと同じにする必要はありませんが、同じ名前を使用するとわかりやすくなります。)

  7. 「Java Beanで定義されたプロパティ」オプションを選択します。他のオプションは、タプルとしてイベントを定義するために使用されます。

  8. 「クラス」ボックスで、作成したJavaBeanクラスの名前のcom.oracle.oep.example.tradereport.TradeEventを入力します。

    tradereport_eventdef.pngの説明が続きます
    図tradereport_eventdef.pngの説明

  9. イベント・タイプ定義で更新されたイベント・タイプ名を持つファイルを保存します。

EPNアセンブリ・ファイルに追加した内容に関心がある場合は、ファイルを開きます。「TradeReport」>「META-INF」>「spring」>「TradeReport.context.xml」のプロジェクト・エクスプローラにあります。追加した部分は、次のように表示されます(エディタ・ウィンドウの下にある「ソース」タブをクリックする必要がある場合があります)。

<wlevs:event-type-repository>
    <wlevs:event-type type-name="TradeEvent">
        <wlevs:class>com.oracle.oep.example.tradereport.TradeEvent</wlevs:class>
    </wlevs:event-type>
</wlevs:event-type-repository>

コードが示すように、Oracle Event Processingはイベント・タイプ・リポジトリでイベント・タイプを管理します。定義したTradeEventイベント・タイプは、作成したTradeEvent JavaBeanクラスにマップされます。

イベント・タイプを定義および構成したので、アプリケーションに着信イベント・データの監視方法を通知する必要があります。データを作成したTradeEventタイプに割り当てることを指定する必要もあります。8.4項「イベント・データを受信する入力アダプタの追加」で追加するアダプタを使用して、これらの処理を実行します。

8.4 イベント・データを受信する入力アダプタの追加

作成するイベント処理ネットワークを試行する前に、イベント・データが通過する方法を作成する必要があります。Oracle Event Processingアプリケーションで、アダプタは、外部コンポーネント間のトラフィックおよびイベント処理ネットワークの間隔を管理します。外部ソースから到着するイベント・データはアダプタを介してアプリケーションに届き、外部コンポーネントまたはアプリケーションに移動する途中でアプリケーションを離れるイベント・データはアダプタを介して終了します。デフォルトでは、Oracle Event Processingには、3つの異なる種類の外部コンポーネント(Java Message Service (JMS)宛先、HTTPパブリッシュ・サブスクライブ・サーバーおよびCSVファイル)のアダプタが含まれます。

csvgenと呼ばれるCSVファイルのアダプタは、開発段階のコードで試行する場合に役立ちます。より充実した実際のイベント・データ・ソース用のアダプタを定義するタスクの軽量の選択肢です。固有のアプリケーションで、EPNを開始してロジックの一部を定義するまで、csvgenアダプタが使いやすい場合があります。

csvgenアダプタのロジックは、CSVファイルから読み取られるイベント・データを定義したイベント・タイプに変換する方法を認識します。Oracle Event Processingに付属するロード・ジェネレータ・ユーティリティと組み合せてcsvgenアダプタを使用します(ロード・ジェネレータの詳細は、このウォークスルーの後半で説明します)。csvgenアダプタの実装コードはOracle Event Processingにデフォルトで含まれるため、実行する必要がある手順は、構成コードを追加してEPNのステージとしてアダプタを宣言し、いくつかのプロパティを設定するだけです。

コードを追加したCSVアダプタの構成

この項では、イベント処理ネットワークのCSVアダプタの場所を作成する構成コードを追加します。コードを使用して、アダプタのランタイム動作を構成するために必要ないくつかのアダプタ・プロパティも設定します。アダプタがEPNに含まれてステージとしてEPNデザイナに表示されるよう、コードをEPNアセンブリ・ファイルに追加します。

  1. IDEで、EPNアセンブリ・ファイルを検索して開きます。プロジェクト・エクスプローラで、「TradeReport」>「META-INF」>「spring」>「TradeReport.context.xml」にあります。

  2. event-type-repository XMLスタンザの下で、次のXMLを追加してアダプタを宣言します。

    <wlevs:adapter id="StockTradeCSVAdapter" provider="csvgen">
        <wlevs:instance-property name="port" value="9200" />
        <wlevs:instance-property name="eventTypeName"
            value="TradeEvent" />
        <wlevs:instance-property name="eventPropertyNames"
            value="symbol,price,percChange,volume,lastPrice" />
    </wlevs:adapter>
    

    このXMLスタンザは、csvgenアダプタのインスタンスを宣言し、EPNで使用するために構成する3つのプロパティを割り当てます。アダプタは、着信rawイベント・データから8.3項「イベント・データを移動するイベント・タイプの作成」で定義したイベント・タイプのプロパティにマップするプロパティを使用します。追加する値を次に示します。

    • アダプタ宣言id属性値はアダプタの一意の識別子です。Oracle Event Processingに付属するcsvgen実装を参照するため、プロバイダ属性値を"csvgen"にする必要があります。

    • portインスタンス・プロパティは、アダプタ・インスタンスに着信イベント・データをリスニングするポートを通知します。ここでの値9200は、ロード・ジェネレータがイベント・データを送信するポート番号に対応します(詳細は後述)。

    • eventTypeNameインスタンス・プロパティは、インスタンスに着信イベント・データを割り当てるイベント・タイプの名前を通知します。ここで、以前に定義したTradeEventタイプの名前を指定します。

    • eventPropertyNamesインスタンス・プロパティは、インスタンスにデータを割り当てるイベント・タイプ・プロパティの名前を通知します。この場合、eventPropertyNames属性値がイベント・タイプのJavaBeanで定義した同じプロパティのカンマ区切りリストであることを確認します。csvgenアダプタで着信値からイベント・タイプ・プロパティにマップするため、ここの名前はイベント・タイプと同じである必要があり、CSVファイルの各行の対応する値と同じ順序にする必要があります。

  3. 内部のアダプタXMLとともにEPNアセンブリ・ファイルを保存して閉じます。

  4. まだ開いていない場合、EPNエディタを「概要」タブで開きます。

  5. EPNエディタで、追加したcsvgenアダプタ・インスタンスを表すアイコンが表示されていることを確認します。アイコンは、構成コードで指定したアダプタid値でラベル付けされます。

    tradereport_csvadapter.pngの説明が続きます
    図tradereport_csvadapter.pngの説明

次の手順の8.5項「イベントを伝達するチャネルの追加」では、アダプタから今すぐ追加するロジックにイベントを移動する方法を追加します。

8.5 イベントを伝達するチャネルの追加

この手順では、8.4項「イベント・データを受信する入力アダプタの追加」で追加したアダプタを次の手順で追加する少しのロジックに接続する方法を追加します。後で、アプリケーションをテストします。

Oracle Event Processingアプリケーションでは、チャネルを使用してEPNステージを接続します。チャネルは、EPNのある部分から別の部分にイベントを転送するパイプです。イベントの伝達はチャネルの主要な目的ですが、チャネル構成オプションによってアプリケーションをチューニングできる他のプロパティを指定する機会が提供されます。以下のものが含まれます。

これらの種類のチャネル構成プロパティはデフォルト値があるため、作成するアプリケーション用に設定する必要がありません。このアプリケーションでは、チャネル構成を単純なままにします。

追加するチャネルの目的は、イベント・データを受信するアダプタから次の手順で追加するコードに新しく生成されたイベントを移動することです。

AdapterOutputChannelの追加

  1. IDEで、EPNエディタが開いて作成するEPNが表示されることを確認します。

  2. EPNエディタを右クリックして、「新規」>「チャネル」をクリックします。

    チャネル・アイコンがEPNエディタに表示されます。

  3. エディタに表示されるチャネル・アイコンをダブルクリックして、EPNアセンブリ・ファイルのチャネルの構成XMLを表示します。

  4. アセンブリXMLファイルで、追加したチャネルのチャネルXMLスタンザを検索します。次のように表示されます。

    <wlevs:channel id="channel">
    </wlevs:channel>
    

    「チャネルは''event-type''値を宣言する必要があります。」という警告が通知される場合があります。これを修正します。

  5. 次と一致するようにデフォルトのXMLを編集します(または保有するコードに次のコードを貼り付けます)。

    <wlevs:channel id="AdapterOutputChannel" event-type="TradeEvent">
    </wlevs:channel>
    

    チャネルを構成するために追加する値を次に示します。

    • channel要素は、チャネルの構成を表し、EPNにチャネルを配置します。

    • id属性の値は、このEPNのチャネルの一意の識別子です。(別のチャネルを追加します。)

    • event-type属性の値は、チャネルを構成して伝達するイベント・タイプの名前です。この場合、実装が作成したTradeEvent JavaBeanである以前に追加したイベント・タイプの名前のTradeEventに設定します。ここで追加する値がアセンブリ・ファイルの他の場所のevent-type要素のtype-name属性値と同じであることに注意してください。

    チャネル構成XMLの編集を終了した後、アセンブリ・ファイルを保存します。

  6. EPNエディタに戻ります。EPN: TradeReportタブをクリックしてEPNエディタを表示する必要がある場合があります。

  7. EPNエディタで、入力アダプタから追加したチャネルへの接続を作成します。これを行うには、「StockTradeCSVAdapter」アイコンをクリックして、「AdapterOutputChannel」アイコンにドラッグします。これにより、2つのアイコン間の接続線が作成されます。

    tradereport_csv_chan.pngの説明が続きます
    図tradereport_csv_chan.pngの説明

  8. 左から右に順番にアイコンを表示してEPNダイアグラムを整理するには、EPNエディタの右上の角にある「EPNのレイアウト」アイコンをクリックします。

  9. 「StockTradeCSVAdapter」アイコンをダブルクリックして、アセンブリ・ファイルのアダプタの構成XMLを表示します。

  10. アセンブリ・ファイルで、アダプタとチャネル間の接続の作成によってlistener要素がアダプタXMLスタンザに追加されたことを確認します。この要素のref属性値は、チャネル要素のid属性に設定されます。このXMLは、EPNエディタにグラフィカルに表示される接続を定義します。

    結果となるEPNアセンブリXMLは次のように表示されます(コンポーネントを接続する側面は太字で表示されます)。

    <?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:jdbc="http://www.oracle.com/ns/ocep/jdbc"
        xmlns:spatial="http://www.oracle.com/ns/ocep/spatial"
        xsi:schemaLocation="...">
    <!-- Schema locations omitted for brevity. -->
    
        <wlevs:event-type-repository>
            <wlevs:event-type type-name="TradeEvent">
                <wlevs:class>com.oracle.cep.example.tradereport.TradeEvent</wlevs:class>
            </wlevs:event-type>
        </wlevs:event-type-repository>
    
        <wlevs:adapter id="StockTradeCSVAdapter" provider="csvgen">
            <wlevs:listener ref="AdapterOutputChannel" />
            <wlevs:instance-property name="port" value="9200" />
            <wlevs:instance-property name="eventTypeName"
                value="TradeEvent" />
            <wlevs:instance-property name="eventPropertyNames"
                value="symbol,price,percChange,volume,lastPrice" />
        </wlevs:adapter>
    
        <wlevs:channel id="AdapterOutputChannel" event-type="TradeEvent">
        </wlevs:channel>
    
    </beans>
    
  11. TradeReport.context.xmlを保存して、ファイルを閉じます。

この手順では、チャネルを追加して入力アダプタからイベントを伝達しました。次の手順の8.6項「イベントを受信およびレポートするリスナーの作成」では、イベントを移動するステージを追加します。

8.6 イベントを受信およびレポートするリスナーの作成

この手順では、イベント・データを使用してアプリケーションをテストできるよう、単純なイベント処理ネットワークを完了するステージを追加します。ステージは、EPNを通過する取引イベントを受信して取引の情報をレポートするよう設計されている「リスナー」Javaクラスです。

追加するリスナーは、イベント・シンクとしてOracle Event Processingで認識される特定の種類のJavaクラスです。イベント・シンクは、EPNを通過する場合にイベントを受信できるコードです。イベント・シンクを使用してイベントをインターセプトすることによって、クラスのロジックを使用してイベントの内部を確認し、クラスの他のロジックの実行中にデータを使用できます。イベント・シンクを書き込む以外に、イベントをEPNのステージ・ダウンストリームに送信できるイベント・ソースを書き込むこともできます。

そのため、イベントをインターセプトし、イベントの内容を変更するコードを実行(またはそれらから新しいイベントを作成)し、結果となるイベントを次のステージに送信する1つのJavaクラスなどを想定できます。そのようなコードにより、イベントの表示内容に基づいて(他のアプリケーションにある可能性がある)他のプロセスを開始することもできます。

イベント・シンクおよびイベント・ソースは、特定のOracle Event Processing Javaインタフェースを実装します。たとえば、イベント・シンクは、受信するイベントがストリームまたはリレーションの一部であるかどうかに応じて、2つのインタフェースcom.bea.wlevs.ede.api.StreamSinkおよびcom.bea.wlevs.ede.api.RelationSinkのいずれかを実装します。

ストリームとリレーションの違いは、ここで作成するアプリケーションで基本的に重要ではありません(コードが違いに依存しません)。ただし、Oracle Event Processingを使用したイベント処理の仕組みを理解する重要な部分であるため、簡潔に説明する価値があります。

ストリームは、時間に関して連続的である一連のイベントで、前のタイムスタンプのイベントが後のタイムスタンプのイベントの前に到着します。一方で、リレーションは、特定の基準を満たしているためにセットのイベントが選択された一連のイベントです。リレーションで実行するコードは、イベントの削除、挿入および更新になる可能性があります。

実例として、ここで作成するアプリケーションよりも関連性がある株式取引アプリケーションの暗喩を想定してください。アプリケーションで受信する取引イベントが確認できないパイプを通過することを考えてみてください。イベントは、受信した順序(イベントの発生した順序が重要であるために考慮する順序)でパイプから到着します。捕捉するには、コードである株式取引が別の特定の株式取引の前の15秒以内に発生したかどうかを確認できるように、一度に取引の15秒分を捕捉するよう設計されたパイプの最後にバケットを配置します。

パイプは、順序および隣接する品質が主要な特性であるストリームです。バケットは、特定の共有される特性がバケットの内容を定義するリレーションです。

次の項では、イベントをリスニングするインタフェースを実装するJavaクラスを作成し、イベントBeanとしてそのクラスを構成してEPNの一部にします。

リスナー・イベント・シンク・クラスの作成

この項では、ストリームからイベントを受信できるJavaクラスを作成します。

  1. IDEのプロジェクト・エクスプローラで、srcディレクトリを右クリックして、「新規」>「クラス」をクリックします。

  2. 新規Javaクラスダイアログの「パッケージ」ボックスで、com.oracle.oep.example.tradereportを入力します。

  3. 「名前」ボックスで、TradeListenerを入力します。

  4. 「インタフェース」ボックスの横にある「追加」ボタンをクリックして、リスナーでイベント・シンクとして実装する必要があるインタフェースを選択します。

  5. 実装されているインタフェースの選択ダイアログのインタフェースの選択ボックスで、com.bea.wlevs.ede.api.StreamSinkを入力します。

  6. 「一致するアイテム」ボックスでStreamSinkを選択して、「OK」をクリックします。

  7. 新規Javaクラスダイアログの作成するメソッド・スタブで、継承された抽象メソッドチェック・ボックスが選択されている(その他の選択が解除されている)ことを確認します。

    tradereport_newlistener.pngの説明が続きます
    図tradereport_newlistener.pngの説明

  8. 「終了」をクリックします。

    TradeListener.javaソース・コード・ウィンドウが開き、TradeListenerクラスの宣言が表示されます。onInsertEventメソッドの宣言は、.javaファイルに存在する必要もあります。StreamSinkインタフェースを実装する場合、このメソッドが必要です。

  9. TradeListenerクラスでは、次のコードと一致するようにonInsertEventメソッドを編集します。

    @Override
    public void onInsertEvent(Object event) throws EventRejectedException {
     
        if (event instanceof TradeEvent){
            String symbolProp = ((TradeEvent) event).getSymbol();
            Integer volumeProp = ((TradeEvent) event).getVolume();
            System.out.println(symbolProp + ":" + volumeProp);
        }
    }
    

    コードで処理を実行できる場合、これはイベントをリスナーに渡すためにOracle Event Processingで使用するメソッドです。行う変更により、次を実行するメソッドを実装します。

    • 着信イベントがTradeEvent JavaBeanのインスタンスであることを確認します。(その他は無視されます。)

    • イベントがTradeEventである場合、コードは銘柄記号および含まれる取引量を出力します。

  10. TradeListener.javaファイルを保存して閉じます。

イベントBeanとしてのリスナー・クラスの構成

前述の項では、イベント・シンクを実装して特定のタイプのイベントをリスニングするクラスを作成しました。この項では、EPNの他の部分に接続できるイベントBeanとしてリスナーをEPNに追加します。

イベントBeanは、JavaコードをEPNに追加する方法です。別の方法はSpring Beanです。異なる管理機能を提供しますが、両方のBeanモデルは実装が書き込むJavaコードであるEPNステージを構成する手段を提供します。ここで作成するイベントBeanは、Oracle Event Processingサーバー機能とより詳細に統合します。既存のSpringフレームワークと統合する必要がある場合、Spring Beanは適切な選択肢です。

  1. EPNエディタで、空の領域を右クリックして、「新規」>「イベントBean」をクリックします。

  2. 新しい「eventBean」アイコンをダブルクリックして、アセンブルXMLファイルの構成コードを表示します。

  3. TradeReport.context.xmlソース・コードで、event-bean要素を検索し、次のように表示されるように編集します。

     <wlevs:event-bean id="ListenerBean"
        class="com.oracle.oep.example.tradereport.TradeListener" />
    

    このコードを使用して、一意の識別子"ListenerBean"を使用したイベントBeanおよび以前に作成したクラスの実装クラスを構成します。

  4. アセンブリXMLファイルを保存します。

  5. EPNエディタに戻り、新しいイベントBean名などの基礎となるXMLの変更を反映している設計であることを確認します。

  6. EPNエディタで、AdapterOutputChannelをクリックして選択します。

  7. ここでも、AdapterOutputChannelをクリックして、ListenerBeanイベントBeanアイコンにドラッグします。これにより、イベントをチャネルからイベントBeanに渡すことができる接続が作成されます。

  8. 「EPNのレイアウト」アイコンをクリックして、ダイアグラムを整理します。

    tradereport_eventbeanadded.pngの説明が続きます
    図tradereport_eventbeanadded.pngの説明

  9. AdapterOutputChannelをダブルクリックして、基礎となるXMLを表示します。

    チャネルXMLスタンザには参照属性値が追加したイベントBeanのID値と同じであるリスナー要素が含まれることに注意してください。(ここでの両方の場所の用語「リスナー」は、便宜的な目的のみです。)

      <wlevs:channel id="AdapterOutputChannel" event-type="TradeEvent">
                        <wlevs:listener ref="ListenerBean" />
            </wlevs:channel>
     
            <wlevs:event-bean id="ListenerBean"
                        class="com.oracle.oep.example.tradereport.TradeListener" />
    
  10. TradeReport.context.xmlを保存します。

この手順では、イベント処理ネットワークを移動するイベントをリスニングするためにイベントBeanを追加しました。次の手順の8.7項「ロード・ジェネレータの設定およびテスト」では、作成するアプリケーションをテストします。

8.7 ロード・ジェネレータの設定およびテスト

この手順では、Oracle Event Processingサーバーのインスタンスのプロジェクトをデプロイし、Oracle Event Processingに付属するロード・ジェネレータ・ユーティリティを使用してサンプル・データを作成するアプリケーションにフィードします。

Oracle Event Processingとともにインストールされたロード・ジェネレータ・ユーティリティは、プロジェクトのテストを簡単に開始する方法を提供します。CSVファイルを読み取り、イベント・データとしてファイルの行を構成で指定するポートに送信するよう特に設計されています。プロジェクトで、そのポートでリスニングするCSVアダプタは、行を受信し、データを定義したイベント・タイプのインスタンスに変換します。プロパティ・ファイルを介して、使用するCSVファイルおよびターゲット・ポート、ロード・ジェネレータの実行時間、イベント・データの送信速度などを含むロード・ジェネレータの特定の側面を構成できます。

次の項では、Oracle Event Processingサーバーのインスタンスを作成し、プロジェクトをデプロイするために構成し、ロード・ジェネレータを設定し、プロジェクトをテストします。

プロジェクトを実行するサーバーの作成

この項では、Oracle Event Processingサーバー・インスタンスをTradeReportプロジェクトに追加します。サーバー・インスタンスの追加によって、IDEを使用してサーバーを起動および停止したり、変更および再テストを行うたびにプロジェクトを再デプロイする便利な方法が提供されます。

IDEは、プロジェクトを作成した場合に含まれるサーバー・ランタイム環境を介してOracle Event Processingサーバーを認識します。(個別の手順としてサーバー・ランタイム環境を追加する必要がある場合があります。)

  1. IDEで、「サーバー」ビューが表示されることを確認します。表示されない場合、「ウィンドウ」>「ビューの表示」>「サーバー」をクリックして表示します。

  2. 「サーバー」ビューで、右クリックしてコンテキスト・メニューを表示して、「新規」「サーバー」の順にクリックします。

  3. 新しいサーバーダイアログの「サーバー・タイプの選択」で、「Oracle」を展開し、Oracle Event Processing v11.1をクリックします。

  4. ホスト名、サーバー名およびランタイム環境をそのままにし、「次」をクリックします。

  5. 新しいOracle Event Processing v11.1サーバーで、「ローカル・サーバー」オプションが選択されていることを確認し、「次」をクリックします。

  6. 次のウィンドウの新しいOracle Event Processing v11.1サーバーで、「ドメイン・ディレクトリ」をそのままにして、「次」をクリックします。

  7. 追加と削除で、「使用可能」ボックスの「TradeReport」を選択して、「使用可能」および「構成済」ボックス間の「追加」ボタンをクリックします。

    TradeReportプロジェクト名を「構成済」リストに移動すると、作成するTradeReportプロジェクトを構成して追加するサーバーで実行することが指定されます。この単純な手順により、デバッグする場合にプロジェクトをサーバーに簡単にデプロイ(および再デプロイ)できます。

    tradereport_newserv_conf.pngの説明が続きます
    図tradereport_newserv_conf.pngの説明

  8. 「終了」をクリックします。

サーバーを追加した後、locahostのOracle Event Processing v11.1として「サーバー」ビューにリストされます(停止)。エントリを展開して、TradeReportプロジェクトが構成されたプロジェクトのいずれかであることを確認します。

テスト・データおよびロード・ジェネレータの設定

テスト・データおよびロード・ジェネレータを実際に設定する必要はありません。Oracle Event Processingをインストールすると設定されます。ただし、それらを使用してプロジェクトをデバッグするため、次の手順を使用して確認します。

  1. 任意のテキスト・エディタで、Oracle Event Processingに付属するStockData.csvファイルを開きます。デフォルトでは、次のパスでこのファイルを確認します。

    ORACLE_HOME/Middleware/ocep_11.1/utils/load-generator/StockData.csv

    ファイルの内容が基本的にデータのイベント・タイプを定義した際に例で確認した内容であることに注意してください。CSVファイルと同様に含まれる値の順序に関して行が均一であることに注意してください。

  2. テキスト・エディタで、StockData.propファイルを開きます。

    これはロード・ジェネレータの処理を構成するプロパティ・ファイルです。2つのプロパティtest.csvDataFileおよびtest.portがロード・ジェネレータの処理に必要です。他のプロパティは表面上オプションですが、ロード・ジェネレータがCSV形式の入力を認識するためにもう1つ設定する必要があります。TradeReportプロジェクトをデバッグするには、次のプロパティを設定する必要があります。

    • test.csvDataFile -- ロード・ジェネレータが読み取るCSVファイルの名前。ここでの値をStockData.csvにする必要があります。

    • test.port -- ロード・ジェネレータがイベント・データを送信するポート番号。これは、CSVアダプタ・インスタンスを構成した場合に指定したポート値である必要があります(つまり、9200)。

    • test.packetType -- ロード・ジェネレータが処理する形式。この値はCSVである必要があります。

プロジェクトのデバッグ

このプロジェクトを実際にデバッグする必要はありません(ここで示されているすべてを実行する場合)。ただし、デバッグ・モードのブレークポイントの設定およびOracle Event Processingサーバーの実行によって、処理の方法を確認する機会が提供されます。

  1. IDEで、以前の手順で作成したTradeListener.javaファイルを開きます。プロジェクト・エクスプローラで、「TradeReport」>「src」>「com.oracle.cep.example.tradereport」を展開して、ファイルを表示できます。

  2. TradeListener.javaで、次のコードの行にブレークポイントを設定します。

    System.out.println(symbolProp + ":" + volumeProp);
    
  3. 「サーバー」ビューで、追加したサーバーローカルホストのOracle Event Processing v11.1を選択します。

  4. サーバーを選択したままにして、「サーバー」ビューの右上の角にあるデバッグ・モードでサーバーの起動ボタンをクリックします。

    サーバーが起動し、IDEがプロジェクトをコンパイルし、アプリケーションとしてTradeReportプロジェクトを実行中のサーバーにデプロイする場合に多少の待機時間が必要になる場合があります。この実行中に、「コンソール」ビューは、サーバーの起動の進行状況に関連するステータス・メッセージを表示します。「コンソール」ビューの出力が<サーバーの起動>または<"TradeReport"のアプリケーション・コンテキストは正常に起動しました>で終了する場合、サーバーがデバッグ・モードで実行されています。

  5. 「サーバー」ビューで、プロジェクトをサーバーに再パブリッシュする必要がないことを確認します。「TradeReport」エントリが(再パブリッシュ)を示す場合、「TradeReport」エントリを右クリックして、「強制パブリッシュ」をクリックします。正常にデプロイされた後、エントリは(同期化)を示します。

    再パブリッシュ時にエラーが表示される場合、続行する前にプロジェクトを消去して再作成する必要があることがあります。

  6. コマンド・プロンプトを開き、Oracle Event Processingとともにインストールされたロード・ジェネレータ・ディレクトリにディレクトリを変更します。デフォルトでは、次のパスになります。

    ORACLE_HOME/Middleware/ocep_11.1/utils/load-generator

  7. コマンド・プロンプトで、次を入力して、[Enter]を押してデプロイされたプロジェクトへのイベント・データの送信を開始します。

    • Windowsの場合: runloadgen.cmd StockData.prop

    • Linuxの場合: runloadgen.sh StockData.prop

  8. ロード・ジェネレータがイベント・データの送信を開始すると、IDEはデバッグ・パースペクティブに切り替えて(IDEをそのように設定している場合)、リスナー・クラスで設定するブレークポイントで実行を一時停止します。

  9. 実行がブレークポイントで一時停止している場合、「変数」ビューを参照して、リスナーが受信したイベントの内容を調査します。各イベントのプロパティをクリックして、CSVファイルからそれぞれに割り当てられた値を参照できます。

  10. 「再開」ボタンを繰り返しクリックして、イベントからイベントに実行を進めて、それぞれの値を確認します。

  11. 「コンソール」ウィンドウで、リスナー・コードが受信するイベントから銘柄記号および量を出力していることを確認します。

    tradereport_breakpoint.pngの説明が続きます
    図tradereport_breakpoint.pngの説明

  12. 「サーバー」ビューで、Oracle Event Processingサーバーを選択して、サーバーの停止ボタンをクリックします。

  13. ロード・ジェネレータのコマンド・プロンプト・ウィンドウで、[CTRL]+[C]を押してロード・ジェネレータを停止します。

以上で完了です。単純なOracle Event Processingアプリケーションの作成およびテストが完了しました。最後の手順の8.8項「イベントをフィルタ処理するOracle CQLプロセッサの追加」では、Oracle CQLコードを追加してアプリケーションを少し詳細に検討します。

8.8 イベントをフィルタ処理するOracle CQLプロセッサの追加

この手順では、特定の基準に基づいてイベントをフィルタ処理するプロセッサを追加します。プロセッサは、着信イベントを問い合せるOracle Continuous Query Language (Oracle CQL)コードを追加するステージです。プロセッサおよびOracle CQL問合せは、Oracle Event Processingを使用して作成するイベント指向アプリケーションの実際のほとんどの機能を表します。Oracle CQLを使用すると、関心があるイベントのみのアプリケーションのロジックに集中して、イベントが到着する場合に複雑なロジックを実行できます。

Structured Query Language (SQL)を使用している場合、Oracle CQLの表示を理解しやすくなります。実際に、Oracle CQLは基本的にSQLと類似しています。同じキーワードおよび構文ルールを使用しますが、ストリーミング・データの一意の側面をサポートするために機能が追加されています。(SQLに慣れていない場合は、理解するとOracle CQLを最大限に活用するのに非常に役立ちます。)

イベント・データ(およびその結果のOracle Event Processingイベント)はEPNが順番に受信するデータのストリームであることに注意してください。SQLとOracle CQLの比較を続行すると、イベントはある意味でデータベース内の1行に相当すると言えます。ただし、重要な違いは、イベントではあるイベントは時間に関して常に別のイベントの前後であり、ストリームはほぼ無制限で常に変化することです。リレーショナル・データベースでは、データが比較的に静的である場合に行は有限集合であると言えます。リレーショナル・データベースでは、問合せによるデータの取得を待機します。イベント・データのストリームでは、到着時に調査する問合せの場合にデータは常にEPNに移動します。

連続的な時系列のストリーミング・データを最大限に活用するため、CQLには次の機能があります。

また、CQLは、ビューおよび結合などの既知と思われるSQLの一般的な側面をサポートします。たとえば、ストリーミング・イベント・データおよびリレーショナル・データベース表またはキャッシュのデータを含む結合を実行するCQLコードを書き込むことができます。CQLは、空間データ固有の計算およびJDBCデータ・ソースの問合せ用にJavaクラス内の機能を組み込む問合せのサポートを提供する付属のカートリッジを使用して、カートリッジを介して拡張できます。

プロセッサおよびCQLを理解するため、ここで追加するコードを単純なままにします。AdapterOutputChannelからフィードされる特定のイベントを取得する問合せを追加します。問合せは、4000より大きい量の取引のみを取得するよう設計されています。問合せの結果のイベントはリスナーに渡されます。

CQLコードの表示内容は次のとおりです。

例8-1 CQLコードを使用したGetHighVolume問合せ要素

<query id="GetHighVolume"><![CDATA[
    select trade.symbol, trade.volume
    from AdapterOutputChannel [now] as trade
    where trade.volume > 4000
    ]]>
</query>

「取引量が4000株を超えるAdapterOutputChannelからの各イベントに対して、記号および量の値を取得する」のように、この問合せを言い換えることができます。SQLを使用したことがある場合は、selectfromおよびwhere文を理解できます。now演算子は基本的に即時の期間を表します。各イベントを含みます。他には、「5秒ごとに到着するすべてのイベントから選択」を意味する[range 5]がある場合があります。(特定の取引が相互に5秒以内に発生したことを確認する場合に役立つことがあります。)

この問合せの出力は、取引量が4000を超えるすべてのイベントを含むリレーション(シーケンスではなくセット)です。期間が[now]であるため、セットは常に1つのメンバーのみを持ちます。より大きい範囲のリレーションは、セットに複数のメンバーがある場合があります。

GetHighVolumeプロセッサおよび問合せの追加

  1. IDEのEPNエディタで、ダイアグラムの空の領域を右クリックして、「新規」>「プロセッサ」をクリックします。

  2. 「新規プロセッサ」ダイアログの「プロセッサID」ボックスで、GetHighVolumeProcessorを入力します。

  3. 「既存の構成ファイルの使用」オプションを選択します。

    各プロセッサの異なる構成ファイルを作成できることに注意してください。異なるユーザーがそれぞれ操作する場合に役立つことがあります。

  4. ドロップダウンで、config.xmlを選択したままにして、「OK」をクリックします。

  5. EPNエディタで、「GetHighVolumeProcessor」アイコンが作成されていることを確認します。

  6. 「AdapterOutputChannel」アイコンから「ListenerBean」アイコンへのコネクタを右クリックして、「削除」をクリックします。

  7. 「AdapterOutputChannel」アイコンをクリックして、「GetHighVolumeProcessor」アイコンにドラッグします。

    この接続の作成により、プロセッサはチャネルを認識します。チャネルをプロセッサに接続した後、CQLコードのID値でチャネルを参照できます。

  8. 「GetHighVolumeProcessor」アイコンをダブルクリックして、config.xmlファイルの構成コードを開きます。

  9. config.xmlファイルで、問合せ要素を次の問合せXMLに置き換えます。

    <query id="GetHighVolume"><![CDATA[
        select trade.symbol, trade.volume
        from AdapterOutputChannel [now] as trade
        where trade.volume > 4000
        ]]>
    </query>
    

    コード・ウィンドウは、以下のようになります。

    tradereport_cqlcode.pngの説明が続きます
    図tradereport_cqlcode.pngの説明

  10. EPNエディタで、ダイアグラムの空の領域を右クリックして、「新規」>「チャネル」をクリックします。

  11. 新しいチャネルのアイコンを右クリックして、「名前の変更」をクリックします。

  12. ProcessorOutputChannelを入力して、[Enter]を押してチャネルの名前を変更します。

  13. 「GetHighVolumeProcessor」アイコンをクリックし、新しいチャネル・アイコンにドラッグしてプロセッサおよびチャネルを接続します。

  14. 「ProcessorOutputChannel」アイコンをクリックして、「ListenerBean」アイコンにドラッグしてチャネルをリスナーに接続します。

  15. 順番に左から右にアイコンが連続して表示されるように、「EPNのレイアウト」ボタンをクリックしてダイアグラムを整理します。

  16. 「ProcessorOutputChannel」アイコンをダブルクリックして、アセンブリXMLファイルのチャネルの構成を開きます。

  17. TradeReport.context.xmlで、デフォルトのチャネル構成を次のXMLに置き換えます。特に、TradeEventがこのチャネルを通過するイベント・タイプであると指定していることに注意してください。

    <wlevs:channel id="ProcessorOutputChannel" event-type="TradeEvent">
        <wlevs:listener ref="ListenerBean" /></wlevs:channel>
    
  18. プロジェクトのすべてのファイルを保存します。

この時点で、再度アプリケーションをデバッグする準備が整いました。

プロジェクトのデバッグ

この項では、CQLコードで意図する結果を生成していることを確認するために再度デバッグします。

  1. IDEで、以前の手順で作成したTradeListener.javaファイルを開きます。プロジェクト・エクスプローラで、「TradeReport」>「src」>「com.oracle.cep.example.tradereport」を展開して、ファイルを表示できます。

  2. TradeListener.javaで、コードSystem.out.println(symbolProp + ":" + volumeProp);の行にブレークポイントがあることを確認します。

    正常にデバッグする前に、プロジェクトを再作成する必要がある場合があります。

  3. 「サーバー」ビューで、追加したサーバーローカルホストのOracle Event Processing v11.1を選択します。

  4. サーバーを選択したままにして、「サーバー」ビューの右上の角にあるデバッグ・モードでサーバーの起動ボタンをクリックします。

    サーバーが起動し、IDEがプロジェクトをコンパイルし、アプリケーションとしてTradeReportプロジェクトを実行中のサーバーにデプロイする場合に多少の待機時間が必要になる場合があります。この実行中に、「コンソール」ビューは、サーバーの起動の進行状況に関連するステータス・メッセージを表示します。「コンソール」ビューの出力が<サーバーの起動>で終了する場合、サーバーはデバッグ・モードで実行されています。

  5. 「サーバー」ビューで、プロジェクトをサーバーに再パブリッシュする必要がないことを確認します。TradeReportエントリが(再パブリッシュ)を示す場合、TradeReportエントリを右クリックして、「強制パブリッシュ」をクリックします。正常にデプロイされた後、エントリは(同期化)を示します。

  6. まだ存在しない場合、コマンド・プロンプトを開き、Oracle Event Processingとともにインストールされたload-generatorディレクトリにディレクトリを変更します。デフォルトでは、次のパスになります。

    ORACLE_HOME/Middleware/ocep_v11.1/utils/load-generator

  7. コマンド・プロンプトで、次を入力して、[Enter]を押してデプロイされたプロジェクトへのイベント・データの送信を開始します。

    • Windowsの場合: runloadgen.cmd StockData.prop

    • Linuxの場合: runloadgen.sh StockData.prop

    ロード・ジェネレータがイベント・データの送信を開始すると、IDEはデバッグ・パースペクティブに切り替えて(IDEをそのように設定している場合)、リスナー・クラスで設定するブレークポイントで実行を一時停止します。

  8. 実行がブレークポイントで一時停止している場合、「変数」ビューを参照して、リスナーが受信したイベントの内容を調査します。

    各イベントのプロパティをクリックして、CSVファイルからそれぞれに割り当てられた値を参照できます。イベントに2つの値(記号および量)が含まれていることに注意してください。そのため、問合せはプロセッサを通過するイベントから2つの値のみを選択しています。

  9. 「再開」ボタンを繰り返しクリックして、イベントからイベントに実行を進めて、それぞれの値を確認します。

  10. 「コンソール」ウィンドウで、リスナー・コードが受信するイベントから銘柄記号および量を出力していることを確認します。

    問合せを正しくコード化した場合、すべての量の値は4000より大きくなります。

  11. 「サーバー」ビューで、Oracle Event Processingサーバーを選択して、サーバーの停止ボタンをクリックします。

  12. ロード・ジェネレータのコマンド・プロンプト・ウィンドウで、[CTRL]+[C]を押してロード・ジェネレータを停止します。

これで、このアプリケーションを終了します。詳細のリンクとともにこのウォークスルーに含まれる処理のリストは、8.9項「サマリー: 単純なアプリケーションのウォークスルー」を参照してください。

8.9 サマリー: 単純なアプリケーションのウォークスルー

この項では、8.1項「単純なアプリケーションのウォークスルーの概要」から開始される単純なアプリケーションのウォークスルーを要約します。このウォークスルーでは、単純なOracle Event Processingアプリケーションを作成します。イベント処理ネットワークをアセンブルしてイベントを受信し、特定の基準を満たすイベントをレポートしました。

他の概要は、第1章「Oracle Event Processingアプリケーションの作成の概要」を参照してください。

このウォークスルーでは、Oracle Event Processingアプリケーションの開発の最も基本的な側面を説明しました。次の概念が含まれます。