Определение Websocket в Jetty Embedded в Karaf

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


person Drifting    schedule 29.01.2017    source источник


Ответы (1)


В примере выше вы подвешиваете активатор на server.join(), поэтому бандл находится в стадии Starting.

Я думаю, что следующий пример достаточно хорош, чтобы посмотреть, как добавить веб-сокет в ваш пакет: https://github.com/ops4j/org.ops4j.pax.web/tree/master/samples/karaf-websocket

person Maxim Che    schedule 30.01.2017
comment
Потрясающий! Спасибо за эту информацию. Я думал, что могу добавить коннектор в файл jetty.xml в Karaf, но нет никакой документации о том, как таким образом добавить коннектор Websocket. - person Drifting; 31.01.2017