2009-10-13 4 views
0

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

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

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

Это похоже на очень типичную вещь. Думаю, там уже есть решение?

This post от Shaun Smith of Oracle от ранее этого года предполагает, что, возможно, нет, но это также указывает на то, что спрос на него кажется вполне реальным.

ответ

2

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

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

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

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

+1

+1 для идеи медиатора –

Смежные вопросы