このページは サポート対象外ドキュメント です。 サポート対象外ドキュメントについて を了承の上ご利用ください。
JavaWebStart 差分ダウンロード
Sunより提供されている JNLP 開発者向けパック に含まれている jardiff ツール、jnlp-servlet.jar ファイル を使用することにより、
JavaWebStartにて 差分ダウンロード を始め、JNLP ファイルへのコードベース URL の自動インストール、JNLP ファイルのタイムスタンプの明示的な指定、
など、各種機能が使用できるようになります。
このドキュメントでは、差分ダウンロード を目的とした設定方法についてのドキュメントになります。
なお、JNLP 開発者向けパック に含まれるバージョンなどにより、指定方法などが異なる場合があります。
また、弊社製品の機能ではないため、サポート対象外とさせていただいています。
予めご了承ください。
必要なもの
- JNLP 開発者向けパック
http://java.sun.com/products/javawebstart/ja/download-jnlp_ja.html から javaws-1_0_1-dev.zip をダウンロードします。
(J2SDK 1.4 に含まれている JWS を使う場合は、javaws-1_2-i-dev.zip をダウンロードします。)
セットアップ例(Tomcat の場合)
ここでは Webtribe をセットアップしたディレクトリを ${WEBTRIBE_HOME} という名称で表記しています。
例として Tomcat に webtribe
というディレクトリを作成して実行している場合は
c:\jakarta-tomcat-4.1\webapps\webrribe
/opt/jakarta-tomcat-4.1/webapps/webtribe
ここに記述しているものとは別の方法でも差分ダウンロードを実現することは可能です。
差分ダウンロードについては、上記 URL からダウンロードした javaws-1_0_1-dev.zip に含まれる、
downloadservletguide_ja.html
に記述されています。
- 差分ダウンロード用サーブレットをプロジェクトディレクトリにコピー。
javaws-1_0_1-dev.zip を解凍します。
次のファイルを ${WEBTRIBE_HOME}/WEB-INF/lib にコピーします。- jnlp-servlet.jar
- jardiff.jar
- 差分ダウンロード用 JAR ファイルディレクトリ作成。
${WEBTRIBE_HOME}/lib/ver ディレクトリを作成します。${WEBTRIBE_HOME} | +-- lib (バージョン管理しない JAR ファイルを配置) | | | +-- ver (バージョン管理対象とする JAR ファイルを配置) +-- WEB-INF
- web.xml 編集。
${WEBTRIBE_HOME}/WEB-INF/web.xml に次の記述を加えます。
- JNLP ファイル編集。
${WEBTRIBE_HOME}/RunClient.jnlp を次のように編集します。 ダウンロード用サーブレット(JnlpDownloadServlet)が $$codebase を JNLP ファイルが存在する codebase に、$$name を JNLP ファイル名に変換してクライアントに返します。
※ この作業は必須ではありません。 (JnlpDownloadServlet を使った場合に有効になる機能で、WEB サーバホストや、ポート番号、 WEB アプリケーションディレクトリに依存しない JNLP ファイルの記述が可能になります。) - 次のファイルをバージョンダウンロードの対象になるように設定します。
- user_rule.jar
- camc.jar
- pmc_desktop.jar
- バージョンダウンロード用 JAR ファイルを格納するディレクトリを作成します。
- ${WEBTRIBE_HOME}/lib/ver/user_rule
- ${WEBTRIBE_HOME}/lib/ver/camc
- ${WEBTRIBE_HOME}/lib/ver/pmc_desktop
${WEBTRIBE_HOME} | +-- lib | | | +-- ver | | | +-- user_rule | +-- camc | +-- pmc_desktop | +-- WEB-INF
- 各 JAR ファイルを下記名称でバージョン 1.0 としてコピーします。
- user_rule.jar
${WEBTRIBE_HOME}/lib/ver/user_rule/user_rule__V1.0.jar - camc.jar
${WEBTRIBE_HOME}/lib/ver/camc/camc__V1.0.jar - pmc_desktop.jar
${WEBTRIBE_HOME}/lib/ver/pmc_desktop./pmc_desktop__V1.0.jar
- user_rule.jar
- version.xml を作成します。
${WEBTRIBE_HOME}/lib/ver/version.xml を次の内容で記述します。
- バージョンダウンロード用 JAR ファイルを参照するよう、JNLP ファイルの resource 記述を変更。
以上で、設定は終わりです。
設定を有効にするためには、JnlpDownloadServlet がリロードされるようにします。
(version.xml のタイムスタンプを更新、Tomcat の再起動、Tomcat の管理コンソールからの指示、等。)
JAR ファイルの更新
JAR ファイルに含まれるモジュール、ファイルに更新があった場合の作業は、次の手順になります。
(例) user_rule.jar を更新し、version 1.1 として登録する場合。
- 作成した user_rule.jar を ${WEBTRIBE_HOME}/lib/ver/user_rule に user_rule__V.1.1.jar という名称でコピーします。
- ${WEBTRIBE_HOME}/lib/ver/version.xml に user_rule__V.1.1.jar の内容を登録します。
- ${WEBTRIBE_HOME}/RunClient.jnlp のバージョンの記述を編集し、user_rule.jar は version 1.1 を使うようにします。
以上で設定は終わりです。
補足、注意点
- 複数のバージョン間における、JAR ファイル差分チェックについて。
実際に動かして確認したところ、JAR ファイルの差分チェックは JAR ファイル内で管理されている日付、時刻ではなく、JAR ファイルに格納されている個々のファイルの内容を比較することで、差分の対象となるかどうかをチェックしていると思われます。 - 差分ダウンロードされる内容について。
- JAR ファイルに新規にファイルが追加された場合。
追加されたファイル全体が JAR ファイルに格納されてダウンロードされます。 - JAR ファイルに含まれているファイルが更新された場合。
更新されたファイル全体が JAR ファイルに格納されてダウンロードされます。
(ここでいう全体とは、更新されたファイルの更新された行だけがダウンロードされる訳ではなく、 一部でも更新されたファイルは、そのファイル全体がダウンロードされる、という意味です。
つまり、行単位ではなく、ファイル単位で差分ダウンロードが行われます。) - JAR ファイルに含まれているファイルが削除された場合。
削除ファイル一覧にそのファイル名が記述され、JAR ファイルに削除ファイル一覧が格納されてダウンロードされます。
- JAR ファイルに新規にファイルが追加された場合。
- 日本語のファイル名
JAR ファイルに含まれるファイル名が日本語の場合、差分ダウンロードでエラーが発生することが確認されています。
Webtribe では物理名に日本語を付けた場合がこのケースに該当します。 - JAR ファイルのスキャン
JnlpDownloadServlet は次のタイミングでバージョン管理対象となる JAR ファイルをスキャンします。- 起動時
- version.xml のタイムスタンプが更新された時
- バージョン管理対象となる JAR ファイルと、対象外の JAR ファイルの配置について。
例)- 最初、運用を開始した時は user_rule.jar はバージョン管理対象としていなかった。
このファイルを ${WEBTRIBE_HOME}/lib/user_rule.jar として配置。 - その後で user_rule.jar をバージョン管理することになった。
このファイルを ${WEBTRIBE_HOME}/lib/user_rule__V.1.0.jar として配置し、version.xml に登録。 - user_rule.jar を version 1.1 に更新。
このファイルを ${WEBTRIBE_HOME}/lib/user_rule__V.1.1.jar として配置し、version.xml に登録。
user_rule.jar
user_rule__V1.0.jar
user_rule__V1.1.jar
の 3つのファイルが存在することになりますが、もしクライアント側の JWS がすでにバージョン管理する前の user_rule.jar をダウンロードしていた場合、version 1.0 の user_rule.jar をダウンロードした後で、 version 1.1 の user_rule.jar をダウンロードした場合でも差分ダウンロードが行われないことが確認されています。
(JWS クライアントが差分情報ではなく、全体のダウンロードをリクエストします。)
このことから、確実に差分ダウンロードを行うために、 バージョン管理対象となる JAR ファイルを ${WEBTRIBE_HOME}/lib に格納することも可能ですが、 ここでは別ディレクトリに格納する方法で進めています。 - 最初、運用を開始した時は user_rule.jar はバージョン管理対象としていなかった。
- バージョン管理対象 JAR ファイルのダウンロードのタイミング。
バージョン管理対象外の JAR ファイルは、サーバ側に配置された JAR ファイルのタイムスタンプをチェックして、ダウンロードするかどうかを判定しています。
一方、バージョン管理対象となっている JAR ファイルは、RunClient.jnlp に記述されている version の記述が変更されたタイミングでダウンロードされます。
このため、バージョン管理対象となっている JAR ファイルのタイムスタンプを変更しただけでは、その JAR ファイルはクライアントにダウンロードされることはありません。
(JWS クライアントが RunClient.jnlp に記述されている version をチェックし、この数字が変わっていなければ JWS クライアントは JAR ファイルのダウンロードをリクエストしません。) - クライアントのダウンロード状況により、実際にダウンロードされる差分。
要求されたダウンロードのバージョン 1.0 1.1 1.2 クライアント側に
ダウンロード済
モジュールの
バージョンなし 1.0
全体1.1
全体1.2
全体1.0 なし 1.0と1.1の差分 1.0と1.2の差分 1.1 - なし 1.1と1.2の差分 1.2 - - なし - JWS クライアントから差分ダウンロードを要求する時のリクエスト。
JWS クライアントから HTTP サーバへの user_rule.jar を差分ダウンロードした時のリクエストは次のようになります。最初に 1.0 を要求する時 /webtribe/lib/ver/user_rule.jar?version-id=1.0 次に 1.1 を要求する時 /webtribe/lib/ver/user_rule.jar?version-id=1.0¤t-version-id=1.1 次に 1.2 を要求する時 /webtribe/lib/ver/user_rule.jar?version-id=1.1¤t-version-id=1.2 - アプリケーションの削除。
「Java Web Start アプリケーションマネージャ」からアプリケーションの削除を行った場合、 削除対象となるのはその時点で実行対象となっていたバージョンの JAR ファイルだけです。
古いバージョン等、他のバージョンの JAR ファイルは削除されないため、完全に削除するためには、手動で削除する必要があります。 - SSL
JWS 1.0.1_02 では SSL に対応していないため、RunClient.jnlp の codebase に https を記述することはできません。
よって SSL による差分ダウンロードも不可能であると思われます。(未確認です。)
J2SDK 1.4 に含まれる JWS 1.2 では SSL に対応しているため、SSL による差分ダウンロードも可能と思われます。 - 差分ファイルのキャッシュ。
サーバ側で 2つの JAR ファイルを比較した結果の差分ファイルはサーブレットコンテナに用意された一時ディレクトリにキャッシュされます。
Tomcat の場合は、${TOMCAT_HOME}/temp ディレクトリに格納されます。