2011-11-28 8 views
15

JBossを再起動するたびに、Java Web Startのすべてのクライアントが、アプリケーションが変更されていなくても、キャッシュされたjarファイルを再利用するのではなく、すべてのjarファイルを再ダウンロードすることを発見しました。Java Web StartがJBossからjarsを再ダウンロードするのはなぜですか?

私はWeb上で見たことから、Java Web StartはHTTP HEADを実行して、jarをダウンロードするかどうかを決定します。アプリケーションのすべてのjarファイルでHTTP HEADを実行し、JBossを再起動した後、すべてのjarの変更時刻が変更されていることがわかりました。

これはなぜですか、どのように修正できますか?私のアプリケーションアーカイブ内のジャーは全く変更されていません。私が知る限りでは、JBossは起動時または展開時を変更時として使用します。これは、Java Web Startが正しく理解していれば、以前の実行でキャッシュされたjarを使用する能力を完全に短絡させることになります。

問題がある場合はJBoss 6を使用します。以前はJBoss 4を使用していましたが、問題がJBoss 4で発生していないかどうかを確認したいのですが、新しいJBossには多くの依存関係があるため、そのテストを行うための作業が必要になります。

+0

JBossの外でTomcatを設定してWebstartアプリケーションをそこに置いてみましたか?何が起こるのですか?それは、あなたがTomcatを停止した後、別の時間を報告しますか? – chubbsondubs

答えて

3

WARファイルではなく、展開されたWebアプリケーションとしてアプリケーションをデプロイしてください。

これは、JBossがアプリケーションを解凍して、変更日を間違える可能性があることを防ぎます。

あなたは、アプリケーションのアップデートを、例えばrsyncのような修正日程を保つように処理する必要がありますが、それはJBossのダウングレードやパッチ適用よりも簡単かもしれません。

+0

うわー、私は爆発した耳と戦争でJBossが何をしているのかよく分かりませんが、何も言わずに3分かかってしまい、permgenスペースを使い果たした時に例外を投げました! – skiphoppy

+0

JBossのいくつかのバージョンでは、展開されたディレクトリ名は適切に '.war'または' .ear'で終わる必要があります。あなたはそれをやっていますか? – blahdiblah

+0

いいえ、私は今朝修正した他の愚かな間違いをしていました。シンプルで簡潔な回避策をありがとう! :) – skiphoppy

2

VFSUtilsは、サーバ起動時にファイルシステムをtmpディレクトリにマウントするときにファイルのlastModifiedDateを保持していないようです。そのクラスのコピー・メソッドにパッチを適用して、物理ファイルの値に基づいて新しいファイルのタイム・スタンプを設定することができます。

chubbardによるコメントへの応答として、問題はTomcat(正確にはtomcat 7.0.21)では発生しません。

0

VFSUtils.unzip()に関する問題(https://issues.jboss.org/browse/JBVFS-177)は、デプロイ時にタイムスタンプを保持しません(JBoss 6.1にも適用可能)。

問題は解凍メソッドに関連しているため、blahdiblahの解決法が実際に動作する可能性があります。

もう1つの方法は、Java Web Startをバージョンベースで使用することです(versionEnabledでjnlpを変更し、version.xmlを作成する)。

関連する問題