Как опубликовать драйвер базы данных как пакет OSGi - PullRequest
0 голосов
/ 09 мая 2018

У меня есть два или более неспецифичных драйвера JDBC. Я хочу использовать их в контейнере OSGi. Некоторые драйверы принадлежат одной и той же стороне и имеют только различия в версиях и один или несколько конфликтующих классов, включая класс драйвера и URL-адрес соединения.

Объясните, как сделать пакет OSGi из каждого из этих пакетов.

Я использую JBoss Fuse 6.2.1.redhat-117, Red Hat JBoss Developer Studio 10.4.0.GA (Eclipse с интеграцией Fuse), Maven 3.3.9, интеграция Eclipse Maven, Windows 7.

Я попытался создать свой собственный пакет для каждого драйвера JDBC, используя двухэтапный процесс.

  1. Разверните драйвер в репозиторий Maven.
  2. Используйте osgi: install -s wrap: mvn: group / artifact / version для загрузки драйвера в Fuse.

Это недостаточно хорошо работает. Драйвер JDBC работает, только если это единственный конфликтующий драйвер, установленный в OSGi.

Лучшее, что я могу сказать, описанная мною проблема - та, которую OSGi была создана для решения. Поэтому я считаю, что есть решение.

Я готов пойти на все, чтобы решить эту проблему (за исключением жесткого кодирования, отклонения от общей реализации) из-за вложенных средств и необходимого сервиса, который придет с решением.

1 Ответ

0 голосов
/ 09 мая 2018

Правильный способ сделать драйвер JDBC доступным в OSGi - реализовать службу JDBC . Это очень легко сделать, так как код почти полностью универсален.

Интерфейс DataSourceFactory имеет четыре метода для создания

  • Driver
  • DataSource
  • ConnectionPoolDataSource
  • XADataSource

Совершенно разумно бросить SQLException, если ваша фабрика не может предоставить один или несколько из этих типов.

Ваш комплект реализации DataSourceFactory должен либо обернуть jar драйвера JDBC (например, если это еще не пакет OSGi), либо импортировать необходимые пакеты из драйвера JDBC, чтобы он мог реализовать методы DataSourceFactory (например, если драйвер уже имеет метаданные OSGi, но не предоставляет необходимую услугу). Затем DataSourceFactory должен быть зарегистрирован как сервис, чего легко достичь с помощью активатора пакета ( H2 делает это ) или с помощью контейнера, такого как декларативные сервисы. Эта служба объявляет класс драйвера, который она предоставляет, наряду с информацией о версии и поставщике, используя свойства службы.

Один и тот же шаблон проекта можно использовать для создания нескольких разных пакетов для разных версий одного и того же драйвера или путем изменения ссылочной реализации. Использование такого инструмента, как bnd-maven-plugin, гарантирует правильность метаданных OSGi.

Уже есть некоторые проекты, такие как PAX-JDBC , которые пытались предоставить такие оболочки для драйверов JDBC.

...