今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

EclipseでGAE+Slim3による開発

EclipseNeonにアップデートしたら、Slim3プラグインが入手不能で簡単に開発に着手できなかった。

動かすまでにちょっと手間取ったので、手順をまとめておく。

準備

まずはこれの前に書いた手順でGoogle Cloud APIを使えるようにする。

Eclipse Neon で Google Cloud API を使えるようにするまで - 今日の役に立たない一言 − Today’s Trifle! −

次に slim3-blank-1.0.16.zip を入手して、適当な場所に解凍。

ブランクプロジェクトの入手 - Slim3 日本語サイト(非公式)

新規プロジェクトの作成

ツールバーの「g」をクリックして「新規Webアプリケーション・プロジェクト」をクリック。

ダイアログで以下の項目を設定して「完了」をクリック。

必要なファイルをコピー

slim3-blank-1.0.16.zip を解凍した中から、以下のファイルとフォルダを新規作成したプロジェクトにコピーする。

  • build.properties
  • build.xml
  • lib
  • libsrc
  • war/css
  • war/ktrwjr
  • war/WEB-INF/appengine-generated
  • war/WEB-INF/lib/junit-4.7.jar
  • war/WEB-INF/lib/ktrwjr.jar
  • war/WEB-INF/lib/slim3-1.0.16.jar
  • war/WEB-INF/queue-xml
  • war/WEB-INF/web.xml

XMLファイルの変更

war/WEB-INF/appengine-web.xml に11行目と14行目の2行を追加。

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application></application>
  <version>1</version>

  <!--
    Allows App Engine to send multiple requests to one instance in parallel:
  -->
  <threadsafe>true</threadsafe>

  <precompilation-enabled>true</precompilation-enabled>
  <!-- Configure java.util.logging -->
  <system-properties>
    <property name="slim3.hotReloading" value="true"/>
    <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
  </system-properties>

  <!--
    HTTP Sessions are disabled by default. To enable HTTP sessions specify:

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

    It's possible to reduce request latency by configuring your application to
    asynchronously write HTTP session data to the datastore:

      <async-session-persistence enabled="true" />

    With this feature enabled, there is a very small chance your app will see
    stale session data. For details, see
    https://cloud.google.com/appengine/docs/java/config/appconfig#Java_appengine_web_xml_Enabling_sessions
  -->

</appengine-web-app>

war/WEB-INF/web.xml に、slim3-blank-1.0.16.zip を解凍した中にある web.xml の<web-app>内の要素を全て追加する。(先頭の context-param から最後の security-constraint まで)
先頭にある slim3.rootPackage の param-value の値に、作成するパッケージ名を入力する。

    <context-param>
        <param-name>slim3.rootPackage</param-name>
        <param-value>slim3</param-value>
    </context-param>
    <context-param>
        <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
        <param-value>application</param-value>
    </context-param>
    <context-param>
        <param-name>javax.servlet.jsp.jstl.fmt.request.charset</param-name>
        <param-value>UTF-8</param-value>
    </context-param>

    <filter>
        <filter-name>HotReloadingFilter</filter-name>
        <filter-class>org.slim3.controller.HotReloadingFilter</filter-class>
    </filter>
    <filter>
        <filter-name>DatastoreFilter</filter-name>
        <filter-class>org.slim3.datastore.DatastoreFilter</filter-class>
    </filter>   
    <filter>
        <filter-name>FrontController</filter-name>
        <filter-class>org.slim3.controller.FrontController</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>HotReloadingFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>    
    <filter-mapping>
        <filter-name>DatastoreFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
    <filter-mapping>
        <filter-name>FrontController</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>
    
    <servlet>
        <servlet-name>GlobalTransactionServlet</servlet-name>
        <servlet-class>org.slim3.datastore.GlobalTransactionServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <!--
    <servlet>
        <servlet-name>GWTServiceServlet</servlet-name>
        <servlet-class>org.slim3.gwt.server.rpc.GWTServiceServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    -->

    <servlet>
        <servlet-name>KtrWjrServiceServlet</servlet-name>
        <servlet-class>bufferings.ktr.wjr.server.service.KtrWjrServiceServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>GlobalTransactionServlet</servlet-name>
        <url-pattern>/slim3/gtx</url-pattern>
    </servlet-mapping>
    
    <!--
    <servlet-mapping>
        <servlet-name>GWTServiceServlet</servlet-name>
        <url-pattern>*.s3gwt</url-pattern>
    </servlet-mapping>
    -->

    <servlet-mapping>
        <servlet-name>KtrWjrServiceServlet</servlet-name>
        <url-pattern>/ktrwjr/ktrwjr/ktrwjr.s3gwt</url-pattern>
    </servlet-mapping>
    
    <security-constraint>
        <web-resource-collection>
            <url-pattern>*.jsp</url-pattern>
        </web-resource-collection>
        <auth-constraint>
        </auth-constraint>
    </security-constraint>
    <security-constraint>
        <web-resource-collection>
            <url-pattern>/slim3/gtx</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>
    <security-constraint>
        <web-resource-collection>
            <url-pattern>/ktrwjr/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

url-pattern を書いてある3箇所にエラーが出るので、それぞれの前の行に web-resource-name を適当に追加する。

    <security-constraint>
        <web-resource-collection>
        	<web-resource-name>jsp</web-resource-name>
            <url-pattern>*.jsp</url-pattern>
        </web-resource-collection>
        <auth-constraint>
        </auth-constraint>
    </security-constraint>
    <security-constraint>
        <web-resource-collection>
        	<web-resource-name>slim3</web-resource-name>
            <url-pattern>/slim3/gtx</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>
    <security-constraint>
        <web-resource-collection>
        	<web-resource-name>ktrwjr</web-resource-name>
            <url-pattern>/ktrwjr/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

プロジェクト設定の変更

Javaコンパイラーを1.7にする。
プロジェクト・ファセットのJavaのバージョンを1.7にする。
ビルドパスに以下の jar を追加する。

コントローラの作成

build.xml の gen-controller を選択して ANTビルドを実行し、コントローラを作成。ここではURLに「/home/」と指定した。

Jettyの起動

[実行]-[Webアプリケーション]でJettyを起動。

動作確認

ブラウザから http://localhost:8888/home/ にアクセスしたら、「Hello home Index!!!」と表示した。


\(^o^)/