2016-10-21 5 views
1

В настоящее время я использовал клиента websocket с использованием клиента tyrus, и клиент веб-сайтов корректно работает за пределами среды OSGI.Клиент Websocket в OSGI

Проблема в том, что websocket не работает на apache karaf. Я установил все зависимости для списка WebSocket client.The является

ID | State  | Lvl | Version  | Name 
------------------------------------------------------------------------------------ 
52 | Active | 80 | 4.3.0   | Apache Felix Dependency Manager 
96 | Active | 80 | 1.0   | WebSocket server API 
97 | Active | 80 | 1.1.0   | Tyrus Server 
98 | Active | 80 | 1.1.0   | Tyrus Core 
99 | Active | 80 | 1.1.0   | Tyrus Container SPI 
100 | Active | 80 | 1.1.0   | Tyrus WebSocket Core 
102 | Active | 80 | 1.1.0   | Tyrus Grizzly Container 
103 | Active | 80 | 2.3.3   | grizzly-framework 
104 | Active | 80 | 2.3.3   | grizzly-http 
105 | Active | 80 | 2.3.3   | grizzly-http-server 
106 | Active | 80 | 2.3.3   | grizzly-rcm 
118 | Active | 80 | 1.0.8   | Apache Aries SPI Fly Dynamic Weaving Bundle 
134 | Active | 80 | 1.1.0   | Tyrus Client 
135 | Installed | 80 | 1.0.0.SNAPSHOT | rna-websocket-client 

Клиент Тир обеспечивает реализацию через ServiceLoader. Так что я использую Apache Aries SPI Fly Dynamic Weaving Bundle, чтобы получить реализацию. Но я все еще получаю Не удалось найти класс реализации. ошибка.

При исследовании я обнаружил, что клиент Тир оленья кожа добавить

Provide-Capability: osgi.serviceloader; osgi.serviceloader="javax.websocket.ContainerProvider" 

к манифесту, который обязан информировать сверток обработки об услуге предоставляется. В моем RNA-WebSocket-клиенте расслоении я добавил

<Require-Capability>osgi.serviceloader; filter:="(osgi.serviceloader=javax.websocket.ContainerProvider)";cardinality:=multiple,osgi.extender; filter:="(osgi.extender=osgi.serviceloader.processor)"</Require-Capability>. 

Это может потребоваться для информирования Овна динамического ткацкого свертка, который мы потребляем услуги javax.websocket.ContainerProvider.

Является ли это правильным способом работы веб-сайтов в OSGI или существует ли какой-либо другой подход для работы websockets в OSGI? Любое понимание этой проблемы было бы действительно полезно.

ответ

1

В bndtools есть explanation how to use websockets with jetty. Может быть, это может помочь.

+0

Клиент WebSocket работал с примером клиента, упомянутых в ссылка с незначительными изменениями. Благодарю. – Shridhar

2

Apache Karaf использует Pax-Web в качестве посреднического слоя Web-Container. Поэтому лучше смотреть на соответствующие Pax-Web Примеров и интеграционные тесты:
WebSocketIntegrationTest
WebSocketWhiteBoardIntegrationTest

или соответствующего образца:
KarafWebsocketSample

+0

Делает смысл. Это должно быть проще применять в карафе. –

+0

Уже реализован клиент websocket с причалом. Также проверю это, как только я получу некоторое время. – Shridhar

Смежные вопросы