在 Jetty 9.2.13.v20150730 上使用 Web 套接字部署项目时出现问题

Problem when deploying project with web socket on Jetty 9.2.13.v20150730

我在将应用程序从 PrimeFaces 5.2 迁移到 10 时遇到问题。 此问题与网络套接字实现从 Primefaces 到 Omnifaces 的迁移有关。

我使用的版本:

我没有什么特别的东西,只是一个简单的发送消息的 PushBean。

我已经尝试降级到 PF8,但正如预期的那样,结果是一样的。

配置是按照文档中的要求进行的,在我的 web.xml 文件中启用了这个标志:

<context-param>
    <param-name>org.omnifaces.SOCKET_ENDPOINT_ENABLED</param-name>
    <param-value>true</param-value>
</context-param>

但是,当我尝试将我的应用程序部署到码头时,我收到以下错误:

java.lang.IllegalStateException: OmniFaces failed to initialize! Report an issue to OmniFaces.
    at org.omnifaces.ApplicationListener.contextInitialized(ApplicationListener.java:88)
    at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:800)
    at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:444)

。 . .

Caused by: java.lang.RuntimeException: Cannot load platform configurator
    at javax.websocket.server.ServerEndpointConfig$Configurator.fetchContainerDefaultConfigurator(ServerEndpointConfig.java:123)
    at javax.websocket.server.DefaultServerEndpointConfig.<init>(DefaultServerEndpointConfig.java:85)
    at javax.websocket.server.ServerEndpointConfig$Builder.build(ServerEndpointConfig.java:301)
    at org.omnifaces.cdi.push.Socket.registerEndpointIfNecessary(Socket.java:1114)
    at org.omnifaces.ApplicationListener.contextInitialized(ApplicationListener.java:85)
    at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:800)
    at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:444)
    at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:791)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:294)

我猜有些地方我做的不对,但是,我不知道具体是什么。 能不能帮个忙?

提前致谢!

堆栈跟踪/异常...

Caused by: java.lang.RuntimeException: Cannot load platform configurator
    at javax.websocket.server.ServerEndpointConfig$Configurator.fetchContainerDefaultConfigurator(ServerEndpointConfig.java:123)
    at javax.websocket.server.DefaultServerEndpointConfig.<init>(DefaultServerEndpointConfig.java:85)
    at javax.websocket.server.ServerEndpointConfig$Builder.build(ServerEndpointConfig.java:301)

这来自 javax.websocket API jar,当它试图找到服务器容器默认配置(换句话说,特定于实现的默认值,即 Jetty)

如果您是 运行 Jetty,则需要在类路径中包含 javax.websocket.server 的 Jetty 支持 jar。

在 Jetty 9 上。2.x 将是 javax-websocket-server-impl-<ver>.jar 文件(和关联的依赖项)。

根据@BalusC,omnifaces 只是部署在您 WAR 的 WEB-INF/lib.

中的一个网络片段

这意味着您必须在 Jetty 服务器端启用对 websocket 的支持。

对于独立(使用 ${jetty.base}${jetty.home} 拆分),这意味着为您的 Jetty 版本启用正确的模块。

Jetty ver WebSocket spec Module
Jetty 8.x and older n/a n/a
Jetty 9.0.x n/a n/a
Jetty 9.1.x javax.websocket (beta) websocket
Jetty 9.2.x - 9.4.x javax.websocket 1.0 websocket
Jetty 10.0.x javax.websocket 1.1 websocket-javax
Jetty 11.0.x jakarta.websocket 2.0 websocket-jakarta

为此,您将使用命令行。

码头9.x

[~]$ cd /path/to/my-jetty-base
[my-jetty-base]$ java -jar /path/to/jetty-home/start.jar 
   --add-to-start=websocket

码头 10+

[~]$ cd /path/to/my-jetty-base
[my-jetty-base]$ java -jar /path/to/jetty-home/start.jar 
   --add-module=websocket-javax