コンポーネントを組み合わせる
サーバ側のコンポーネントとクライアント側のコンポーネントができあがりました。後はコンポーネント同士を組み合わせるだけです。組み合わせるにはコンポジットファイルというXMLファイルを使用します。図18が今回のコンポジットファイルです。コンポジットファイルはcomposite
要素がルート要素です。component
要素がその子要素で、今回は2つの要素「WineShop」と「WineCatalog」があります。WineShopコンポーネントからWineCatalogコンポーネントのサービスを呼び出すには、WineShopコンポーネントの子要素であるreference
要素で指定します。name
属性が「wineCatalog」、target
属性が「WineCatalog」がそれに相当します。name
属性の値が、JavaScriptでtuscany.sca.Referenceでインスタンス化した時の引数となります。target
属性はサービスとなるコンポーネントのname
属性の値を指定します。この場合は「WineCatalog」となります。コンポーネントに2つ以上のサービスを持つ場合は指定の仕方が少し複雑です。次回説明します。
今回注意してほしいのはbinding
要素です。WebブラウザとWineShopはhttpで、WineShopとWineCatalogはjsonrpcで結合しています。この指定によりコンポーネントを結合する方法が決定するのです。先述のとおり、WineCatalogをWebサービスで結合することも可能です。コンポーネントがこれだけの指定で結合できることに驚かざるをえません。JSONプログラミングの複雑さを思うと、本当にクライアントとサーバの間でJSONフォーマットのテキストデータがやりとりされているとは想像できません。
ワインリストの表示
最後にドメイン内でコンポジットをインスタンス化するプログラム(図20)を作成して、Eclipseで「Javaアプリケーションの実行」を選択すると、勝手にmain
メソッドを探してくれ、実行してくれます。ブラウザでURLに「http://localhost:8080/wineshop/WineShop.html
」を指定すると、図21のようにワインリストが表示されます。まだ物足りませんが次回から徐々にできあがります。
ちなみに、今回のプロジェクト構成は図22のようになります。
![図22:今回のプロジェクト構成](http://cz-cdn.shoeisha.jp/static/images/article/4329/Tuscany_3_22s.gif)
今回はサンプルプログラムのネットショップを構築しながら、JSONRPCがTuscanyの中でどのように使われているかということを説明しました。次回は、AtomがTuscanyの中でどう使われているかを説明していきます。(プログラムについてはAtomを実装したものを含め次回ダウンロードできるよう用意します)