У меня есть проект OSGi, который, среди прочего, содержит один пакет с аннотированными моделями доменов JPA и другой, который использует Eclipselink в качестве поставщика постоянства. Последний создает экземпляр EntityManager
, используя параметр конфигурации для определения имени класса драйвера JDBC.
Теперь, пакет с моделями должен иметь возможность видеть драйвер JDBC, я думаю, потому что eclipselink использует загрузчик классов классов модели для его загрузки. Это имеет нежелательный побочный эффект: мне нужно явно объявить директиву Import-Package
в комплекте модели, чтобы включить драйвер. Заменить драйвер через OSGi тогда уже не просто (мне нужно заново создать манифест), что в первую очередь противоречит цели использования OSGi.
Поскольку все драйверы JDBC реализуют один и тот же интерфейс, я хотел бы поместить драйверы баз данных в их собственный пакет, зарегистрировать их в контейнере OSGi под их общим именем интерфейса и использовать eclipselink, что доступно. Но я не могу понять, как это сделать, потому что кажется, что драйвер создан экземпляром eclipselink, то есть я не могу установить его в другом месте и заставить eclipselink не обращать внимания на фактическое имя класса.
Кажется, это очень типичная вещь. Я думаю, что уже есть решение?
Этот пост Шона Смита из Oracle ранее в этом году предполагает, что, возможно, нет, но он также указывает, что спрос на него кажется вполне реальным.