Клиент Websocket в OSGI

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

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

 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

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

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

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

в манифест, который требуется для информирования пакета обработки о предоставляемой услуге. В моем комплекте rna-websocket-client я добавил

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

Это потребуется, чтобы сообщить пакету динамического плетения aries о том, что мы используем службу javax.websocket.ContainerProvider.

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


person Shridhar    schedule 21.10.2016    source источник


Ответы (2)


Существует объяснение, как использовать веб-сокеты с причалом в бндтулс. Может быть, это может помочь.

person Christian Schneider    schedule 21.10.2016
comment
Клиент websocket работал с примером клиента, упомянутым в ссылке, с небольшими изменениями. Спасибо. - person Shridhar; 24.10.2016