Как сделать драйверы JDBC подключаемыми в среде OSGi? - PullRequest
0 голосов
/ 13 октября 2009

У меня есть проект OSGi, который, среди прочего, содержит один пакет с аннотированными моделями доменов JPA и другой, который использует Eclipselink в качестве поставщика постоянства. Последний создает экземпляр EntityManager, используя параметр конфигурации для определения имени класса драйвера JDBC.

Теперь, пакет с моделями должен иметь возможность видеть драйвер JDBC, я думаю, потому что eclipselink использует загрузчик классов классов модели для его загрузки. Это имеет нежелательный побочный эффект: мне нужно явно объявить директиву Import-Package в комплекте модели, чтобы включить драйвер. Заменить драйвер через OSGi тогда уже не просто (мне нужно заново создать манифест), что в первую очередь противоречит цели использования OSGi.

Поскольку все драйверы JDBC реализуют один и тот же интерфейс, я хотел бы поместить драйверы баз данных в их собственный пакет, зарегистрировать их в контейнере OSGi под их общим именем интерфейса и использовать eclipselink, что доступно. Но я не могу понять, как это сделать, потому что кажется, что драйвер создан экземпляром eclipselink, то есть я не могу установить его в другом месте и заставить eclipselink не обращать внимания на фактическое имя класса.

Кажется, это очень типичная вещь. Я думаю, что уже есть решение?

Этот пост Шона Смита из Oracle ранее в этом году предполагает, что, возможно, нет, но он также указывает, что спрос на него кажется вполне реальным.

1 Ответ

2 голосов
/ 13 октября 2009

Звучит как недостаток eclipselink. Я предлагаю подать запрос об ошибке / функции для этого.

Обходной путь для вашей проблемы состоит в том, чтобы добавить в изображение другой пакет, который импортирует из вашей модели и пакета драйверов JDBC, а затем указать eclipselink на этот новый пакет.

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

Другим решением может быть написание собственного драйвера JDBC, который просто оборачивает настоящий драйвер. В своем коде вы можете использовать OSGi discovery, чтобы найти, какие реальные драйверы доступны, в то время как для eclipselink ничего не меняется.

...