【问题标题】:f:websocket stops working in JSF 2.3 after application redeployment on wildfly在 Wildfly 上重新部署应用程序后,f:websocket 在 JSF 2.3 中停止工作
【发布时间】:2019-08-11 02:19:34
【问题描述】:

我正在使用 websockets 开发一个新应用程序,并决定在 wildfly 15 中使用 JSF 2.3。一切正常,直到我尝试使用 wildfly 管理控制台重新部署我的代码。 Websockets 在此之后停止工作,我可以在服务器重新启动后使其工作。我做了一个简单的应用程序,用 xhtml 正文中的这段代码测试这种行为:

<f:websocket channel="test" />

重新部署应用程序时,我注意到我的页面不断尝试向 websocket 端点发出请求,并在短时间内(大约 5 个请求/秒)不断接收多个 101(切换协议) 作为响应代码.

Firefox network inspection

我使用wireshark捕获流量,发现在这个响应之后wildfly发送一个websocket连接关闭[FIN]

我试图缩小这个问题的范围,在我看来就像一个野蝇虫。我使用了全新安装的 Wildfly 15.0.1.Final 和 16.0.0.Final。有没有人对此有解决方法或可行的解决方案?

【问题讨论】:

  • 您是否尝试在 GlassFish 上做同样的事情?也许它与 WildFly 无关,而是 Mojarra。你能试试o:omnifaces的作用吗
  • 我昨天在 glassfish 上用一个非常简单的应用程序测试了它(只是测试网络 websocket 连接 - 尽可能缩小问题范围),但看不到我在 wildfly 上的相同行为(重复了 101 个回复),所以我认为我无法在 glassfish 上繁殖。在您发表评论后,我决定制作一个功能更强大的测试应用程序,并意识到在 glassfish 上重新加载应用程序后 websocket 通信停止工作。所以这应该与github.com/javaserverfaces/mojarra/issues/4368有关,只是在wildfly上发生的行为不同。
  • 我也尝试过使用omnifaces,它在重新加载/重新部署后工作得很好
  • wildfly 21 上仍在发生这种情况,只是在错误报告上添加了评论。谢谢

标签: jsf websocket wildfly


【解决方案1】:

我在 glassfish 上测试了一个非常简单的应用程序(在 xhtml 上只有 f:websocket - 没有支持 bean,只是为了测试网络 websocket 连接)并且无法获得与 wildfly 相同的结果(重复 101 个响应),所以我认为这不适用于 glassfish(因此与 Websocket PushContext not working anymore after application redeploy 无关)

在阅读Kukeltje 评论后,我决定制作一个功能更强大的测试应用程序,并注意到 websocket 在重新加载后停止在 glassfish 上工作(但无法获得多个 101 响应 - 就像在 wildfly 中一样)。

所以这一定和Websocket PushContext not working anymore after application redeploy有关

Test application source

Test application WAR

【讨论】:

  • 您好,您能解决这个问题吗?
  • 很遗憾没有。我没有太多时间进一步调查它,因为我现在有其他优先事项(这个特定的应用程序仍在等待批准)。我刚刚在这里找到了一张公开票:github.com/eclipse-ee4j/mojarra/issues/4572
【解决方案2】:

这是源代码中的一个错误。 Omnifaces websocket 实现修复了该错误。我建议使用它。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案3】:

此问题已在 Mojarra 2.3.15(2021 年 5 月发布)中得到修复。

最初已在 2019 年 5 月通过 issue 4565 修复了想象中的 2.3.10 版本,其中我已将修复从 &lt;o:socket&gt; 反向移植到 &lt;f:websocket&gt;。不幸的是,它是在 Oracle -> Eclipse 过渡期间完成的,事后看来,这些更改似乎在混乱期间完全溜走了。所以它通过issue 4802 重新完成了 2.3.15。

【讨论】:

    猜你喜欢
    • 2018-09-26
    • 1970-01-01
    • 2018-09-26
    • 2018-06-20
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    相关资源
    最近更新 更多