我有一个带有应用程序客户端模块的 EAR 应用程序。
当此 EAR 文件部署在 GlassFish v2上并且应用程序客户端模块存在于缓存中时,应用程序客户端启动期间客户端计算机和服务器之间的流量约为 0.7KB。
但是,当我在 GlassFish v3上部署此应用程序并第二次或第三次启动 Application Client 模块(以便它已经存在于缓存中)时,在 Application Client 启动期间客户端计算机和服务器之间的流量为 10MB。
有什么问题?
更新 1
即使我使用仅输出“Hello World”的 Application Client 组件创建了一个简单的 EAR 项目并将其部署在 GlassFish v3 上,每次从缓存中启动 Application Client 时它仍然是 5-6MB。
更新 2
试图深入挖掘问题。当我从 GlassFish v3 中的缓存启动应用程序时,我在应用程序客户端中的每个库
的 GlassFish v3 日志中收到以下异常:
java.io.IOException: An established connection was aborted by the software in your host machine
例如:
SEVERE: Adapter[/___JWSappclient/___system] s1as/glassfish/modules/webservices-osgi.jar
java.io.IOException: An established connection was aborted by the software in your host machine
at sun.nio.ch.SocketDispatcher.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:33)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:100)
我有一个假设,流量开销可能是相关的。互联网上有一些关于这个问题的信息。但显然没有官方解释或解决方法。
这是一个与此问题相关的有趣线程,它可能会对此有所了解。
以下是 Tim(更多 tjquinn)对这种情况的评论:
“已建立的连接中止”消息是我们见过的消息,但正如您所说,似乎不会影响启动。我认为 - 但尚未验证 - Java Web Start 开始下载 JAR,然后发现缓存的副本是最新的,因此中止传输。这不应该发生,但我还没有确切地发现是什么导致它知道它是 Java Web Start 问题还是 Grizzly 问题(基本上是 GlassFish 中的传输层)或 GlassFish 问题本身。
UPD 3关于类似问题 的“Old Nabble”有一个有趣的讨论。启动应用程序客户端后,我们还出现了 Web 服务失败的症状。
Grizzly 论坛的UPD 4 Oleksiy Stashok(UPD 3 中提到的线程)建议在 Java Web Start 论坛上发布问题。这里是 Java Web Start 论坛上的主题链接。