在 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 的迁移有关。
我使用的版本:
- PF: 10.0.0
- PF 扩展:10.0.6
- Omnifaces 2.7.7
- CDI 1.1
- JSF 2.2
我没有什么特别的东西,只是一个简单的发送消息的 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
我在将应用程序从 PrimeFaces 5.2 迁移到 10 时遇到问题。 此问题与网络套接字实现从 Primefaces 到 Omnifaces 的迁移有关。
我使用的版本:
- PF: 10.0.0
- PF 扩展:10.0.6
- Omnifaces 2.7.7
- CDI 1.1
- JSF 2.2
我没有什么特别的东西,只是一个简单的发送消息的 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