Hatena::ブログ(Diary)

手抜きぷろぐらまのメモ帳 このページをアンテナに追加 RSSフィード Twitter

2010-04-21 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.静的リソースを指定する

静的リソース(画像やJavascript、CSSファイル)を指定しておくと、専用のサーバーに配置され

読込が高速化するらしい


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