Как настроить пул соединений в пакете OSGi?

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

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

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

Есть ли там какие-нибудь примеры, уроки?


person paul    schedule 07.09.2011    source источник
comment
Вы хотите выполнить развертывание в WebSphere Application Server? В таком случае все источники данных доступны в реестре службы. Вы можете найти их, используя тип интерфейса javax.sql.DataSource и использовать служебное свойство osgi.jndi.service.name, которому будет присвоено имя объекта в глобальном jndi.   -  person Alasdair    schedule 13.09.2011
comment
@Alasdair - Спасибо! Да, приложение будет развернуто в WAS. Должен ли я создать определение цели с помощью установки WAS, чтобы я мог протестировать? Или что бы вы посоветовали? Кстати, ваш комментарий действительно является ответом. Думаю, вам стоит скопировать это в новый ответ!   -  person paul    schedule 13.09.2011


Ответы (2)


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

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

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

person Neil Bartlett    schedule 07.09.2011
comment
Это подход, который я использовал при настройке JPA. В OpenJPA есть DriverDataSource, который отлично подходит для создания DataSource на основе драйвера. - person Carl; 08.09.2011
comment
Есть ли какой-нибудь пример кода, как это сделать с помощью dbcp? Я нашел org.apache.commons.dbcp.PoolingDataSource, который, вероятно, мы хотим зарегистрировать как службу OSGi. Для него также есть пример за пределами OSGi svn.apache.org/viewvc/commons/proper/dbcp/trunk/doc/ - person Christian Schneider; 21.05.2012

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

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

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