Google App Engine for Java の SDK

アカウントはないが、とりあえずSDKをつかってサーバの起動までやってみる。

��.まずはInstalling Java SDK をみながら環境のセットアップ。

 ・Eclipse 3.4 を立ち上げる。
 ・Help→Software Update→Available Software→Add Site... で次のURLを入力。
 - http://dl.google.com/eclipse/plugin/3.4
 ・次の三つがインストールされる。
  - Google App Engine Plugin
 - Google App Engine Sdk
  - Google Web Tool Kit

��.プロジェクト作成
  - New→Project→Google→Web Application Projectを選択、
   プロジェクト名とパッケージ名を適当に入力

��.サーバ起動
  - サンプルアプリが既に作成されているので、何も考えず起動してみる。
  Run As →Web Application を実行すると、
  >>You must use a Java 1.5 runtime to use GWT Hosted Mode on Mac OS X.
  と言われる。EclipseのデフォルトJREを1.6にしていたのがまずかったらしい。
  今回特にこだわりはないので、1.5.0に戻す。

  - GWTのコンソールが現れ、GWT風のアプリケーションが起動。
  これでSDKの起動確認は完了。

以上。

※アップロードはまだfor Javaのアカウントがとれていないので、
 以下の例外で失敗する。
java.io.IOException: Error posting to URL: http://appengine.google.com /api/appversion/create?app_id=...
400 Bad Request

※アカウントがとれるまで、新規プロジェクトに含まれるGWTアプリがどうやって動いているか考えてみる。

・aaatxt1という新規プロジェクトを作成した場合以下のようなファイルが生成される。
 それぞれのファイルの意味を考えるために内容をメモ:
 (分からないところもあるが・・・)

  - aaatxt/Aaatxt1.gwt.xml
   ・GWTを起動した際のエントリポイントとなるクラスが定義されている。
    ここではaaatxt.client.Aaatxt1,javaが指定されている。

  - aaatxt/client/Aaatxt1.java
   ・EntryPointを拡張したクラス。onModuleLoadを実装している。
   ・onModuleLoadで、画面の初期表示を行っている。(ボタンの
    作成、リスナーの設定等)
   ・フィールドとして、GreetingServiceAsyncのインスタンスを持っている。
    このインスタンスはGWT.create(GreetingService.class)で生成されている。

  - aaatxt/client/GreetingService.java
   ・RemoteServiceというインターフェースを拡張しているインターフェース。
   ・String greetServer(String)というメソッドが定義されている。
   ・@RemoteServiceRelativePath("greet")というアノテーションでgreetと
    いうパスと結びつけられているようである。

  - aaatxt/client/GreetingServiceAsync.java
   ・コメントにはGreetingServiceと組であると書いてある。
   ・void greetServer(String input, AsyncCallback callback);
    が定義されている。
 
  - aaatxt/server/GreetingServiceImpl.java
   ・RemoteServiceServletを拡張したクラス。
   ・GreetingServiceのサーバサイド実装と書かれている。

  - war/WEB-INF/application-web.xml
   ・アプリケーションのID,バージョン
   ・ロガーの設定

  - war/WEB-INF/web.xml
   ・aaatxt1/greetがGreetingServiceImplにマッピングされている。
   ・Aaatxt1.htmlがウエルカムファイルになっている。

  - war/Aaatxt1.html
   ・src="aaatxt1/aaatxt1.nocache.js というスクリプトが
    よまれている。このスクリプトのがすべて。

よくわからないところは多いが、以上。

InfoQの記事によるとGoogle App Engineは以下の制限があるとのこと。

・データストリーミングはできない
・30秒以内でリクエストが終了しないといけない。もし終わらなければ500エラー
・ファイルには書けない、代わりにApp Engine detastoreを使う。
・ソケットは開けない。
・タイマーなんかを使ってスレッドを新たに起こすことはできない。
・exit(), gc(), runFinalization(), とrunFinalizersOnExit()は呼んでも何もしない。
・JNIアクセスはできない。

以上。