Granite Data Services: オープンソースプロジェクトによって開発されたデータサービス

Granite Data Services (GDS:Granite は花崗岩の意味)とは、Adobeの商用製品であるLiveCycle Data Servcices(LCDS:Adobeのデータサービス技術)やBlaze Data Sercvices(LCDSのリモート技術やメッセージ技術などをオープンソース化したもの)の代替となるオープンソースプロジェクトによって開発されたデータサービスです。GDSは LGPLライセンスの下で使用でき、2008年1月30日にはプロダクション版であるGDS 1.0がリリースされました。

「BlazeDS」 は強力なライバルとなるでしょうが、「GDS」 には 「BlazeDS」 では提供されないデータ管理機能も備わっているため、Flex 利用者の増加と共に、これまで以上に注目されることになりそうです。

プロジェクト創設者のFranck Wolff氏はまず最新のリリースで何が新しくなったのかをInfoQに語った。

gds-stack


GDS 1.1は10月6日にリリースされ、新機能が主に3つあります。

  1. Tide: このモジュールはCairngorm + Flex Data Management Serviceの組み合わせに対する完全な代替手段となることを意図しています。Flex側から見ると、Cairngormは優れたFlex開発フレームワークですが、(ちょっとした操作のために多くのファイルが必要であったり)いくぶん冗長な気がしました。Java側から見ると、Flex Data ManagementはLiveCycle Data Servicesを通して利用することしかできません。また、私達が必要とする機能のいくつかが未実装であったり私達が望む実装でなかったりしました。それはJ2EEの一般的なフレームワーク(例えばJBoss/Seam, Spring,やEJB3)との統合、クライアント側でのエンティティ・キャッシュ、コレクションのページング、そして透過的な遅延ロードなどです。 Tideはこれら全ての要求を解決し、JBoss/Seamフレームワークをターゲットとしています(SpringとEJB3への対応は近日中)
  2. Granite Eclipseビルダ: この新しいEclipseビルダ・プラグインは(エンティティ・ビーンのような)Javaビーンを新しく作成したり、修正したりするたびに Gas3(GDS ActionScript3ジェネレータ)を自動的に起動します。グラフィカルなウィザードやパネルからJavaプロジェクトの設定を変更すると即座に Javaモデルを対応するActionScript3へと反映させます。生成されたビーンは強力な型付けのために必要な、遅延ロードのサポートやTide との統合といった全てのロジックを実装しています。
  3. MXML/AS3 Webコンパイラ: Adobe社のものと同様な機能(デプロイされたwarに含まれるMXMLファイルを直接コンパイルする)を提供しますが、さらに(ストリングやデータベースなどの)あらゆる入力ストリームからコンパイルすることも可能です。この機能は(Igenkoプロジェクトの創始者であるSebastien Deleuze氏によって寄贈されたもので、こちらからオンラインにてテストすることができます。

GDSの概要について:

Granite Data ServicesはAdobe LiveCycle Data Servicesの代わりとなるもので、JEEテクノロジーへの適用を特に重視しています。EJB3/Hibernateのような代表的なJava EE永続化システムを、遅延ロードも含めて全てサポートします。GDSではFlex2/3で標準のRemoteObjectを扱えるので、AMF3 (RemoteObjectで用いられるデータフォーマット)の利点を全て得ることができます。さらにGDSは多くのテクノロジーをサポートしています。

  • ポピュラーなウェブフレームワークサービスとの相互運用性
  • サーバーサイドのEJB3セッションビーンの呼び出し(これはJBoss Seam(JSF、EJBなどを統合するWebアプリフレームワーク)による拡張があってもなくても構いません)
  • Acegi(Spring向けセキュリティフレームワーク)によるセキュリティを備えたSpringビーン
  • Google Guice(GoogleのDIコンテナ、ジュースと発音)サービスとWarp(コンポーネントベースのWebアプリフレームワーク)の永続化
  • POJOサービスのサポート

データプッシュのサポートはGDS 1.0での新しい機能です。そしてGDSでActionScript3のコード生成(Gas3)も出来るようになり、Flexアプリケーション開発を大いに支援します。Flex Builder IDE、あるいはフリーのFlex SDKと一緒にGDSを使うと、Flexアプリケーションの開発とデプロイを完全にかつ強力に支援するフレームワークになります。

GDSとBlazeDSを比較する:

BlazeDSは基本的にLCDSのサブセットで、直接的にはデータ管理機能を提供しませんGDSはEJBの永続化レイヤを完全に統合するようにデザインされていて、LCDSにはないと思われる大変重要でユニークな機能を持っています。それはプロキシ(単一端関連)と遅延フェッチです。このことで最悪データベース全体を読み込まないといけないようなリスクを回避できます。
この機能はまた別のユニークなシリアライズ機能であるExternalizer(外部化機能)をベースにしています。Flex標準(つまりBlazeDSやLCDS標準)であるAMF3のシリアル化では、一時的なプロパティや publicな静的プロパティ以外もシリアル化されてしまいます。バージョン管理ナンバーのようなprivateにしておきたい ActionScript3ビーンは、シリアル化しないでprivateにしておきたいこともあるでしょう。BlazeDSあるいはLCDSでこれを実現するにはエンティティビーンズをExternalizable(外部化可能)にしないといけませんが、それにはJavaとAS3の両方に、きちんと対応したreadExternalメソッドとwriteExternalメソッドを実装する必要があります(参照)。これはとても退屈な作業です。そしてソースコードはエラーが入りやすく、かつエラーが見つけにくいものになるでしょう。そもそもエンティティビーンのコードが自分のものでなかったら、これを行うのは不可能です。GDSのExternalizerを使えばJavaビーンをExternalizableにコーディングする必要はなくなり、AS3ビーンをGas3に生成させることもできるのです。生成されたAS3ビーンは強い型付けがされ、Javaビーンで privateだったプロパティはAS3でもprivateですし、遅延ロードもサポートします。
BlazeDSのドキュメントには、 BlazaDSが「オープンなアダプタアーキテクチャ(外部サービスの接続を容易に行うアダプタを利用したアーキテクチャ)」で「JMS、EJB、 ColdFusionコンポーネント、その他データソースとの統合を容易に行う」と書かれています。この観点からいえば、GraniteDSと BlazeDSに大差はありません。GDSも「オープンなアダプタアーキテクチャ」に基づいているのですから。GDSの開発者たちはSpringや Seam、Guiceのサービスアダプタに貢献してきた人たちなのです。ただGDSは他にも、シリアル化の全てのプロセスをコントロールできたり、独自のデータ型をサポートするなど、多くのことをカスタマイズを加えることができるのです。
驚くべきことに、BlazeDS及びGDSのデータプッシュの実装は、両方ともCometによく似たアーキテクチャをベースにしています。GDSはあらゆるBlazeDSのアナウンスの前である2007年の夏に、この実装の選択を発表しました。ということで、データプッシュの実装はよく似ている可能性はありますが(BlazeDSのソースコードはまだ公開されていません)、BlazeDSが私の知る限り Tomcatoのみサポートしているのに対して、GDSはJettyのサポートも行っています。

最新版は次のURLからダウンロードできます。http://www.graniteds.org/confluence/pages/viewpage.action?pageId=229378

もっと詳しい情報ここに参照できます。 「Granite Data Service:オープンソースのFlex向けData Service

Leave a Reply

Your email address will not be published. Required fields are marked *