0

現在調査中の Web アプリケーション 埋め込み<applet>には、いくつかの依存関係 (.jar ファイル) があります。

アプレットタグは次のようになります。

<applet ...
        type="application/x-java-applet"
        codebase="/webapp/applet">
     ...
     <param name="codebase" value="./applet"/>
     <param name="archive" value="a.jar,b.jar,c.jar"/>
     <param name="codebase_lookup" value="false"/>
</applet>

アプレットは正常に動作しますが、問題は、最初にロードするときに、a.jar、b.jar、c.jar などがWeb サーバーから何度も (20 ~ 300) 回要求(およびダウンロード)されることです。 、それぞれ、アプレットの起動が非常に遅くなります。

何が起こっているのか、ロードされたクラスごとに個別にjarが再ダウンロードされていますか?

アプレットを適切に最適化/構成する方法はありますか? いくつかのキャッシング トリックを試しました ( のようなもの<param name="cache_archive" />ですが、成功せず、この問題にアプローチする正しい方法であるかどうかさえわかりません。

注意!このアプレットはWS クライアントです(いくつかのJAXBアノテーション付きクラスと関連する依存関係があります)。


起動時のアプレットログには、次のようなものがたくさんあります。

network: Connecting http://127.0.0.1:7001/webapp/applet/a.jar with proxy=DIRECT
network: Connecting http://127.0.0.1:7001/webapp/applet/a.jar with proxy=DIRECT
network: Connecting http://127.0.0.1:7001/webapp/applet/a.jar with proxy=DIRECT
... ~100 more times a.jar is downloaded
network: Connecting http://127.0.0.1:7001/webapp/applet/a.jar with proxy=DIRECT
network: Connecting http://127.0.0.1:7001/webapp/applet/b.jar with proxy=DIRECT
network: Connecting http://127.0.0.1:7001/webapp/applet/b.jar with proxy=DIRECT
network: Connecting http://127.0.0.1:7001/webapp/applet/c.jar with proxy=DIRECT
network: Connecting http://127.0.0.1:7001/webapp/applet/a.jar with proxy=DIRECT
network: Connecting http://127.0.0.1:7001/webapp/applet/c.jar with proxy=DIRECT
...

Web サーバー アクセス ログには、アプレット ログが反映されます。

127.0.0.1 - "GET /webapp/applet/a.jar HTTP/1.1" 200 1232582 
127.0.0.1 - "GET /webapp/applet/a.jar HTTP/1.1" 200 1232582 
127.0.0.1 - "GET /webapp/applet/a.jar HTTP/1.1" 200 1232582 
...
127.0.0.1 - "GET /webapp/applet/a.jar HTTP/1.1" 200 1232582 
4

1 に答える 1

0

これは、CXF URL.openStream()でjarからさまざまなリソース(スキーマ、wsdlなど)にアクセスするために使用されたために発生していました。

この問題は、クラスローダーのメソッドに置き換えるURL.openStream()ことで解決されました(明らかに不要な接続を確立しますが、そうではありません)。getResourceAsStream()Applet2ClassLoader.getResource().openStream()Applet2ClassLoader.getResourceAsStream()

更新:Java7プラグインで動作しているようですが、Java6プラグインでは動作していません。

于 2013-03-12T14:24:21.250 に答える