はじめに
この連載では、「オープンソースApache Tuscanyで楽しむSOA」として、オープンソースのSCA準拠製品である「Apache Tuscany」を取り上げ、SOA(サービス指向アーキテクチャ)の開発について説明していきたいと思います。第4回目の今回は、前回のJSONRPC編の続編として、サンプルプログラムを用いて、AtomがTuscanyの中でどのように使われているかを紹介していきます。
これまでの連載
Atomを使用して買い物かごを実現する
Atomとは
一般に買い物かごは商品を入れたり、出したりします。同じ商品を1本から2本に増やしたり、買い物の途中で何を買ったのか確認したいこともあります。このように、商品を追加したり、もとの棚に戻したり、本数などを変更したり、買い物かごに入れたものの確認をしたい場合があります。ネットショッピングも同様にショッピングカードや買い物かごが用意されていて、同じようなことができます。買い物の例を、少し情報処理的に言うと「検索」「登録」「変更」「削除」になります。まさしくこれは、データストアに対する命令と等価と言えるでしょう。これをHTTPのメソッドに置き換えると、get
、post
、put
、delete
になります。皆さんご存じのRESTな作りにぴったりはまります。
Tuscanyでこれを実現するにはAtomを使用します。Atomと言えば、コンテンツシンジケーションの技術です。コンテンツシンジケーションというと難しく聞こえますが、インターネットのサイトで提供されるフィードをクライアント側にダウンロードし、サイトとクライアントで情報を共有するためのものです。使用目的は多岐にわたりますが、最近ではそのサイトでコンテンツが更新された場合、教えてくれたりするサービスが多いようです。
筆者自身もAtomに詳しいわけではなく、Atomは記事や本などのタイトルや要約などを保持するためのものだと思っていましたが、Tuscanyでは少し変わった使い方をします。
一般的なAtomシンジケーションフォーマットは図1のような構造になっています。entry要素の中にはtitle
、link
、id
、update
、summary
が並んでいます。
TuscanyのAtomの構造は
Atomのルート要素はfeed要素で、その子要素にentry要素があります。Tuscanyでは、このentry要素の子要素であるcontent要素中にワインなどの実体に呼応した情報を保存します。今回の例では、BasketItemクラス(単なるValue Objectクラス)のメンバー変数に呼応する要素を列挙します。今回のサンプルでは図2のような構造になります。
図3がJavaScriptでentry要素の文字列を生成している部分です。Atomを意識した作りになっています。実際、SCAはプレゼンテーション層とデータ層に関する仕様はありません。JSONRPCやAtomはTuscany独自のバインディングで、今のところSCAでJSONRPCやAtomのバインディングを仕様化する動きはありません。Atomに関しては、JavaScript内でAtomのentry要素の文字列を生成しなければなりません。少し面倒ですが、Atomのプログラミングを1から実装することと比較すれば、非常に簡単だと実感できると思います。