Google App Engine/J上でBlazeDSを用いたFlexアプリケーションを動かす
GAE/Jについて一通りの動作確認が終わったため、当面対応が必要となるプロダクトに着手しました。
ポイントはユーザインタフェースとしてFlash(開発はFlexにて)を使用するところで、通信手段はAMF(BlazeDS)を使用します。
管理系機能やデバッグ用にhtmlのユーザインターフェースも併用する形を考えています。
当初考えていた技術要素は以下の通りです。
どれも外せない要素なので、かなり時間をかけて調査しましたが最終的にはMayaaだけは諦めました。
簡単にそれぞれについての調査結果やハマリポイントをまとめます。
■Slim3
ひがさんのblogにも有る通り、Slim3のデモで用意されているサンプルはAMFではなくシンプルなHTTP通信のものです。
今回のプロダクトではAMFの重要性が高い上に、Slim3のタイプセーフクエリの恩恵にも与りたいためSlim3+AMFの動作を検証する必要が有りました。
○検証結果
BlazeDSのソースを修正するところは非情に面倒でしたが、結果的にSlim3側はほとんど何もせずに期待動作の確認が取れました。
○その他
普段はMayaaと連携させているため気付かなかったのですが、slim3it(サンプルプロジェクト)でもJSPはwar直下に配置されていることに気付きました。
出来ればwar/WEB-INF/view 以下に配置する構成にしたいのですが、SAStrutsのようにweb.xmlに指定するなどの方法で指定できないか考えてみたいと思っています。
<context-param> <param-name>sastruts.VIEW_PREFIX</param-name> <param-value>/WEB-INF/view</param-value> </context-param>
■BlazeDS
GAE/J環境ではRemotingしか動作しない上、BlazeDSのソースを修正する必要が有るという情報が幾つか見つかりました。
- http://www.adobe.com/jp/devnet/flex/articles/google_app_eng_w_beazeds.html
- http://www.adobe.com/jp/devnet/flex/articles/google_app_eng_w_beazeds_p2.html
- http://prepro.wordpress.com/2009/05/17/googleappengine%E3%81%A7blazeds%E7%92%B0%E5%A2%83%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F/
- http://martinzoldano.blogspot.com/2009/04/appengine-adobe-blazeds-fix.html
試しに素のBlazeDSを用いて確認してみましたが、やはり期待動作が確認出来ないため、上記手順に沿ってBlazeDSの修正版バイナリを得ました。
○検証結果
まだStringが戻り値の公開メソッドしか試していませんが問題なく動作しているようです。
○その他
DuplicateSessionDetected例外への対処が少し強引な気がしています。
■Mayaa
○検証結果
http://d.hatena.ne.jp/two-stroke/20090627/1246094807
↑とおそらく同件と思われるのですがMayaaを組み込むと、どうしてもリクエストしたパスに「/index.html」を付けて処理される問題が発生します。
これまではEclipse上からのローカル実行でのみ発生していたのですが、何故か今回の構成に組み込んだ場合、GAE本番環境でも再現するようです。
大部分がFlashで構築されており、この問題は以前も追いかけて解決に至らなかったため、今回の構成からMayaaを外すことにしました。
■まとめ
BlazeDSのソース修正さえ実施すれば、とくに問題なく使用可能です。
先人達の有益な情報に感謝します。