残した課題
第1回「Apache Tuscanyの紹介」で、SCAの魅力として以下を挙げました。
- いろいろな言語を簡単に組み合わせることができる(言語中立)
- サービスの実装でプロトコルを意識する必要がない(プロトコル中立)
- 粗い、細かいというサービスの粒度を過度に意識しなくて良い
- マシンの境界を越えたワイアリングが簡単である
- アノテーションを使うことでコンテナに面倒なことを任せられる
- Eclipse3.5(Galileo)以降、SCA Toolsがプロジェクトとして追加された
- リファレンスやプロパティの依存性注入(DI)ができる
- Web 2.0も取り込んでいるため、JSONやATOMでのバインディングが可能(ただし、SCAで正式にバインディングとしてサポートしていない)
1、2、5、7、8については具体的なサンプルコードを用いて詳細に説明しました。3については1と2を組み合わせることにより説明できたのではと考えています。4、6については残念ながら説明できませんでした。4については筆者自身コンポジットとドメインの概念を深く理解していないと判断し説明を断念しました。自信を持つことができたら説明したいと考えています。6についてはトップダウン的な開発方式に使用するのであれば十分使えると考えていますが、コンポジットのダイアグラムからTuscany1.5のコンポジットファイルへのマッピングが分かりづらいということもあり、Tuscany 2.0に対応するまで説明を控えたいと判断しました。
問題点
TuscanyのCollectionクラスのスコープ問題
TuscanyにもServletと同様、スコープの概念を実装しています。@Scopeアノテーションを使用することでコンポーネントのスコープをRuntimeに伝えることができます。Tuscanyは以下のスコープを持っています。
- STATELESS:文字通り状態を一切保持しません
- REQUEST:ServletのHttpServletRequestに相当する考えると分かりやすいでしょう
- CONVERSATION:ServletのHttpSessionに相当すると考えると分かりやすいでしょう
- COMPOSITE:Servletでインスタンス変数を持たせることと同じ効果があると考えると分かりやすいでしょう
当連載のトスカーナワイン店の例では、BasketImplはユーザごとに状態を保持させる必要があるため、@ScopeにCONVERSATIONを指定する必要があります。ところがBaskeImplの買い物かごとしての機能は、Atomを使用したRestで実装しており、サーバ側ではorg.apache.tuscany.sca.data.collection.CollectionというTuscany独自のコレクションクラスを継承しなければなりません。このためか単に@Scopeや@ConversationIDなどを指定しても動作しません。Tuscanyのサンプルプログラムstoreのサイトを読み返すとShoppingCartImplの注釈として「Note: Since the Tuscany conversational support is not ready yet the cart is realized through a hack. The cart field is defined as static.」と記述されています。storeはTuscany1.3で実装されているため、1.5では解決しているかと考え、多くの文献やネットを調べたり、多くの方法で実験しましたが解決するには至りませんでした。BasketImplでも@ScopeにCOMPOSITEを指定しています。試すと分かりますが、複数のブラウザを立ち上げ交互に更新すると、互いの変更が反映されています。つまり全てのインスタンスに反映されてしまうのです。このままでは買い物かごとしての機能を果たすことができません。
Tuscany 2.0のサンプルプログラムからstoreがなくなっていることを考えると、TuscanyのATOMを使用したRESTを使用することは避けた方がいいかと思われます。RESTを使わずとも買い物かごを実装することはそう難しいことではありません。Ajaxを使用するもよし、Springと組み合わせるもよし、特に問題があるとは考えていません。問題点が気になるよりも、Tuscanyが秘めている可能性の方に目を奪われているというのが現状です。
文字化け問題
当連載も終盤の頃、友人から画面が文字化けするとの苦情がありました。調べたところ、WineShop.htmlのエンコードをUTF-8に設定していました。JSONデータを扱っていることもあり、UTF-8が無難であるとの判断でしたが、連載中注意を促すのを怠っていました。文字化けで悩んだ方、申し訳ありません。
参考文献
- 文献1:Java World 2006年12月号 『特集2「容易なSOAアプリケーション構築を実現する期待の新仕様 SCAの可能性を探る』
- 文献2:『Open Source SOA』 Jeff Davis 著、Manning社、2009年6月
- 文献3:『Understanding SCA』 Jim Mario・Michael Rowley 著、Addidon-Wesley社、2009年7月
- 文献4:『Tuscany in Action』 Simon Laws・Mark Combellack・Raymond Feng・Haleh Mahbod・Simon Nash 著、Manninng社、2010年
Tuscanyが文献1で紹介された時に興味を覚えました。まだインキュベータの段階でしたが、SOAを非常にシンプルにする能力があると思わせる記事でした。
その後、文献2の第3章と第4章にApache Tuscanyが紹介されていたことがきっかけとなり、自宅で実験して楽しんでいました。実験すればするほど簡単明瞭な作りに魅了されたわけです。これを機に記事を書きたいと考えるようになりました。当初は、Tuscanyのサイトの情報だけで、簡単なネットショップが作れないかと奮闘したわけですが、Tuscanyが1.0になってから急速にバージョンアップが繰り返され、1.Xの最新バージョンは、執筆時点で1.5.1となっています。わずか1年足らずで急速に進歩しました。2.0も公開されており、Milestone 4まで来ています。Stable版はまだかまだかと待っている状態です。このすさまじい開発スピードのためか、Tuscanyの1.Xのドキュメント通りコーディングや設定ファイルを指定しても動かないのが現状です。今までの試行錯誤に得た知識をトスカーナワイン店というサンプルプログラムとして提供したわけです。ただし、試行錯誤には限度があります。
やはり基礎と言うのはどの世界でも非常に大切なものです。ただし、基礎ほど難しいものはありません。Tuscanyの場合であればSCAの仕様書が基礎に相当します。SCAの仕様書自体を丹念に読むことは当然のことですが、仕様書というものは抽象的になるのは避けがたいものです。SCAの理解を助けてくれたのが文献3です。理解がなかなか進まなかったドメインの概念もこの文献により幾分かは理解できたと思います。またPolicyについても丁寧な解説があり役立ちます。惜しいことに実装がTuscanyではなく、Fabric3という実装を使用した説明となっています。ただし、SCAの理解が目的であれば支障ありません
Tuscanyと銘打った書籍が来年夏頃刊行されます(文献4)。著者はIBMの社員の方のようで、真打登場と言ったところでしょうか。待ち遠しい限りです。筆者が当連載を開始したころはまだ数章しか出来ていませんでしたが、今では残り2章となっています。ただし、来年夏刊行予定ということを考えるとTuscany2.0のstable版を待ち、stable版を用いた説明に書き換える期間を盛り込んでいるのではと推測しています。
参考サイト
当連載の第7回と第8回でサービスの実装をJavaからJRubyへ、またはGroovyへと置き換えました。当連載では置き換えという視点で説明しましたが、当然スクラッチから開発する場合、最初からJRubyやGroovyで開発することも可能です。また、既存のJRubyやGroovyの資産があるのであればそれをアプリケーションに組み込むことも可能です。TuscanyはJRubyやGroovy以外にもJython、XSLT、Springを実装として組み込むことができます。SpringとTuscanyを組み合わせる非常に分かりやすい記事「Spring フレームワークを利用して行う SCA コンポーネントの設計と開発」が、IBMのdevelopleWorksにあります。筆者もこういう記事を書けるようになれればと思います。
SCAの創始者であるIBMが本腰を入れ始めたのかなという印象を持っています。筆者も多くのSpringアプリケーションを仕事で開発した経験があるため参考にしている連載です。
商用製品でのサポート
WebSphere Application Server V7 Feature Pack for SCAが名前の通りSCAをサポートしており、当製品のFAQサイトには「Apache Tuscanyは、Open SOA CollaborationとOASIS Open CSAに基づくSCAおよびSDO仕様を実装するオープンソースのプロジェクトであり、WebSphereでSCAコンテナーをサポートするためのベースとなります」との記述があります。以前のバージョンではTuscanyのコアコンポーネントをベースとしていましたが、それと比較するとより深く製品にTuscanyが組み込まれたと言えるでしょう。いよいよTuscanyが表舞台に出てきたと感じています。
当連載を最後まで読んでいただいた方には感謝以外の言葉が見つかりません。2.0のstable版が出たら追加の情報を記事にできればと考えています。TuscanyでSOAを楽しんで頂ければ筆者としてそれ以上の喜びはありません。