normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Java版 Windows Azure AppFabricを試してみた

ずいぶん時期を開けてしまったネタだが、未だに殆ど情報が無いのでさらしてみようと思う。今回紹介するスライドはTecEd2010 Azure船上パーティのLT(ライトニングトーク)で話した内容であるので、その点も加味して内容を吟味して頂きたい。
内容については以下+スライドを通読して頂きたいが、疎通こそ行えるものの、Java版AppFabricは実用に耐えうるSDKとしては未だ成熟していないと言わざるを得ない。加えて最近は同SDKのバージョンアップは滞っており、本気でAppFabricでJava等と疎通する気が有るんか?という気もする*1

同スライドは 「AzureAppFabricを利用して、.NETとJavaをつないでみる.pdf」から取得して頂きたい。いつもはSlideShareに上げるのだが、何故かスライドが重くて固まるという現象が起きたので今回の対応とさせて頂いた。

概要(全体構成)

内容はタイトル通り、JavaWindows Azure AppFabric SDKを利用して.NETアプリとJava版アプリをつないでみたものだ。概要図は以下であり、Windows Azure AppFabricを利用して.NETアプリとJavaアプリを接続する構成がつかめると思う。

しかし、上図には見慣れない語彙が存在すると思う。そう、MessageBufferだ。MessageBufferは、AppFabric上(のサービスバス)に少量のデータ(PDC10から256KBになった)を格納する機能を提供している。私も詳しく調べているわけではないので、詳細は「参考文献のWindows Azure AppFabric Service Bus Futuresセッション」資料を参照して頂けると幸いだ。

使い心地

ソースコードの詳細は別途スライドを参照して頂きたいが、Java版と.NET版でそれぞれMessageBufferを利用するコードはおおよそ以下になる*2

Java .NET版

わずかこれだけのソースコードを記述するだけで、容易にJavaと.NETとの間での連携を行うことが出来る。これだけ見ると中々に期待できそうに見えることだと思う。上記をさっそく実行したところ、以下の実行結果となった。

何も考えず実行すると、日本語文字列が文字化けしてしまった。最終的には動作したが、文字化けを回避するためにはJava版 AppFabric SDKソースコードを修正する必要がある。文字化けの原因は「AppFabric SDKREST APIを呼び出す際に利用するStream処理が、文字コードを考慮していないため」だ。
Windows日本語環境では、特別にオプションを指定しない限りJVMはMS932をデフォルト文字エンコーディングで動作する。一方で、HTTPコネクションを取り扱うStream処理はUTF-8をデフォルト文字エンコーディングとして動作する。この点に留意して、Java版 AppFabric SDKソースコードを修正する必要があるのでご注意頂きたい。

一応まとめを書くと…

バージョンは 1.0 公開中となっている。

    • 疎通そのものはOK!
    • サービスバス、アクセスコントロールは実装済み
    • JUnitのテストも作成済み
    • サンプルは一応ちゃんとある

だが、まだまだ実装が甘いと言わざるを得ず…。

    • 文字コード関連は危険
    • AppFabricExceptionが根本例外握りつぶしてたり
    • Jdotnetservices-1.0.jarの中身に余計なもの入ってたり(旧バージョンのjarが入ってるとか無いですわ)

参考文献

*1:もっとも、PDC10でWindows Azure Connectが発表されたのでそっちを使えばよいという話はあるが…

*2:恥ずかしながら、ソースがどこかに行ってしまった…(汗