コンポーネントを組み合わせる
サーバ側のコンポーネントとクライアント側のコンポーネントができあがりました。後はコンポーネント同士を組み合わせるだけです。組み合わせるにはコンポジットファイルという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のようになります。

今回はサンプルプログラムのネットショップを構築しながら、JSONRPCがTuscanyの中でどのように使われているかということを説明しました。次回は、AtomがTuscanyの中でどう使われているかを説明していきます。(プログラムについてはAtomを実装したものを含め次回ダウンロードできるよう用意します)



