Я использую Apache Karaf 4.0.7 для создания серверного приложения с использованием веб-сокетов для связи с клиентским приложением для отправки/получения данных. Я хочу определить конечную точку Websockets для встроенного сервера Jetty, уже работающего в Karaf.
Вот код, который у меня есть в 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? Нужно ли мне изменить файл PAX в Karaf/etc и добавить новый коннектор? Во всех этих взаимодействующих технологиях сложно ориентироваться начинающему инженеру! Пожалуйста, и спасибо за вашу помощь.