WebSphere Business Events によるビジネス・イベント処理: パート 2 ビジネス・イベント・アプリケーションの構築

このシリーズのパート1では、WebSphere Business Eventsのコンセプトとツールのキーポイントについて紹介しました。パート2では、簡単なBusiness Eventsアプリケーションの開発とテストの仕方について学びます。このシリーズの将来の記事では、他のIBM製品との統合について紹介していきます。

Doina Klinger, Advisory Software Engineer, IBM

Doina Klinger photoDoina Klinger は IBM Hursley Software Laboratory のアドバイザリー・ソフトウェア・エンジニアであり、WebSphere Business Events の開発者です。Klinger はこれまで数々の WebSphere 製品およびコンポーネントの開発者兼開発リードとして働いてきました。 最近では、WebSphere Enterprise Service Bus および WebSphere Integration Developer を担当しました。Eclipse とメッセージング/イベント処理テクノロジーに関心を持っています。Purdue University で情報科学の修士号を取得し、2000 年に IBM に入社しました。



Xiaoming Zhang, Software Engineer, IBM

Xiaoming Zhang photoXiaoming Zhang は、IBM Hursley Software Laboratory のソフトウェア・エンジニアであり、Websphere MQ, WebSphere Message Broker, WebSphere Business Eventsのテスト、開発、およびレベル3サービスに従事しています。Xiaomingは、1998年にIBMに入社する前は、イギリスのBrunel Universityでコンピューターサイエンスの講師をしていました。中国のFudan University を卒業し、イギリスのWales Swansea大学からPhDを取得しました。



Mark Hiscock, Software Engineer, IBM

Mark Hiscock photoMark Hiscock は、IBM Hursley Software Laboratory で、Websphere MQ, WebSphere Message Brokerのためのテスト、レベル3サポート、シナリオ・テスティング、ラボ・サービスに従事しています。Markは、現在、Websphere Business Eventsの開発者として働いています。余暇には、カンフー、サイクリング、シャイニーガジェッツを楽しんでいます。



2008年 10月 01日

シナリオ概要

このシリーズでは、ビジネス・イベントがどのように動くのかを見せるためのサンプル・シナリオを使用します。シナリオは、ある期間の間のイベントのパターンを識別し、適切に反応できる必要があります。われわれは、金融業界からトレーディング・システム内の投機的なアクションを検出する必要のあるコンプライアンス規則についての使用事例の説明を簡単にしたものを使用します。シナリオの詳細情報については、パート1を見てください。

このシリーズの将来の記事で、他のIBM製品とBusiness Eventsとの統合のデモンストレーションを紹介するため、サンプル実装では、アクションのタイプを3つ生成しています。このシナリオでは、レポートのためSpeculativeCustomerアクションだけを使います。しかし、イラストの目的やインテグレーションに役立つための中間的なアクションも生成しています。

ノート:

  • シリーズパート2では、パート1をすでに読んでいて、この記事で書かれるBusinessEventsの中心的なコンセプトについて理解していることを想定しています。
  • この記事のステップは、Windows環境で実行されています。

処理の概要

シナリオを実現するアプリケーション構築のため、WebSphere Business Events のDesign Dataツールを使用して、以下のステップを実施します。このステップは、一般的に、ITスペシャリストによって実施されます。

  1. 統合化のためのタッチポイントと呼ばれるビジネス・システムを定義します。タッチポイントは、関係のあるイベントとアクションの定義をグループ化したものです。
  2. タッチポイントには、システム間共通の処理(イベント)の起動と、イベントパターンが識別されたときに実行される活動(アクション)を定義します。例えば、同一の顧客と株式の組み合わせで、1日のうちに同一株について3回のBuyイベント、Sellイベントがだされると、結果としてSpeculativeCustomer(投機顧客)アクションとするようなものです。
  3. ビジネス・オブジェクト層の作成をします。これは、インターミディエイト・オブジェクトと呼ばれるイベントの評価で使われるデータのためのプレースホルダーとしての役割があります。ランタイム・システムの外側から入ってくるすべてのデータは、インターミディエイト・オブジェクトを経由します。例えば、Customerインターミディエイト・オブジェクトは、イベントからフィールド情報として、Name, Address, State, などの情報の値を得ることができ、また、データベースのテーブルから、その他のLast Order Date, Email Addressなどの情報の値について得ることができるようなものです。

次に、Business Events のDesignツールを使い、前のステップで作られた定義を取得し、ツールを使って、ビジネス・ロジックを定義します。ビジネス・アナリストが、これらのステップを完成させます。

  1. インタラクション・セット(ビジネス・ロジックを含むインタラクション・ブロックのまとまり)の定義をします。これは、Business Eventsランタイム・サーバーが、単純または複雑なイベントのパターンを検出し、関連付けし、反応をするために使われるものです。
  2. フィルターの定義をします。これは、インタラクション・ブロックがどのような条件の下で真になるかを明示するために使うものです。

ノート:すべてのBusiness Eventsのコンポーネントの定義は、完全に統合された環境として提供されているレポジトリーに保管されます。Business Eventsサーバーが始動したときに、サーバーは、レポジトリーから定義のセットを取り出し、入ってくるイベントの評価と関連したアクションの生成をするためのインタラクション・セットのコンパイルをします。


アプリケーション構築

このセクションでは、あなたが、Design Dataツールを使用して、Business Eventsアプリケーションを作成するために完成させる必要があるステップを記述します。

以下のステップを完成させます。

  1. タッチポイントの定義
  2. イベントとイベント・オブジェクトの定義
  3. アクションとアクション・オブジェクトの作成
  4. アクションの結果として生成されるイベントの作成
  5. インターミディエイト・オブジェクトの定義
  6. イベント・オブジェクト・フィールドとインターミディエイト・オブジェクト・フィールド間のマッピングの定義
  7. インターミディエイト・オブジェクト・フィールドとアクション・オブジェクト・フィールド間のマッピングの定義

ステップ1:タッチポイントの定義

タッチポイントの定義のため、以下を実施してください。

  1. Design Dataツールを開始します。Start => All Programs => IBM WebSphere Business Events 6.1 => Design Data.
  2. 2. 左側のタッチポイント・ペインを展開します。(スペース確保のため他のエリアを折りたたむことができます。) 左側のペイン上で右クリックして、Insert Touchpointを選択します。
  3. 名前をTrade Systemとします。

ステップ2:イベントの定義

イベントの定義のため、以下を実施してください。

  1. 作成したタッチポイント上で右クリックし、Insert Event => Normalを選択します。
  2. 名前を Buy とします。
  3. 作成したイベント上で右クリックし、Insert Event Object => Blankを選択します。
  4. 名前を TradeObjectとします。
  5. 作成したイベント・オブジェクト上で右クリックし、Insert Event Object Fieldを選択します。Insert Fieldダイアログが開きます。イベント・オブジェクトやアクション・オブジェクト、インターミディエイト・オブジェクトの中にフィールドを挿入する際に、このダイアログを使います。
  6. 図1のように、名前を CustomerIDとし、データ・タイプから String を選びます。
     
    イベント・オブジェクトへのフィールドの挿入
  7. ステップ6を繰り返し、以下のフィールドを追加します
    • StockID データ・タイプは、String
    • Date データ・タイプは、DateTime
    • Quantity データ・タイプは、Real
    • Price データ・タイプは、Real
  8. 次に、Sellという新しい別のイベントを作成します。
  9. Sellを右クリックし、Insert Event Object => Sharedを選択し、TradeObjectを選択します。

このイベント・オブジェクトは、BuyとSellイベントによって共用されます。

ステップ3:アクションの作成

アクションの作成のため、以下のステップを完成してください。

  1. Trade Systemタッチポイント上で右クリックし、Insert Action => Normalを選択します。
  2. 名前を Buy Ack とします。
  3. 新しく作ったアクション上で右クリックし、Insert Action Object => Blankを選択します。
  4. 名前を TradeOut とします。
  5. TradeOutアクション・オブジェクト上で右クリックし、Insert Action Object Fieldを選択します。
  6. 図1のような、Insert Fieldダイアログで、名前を CustomerIDとし、データ・タイプから String を選びます。これを繰り返します。
    • StockID データ・タイプは、String
    • Key データ・タイプは、String
    • Date データ・タイプは、DateTime
    • Quantity データ・タイプは、Real
    • Price データ・タイプは、Real

    ノート:Business Eventsは、すべてのイベント定義において、インタラクション・セットを経由して、アクションを起動しなければならないことになっています。Buy Ackアクションでは、Buyイベントがこの要求に合うようにつくられています。後で、フィルターや遅延無しでアクションを生成するイベントの最も簡単なポリシーについて表現するインタラクション・セットを定義します。

    図2では、Design Dataツールで、Buy Ackアクションの詳細として、TradeOutアクション・オブジェクトと画面右側に見えるCustomerIDのようなアクション・オブジェクトのメンバー・フィールドを含んでいる様子が確認できます。

     
    アクションとアクション・オブジェクト
  7. 上記のプロセスを繰り返して、SellAfterBuyというアクションを作成します。
  8. SellAfterBuyアクション上で右クリックし、Insert Action Object => Sharedを選択し、TradeOutを選択します。
  9. ステップ1から8を繰り返し、Speculative Customerアクションを作成し、TradeOutアクション・オブジェクトを共有します。

ステップ4:イベントの作成

続いて、合成イベントを作成します。これは、Business Eventsが、SellAfterBuyが繰り返され、SpeculativeCustomerにアクションを送ることを可能にします。以下のステップを完成してください。

  1. SellAfterBuySynEventというイベントを作成します。
  2. イベント上で右クリックし、Insert Action => To Fire This Event Syntheticallyを選択します。警告のメッセージが表示されますがYesボタンをクリックします。イベント名がSellAfterBuySynEvent <- SellAfterBuySynEventとなり、SellAfterBuySynEventアクションが自動的に作成されます。
  3. SellAfterBuySynEvent上で右クリックし、Renameを選択し、SellAfterBuySynActionに変更します。アクション名には、Eventという接尾辞は使用しない方が良いでしょう。アクションの名前変更により、合成イベントは、SellAfterBuySynEvent <- SellAfterBuySynActionに名前変更されます。

ステップ5:インターミディエイト・オブジェクトの定義

次のステップでは、インターミディエイト・オブジェクトを定義します。サンプル・アプリケーションでは、ひとつのインターミディエイト・オブジェクトを使用します。インターミディエイト・オブジェクトの定義のために、以下の作業を実施してください。

  1. Design Dataツールのインターミディエイト・オブジェクト・ペインを展開し、ペイン上で右クリックし、Insert Intermediate Object => Blankを選択します。
  2. 名前をTradeObjectとします。
  3. オブジェクト上で右クリックし、Insert Intermediate Object Fieldを選択します。Insert Fieldダイアログで、名前をCustomerIDとしデータ・タイプからStringを選択します。これを繰り返し、以下の名前とタイプを定義します。
    • StockID データ・タイプは、String
    • Date データ・タイプは、DateTime
    • Quantity データ・タイプは、Real
    • Price データ・タイプは、Real
    • Key データ・タイプは、String
  4. インターミディエイト・オブジェクト・セクションにあるTradeObject をタッチポイント・セクションのSellAfterBuySynEvent <- SellAfterBuySynActionイベント上にドラッグ・アンド・ドロップします。
  5. インターミディエイト・オブジェクト・セクションにあるTradeObject をタッチポイント・セクションのSellAfterBuySynActionアクション上にドラック・アンド・ドロップします。図3に合成イベントと合成アクションが作成された詳細を表示します。
     
    合成イベント

ステップ6:イベント・オブジェクトからインターミディエイト・オブジェクトへのマッピング定義

続いて、それぞれのイベント・オブジェクト・フィールドが、どのようにインターミディエイト・オブジェクト・フィールドにマップされるかについて指定する必要があります。このマッピングは、すべてのイベントについて必要となります。ほとんどのフィールドは、BuyイベントとSellイベントの属性から埋め込まれます。インターミディエイト・オブジェクトのKeyフィールドは、JavaScript™を使って作成されます。

アクションは、ソースからターゲットにドラッグ・アンド・ドロップを使って、マッピングすることができます。しかし、ここでは、明示的に選択してマップする方法を記述します。

  1. 図4のように、Buyイベントのツリーノードを展開し、TradeObject上で右クリックし、Insert Field Constructor From Object => Trade Object => Customer IDを選択します。
     
    インターミディエイト・オブジェクトへのフィールドの追加
  2. 前のステップを繰り返し、StockID, Date, Price および Quantityフィールド・コンストラクターを挿入します。Keyフィールドは、マップしないでください。ここでは、イベント・フィールドから構築されるインターミディエイト・オブジェクトを指定します。

    ノート:図5のように、ツール上では、イベントによってつくられたインターミディエイト・オブジェクトが括弧に入って見えます。

     
    インターミディエイト・オブジェクトとイベントから作られるフィールド
  3. タッチポイント・ビューで、Buy => TradeObject=> [TradeObject] を展開し、右側のCustomerIDを展開し、DefinitionのType:フィールドからFieldを選択します。
  4. 図6のように、Insert object fieldをクリックし、イベント・フィールドのリストからCustomerIDを選択します。
     
    イベント・フィールドからインタミディエイト・オブジェクト・フィールドを定義
  5. 上記の2つのステップを繰り返し、Date, Price, Quantity および StockIDのフィールドの対応付けをします。ここでは、イベント・フィールドから構築されるインターミディエイト・オブジェクトのすべてのフィールドを指定します。

    ノート:この例では、フィールドの名前は、イベント・オブジェクトとインターミディエイト・オブジェクトと同じですが、こうしなければいけないわけではありません。

    この例では、BuyとSellイベントは、ひとつのイベント・オブジェクトを共有しています。これは、図7のように、BuyとSellの両方のイベントが、TradeObjectインターミディエイト・オブジェクトを作成するためです。

     
    複数のイベントが、同じインターミディエイト・オブジェクトを作成
  6. 続いて、JavaScriptコードを使用して、Keyフィールドを定義します。
    1. インターミディエイト・オブジェクト・ペインのKeyフィールドを拡張します。
    2. Definitionセクションで、TypeからJavaScriptを選択し、図8のように、CustomerID +""+StockIDと入力します。
       
      JavaScript によるKeyフィールドの定義

      ノート:Design Dataツールは、JavaScriptのコードを評価できません。したがって、正しいJavaScriptコードを入力しているか、確かめる必要があります。JavaScriptのテストツールとして、http://localhost:9080/wbe/tools/test_javascript.html が利用可能です。このツールは、JavaScriptコードが正しいかを評価するのに役立ちます。

ステップ7:インターミディエイト・オブジェクトからアクションへのマッピング定義

続いて、アクションが、インターミディエイト・オブジェクトからどのように構築され、インターミディエイト・オブジェクト・フィールドが、アクション・フィールドにどのようにマップされるかについて定義する必要があります。

  1. タッチポイント・ペインでBuy Ack => TradeOutを選択します。
  2. 図9のように、右側のウインドウのStockIDを展開します。
     
    アクション・オブジェクト・フィールドのマップ
  3. Definitionセクションで、TypeからFieldを選択し、Insert object fieldを選択し、フィールドのリストからTradeObject.StockIDを選択します。
  4. CustomerID, Key, Date, Quantity および Priceについて、上記のステップを繰り返します。それぞれ、関連するインターミディエイト・オブジェクト・フィールドにTradeObjectと接頭辞がつきます。
  5. File => Save Projectを選択し、プロジェクトを保存します。プロジェクトの名前は、Trading.xmlとし、Design Dataツールを終了します。

    ノート:ビジネス・ロジックを定義するためにDesignツールを開く前に、Design Dataを閉じて、Design Dataの定義が保存されているかを確かめてください。


ビジネス・ロジックの定義

このセクションでは、Designツールを使用してビジネス・ロジックを定義するために完成させる必要があるステップを記述します。これらのステップは、通常、ビジネス・アナリストによって完成されます。

  1. Trading.xmlファイルを開く
  2. 2つのフィルターを作成
  3. 3つのインタラクション・セットを定義

ノート:Design DataツールとDesignツールで同じファイルを使用します。ツールを使うときは、もう一方のツールは閉じておくのが良いでしょう。

ステップ1:Designツールの開始しTrading.xmlを開く

始めるにあたって、以下を実施してください。

  1. Designツールを開始するために、Start => All Programs => WebSphere Business Events v6.1 => Designを選択します。
  2. プロジェクトを開くため、File => Openを選択し、Trading.xmlを指定します。Design Dataツールで定義したオブジェクトが見えますが、編集することができなくなっています。

ステップ2:After Buy filterフィルターの作成

最初に作成するフィルターは、Buyイベントの1時間以内に発生したイベントかどうかをチェックするためのAfter Buy filterです。

  1. ツールバー上のFilterボタンをクリックします。(または、メニューからCreate => Filterを選択します。)この作業により、エディター上にフィルターのテンプレートが作成されます。
  2. フィルターの名前にAfter Buy Filterを指定し、operator?を選択します。available operatorsのリストが表示されます。図10のように、ContextOperatorフォルダーから、Follows Withinを選択します。
     
    最初のフィルターの作成

    フィルター・テンプレートは、選ばれたオペレーターとその引数を見せるために画面表示が更新されます。

  3. 次に、最初のoperand?をクリックし、Select an eventを選択します。
  4. 図11のように、プロジェクトに定義されたイベントのリストが表示されるので、Buyを選択します。
     
    ストリーム・ファンクションのためのイベント引数の選択
  5. 二つ目のoperand? (図11のWithinの後)をクリックし、Enter textを選択します。
  6. ダイアログが表示されるので、Dayの中に1を入力し、OKをクリックします。

    この段階では、フィルターは、図12のようになります。

     
    After Buy filterフィルター

今、作成したフィルターは、Sell After Buyインタラクション・セットの中で使われます。このフィルターは、同じ顧客がある株に対して、Buyイベントの後にSellイベントを発行したことを識別します。

このシンプルで、読みやすいフィルターは、十分動作します。唯一の問題は、イベントの組み合わせです。例えば、同じ日にある顧客の同一株に対する1つのBuyイベントの後に、3つのSellイベントが続いたとしましょう。今定義したフィルターでは、3つのSellイベントすべては、After Buy Filterを通過します。結果として、3つのSellAfterBuyアクションが生成されます。しかしながら、本当にやりたいことは、BuyとSellのイベントのそれぞれの一組だけを検知する状況だけをフィルターすることでしょう。これを達成するためには、フィルターをかなり洗練させる必要があります。

もし、一日以内にBuyイベントがあって、それが、SellAfterBuyアクションの後のBuyイベントの場合に、イベントがフィルターを通過するという条件を追加します。
これで、上で記述されている2つ目と3つ目のSellイベントでは、フィルターは失敗するでしょう。この条件をフィルターに追加するため、以下を実施してください。

  1. 図13のように、2行目にあるフィルターアイコンfilter symbolをクリックし、Add a filter conditionを選択します。
     
    フィルターコンディションの追加
    新しい条件のテンプレートと2つの条件をつなぐANDオペレーターが追加されます。
  2. 2つ目のフィルター条件に引数を入力する必要があります。図14のように、最初のoperand?の隣のアイコンをクリックし、Select a Predefined Functionを選び、ContextFunction => Event or Action Occursを選択します。
     
    Event or Action Occursの選択
  3. フィルターは、Event or Action Occursファンクションを見せるために変わります。Event or Action Occurs の右側のoperand?をクリックし、Select an Actionを選択し、SellAfterBuyを指定します。
  4. 次に、図15のように、operator?をクリックし、NumericOperatorsのリストからIsを選択します。
     
    numeric operatorの選択
  5. 残りのoperand?をクリックし、Enter Textを選択して、0を入力しEnterキーを押します。フィルターは、図16のようになっているか確認してください。
     
    After Buy filter フィルターの最初の分岐条件

注意点として、フィルター定義の中では、イベントevents symbolとアクションactions symbolは異なるシンボルを使用しています。

フィルターは完成に近づいてきました。以下の条件のときに真を返します。

  • 1日以内にBuyイベントが発生している
  • SellAfterBuyアクションは発生していない

一組のBuyとSellイベントのために、フィルターに他の条件を追加する必要があります。これは、最後のBuyイベントが、最後のSellAfterBuyアクションの後で起きたかどうかをチェックします。これは、1つのBuyが複数のSellイベントと対にならず、繰り返しSellAfterBuyアクションが起こるということを確認します。この条件を追加するために、続くステップを完成させてください。

  1. フィルターの2つ目の条件(図17にあるように、最初の分岐の右側のアイコン)をクリックし、Branch this filter conditionを選択します。
     
    フィルター条件の分岐
  2. 図18のように、作成された分岐のAndを選択し、Orに変更します。
     
    フィルター条件の論理演算子の変更
  3. 図19にあるように、最初のoperand?の後ろのアイコンをクリックし、Select a predefined functionを選択し、DateTimeFunctionを展開し、Last Occurrence Ofを選択します。
     
    DateTime functionの選択
  4. operand?をクリックし、Select an Eventを選び、Buyを選択します。
  5. 続いて、operator?をクリックし、リストの中から、is After DateTimeを選択します。
  6. 残っている、operand?をクリックし、Select a Predefined Functionを選び、Last Occurrence Ofを選択します。
  7. Select an actionを選び、SellAfterBuyを選択します。完成したフィルターは、図20のようになります。
     
    完成したAfter Buy filterフィルター

ステップ3:Speculative Customerフィルターの作成

次に、Speculative Customerフィルターを作成する必要があります。このフィルターは、1日にSellAfterBuySynEventイベント発生が3回ごとに真になるための評価をします。(1日の間に、同一ユーザーによる同一株の売買が3回以上の場合を検出するためのフィルターです。)

完成したフィルターでは、Occurrences of This Event Within機能を使用します。この機能は、現在のイベントのインスタンスをカウントしないため、イベントの3回目が発生した際のカウントは2となります。この振舞いを補正するために1を追加する必要があります。

常に3回目のイベントで真になるフィルターを作ります。これには、Business Eventsの整数の割り算の機能であるdivmodを使い、例えば、式 (n div 3 ) X 3 = n が成り立つ場合、n は、3の倍数であるということを使います。

フィルターは、発生回数の合計の数(現在の1回を含む)が、3の倍数のときだけ、真であると評価します。 フィルターが完成すると、図21のようになります。

 
Speculative Customer フィルター

Speculative Customerフィルターを作成するため、以下を実施してください。

  1. ツールバー上のFilterボタンをクリックします。テンプレートの名前をSpeculative Customerと入力します。
  2. 最初に、フィルターの右側の部分を作成します。OperarotをIsにするところから開始します。
    1. operator?をクリックし、NumericOperatorを展開し、Isを選択します。右側のoperand?の右側にあるアイコンをクリックし、Select a Predefined Functionを選び、NumericFunctionを展開し、Plusを選択します。
    2. 続いて、一番右側のoperand?の右側のアイコンをクリックし、Enter textを選択し、1を入力します。
    3. Plusの前にあるoperand?の右側のアイコンをクリックし、Select a Predefined Functionを選び、ContextFunctionを展開し、This Event Occurs Withinを選択します。
    4. 続いて、左側のoperand?の右側のアイコンをクリックし、Enter textを選択し、Dayのエリアに1を入力します。ここまでで、図22のようになっていることを確認します。
       
      作成途中のSpeculative Customer フィルター
  3. フィルターの左側を同じようなやり方で作成していきます。右から左にフィルターの部分を作成します。オペランドのメニューから事前定義機能を選択し、右側のオペランドにテキストを入力し、フィルターが完成するまで左側のオペランドの処理を繰り返します。
    1. operand?の右側のアイコンをクリックし、Select a Predefined Functionを選び、NumericFunctionを展開し、multiplied Byを選択します。
    2. 右側のoperand?をクリックし、Enter textを選択し、3を入力します。
    3. 左側のoperand?の右側のアイコンをクリックし、Select a Predefined Functionを選び、NumericFunctionを展開し、Divided byを選択します。
    4. 右側のoperand?をクリックし、Enter textを選択し、3を入力します。
    5. 左側のoperand?の右側のアイコンをクリックし、Select a Predefined Functionを選び、NumericFunctionを展開し、Plusを選択します。
    6. 右側のoperand?をクリックし、Enter textを選択し、1を入力します。
    7. operand?の右側のアイコンをクリックし、Select a Predefined Functionを選び、ContextFunctionを展開し、This Event Occurs withinを選択します。
    8. 続いて、左側のoperand?の右側のアイコンをクリックし、Enter textを選択し、Dayのエリアに1を入力します。

Speculative Customerフィルターは、完成しました。

ステップ4:インタラクション・セットの作成

フィルターを使って、ビジネス上の判断をするためのインタラクション・セットを作成します。

  • Buy Acknowledgmentルールは、Buyイベントを受け取り次第、常にBuy Acknowledgmentアクションが生成されます。
  • Sell After Buyルールは、Sellイベントを受け取り、After Buy Filterフィルターが成功する(同一顧客と株の組み合わせでBuyイベントがあった1時間以内に、Sellイベントが発生)と、SellAfterBuyアクションが生成されます。このポリシーは、Customer IDとStock IDが連結されたTradeObject.keyでグループ化されます。
  • Speculative Customerルールは、Sell After BuySynEventイベントを受け取り、Speculative Customerフィルター(同じ顧客から24時間以内にこのイベントの発生が2回以上)を確認して、対応するアクションを生成します。このポリシーは、Customer IDで関連付けられます。

作成するインタラクション・セットを図23に示します。

 
インタラクション・セット

最初のインタラクション・セットを作成します。以下を実施してください。

  1. DesignツールのInteraction Setをクリックします。(または、メニューからCreate => Interaction Setを選択します。)
  2. インタラクション・ブロックのテンプレートが作成されますので、名前をBuy Acknowledgmentとします。
  3. In response toの後のevent?をクリックし、Buyを選択します。Alwaysパートが自動で追加されます。
  4. action?をクリックし、Buy Ackを選択します。
  5. インタラクション・セットの名前(Buy Acknowledgment)の後ろのエリアのどこかで左クリックをして、メニューから、Define context relationshipを選択します。
  6. コンテキストIDとして、TradeObject.Keyを選択してください。
     
    context relationshipの定義

Buy acknowledgementインタラクション・セットは、コンテキストの関係を必要としませんが、顧客と株の組み合わせで、BuyとSellのイベントの数を数えるような場合には、ルールとして、コンテキストIDを持つ必要があります。

2つ目のインタラクション・セットを作成します。以下を実施してください。

  1. 前と同じように、新しいインタラクション・セットを作成し、Sell After Buyという名前をつけます。
  2. 反応するイベントとして、Sellを選択します。
  3. ポリシー名の後ろのエリアのどこかで左クリックをして、メニューから、Define context relationshipを選択します。
  4. ストリームIDとして、TradeObject.Keyを選択します。
  5. 次に、ポリシーにフィルター条件を追加します。図25のように、インタラクション・セットの2行目の頭にあるフィルターアイコンをクリックしてAdd a filterを選択します。
     
    ポリシーへのフィルターの追加
  6. Whereオペレーターのfilter?を選択し、available filtersリストからAfter Buyを選択します。
  7. Alwaysのところで、action?を選択し、actionsリストからSell After Buyを選択します。
  8. アクション・スペース(Alwaysで始まるボックス)で右クリックをして、Add an actionを選択し、action?をクリックして合成イベントであるSellAfterBuySynEventを選択します。

最後のインタラクション・セットを作成する準備ができました。このインタラクション・セットを定義するステップは、Sell After Buyと同じです。

  1. Speculative Customerという名前のインタラクション・セットを作成します。
  2. ポリシーが実行される際に反応するイベントとして、SellAfterBuySynEventを選択します。
  3. インタラクション・セット名の隣で右クリックし、コンテキスト・リレーションシップのキーとしてTradeObject.CustomerIDを選択し定義します。
  4. インタラクション・セットで右クリックし、Add a filter => Speculative Customerを選択します。
  5. フィルターが真になったときに実行されるアクションとして、ここでは、Speculative Customerを選択します。

WebSphere Business Eventsアプリケーションは、完成しました。プロジェクトを保存して、Designツールを終了してください。


アプリケーションの配置と実行

作成した Business Eventsアプリケーションをデプロイし実行するため、以下のステップを実施してください。

  1. イベントとアクションにコネクター情報を指定します。この後に続く、他のIBM製品との統合のシリーズで変える必要がある情報であるためデプロイメント・ステップに含まれています。
  2. まだ、Business Eventsランタイムを開始していなければ、WebSphere Application ServerからBusiness Eventsランタイムを開始します。
  3. ランタイムへ、Business Eventsアプリケーションをデプロイします。
  4. ヒストリーを有効化します。
  5. Business Eventsランタイムを再始動します。
  6. コネクターを開始します。

ステップ1:コネクター情報の指定

Business Eventsアプリケーションのテストする前に、すべてのイベントとアクションに対してコネクター情報を指定します。簡単にするため、ここでは、ファイルシステム・コネクターを使います。

  1. Design Dataツールを開始し、プロジェクトを開きます。
  2. Touchpointsを展開し、Buyを選択します。
  3. 右クリックをして、Event Propertiesを選択します。
  4. 図26のように、Connectionタブを開き、File System Connectionをクリックします。
  5. 図26のように、File Event Connectionダイアログで、FormatからConnector Packetを選択します。
  6. 図26のように、Contact frequency (minutes)で1を選択し、Configureをクリックします。
  7. 図26のように、Serverダイアログで、イベントのファイルをどこに置くかをDirectoryに指定します。例えば、C:\WBE\test\BuyFile Pattern*.xml などです。フォルダーは、ファイル・システムに存在しているパスを指定しているか確認します。
  8. Sellイベントについてもステップを繰り返します。Formatには、Connector Packetを選択し、Contact frequency (minutes)1を選択し、DirectoryC:\WBE\test\Sellを指定します。

    ノート:SellAfterBuySynEvent <- SellAfterBuySynActionイベントに上記のステップを実行する必要はありません。このイベントは、Business Events自身によって内部的に生成されます。

     
    コネクター情報の設定

次に、アクションについても同様な設定のステップを実施します。

  1. Buy Ackを右クリックし、Action propertiesを選択します。
  2. Action Properties ダイアログでConnectionタブを開き、File System Connectionをクリックします。
  3. server セクションで、BuyとSellのイベントは、関連性から異なるパスを設定します。例えば、c:\WBE\output などです。これは、アクションによって生成されたBusiness Eventsの出力の場所です。 フォルダーは、ファイル・システムに存在しているパスを指定しているか確認します。
  4. アクションのためのファイル・パターンを指定します。例えば、Buy*.xml などです。Business Eventsの出力が一目見てわかりやすいようにアクションのタイプのそれぞれに、異なるネーミング・パターンを指定します。
  5. これらのステップをSellAfterBuySpeculativeCustomerに繰り返し、ファイル・パスは同じもの(例えば、c:\WBE\output)を使用します。ただし、ファイル・パターンは、sellAfterBuy*.xmlSpeculativeCustomer*.xmlのように異なるものを指定します。
  6. プロジェクトを保存します。

ステップ2:Business Eventsランタイムの開始

Business Eventsランタイムを開始するため、以下を実施してください。

  1. Start => IBM WebSphere => Application Server Network Deployment => Profiles => AppSrvr01 => Start Serverを選択し、ランタイムを起動します。
  2. Webブラウザーを開き、WebSphere Application Server 管理コンソールを開きます。例えば、http://localhost:9060/ibm/console でadminのユーザーIDでログインします。
  3. 図27のように、コンソールから、WBERuntimeアプリケーションが始動していることを確認します。
     
    Business Events の稼動状況の確認
  4. データベースマネージャーが始動していることを確認します。Derbyを使用している場合は、<WBE Install>\WAS\derby\bin\networkServer の中にあるstartNetworkServer.batを起動します。

ステップ3:Business Eventsアプリケーションのランタイムへの配置

ランタイムへBusiness Eventsアプリケーションをデプロイします。以下を実施してください。

  1. Design Dataツールを起動し、Tools => Repositoriesを選択し、Loginをクリックします。
  2. ユーザーIDとパスワードを入力します。
  3. デフォルトで使用しているポート番号9080を使用していないWebSphere Application Serverの場合、正しいポート番号を入力してください。
  4. 図28のように、RepositoryダイアログのProjectタブが開いている状態で、Ctrl+Aを押し、リストされているすべてのエレメントを選択し、Add inボタンをクリックします。ここでは、レポジトリーにすべてのエレメントを追加します。再度、ユーザーIDとパスワードの入力を求められます。
     
    レポジトリー・ビュー
  5. Closeボタンをクリックし、Design Dataツールを終了させます。プロジェクトが保存されることを確認します。

ステップ4:ヒストリーの有効化

プロジェクトはデプロイされています。Business Eventsのヒストリー機能を有効化します。ここでは、イベントが送られたときにBusiness Eventsで何が起きたのかをレビューすることができるように、Business Eventsのランタイムによって、イベント、アクション、フィルターとインタラクション・セットの経過を追うことができるようにします。

  1. Start => IBM WebSphere Business Events v6.1 => Events => Propertiesを選択します。
  2. user ID とpasswordの両方にwbeと入力しNextをクリックし、次と次のNextもクリックします。
  3. Server Settingsダイアログで、Enable historyの値をfalse からtrueに変更します。
  4. Save and exitをクリックします。

ステップ5:Business Eventsランタイムの再起動

ステップ2の手順を繰り返し、Business Eventsランタイムを再起動します。

ステップ6:コネクタープロセスの始動

コネクタープロセスを始動させるため、<WBE_install> \director\bin にあるconnector.bat (or .sh)を実行します。


アプリケーションのテスト

Business EventsのBuy とSellのイベントとアクションが生成されるテストを見ていきます。

  1. サンプルのBuyイベントとして、以下の内容をファイルにコピー・アンド・ペーストし、Buy_event.xmlというファイル名で保存します。ファイル名が、ファイル・コネクター・パターンのBuy*.xmlとあっていることを確認します。
    <connector name="Trade System" version="2.2">
      <connector-bundle name="Buy" type="event">
        <connector-object name="TradeObject">
          <field name="CustomerID" type="String">Jamie Danny</field>
          <field name="StockID" type="String">IBM</field>
          <field name="Date" type="DateTime">2008-06-04T10:04:41Z</field>
          <field name="Quantity" type="Real">10</field>
          <field name="Price" type="Real">150</field>
        </connector-object>
      </connector-bundle>
      <system>TISMANA</system>
      <timestamp>2008-06-04T10:04:41Z</timestamp>
      <loginfo>Test values from WebSphere Business Events:Design Data</loginfo>
    </connector>
  2. サンプルのSellイベントとして、以下の内容をファイルにコピー・アンド・ペーストし、sell_event.xmlというファイル名で保存します。ファイル名が、ファイル・コネクター・パターンのsell_event.xmlとあっていることを確認します。
    <connector name="Trade System" version="2.2">
      <connector-bundle name="Sell" type="event">
        <connector-object name="TradeObject">
          <field name="CustomerID" type="String">Jamie Danny</field>
          <field name="StockID" type="String">IBM</field>
          <field name="Date" type="DateTime">2008-06-04T10:07:15Z</field>
          <field name="Quantity" type="Real">9</field>
          <field name="Price" type="Real">150</field>
        </connector-object>
      </connector-bundle>
      <system>TISMANA</system>
      <timestamp>2008-06-04T10:07:15Z</timestamp>
      <loginfo>Test values from WebSphere Business Events:Design Data</loginfo>
    </connector>
  3. Buyイベントのファイルをコピーしファイル・コネクターで指定した場所(例えば、c:\WBE\test\Buy)に貼り付けます。
  4. 1分待ちます。(コネクタープロパティーで指定したポーリング間隔です。)このステージでは、イベントのファイルが消え、Buy Ackアクションがアクション・コネクターによって指定されたディレクトリー(例えば、c:\WBE\output)に生成されます。
  5. 続いて、同じ顧客と株のSellイベントを送ります。Sell After Buyアクションが生成されます。
  6. 追加で、Buy と Sellのイベントを送ると、Speculative Customerアクションが生成される原因となります。

図29に、テストによって生成されるアクションのファイルがc:\WBE\test\Outputに見えます。

 
Figure 29. ファイル・コネクターを使ったBusiness Events 出力のサンプル

ノート:<WBE_install>\director\binにあるcmdlineツールを使って、Business Eventsに直接イベントを送ることができます。ツールを使うために、次のコマンドを実行します。cmdline <Event file>.xml
例えば、BuyイベントをBusiness Eventsに送るコマンドは、cmdline c:\temp\Buy_event.xml のようになります。

ノート:コネクターウインドウで以下のようなメッセージを繰り返し何度も見た場合、

FS Sending event: Sell
FS Sending event: Sell
.…

期待した結果のアクションにならないので、コネクター情報の指定のステップ 5が正しく設定されているかを確認してください。

Business Eventsモニターでのレポートの表示

イベントが処理されているときにBusiness Eventsの中で何がおきているかをBusiness Eventsのモニターで見ることができます。ここでは、上記のヒストリーの有効化で可能にしています。レポートを見るためのBusiness Eventsのモニターの使い方については、以下を実施してください。

  1. Webブラウザーで次のURLを入力してください。http://localhost:9080/wbe/common/login.jsp ポート番号が正しく設定されていることを確認します。
  2. user name と passwordを入力し、ToolリストからAdministrationを選択し、Loginをクリックします。
  3. コントロール・パネルの上部にあるReportsアイコンをクリックします。
  4. Report Typeとして、Actions by Touchpoint by timeを選択します。
  5. Generate Reportアイコンをクリックして、レポートを実行します。レポートは、図30のように、別のウインドウに表示されます。アクションのリストを確認した後で、ウインドウを閉じます。
     
    Business Events モニター出力のサンプル

レポート・ビューで異なるレポートのタイプを選択した場合、WebSphere Business Eventsが、実行している間に使用した、イベント、フィルター、ポリシー、ストリーム、およびインターミディエイト・オブジェクトを見ることができます。


まとめ

ここまでで、Business Eventsのアプリケーションの構築と実行の仕方を学んできました。このシリーズの残りの記事では、このシナリオとアプリケーションを使って、他のIBM製品からBusiness Eventsにイベントを提供し、Business Eventsからアクションを受け取る方法について説明していきます。


謝辞

著者は、この記事に対して、有用なコメントとフィードバックをしてくれたEric Erpenbach と James Taylorに対して、謝意を表します。


ダウンロード

内容ファイル名サイズ
XML fileTradingSystem.zip3KB

参考文献

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=WebSphere
ArticleID=356677
ArticleTitle=WebSphere Business Events によるビジネス・イベント処理: パート 2 ビジネス・イベント・アプリケーションの構築
publish-date=10012008