巨大になったSpringのプロダクトを紹介している本企画。今回取り上げるのは「Spring BlazeDS Integration」だ。

Spring BlazeDS Integrationは、Flash用のJavaリモーティング&メッセージングサーバ BlazeDS※1とSpringを連携させるためのプロダクトになる。

※1 http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/

Spring BlazeDS Integrationとは

まずはBlazeDSの説明からしていこう。BlazeDSは、米アドビシステムズが同社の「Adobe Open Source」内でオープンソースとして公開しているプロダクトだ。BlazeDSを利用すると、Adobe FlexやAdobe AIRをクライアントとして、サーバサイドのJavaEEコンテナで稼働しているJavaアプリケーションとのリモーティング連携を行うことができる。

BlazeDSの特徴は3つある。

1つ目は、データ転送に「AMF」(Action Message Format)と呼ばれるバイナリデータフォーマットを利用できる点だ。AMF(最新はAMF3※2として仕様が公開されている)はプレーンテキストを利用した場合に比べてデータ転送量を大きく抑え、かつ、逐次処理でエンコード/デコードが可能な構造になっているために変換処理も高速だ。一概には言えないが、筆者が行った実験では、サーバからのデータ送出においてXML形式のプレーンテキストに比べデータ量を1/4に、クライアント側のデシリアライズ時間を10倍以上に高めることができた。

※2 http://opensource.adobe.com/wiki/download/attachments/1114283/amf3_spec_05_05_08.pdf?version=1

2つ目は、ActionScript(以下AS)オブジェクトとJavaオブジェクトの型変換を自動的に行うため、ASからJavaへ、あるいはその逆について中間形式を気にせず透過的な連携が可能な点だ。最新のAS 3.0(ECMA Script4.0)※3は、Javaのようなクラスベースのオブジェクト指向言語として設計されており、双方で同じオブジェクト型を定義しておければ、ほぼシームレス※4に連携できる。

※3 残念ながらECMAScrpt 4.0は仕様策定が放棄され、現在は5.0が公開されている。AS 4.0はまだ公開されていないが、ECMAScrpt 4.0との互換性は放棄され、Javaとの互換性を高めると予想されている。

※4 数値のプリミティブ型は双方の扱いが異なるので利用には注意が必要になる。

3つ目は、既存のJavaアプリケーションと容易に統合できる点だ。BlazeDSではMessageBrokerServletというサーブレットを提供しており、これをJavaEEコンテナに配備してリモーティング設定を行うだけで簡単にサーバサイドのJavaクラスを呼び出せる。

ただし、3つ目の特徴については、ちょっとした問題もある。JavaオブジェクトがBlazeDSの管理下に置かれてしまうのだ。そのためBlazeDSとSpringを連携させるのは容易ではない※5

※5 BlazeDSのサンプルコードとして、SpringFactoryというファクトリクラスが提供されており、これを利用すれば実現可能である。ただし、プロダクトとして提供されているものではなく、また、Spring側の定義を大きく書き換える必要性がある。

この問題点を克服するために開発されたのがSpring BlazeDS Integrationだ。Spring BlazeDS Integrationは、BlazeDSの利点をそのままに、リモーティング対象としてSpringで管理されたオブジェクト(ビーン)をそのまま利用できるようにしている。また、Spring Securityとの連携も提供されており、Flex/AIRの開発においてもSpringが持つパワフルな機能を適用することができるのだ。