Category Archive: GAE

[GAE/J][Event]FLASHerによる【初めてのGAE(GoogleAppEngine)】

先日、東京てらこ 14に参加してきました。

GoogleAPIということで「はじめてのGAE(GoogleAppEngine)」というテーマで発表しました。

発表のスライドはこちら。
【初めてのGAE/てらこ14発表資料】

///////////////////////////////////////////////////////////////////////////

環境設定のざっくりとした流れ
1.Eclipseのインストール

2.Eclipseの日本語化

3.(Eclipseへ)Goolge Plugin for Eclipseのインストール

4.(Eclipseへ)Slim3 Plugin for Eclipseのインストール

1~3.については以下に詳しく書いてありました。
Google App Engine for Java(GAE/J)プログラミング入門: 「開発環境の準備からデプロイまで」 (1/5)
※一点だけはまったのは日本語化する際に、Eclipseのインストール場所に注意
気持ち的にc:\Program Files\eclipseにインストールしたところだけど、途中のファイルパスにスペースの入ったフォルダがあるとだめみたい。
というわけで、c:\にインストールしました。

4.に関しては以下に詳しく書いてあります。
Slim3 日本語サイト(非公式)
※Eclipse3.4と3.5をサポートと書いてありますが、3.6でも一応できるようです。

///////////////////////////////////////////////////////////////////////////

実際に作ってみたサンプル
393.bz/Invader
GAEと連動してレトロアーケードゲーム的なネームエントリーによるスコア共有の仕組みを仕込んでいます。
(NAMEとSCOREをGAEのDatastore(DB的なもの)に保存し、別ドメインからアクセス)
///////////////////////////////////////////////////////////////////////////

作成したGAE/Jのプロジェクト一式はこちら
Flash2GAE(10MB)

一応invaderゲームプロジェクト一式はこちら
(やっつけ書いたのでソース汚い。。)
InvaderForGAE(1MB)

///////////////////////////////////////////////////////////////////////////

今回のポイントは、別ドメインからGAEのドメインへのアクセス。
何もしないとセキュリティポリシー引っ掛かりますが、crossdomain.xmlをGAE側においてあげれば問題ないみたい。
配置の仕方は、GAEのwarフォルダ内にcrossdomain.xmlを置いた状態でデプロイ処理(アップロード)をするだけ。

不明なところがありましたら、コメントなりどうぞ。
(というかJavaはぜんぜんよくわかってませんが…)

///////////////////////////////////////////////////////////////////////////
PS.
他の方の発表を聞いて、Python+AMFの方が楽そうだなぁと思ったのでそっちも試してみたいところ。
pyAMFというライブラリがあるみたい。
さらにもっとお手軽なのは、PREAIR
これならJavaもPythonも書かなくてもAS3だけでGAEと連動できるサービス作れちゃう!

[GAE/J]Slim3プロジェクトでjava.lang.ExceptionInInitializerError at org.slim3.datastore.DatastoreFilter.doFilter(DatastoreFilter.java:68) が出続けたけどいつのまに直った。

謎謎謎。。。

java.lang.ExceptionInInitializerError at org.slim3.datastore.DatastoreFilter.doFilter(DatastoreFilter.java:68)

Slim3 日本語サイト(非公式)を見ながらSlim3プロジェクトを生成しHelloWorld的なことをやろうと思ったら、上記エラーが発生
コード書いてないんだから当然DatastoreFilterとか使ってるわけがなかろうに。。。

同じような人がいたけど、ごにょごにょしてたら直ったらしく原因わからず。。。

べつのチュートリアルを覗いてみたところ、

Slim3プラグインいれてみた

repackaged-appengine-jakarta-standard-1.1.2.jar
↑をBuildPathに追加とあったので試したら、エラーがでなくなった。
ただし、ビルドパスからはずしてもエラーでないまま。。。
ホントにこれが原因だったのか・・・?

謎謎謎。。。

>2011.03.26追記
なんとなくわかった。
上記作業は必ず必要。
ビルドパスパスからはずしても問題ないというのは、ビルドパスを通すとwar/WEB-INF/libに必要なjarがコピーされるので、コピー後はビルドパスからはずしても問題ないということみたい。

[GAE/J]JSONPなサーブレットにクロスドメインでアクセスできるようにするには

GAEもJavaもまるでわかってないけど、わからないなりに調べたことをメモ。

JASONPを返すようなサーブレットを作ったとして、クロスドメインでアクセス可能にするには、

“Access-Control-Allow-Origin”に”*”を設定する。
具体的には、

resp.setHeader("Access-Control-Allow-Origin", "*");
//※resp:HttpServletResponseインスタンス

あとこんな感じでMethodも設定が必要らしい。

resp.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, DELETE, OPTIONS");  

ただこれだとIEだとダメらしい。
Ajaxならクロスドメインで値が取れた。

参考記事
Google App Engineでクロスドメイン通信
※GAEソースはPython

ちなみにFlashではセキュリティポリシーひっかかってダメだった(なぜ?)
もちろんGAE元にcrossdomain.xmlを配置すればOK。

※元にしたGAEのDataStoreいじるサーブレットのサンプルはこちら
「Google App Engine for Java(GAE/J)プログラミング入門」