2005/12/9に行われた丸山先生レクチャー内で行ったデモをダウンロードできるようにしました。この際なので、ちゃんとまとめてみました。連載で解説を行いたいと思います。
資料のダウンロード(最下部の20051209_demo_1.pdfか20051209_demo_6.pdf)
デモアプリのダウンロード(gmapsoa_20060525.zip 13.2MB)
※2006/5/25変更:新しいバージョンを作ったのでリンク先を切り替えました。
1.適当なところで解凍する
2.servicemix.batを実行する
3.servicemixEx.batを実行する
4.http://localhost:8080/exec/にアクセスする
5.なんとなく試す
注:JDK1.4.2以降。8080ポート使うのでTomcatなどは落としておくこと。Firefox推奨。IEで経路を表示したい場合はVMLの設定をおこなう必要があります。Mac OS Xで動確しました(maven servicemix, maven servicemixExでいけます)。
JBIとは
丸山先生の資料からの抜粋になります(ダウンロード)。ようは、メッセージ交換を通じたサービスのコンポジットによるアプリケーション構築手法の標準仕様です(意味不明?)。
JBIの特徴はJBIコンテナと呼ばれるコンテナを用意し、その上にコンポーネントをデプロイしたうえで、それらのメッセージ交換手法だけを標準化していることです。ですから、コンテナの外側はなんでもよいことになります。その、なんでも良いプロトコルをJBIコンテナ内部に入れる際には、JBI手順に変換する必要性があります。その役目を負うコンポーネントをBinding Component(バインディング・コンポーネント。略称BC)と称します。その他のコンポーネントはService Engine(サービス・エンジン。略称SE)と呼びます。これらは特定の実装があるわけではなく、単に役割として考えてもらえばいいです。

(丸山先生の資料から抜粋)
メッセージ交換はバス(ルータ)を通じて行います。これをNormalized Message Router(ノーマライズド・メッセージ・ルータ。略称NMR)と呼びます。出発点であるコンシューマーはメッセージや行き先情報をMessageExchangeというモノに詰め込みNMRに投げ込みます(Send)。一方、サービスを提供するプロバイダは、NMRに対してAcceptを行うことで自分宛のMessageExchangeを取得して処理を行うわけです。このようにしてサービスの利用者と提供者が、メッセージ交換によって疎結合の関係にあるわけです。ここらへんがSOA的なところでしょう。
なお、プロバイダは、一番最初に自分自身をNMRに登録します。それをアクティベーションと呼びます。

(丸山先生の資料から抜粋)
整理すると、JBIコンテナ内には"外部とやり取りするBC"と"ロジックを担当するSE"がデプロイされています。そいつらはメッセージ(MessageExchange)を交換することで協調して動作します。サービス利用者(コンシューマ)がメッセージをNMRに送ると、サービス利用者(プロバイダ)がメッセージを受け取り処理を行うわけです。
また、メッセージ交換には種類があります。簡単にいえば同期と非同期です。同期は返事を待つまで処理を止めるもの。非同期は返事を待ちません。例えばHTTPは同期メッセージの代表格です。サーバが処理している間、ブラウザはじっと待っています。
基本的にJBIで重要なのはこれだけです。あとはServiceとEndPointとかServiceUnitとデプロイとか、いろいろありますが、そんなに大切ではありません。
ServiceMixとは
ここまで書いて、すでに疲れました(w。ServiceMixは、JBIのいいとこ取りをして、めんどうなところを省いてしまったものです。ですからJBI"準拠"です。丸山先生に言い方を借りれば、JBIとServiceMixの関係はEJB2とEJB3みたいなものです。彼らは、"bending the JBI specification some, but keeping to the APIs(APIは守るけど仕様はちょい曲げる)"と明記しています(http://servicemix.org/Does+JBI+depend+on+XML+and+WSDL)。
(正確に言えば、EJB3はEJB2をラップしただけで本質的には変わらないわけですが、ServiceMixは、そういうしがらみもなく、必要のないものは本当にばっさりと無視しています)。
ですから、ServiceMixをやってもJBIを完全に理解したとはいえないのですが、JBIの本質は理解することができます。しかも、JBIよりも遥かに直感的に理解することができるのです。
ServiceMixはコンポジット・アプリケーションの構築手法です。SOAというBuzzワードとして理解する必要はありません。僕が熱くなって書いてしまいましたがコンテナベース・サービス・インテグレーションというものです(たぶん)。
丸山先生もJBIの仕様書を読んでいるだけでは分からなかったことが、ServiceMixを通じることで理解することができたと言われています。この感覚を知るためにも、ぜひコードを見て、感じてみてください。それぞれの感じ方だとは思いますが、SOAというアイデアが非常に身近であることに気づいていただければと思います。
さて、次回はデモアプリの概要とservicemix.xmlの説明を書いてみたいと思います。

コメント (6)
はじめまして、takamotoと申します。
昨年の12/9に丸山先生のセミナに参加して、鈴木様のプレゼンを聴講させていただきました。smixを使いこなしている人がいる事に、大変驚きました。smixに関して、少し意見交換をさせていただいても宜しいでしょうか。
投稿者: takamoto | 2006年01月05日 15:07
日時: 2006年01月05日 15:07
takamotoさん、はい、どうぞ。メールはyusukeあっとarclamp.jpです。
投稿者: yusuke | 2006年01月05日 19:35
日時: 2006年01月05日 19:35
takamotoです。快諾していただき、ありがとうございます。(折角快諾していただいたのに、質問が遅くなり申し訳ありません。)
私は、ServiceMixをはじめとするESB製品をEAIの延長にある製品と考えていました。業務でEAIを担当しているので、「ESB=標準化されたEAI」という構図がイメージし易かったというのもあります。しかし、EAIが良く使われている「企業内のシステム間連携」に、ServiceMixを適用することに違和感を感じています。単に、ServiceMixが枯れていないというだけではなく、根本的に使い方が違うような気がしているのです。「ESB=標準化されたEAI」という考え方は間違っているのでしょうか。
以上、コメント欄で質問させていただきました。
投稿者: takamoto | 2006年01月12日 21:17
日時: 2006年01月12日 21:17
私見としてお聞きください。僕も「ESB=標準化されたEAI」に賛成です。JBIはまさにそうでしょう。歴史的に考えてもEAIとMOMの間のアプローチになります。
ServiceMixは確かにJBIの実装でありESB的要素は持ちます。しかし心意気がまったく異なります。ServiceMixはDIコンテナの系譜であり、(狭義の)アプリケーションを作成するためのフレームワークです。DIはインターフェースで結合しますが、ServiceMixはメッセージで結合するわけです。
ですから「ESB=標準化されたEAI」でありながら、ServiceMixを企業間連携に使うのは「根本的に使い方が違う」というのは非常に正しい感覚だと思います。
ただ、ServiceMixもJBIであることに違いないわけです。コンテナの外部がなんであろうとBCによって内部に繋ぎこむというのが根本的にサポートされています。
EAI的企業間連携というのはモニタリング、リカバリ、性能、セキュリティなどに厳密です。JBI実装の商用製品は仕様外でこれを実装して競争要因とするはずです。ServiceMixにこれを期待するのは間違っています。
ですから、EAI的企業間連携というのには向かないと思いますが、Web2.0的企業間連携であれば十分に可能だと思っています(曖昧な定義ですね、なんとなくわかりますかねw)。
なのでデモは、まさにこれを意識しています。
こんな感じでよろしいでしょうか?
投稿者: yusuke | 2006年01月12日 23:03
日時: 2006年01月12日 23:03
ありがとうございます!!!鈴木様がクイックに返事をして下さるのに、私の方が遅くて、申し訳ありません。
「ServiceMixはDIコンテナの系譜であり、(狭義の)アプリケーションを作成するためのフレームワーク」という表現は、個人的には分かりやすいと思いました。GeronimoやJBossなどに組み込めることを考えれば、フレームワークとしての位置付けが強いと言えそうですね。ServiceMixの各種運用機能を強化した "ServiceMix Enterprise Edition" のような商用製品がリリースされると「EAI的企業間連携」に使えるのでしょうか。(この辺の話は重要なポイントではないと思いますが。。。)
「Web2.0的企業間連携」というのは何となく分かるのですが、、、「インターネット上に公開されているサービスを、オープンな技術で繋ぐ」と理解すれば良いのでしょうか。私も、鈴木様が作られたような、ServiceMixを利用した効果的なデモを考えてみます。
投稿者: takamoto | 2006年01月17日 20:21
日時: 2006年01月17日 20:21
"Web2.0的企業間連携"は、ですね、書いておいてなんですが適当です(w。なんとなく思うイメージは、軽量、相手が落ちててもいい、遅延も少しは許される、というようなベストエフォートで緩い関係です。
なので決済が絡むようなものは無理ですね。ともかくアジャイルに情報をシェアしたいとか、そういうニーズに向くと思います。
今の企業間連携というとお金をかける以外に手段がないわけですが、ここのコストが劇的に下がることで新しい使い方が生まれればなと思っています。
サービス品質は下がるけど、コモディティ化されることで新たな価値が生まれるというのは、どこの分野にでもある話ですね。
投稿者: yusuke | 2006年01月18日 20:06
日時: 2006年01月18日 20:06