FAQの翻訳

GAE/Jと英語の両方を勉強中なので、勉強がてら訳してみた。といっても要約がメインです。
原文:http://code.google.com/intl/ja-JP/appengine/kb/java.html

GAE上でお気に入りのフレームワークを使いたいのですが

利用可能なものはここに掲載しています。
http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine?pli=1

Javaで有名なStrutsは1系も2系もOKです。

VM上でどのプログラミング言語が使えるのでしょうか

同じくここに掲載しています。
http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine?pli=1

RubyPythonPHPなどが使用可能です。

ファイル読み込みがうまくいかないのですが

あなたのアプリケーションの以下の場所にあるファイルなら読み込むことができます。

  • war/WEB-INF
  • appengine-web.xmlに定義されている場所

もしファイルの配置場所が問題ないのにエラーが起こっている場合は、ファイル読み込みメソッドに問題があるかもしれません。
File, FileInputStream, FileReader, RandomAccessFileが利用できるファイル読み込みクラスです。
以下がGAE上で使用できるJavaのクラスファイル一覧です。ここにリストアップされていないクラスを使っていないか確認してください。
http://code.google.com/intl/ja-JP/appengine/docs/java/jrewhitelist.html

なお、jarファイルにプロパティファイルのようなリソースを含めた場合は、ClassやClassLoaderを使用して読み込んでください。

ファイル書き込みは利用できますか

できません。
代わりに、App Engine データストアに永続化してください。詳しくは以下を参照のこと。
http://code.google.com/intl/ja-JP/appengine/docs/java/runtime.html#The_Sandbox

スレッドは利用できますか

できません。詳しくは以下を参照のこと。
http://code.google.com/intl/ja-JP/appengine/docs/java/runtime.html#The_Sandbox

既にPythonのアプリケーションがあるんですが、そちらのデータにアクセスすることはできますか

はい、Javaコードからアクセスすることができます。プロパティ名などは言語を超えて同じものとなっています。

同じアプリケーション内でJavaPythonのコードを実行することは出来ますか

はい、可能です。
バージョン xはJavaで実行し、バージョン yは(Jythonを使って)Pythonで実行するといったことが可能です。

ログ出力時にUserServiceFailureExceptionが出たのですが

アプリケーションがGoogle Appsドメインに連携している場合、Google Appsアカウントのサブドメイン上のアプリケーションにアクセスしなければなりません。
example.comがあなたのGoogle Appsドメインなら、例えばwww.example.comのようなサブドメインを作る必要があります。

全てのリクエストハンドラが初期化失敗例外(Initialization failed exception)を出すんですが

JSPを事前にコンパイルしていると発生するかもしれません。
Jasperを使ったJSPの事前コンパイルをしているなら、以下のjarファイルをWEB-INF/libに配置してください。

  • commons-logging-api-1.1.1.jar (or later)
  • commons-el.jar
  • jasper-runtime.jar

ELとloggingは使っていなくても必要ですので注意してください。

JavaEEをサポートしていますか

全てではありませんが、多くのコンポーネントをサポートしています。詳しくは以下を参照してください。
http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine

※例えば、JSPServlet、JavaMail、JSFなどをサポート。EJBJMXJDBCなどはサポートしてない。

ファイルアップロードはどうすればいいですか

Apache Commons file uploadパッケージのクラスを使ってmultipart formデータを取得できます。
※FileItemStream, FileItermIterator, ServletFileUploadを使った例が示されています。
参考:

ローカルで開発する時に、既に8080ポートを使っているんですが、変更できますか

可能です。

--port=希望のポート番号

もしくは、antのターゲットファイルに以下のように設定してください。

GAE上でGoogle Data APIライブラリを使用できますか

利用できます。
ただし、権限エラーを避けるために以下のような設定をappengine-web.xmlファイルに追加してください。



Google Data APIライブラリの詳細は以下。
http://code.google.com/p/gdata-java-client/

Eclipseプラグインがうまく動かないんですが

Error Logビュー(Window - Show View - Other...を選択し、General - Error Log)で確認してください。

アプリケーションのアップロード時に「Invalid runtime specified」が出るのですが

アカウント認証で失敗している可能性があります。今は10,000人しか利用できないという制限があります。

appcfgのEmail引数が動いていないようですが

Emailコマンドライン引数はappcfgオペレーションの前に指定されなければなりません。
例えば以下のように。

appcfg.sh -e youremail@example.com update app_directory/war