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 チャネルを使って、オークション型の見積り収集を実現
- タイムアウト方式で、新たな入札が来たらタイムアウト値をリセット
- プロセスマネージャの振る舞いを記述したアクティビティ図
実装ツールセット(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 Service | SSNに基づく信用スコアの提供 | 同期 |
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.)
プロセスモデル実装
- 実際のプロセス図は、ソリューションアーキテクチャで示したアクティビティ図に非常に似た形になる。
- AEオブジェクトcreditRequestを作成(ECMAScript)
- 信用調査機関へ信用スコアを問い合わせる(同期型オペレーション呼び出し)
- AEオブジェクトbankRequestを作成(Mapper)
- 銀行からの入札レスポンス(bid)を格納する配列を作成(ECMAScript)
- bankRequestオブジェクトを bank.loan.request チャネルへ発行(Signal Outタスク)
- bank.loan.reply チャネルへリプライメッセージが来るのを待機(Signal Inタスク)
- Aggregatorの実装、全てのbidからベストな見積りを選定しクライアントへ返信(ECMAScript)
並列型オークションの管理(Managing Concurrent Auctions) †
実行(Execution) †
- 簡単なツールを使って Pub-Sub チャネルの全てのメッセージをコンソールにログ出力。
- テストクライアントからリクエストメッセージ受信:
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
- 融資ブローカーから信用調査機関へのリクエスト:
2003-07-12 16:42:30 (2003-07-12 21:42:30.052000000Z):
subject=credit.loan.request,
reply=_INBOX.C0A80164.1743F10809898B4B60.4,
SSN=1234567890
- 銀行へメッセージを発行してオークション開始:
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
- 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ベースのプロセス管理ツールはメッセージングの詳細を隠蔽してくれるが、かといってメッセージングの存在を忘れるとプロジェクトが死に至ることもある。
担当者のつぶやき †
- p.450 に "Channel Adapter [xxx]" というタイポがある。
- TIBCO AEは、たぶん今はTIBCO ActiveMatrix?という製品名になっている。
みんなの突っ込み †