В настоящее время я реализовал клиент веб-сокетов с помощью клиента 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? Любые идеи по этому вопросу были бы очень полезны.