« デブサミ2006登壇します&受付開始 | メイン | ServiceMix (3) servicemix.xmlの概要 »

ServiceMix (2) デモアプリケーション概要

 さて、今回はデモの概要です(デモのダウンロードはServiceMix (1) JBIとServiceMix から)。

ビジネス概要
 ダウンロードできるアプリケーションでは京都を題材にしてあります。京都を訪れたい人が、人数とグループ(家族/友達/男のみ/女のみ)を入力すると、地図上にその条件にあった情報を表示しします。あとは、情報の詳細をみたり、それらを任意に選び経路を表示させることができます。表示される情報は寺院の情報、イベントの情報、そして百貨店の情報です。

 WindowsでJDK1.4.2以降が入っているなら、ダウンロードして解凍するだけですぐに試せるようになっています(Macはmaven経由でいけました。Linuxは文字化けしたらごめんなさい)。お試しください。


Web層の概要
 Web層はいわゆるAjax(Asynchronous JavaScript + XML)です。地図はGoogle Mapsから読み込み、京都の情報はServiceMixからXML形式で取得しています。わかりやすいWeb2.0的Mush-upサイトでしょう。
 Ajaxの作りを簡単に。ダウンロードしたフォルダのsrc\webappにあるmymap.js(UTF-8)を見てください。最下部のメソッドcreateMyMapは基本的なGoogle Mapsの実装をしています。つまりサーバがServiceMixであることは意識していません。ちょっと特別なのはリクエストでXMLをPOSTしている点だけです。

  var request = GXmlHttp.create();
  request.open('POST', '/exec/jbi/', true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      //受信後の処理(マーカーをおいて、リストに追加)
    }
  }
  request.setRequestHeader("content-type", 
      "application/x-www-form-urlencoded;charset=UTF-8");
  request.send(DemoUtil.serializeRequestInfos(document.
      getElementById('entryform')));


サーバロジックの概要
 サーバには複数のInfoProviderというサービスがデプロイします。InfoProviderはユーザーが入力した条件をキーにして情報を返却します。今回は寺院の情報、イベントの情報、百貨店の情報を提供する3つのInfoProviderが存在します。ServiceMixはデプロイされた3つのInfoProviderを呼び出し、それらの情報を集積しています。


ServiceMix内の概要

 ServiceMixで実行すべきことは、以下の2つです。
1.クライアントからのリクエストをJBIに流し込み
2.InfoProviderを呼び出し、その結果をまとめてレスポンス

 まずは次の図を見てください(クリックで拡大図を表示)。

 左側がブラウザになります。オレンジの丸がServletになっており、HTTPリクエストのストリームをそのままhttpBinding(Hb)に流し込みます。

 httpBinding(Hb)はBindingComponentの役割を果たしておりMeesageExchangeに変換後、asyncForwarder(As)に渡します。

 asyncForwarder(As)は、同期(InOut)から非同期(InOnly)への変換を行います。ご存知の通りHTTPは同期メッセージですが、InfoProviderを非同期実行させるために変換をする必要性があります。内部的には、受け取った同期メッセージを取っておきつつ、その内容をコピーして、findAggregator(Ag)に新しい非同期メッセージをしています。

 findAggregator(Ag)は、指定された複数のService Engineにメッセージを非同期で送信し、それらの結果(XML)を全て集めて返却します。

 今回の設定ではP1、P2がInfoProviderになります。そしてexP最後の1つだけに仕掛けがしてあります。exPは、そのままexServiceOutBound(OB)に処理を流しています。

 exServiceOutBound(OB)は、HTTPでアウトバウンドを行うBindingComponentです。アウトバンド先は別サーバインスタンスのServiceMixになります。

 別サーバインスタンスのServiceMixの中は、これまでの説明どおりの仕組みになっています。そして3つ目のInfoProvider(Pex)がデプロイされています。


 つまりInfoProviderは全部で3つではありますが、2つが同インスタンス内に元々デプロイされているものですが、最後の1つだけは別サーバインスタンス内にあり、そことはHTTP(REST)を通じて処理を依頼しているのです。3つのInfoProviderを動かすためではありますが、必要な処理に分解していくと、このような形で実現することになります。

 めんどうだなぁと感じるかもしれませんが、実はInfoProvider以外は全て汎用的なコンポーネントです。後でInfoProviderの説明をしますが中身はPOJOです。POJOを作成するだけで、あとは処理手順を組み合わせるだけでアプリケーションができていると考えると面白くありませんか?


 これをServiceMix上で設定するためのservicemix.xmlを説明しようと思っていたのですが、長くなったので切ります。次回はservicemix.xmlです。

ServiceMixの一覧

トラックバック

このエントリーのトラックバックURL:
http://www.arclamp.jp/mt33/mt-tracback.cgi/1518

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2005年12月10日 21:00に投稿されたエントリーのページです。

ひとつ前の投稿は「デブサミ2006登壇します&受付開始」です。

次の投稿は「ServiceMix (3) servicemix.xmlの概要」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Creative Commons License
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.
Powered by
Movable Type