Как настроить пул соединений в комплекте OSGi? - PullRequest
1 голос
/ 07 сентября 2011

После многих лет разработки веб-приложений для платформы Websphere я недавно смотрел на OSGi, особенно в связи с проектом RAP (RichAjayPlatform).

В прошлом я имел доступ к соединениюпулы, определенные в EAR с помощью поиска JNDI.

Как создавать пулы соединений и получать к ним доступ в среде OSGi?Я создал пакет DB2, содержащий драйверы jdbc, но я не уверен, как создать пул.Ранее это была конфигурация в EAR, и Websphere обрабатывал ее.

Существуют ли какие-либо примеры, учебные пособия?

Ответы [ 2 ]

10 голосов
/ 07 сентября 2011

Конечно, в OSGi нет ничего "встроенного" для создания пула соединений, но это очень просто реализовать.

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

Затем вам нужен пакет, который создаст пул соединений с использованием определенного драйвера и зарегистрирует сервис (ы) DataSource.Я также собрал бы это, используя декларативные сервисы, оборачивая библиотеку Apache Commons DBCP.

2 голосов
/ 07 сентября 2011

Вам необходимо зарегистрировать диспетчер пулов соединений в качестве службы OSGi.Если вы добавите JNDI-пакет Apache Aries, все ваши сервисы также будут доступны через JNDI.Некоторые менеджеры пулов соединений не работают хорошо в OSGi из-за проблем загрузчика классов, но наличие драйвера, встроенного в тот же пакет, который конфигурирует пул соединений, часто позволяет обойти их.

Я настроил это только с помощью JPA+ JNDI, но шаги, которые я предпринял бы при создании и экспорте пула соединений, были бы примерно такими:

  1. Вручную создайте пул соединений (c3p0, dbcp и т. Д.) В активаторе пакета.
  2. Зарегистрируйте пул соединений как сервис с контекстом пакета.
  3. В сервисах, которым требуется соединение, получите ссылку на пул соединений (я использую декларативные сервисы) и получим соединение из пула.
...