WappenLite のテスト実行と配備

テスト実行の方法

WappenLite の配備の方法は、後で説明しますが、 アプレットにすると配備やキャッシュの消去など面倒なことが増えるので、 コンテキストやサーブレットに変更を加えたときは、 まず以下の方法でテスト実行してください。

まず、作成したクラスファイルを WEB-INF/classes/ に設置するか、 JARファイルにして、WEB-INF/lib/ に置きます。 Eclipse からテストする場合は、Eclipse の設定でこれらのファイルを ビルドパスにいれても構いません。

WappenLite のバックエンドはサーブレットを中心とする Java の Web アプリケーションですが、WebSocket 関係などで Jetty の特定のバージョンに依存している部分があるので、 Eclise の通常の Web アプリケーションの起動法では起動できないことが多いです。

そのため、 applits.Main クラスの static void main(String[] args) メソッドから起動してください。

WappenLite の配備

WappenLite の設定ファイルやアプレットのパラメーターの記述方法、 およびファイルの配備方法を説明します。

WappenLiteLauncher のカスタマイズ

以下のソースファイルの書き換えは必須です。

WappenLite バックエンドをアプレットから起動するためには JAR ファイルに署名が必要です。 これは、学習者の作成した任意のプログラムを起動したり、 サーブレットが、ServerSocket を利用したり、 ローカルファイルシステムを利用したりする必要があるからです。

署名した JAR ファイルを他者に悪用されないために、 WappenLite では、リクエストヘッダの referer をチェックしてバックエンドと通信する HTML ファイルやソースファイルのダウンロード元を限定するようにしています。

WappenLiteLauncher プロジェクトの check.CheckURI というクラスの boolean checkURI(URI uri) メソッドを書き換えて、安全な URI に対してだけ true を返すようにして下さい。 デフォルトでは以下のようになっています。

final public static boolean checkURI(URI uri) {
  String uriStr = uri.normalize().toString();   // remove .., etc.
    for (String u: myHosts) {
      if (uriStr.startsWith(u) && uriStr.indexOf(myName) > 0) {
      return true;
    }
  }
  return false;
}

この場合、フィールド myHosts に信頼するホスト (例: http://www.example.com)を、 myName にパスの一部 (例: WappenLite)を記載します。

JAR ファイルの作成と署名

利用する java クラスはすべて JAR 化して、 jarsigner コマンドで署名する必要があります。 以下のような JAR ファイルに署名が必要になります。

WAR ファイルの作成

WappenLite プロジェクトを構成するファイルを WAR ファイルとしてアーカイブします。

バックエンドに 独自のサーブレットを追加した場合は、WappenLite プロジェクトの WEB-INF/web.xml ファイルを書き換えて下さい。

WAR ファイル自体は署名する必要はありません。 ただし class ファイル/JAR ファイルは、署名の必要があるため この WAR ファイルに含めません。 そのため、WAR ファイルの中身が実質 WEB-INF/web.xml ファイルのみということもありえます。

バックエンドパラメーターの設定

WappenLite のバックエンドに対する設定パラメーターは JSON 形式のファイルまたは JavaScript 中の式として指定します。 以下の表の属性を指定できます。

属性説明
class(必須) Context クラス名を指定します。
baseDir 以下のファイルの基準ディレクトリ、省略された場合は 設定ファイルのおいてあるディレクトリになります。
sources エディタに表示するソースファイルのパス。 複数のパスを空白区切りで指定することもできます。
jars プログラムの実行に必要な JAR ファイルのパス。 複数のパスを空白区切りで指定することもできます。
hiddens プログラムの実行に必要なその他のファイルのパス。 複数のパスを空白区切りで指定することもできます。
output プログラムの出力をファイルにリダイレクトする場合は、 ファイルのパスを指定します。
watchDir プログラムの出力が生成されるディレクトリを指定します。 このディレクトリにファイルが生成された場合はクライアントに通知されます。

この他に、コンテキスト依存の設定パラメーターが存在することもあります。

以下に設定パラメーターの例を示します。

{ 
  "sources" : "HSBGrad.java"
, "class"   : "samples.java.JavaContext"
, "jars"    : "lib/BookCover.jar"
, "output"  : "HSBGrad.svg"
}

HSBGrad.htmlを参考に、 フロントエンドを作成します。(ToDo: もっと詳しく。 )

アプレットパラメーターの設定

JAR ファイルは applet タグの arhive 属性で指定します。

WappenLite の起動用アプレットに対するパラメーターは PARAM タグで与えます。

name説明
wappen.war 上記で用意した WAR ファイルのパスを指定します。
wappen.config 上記で用意した JSON 形式のバックエンド設定パラメーターのファイルのパスを指定します。
なお、バックエンド設定パラメーターはバックエンド起動後に、 Session/Configure サーブレット、あるいは Login サーブレットで設定することもできます。
wappen.json JSON 形式のバックエンド設定パラメーターを直接指定します。 その際、二重引用符「"」 などは "のようにエスケープする必要があります。
例: <param name"wappen.json" value="{ &quot;class&quot; : &quot;samples.java.JavaContext&quot; }" />
なお、バックエンド設定パラメーターはバックエンド起動後に、 Session/Configure サーブレット、あるいは Login サーブレットで設定することもできます。
wappen.start フロントエンドの URL を指定して開きます。 このパラメーターの中の%sが、バックエンドのベース URL に置き換えられて フロントエンドに渡されます。
バックエンドを先に起動して、あとからフロントエンドを開く場合は、 このパラメーターを指定します。
wappen.target フロントエンドを開くウインドウを指定します。 java.applet.AppletContext#showDocument(java.net.URL,java.lang.String) の第2引数になります。指定しなければ "_blank" になります。
wappen.eval wappen.startwappen.target の代わりに、 このパラメーターを指定することもできます。 サーブレット起動後にアプレットから LiveConnect で呼び出す JavaScript の式を指定します。 このパラメーターの中の%sが、バックエンドのベース URL に置き換えられます。
フロントエンドの Web ページを先に開いて、必要に応じてバックエンドを起動する場合は、 このパラメーターを使って、 バックエンドからフロントエンドページのスクリプトをコールバックします。 フロントエンドのサンプル実装も参照して下さい。

以下に HTML ファイルの一部 (outerapplet.html) を示します。

<applet archive="WappenLiteJava.jar,ecj-3.5.1.jar,CommonJars/WappenLite.jar,CommonJars/jsonic-1.0.jar,CommonJars/jetty-continuation-8.0.4.v20111024.jar,CommonJars/jetty-deploy-8.0.4.v20111024.jar,CommonJars/jetty-http-8.0.4.v20111024.jar,CommonJars/jetty-io-8.0.4.v20111024.jar,CommonJars/jetty-security-8.0.4.v20111024.jar,CommonJars/jetty-server-8.0.4.v20111024.jar,CommonJars/jetty-servlet-8.0.4.v20111024.jar,CommonJars/jetty-util-8.0.4.v20111024.jar,CommonJars/jetty-webapp-8.0.4.v20111024.jar,CommonJars/jetty-websocket-8.0.4.v20111024.jar,CommonJars/jetty-xml-8.0.4.v20111024.jar,CommonJars/servlet-api-3.0.jar" 
        code="applets/Main.class"  
        width="32" height="32">
<param name="wappen.war" value="WappenLiteJava.war" />
<param name="wappen.eval"   value="setParentText('%s')" /> 
<!--
<param name="wappen.start"  value="HSBGrad.html?%s" />
<param name="wappen.target"  value="_blank" />
-->
</applet>

最後に、もちろん以下のファイルをそこで指定したパスの通りに配備する必要があります。

設定パラメーターで指定したソースファイル等、 アプレットで指定した JAR ファイル、WAR ファイル

目次に戻る


Koji Kagawa (kagawa _at_ eng _dot_ kagawa-u _dot_ ac _dot_ jp)