【发布时间】:2017-01-29 18:44:34
【问题描述】:
我正在使用 Apache Karaf 4.0.7 创建一个使用 Websockets 与客户端应用程序通信以发送/接收数据的服务器应用程序。我想为已经在 Karaf 中运行的嵌入式 Jetty 服务器定义一个 Websockets 端点。
这是我在 BundleActivator 中定义 Websockets 端点的代码。此代码有效并允许我建立连接,但捆绑包无限期地挂在“开始”状态。
public void start(BundleContext bundleContext) throws Exception {
Server server = new Server();
ServerConnector connector = new ServerConnector(server);
connector.setPort(8080);
server.addConnector(connector);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
try
{
// Initialize javax.websocket layer
ServerContainer wscontainer = WebSocketServerContainerInitializer.configureContext(context);
// Add WebSocket endpoint to javax.websocket layer
wscontainer.addEndpoint(UserWebsocketResource.class);
server.start();
server.dump(System.err);
server.join();
}
catch (Throwable t)
{
t.printStackTrace(System.err);
}
}
我想知道问题是否在于我正在创建一个新的 Jetty 服务器并且 server.start() 正在创建正在运行的线程并且不允许捆绑包达到“活动”状态?当前有关使用 Jetty/Karaf 的文档很少,而且使用 OSGI 捆绑包会增加复杂性。
有没有更好的方法来使用嵌入式 Jetty 的 websocket?我是否需要修改 Karaf/etc 中的 PAX 文件并添加新的连接器?对于初学者来说,所有这些交互技术都很难驾驭!请并感谢您的帮助。
【问题讨论】:
标签: embedded-jetty apache-karaf osgi-bundle java-websocket