3

症状

Tomcat で Web アプリケーションを実行しています。一部の Web ページには、CA 証明書で圧縮および署名され、マニフェストで「パーミッション: すべてのパーミッション」が要求されたアプレットが含まれています。

クライアント側に最新のJRE 7u40があります。アプレットを使用してページを参照すると、セキュリティやその他の警告なしで正常に読み込まれます。このページを離れて、短時間 (60 秒以内) にこのページに戻ると、アプレットをロードできません。ページを離れ、java.exe と jp2launcher.exe が終了するまで待ってからページに戻ると、アプレットは再び正常に読み込まれます。

この動作は、すべてのケースでアプレットが正常にロードされたJRE 7u25から変更されました。この問題は、IE 8を搭載した Windows 7 および最新の Chrome 30.0.xx を搭載した Windows 7 で再現できます。IE 10 を搭載した Windows 8 では再現できません。

回避策

私が知っている唯一の回避策は、applet.destroy() の System.exit() で、別の_jvm アプレット パラメータを使用することです。しかし、これはあまりにも野蛮だと思います。 他の回避策を知っていますか?

技術情報

まず、Java コントロール パネルでトレースをオンにします。次に、browser-jvm デバッグを有効にします JPI_PLUGIN2_DEBUG=1
JPI_PLUGIN2_VE​​RBOSE=1

アプレットでページを離れると、アプレット コンソールに次のように表示されるので、アプレットが停止して破棄されていると思います。

PluginMain: processing GetAppletMessage
PluginMain: processing JavaObjectOpMessage
LiveConnectSupport: HAS_FIELD_OR_METHOD "rf"
network: Created version ID: 1.7.0.40
network: Created version ID: 1.7.0.25
LiveConnectSupport: HAS_FIELD_OR_METHOD "rf": returning result false
PluginMain: processing JavaObjectOpMessage
LiveConnectSupport: HAS_FIELD_OR_METHOD "onremove"
network: Created version ID: 1.7.0.40
network: Created version ID: 1.7.0.25
LiveConnectSupport: HAS_FIELD_OR_METHOD "onremove": returning result false
PluginMain: processing StopAppletMessage, applet ID 1
basic: Starting applet teardown
basic: Finished applet teardown
basic: Removed progress listener: sun.plugin.util.ProgressMonitorAdapter@1c24701
basic: PluginMain.unregisterApplet: 1 from mananger sun.plugin2.applet.Applet2Manager@6f403e
Applet2Manager executing destroyTGAndAC() for entry http://host:80/AppName/applet/,myapplet.jar

短時間 (60 秒未満) にページに再度アクセスすると、ブラウザー プロセスに関連するデバッグ コマンド ウィンドウに次のエラーが表示されます。

アプレットを起動しようとしています
スレッド「Thread-0」の例外 java.lang.InternalError: 実行中の JVM インスタンスが見つからないはずですが、sun.plugin2.main.server.JVMManager.getBestJVMInstance(Unknown Source) at sun.plugin2.main.server で一致する JRE プラットフォームが見つかりません.JVMManager.getOrCreateBestJVMInstance (不明なソース) (sun.plugin2.main.server)。JVMManager.startAppletImpl (不明なソース) (sun.plugin2.main.server.JVMManager.startApplet) (不明なソース) (sun.plugin2.main.server.JVMManager) .startApplet (未知のソース) at sun.plugin2.main.server.IExplorerPlugin.maybeStartApplet (未知のソース) at sun.plugin2.main.server.IExplorerPlugin.access$200 (未知のソース) at sun.plugin2.main.server.IExplorerPlugin$ Sun.plugin2.main.server で BackgroundStarter$1.run(不明なソース)。IExplorerPlugin$1.run(不明なソース)

4

1 に答える 1