GAE/J使うならこの設定をしておけ!

※2010/4/23 sessionのクリアについてご指摘頂き、追記しました。
Google App Engine for Java(GAE/J)にて、どんなアプリを使う場合でも
(自分的に)ほぼ必須となる設定ファイルのまとめ。


ていうか、リファレンス読めばいーんだけどさ


1.sessionを有効にする & クリアの設定をする
Javaでsession使わないケースなんてあるのか?


appengine-web.xml に 下記を追加

<sessions-enabled>true</sessions-enabled>



GAE/Jでsessionを使う場合、このままだとDatastoreにsession情報が残ったままなので定期的にクリアするcronを設定する


web.xml に 下記を追加

<servlet>
    <servlet-name>_ah_sessioncleanup</servlet-name>
    <servlet-class>com.google.apphosting.utils.servlet.SessionCleanupServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>_ah_sessioncleanup</servlet-name>
    <url-pattern>/_ah/sessioncleanup</url-pattern>
</servlet-mapping>
<security-constraint>
    <web-resource-collection>
        <web-resource-name>session-cleanup</web-resource-name>
        <url-pattern>/_ah/sessioncleanup</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>



cron.xml に 下記を追加
この場合、12時間おきに期限切れsessionをクリアしてくれる。

<cron>
    <url>/_ah/sessioncleanup?clear</url>
    <description>Clean up sessions</description>
    <schedule>every 12 hours</schedule>
</cron>





2.プリコンパイルを有効にする
Deploy時にプリコンパイルしてくれる。何もしないと初回アプリケーション起動時にコンパイルされる。
速度的に30%程度早くなるらしい。
将来のリリースではデフォルトで有効になるみたい



appengine-web.xml に 下記を追加

<precompilation-enabled>true</precompilation-enabled>




3.静的リソースを指定する
静的リソース(画像やJavascriptCSSファイル)を指定しておくと、専用のサーバーに配置され
読込が高速化するらしい


appengine-web.xml に 下記の用にパスやファイルを追加
ワイルドカード正規表現もOK

<static-files>
    <include path="/css/**.css"/>
    <include path="/js/**.js"/>
    <include path="/img/**.png"/>
    <include path="/img/**.gif"/>
    <include path="/img/**.jpg"/>
    <include path="/favicon.ico"/>
</static-files>




4.管理コンソールにAPI呼び出し履歴、時間表示画面を追加
CPU使用時間やDatastoreのQuotaを見る事のできる管理ツールにリクエスト毎/API毎の処理時間が見える
管理画面を追加します。これでボトルネックが分かる!


追加すると管理コンソールのメニューの下にCustom というのが追加されます。
尚、この管理画面を開くときにはもう一回認証が必要になります。


まずは統計情報を取得するフィルタを設置
web.xml に 下記のようにフィルタとサーブレットを追加

<servlet>
    <servlet-name>appstats</servlet-name>
    <servlet-class>
        com.google.appengine.tools.appstats.AppstatsServlet
    </servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>appstats</servlet-name>
    <url-pattern>/appstats/*</url-pattern>
</servlet-mapping>

<security-constraint>
    <web-resource-collection>
        <url-pattern>/appstats/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>

<filter>
   <filter-name>appstats</filter-name>
   <filter-class>
     com.google.appengine.tools.appstats.AppstatsFilter
   </filter-class>
   <init-param>
      <param-name>logMessage</param-name>
      <param-value>Appstats available: /appstats/details?time={ID}</param-value>
   </init-param>
</filter>
<filter-mapping>
   <filter-name>appstats</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>



次に appengine-web.xml に 下記のように追加

<admin-console>
    <page name="appstats" url="/appstats/"/>
</admin-console>



これでばっちり!


・参考URL
http://code.google.com/intl/ja/appengine/docs/java/config/appconfig.html
http://d.hatena.ne.jp/hidemon/20100327/1269670906
http://blog.livedoor.jp/cbnanashi/archives/1045958.html
http://www.tdtsh.com/blog/archives/614