强制小程序在同一JVM实例中加载?

5
我接手维护一个旧的 Web 应用程序,其中在同一网页中嵌入了多个 applet。这之前都很正常,但是自从引入 Next Generation Java 插件(约为 1.6.0_10)以来,单个 applet 不能保证在同一 JVM 实例中加载。如果它们在不同的 JVM 中加载,它们就无法通过 AppletContext.getApplets() 或静态变量进行通信。
有没有办法强制 applet 在同一个 JVM 实例中加载?我看到有人提到一个解决方法,即指定相同的 "java_arguments" 参数可能会鼓励 Java 插件在同一个 JVM 实例中运行 applet,但这对我们的应用程序无效(而且在任何情况下也没有得到 Oracle 的官方支持,因此可能随时消失)。
我们还尝试用间接的 applet-to-JavaScript-to-applet 通信替换直接的 applet-to-applet 通信,但由于我们的客户使用旧版的 web 浏览器,无法使用这种方法。如果有可能,我很想避免将所有本地 applet-to-applet 通信路由到非本地服务器上。

如果一个“控制器小程序”将它们四个加载到自己内容窗格的不同区域中,它们都将在同一个JVM中。那么为什么这些小程序需要嵌入网页中呢? - Andrew Thompson
它们需要嵌入页面中,因为每个小程序都提供页面内容的一部分,但是要与其他“正常”的网页内容分开。诚然,这不是一个很好的设计,但这就是我们所拥有的。我希望最终能用JS等效替换所有小程序,但必须逐个替换这个小程序。 - jmt
我也觉得Andrew Thompson的方法可能可行... 加载控制器小程序,加载子小程序,将页面内容加载到渲染普通网页内容的面板中?您对其他内容,页面布局等有任何控制权吗?请列出我们必须强制执行或可以放宽的任何其他限制,无论多么难以理解 :) 否则,如果您没有明确涵盖http://www.java.net/node/695065,则可能无法解决该问题。 - ccoakley
感谢Andrew Thompson和ccoakley的建议。我会看一下,看看能否通过控制器小程序和面板让我们的应用程序以这种方式工作。不幸的是,我们无法更改页面布局,有些小程序来自其他供应商,所以最终可能会失败:) 不过,这给了我一个很好的理由去重新设计。 - jmt
你最终解决了这个问题吗? - Andrew Burns
很遗憾,@AndrewBurns,我放弃了;它开始在真实用户中出现问题,我们无法强制他们重新配置Java设置。作为一种权宜之计,我修改了小程序,使其将所有小程序间通信反弹到服务器上,这为重写JS小程序内容赢得了足够的时间。祝你的项目好运! - jmt
1个回答

1

我们曾经遇到过类似的问题,并通过在Java控制面板中禁用“下一代”Java插件来解决它。


1
谢谢,我刚试了一下,似乎它强制将所有内容都放在一个虚拟机中。然而,我认为我们不可能强迫我们的客户这样做,因为他们分布在各种组织中并且有锁定的工作站。所以至少现在我们有了一个最后的备选方案,可以向客户推荐。如果您听说任何其他不需要用户更改设置的方法,我会很感兴趣,因为这将是一个更容易的销售点。 - jmt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接