EIP / Asynchronous Implementation with TIBCO ActiveEnterprise


Asynchronous Implementation with TIBCO ActiveEnterprise?

  • 抄訳で・・・

サマリ

商用EAI製品(TIBCO ActiveEnterprise?)を使うと、ビジュアルでリッチなEAI開発ができる。

詳細

  • これまでの2つの実装では、AxisもMSMQもインテグレーションの基本的なAPIを提供しているだけで、アプリケーションがほぼ全てを作りこむ必要があった。
  • 商用EAI製品スイートはインテグレーションソリューションの開発をもっと楽にする。ドラッグ&ドロップで開発できるビジュアルな開発環境や、システム管理やメタデータ管理の機能まで提供する。
  • ここでのTIBCOを使った実装では、以前の実装と異なり、オークション型のScatter-Gatherアプローチを採用し、Recipient Listの代わりにPublish-Subscribe Channelを用いる。

ソリューションアーキテクチャ(Solution Architecture)

  • TIBCO融資ブローカーのソリューションアーキテクチャ
    • Scatter-Gather と Pub-Sub チャネルを使って、オークション型の見積り収集を実現
    • タイムアウト方式で、新たな入札が来たらタイムアウト値をリセット
      ComposedMessagingTIBCO.gif
  • プロセスマネージャの振る舞いを記述したアクティビティ図
    ComposedMessagingTIBCOActivity.gif

実装ツールセット(The Implementation Toolset)

  • TIBCO製品を使う場合、同じ問題に対して様々なツールで様々なソリューションがあり得るため、最適なものを選ぶ必要がある。
  • このサンプルで用いるツール:
    • TIB/RendezVous? Transport -- いわゆるMOM
    • TIB/IntegrationManager? Process Manager Tool -- グラフィカルなプロセス/ワークフロー開発ツール。スクリプト言語にECMAScript(JavaScript?)を用いる。
    • TIBCO Repository for Metadata Management -- TIBCOではメタデータ(ActiveEnterprise?(AE)オブジェクト)をTIBCOリポジトリに入れて管理する。メタデータへのアクセスは動的言語のECMAScriptを使うので、システムを腐らせないようにするには、適切なテスト&開発プラクティスが欠かせない。

インタフェース(The Interfaces)

サービス機能会話型
Loan Broker開始リクエストの受信同期
信用スコアの取得同期
銀行への融資オークション実施同期
最良見積りの返却同期
Credit ServiceSSNに基づく信用スコアの提供同期
Bank(s)信用格付けと融資額に基づく見積りの提出非同期
  • サービスレベルに関しては、このサンプルは見積りだけで法的拘束力の発生する契約を扱わないので、単に開始リクエストを再送するだけでよいこととする。

同期型サービスの実装(Implementing the Synchronous Services

融資ブローカシステムには2つの同期型インタフェース -- 顧客=融資ブローカ間、融資ブローカ=信用調査機関(credit bureau)間 -- がある。 同期インタフェースの実装は、以下のステップを取る:

  • AEクラスを定義 -- AEクラスは、TIB/RendezVous?チャネルを流れるメッセージのデータ形式。
  • AEオペレーションを定義 -- インタフェースにメソッドを定義するように、AEクラスにはオペレーションを定義できる。インタフェースと同様、ここでは実装は定義しない。
  • プロセス図を作成 -- プロセス図がAEオペレーションの実装。
  • リクエスト受信用にクライアント/サーバチャネルを作成 -- TIB/RendezVous?チャネルを作って、既に作ったAEクラスを紐付ける。
  • プロセス図をインスタンス化するためのジョブクリエータを設定 -- ジョブクリエータは、チャネルから値を読み取って、ジョブ=プロセス図インスタンスを生成するもの。

融資ブローカープロセス(The Loan Broker Process)

設計上の検討事項

  • プロセス図に何を入れて何を入れないか -- ビジネスロジックとプロセスロジックの関心事の分離 -- が重要。
    • プロセスロジック = 外部システムとの相互作用。次にどんなシステムと接続するか? システムが利用不可だった場合どうするか?
    • ビジネスロジック = ドメイン固有言語。注文をどうやって有効化するか? 信用スコアをどうやって計算するか? 融資をどう見積もるか?
  • プロセスの実装もMVCの概念を当てはめることができる:
    • Workflow (= View) -- ワークフローの可視化モデル
    • Controller -- ワークフローに基づきモデルを動かすプロセスエンジン
    • Model -- 基礎となるビジネスコード(ECMAScript, JavaScript?, Java, J2EE, etc.)

プロセスモデル実装

ComposedMessagingTIBCOLoanBrokerProcess.gif
  • 実際のプロセス図は、ソリューションアーキテクチャで示したアクティビティ図に非常に似た形になる。
    1. AEオブジェクトcreditRequestを作成(ECMAScript)
    2. 信用調査機関へ信用スコアを問い合わせる(同期型オペレーション呼び出し)
    3. AEオブジェクトbankRequestを作成(Mapper)
    4. 銀行からの入札レスポンス(bid)を格納する配列を作成(ECMAScript)
    5. bankRequestオブジェクトを bank.loan.request チャネルへ発行(Signal Outタスク)
    6. bank.loan.reply チャネルへリプライメッセージが来るのを待機(Signal Inタスク)
    7. Aggregatorの実装、全てのbidからベストな見積りを選定しクライアントへ返信(ECMAScript)

並列型オークションの管理(Managing Concurrent Auctions)

  • オークションの並列開催を実現するために、Correlation IdentifierSelective Consumer を使う。
    • Signal Inタスクでメッセージのフィルタリングを行うECMAScript:
       (event.msg.CorrelationID == job.bankRequest.CorrelationID)

実行(Execution)

  • 簡単なツールを使って Pub-Sub チャネルの全てのメッセージをコンソールにログ出力。
  1. テストクライアントからリクエストメッセージ受信:
     2003-07-12 16:42:30 (2003-07-12 21:42:30.032000000Z):
     subject=customer.loan.request,
     reply=_INBOX.C0A80164.1743F10809898B4B60.3,
     SSN=1234567890 LoanAmount=100000.000000 LoanTerm=360
  2. 融資ブローカーから信用調査機関へのリクエスト:
     2003-07-12 16:42:30 (2003-07-12 21:42:30.052000000Z):
     subject=credit.loan.request,
     reply=_INBOX.C0A80164.1743F10809898B4B60.4,
     SSN=1234567890
  3. 銀行へメッセージを発行してオークション開始:
     2003-07-12 16:42:30 (2003-07-12 21:42:30.092000000Z):
     subject=bank.loan.request,
     SSN=1234567890 CreditScore=345 HistoryLength=456 LoanAmount=100000.000000
     CorrelationID="pUQI3GEWK5Q3d-QiuLzzwGM-zzw" LoanTerm=360
  4. 2つの銀行スタブから入札を受信:
     2003-07-12 16:42:30 (2003-07-12 21:42:30.112000000Z):
     subject=bank.loan.reply,
     InterestRate=5.017751 QuoteID="5E0x1K_dK5Q3i-QiuMzzwGM-zzw" ErrorCode=0
     CorrelationID="pUQI3GEWK5Q3d-QiuLzzwGM-zzw"
     
     2003-07-12 16:42:30 (2003-07-12 21:42:30.112000000Z):
     subject=bank.loan.reply,
     InterestRate=5.897514 QuoteID="S9iIAXqgK5Q3n-QiuNzzwGM-zzw" ErrorCode=0
     CorrelationID="pUQI3GEWK5Q3d-QiuLzzwGM-zzw"

結論(Conclusions)

  • コードをゴリゴリ書く実装も、GUIベースの実装も一長一短がある。
  • EAIでは設定(configuration)が大きな部分を占めるので、GUI開発ではそれが非常にすっきりする。
  • GUIベースのプロセス管理ツールはメッセージングの詳細を隠蔽してくれるが、かといってメッセージングの存在を忘れるとプロジェクトが死に至ることもある。

担当者のつぶやき

みんなの突っ込み