Как я могу объединить/расширить единицы сохраняемости из разных JAR-файлов?

Я использую постоянство JPA для своих моделей данных с Eclipselink в качестве поставщика постоянства. У меня есть модульное (OSGi) приложение, и один из модулей содержит стандартную модель данных и блок сохраняемости, который автоматически включает все сущности из пакета. Поставщик постоянства находится в другом модуле, который работает хорошо.

Теперь я хочу, чтобы третий модуль добавлял некоторые сущности в единицу постоянства. Как мне это сделать? Я нашел это решение, которое кажется специфичным для Spring, который я не использую. Суть этого подхода заключается в написании постпроцессора, который подключается к обработке модуля сохраняемости и вручную объединяет <class> записи из persistence.xml файлов.

Можно ли объединить единицы персистентности? Может ли кто-нибудь предложить обходной путь?


person Hanno Fietz    schedule 31.07.2009    source источник
comment
Все три модуля должны быть в одном .ear?   -  person Mykola Golubyev    schedule 03.08.2009
comment
Нет, каждый модуль представляет собой JAR-файл, который затем загружается в контейнер OSGi (в моем случае Apache Felix). Eclipselink находится либо в собственном JAR, либо в одном из модулей и сканирует видимые пакеты на наличие файлов persistence.xml. Это хорошо работает.   -  person Hanno Fietz    schedule 04.08.2009


Ответы (2)


Во-первых, вот ссылка на Dynamic-JPA, они предлагают способ динамического обновления объектов. Я бы сначала изучил этот вариант.


Вот еще одна ссылка (PDF) из OSGi есть несколько диаграмм верхнего уровня, касающихся постоянства и EntityManagerFactory, которые могут оказаться полезными.


интересный подход, но может быть не связан

Вот ссылка на программное создание единиц сохраняемости без использования файла persistence.xml (что вы не можете сделать, но ответы дают некоторое представление о проблеме). Филк предлагает, как удалить провайдера из файла persistence.xml. Если вы будете следовать этому методу, вы сможете объединить свои сущности в определенную единицу сохраняемости.

«Ну, в старые добрые времена Hibernate я мог просто создать сеанс и добавить в него свои классы на лету. Кажется, это никогда не попадало в спецификации JPA SUN. Однако я полностью удалил провайдер из persistence.xml и передал его в EL, используя свойства EMF. Кажется, это работает нормально. Единственное, что осталось в файле persistence.xml, — это спецификация классов. Думаю, было бы несложно раскрыть метод, который анализирует имя класса в EL и создает для него ClassDescriptor как общедоступный метод поставщика EL JPA».


Наконец, мы подошли к хакерскому решению, как уже было предложено, просто отредактируйте ваши файлы persistence.xml постфактум. Я считаю, что это сработает (хотя я не пробовал), но это определенно вариант.

person Robert Greiner    schedule 06.08.2009

У меня есть установка, в которой файл WAR содержит файл persistence.xml. Уже описанное здесь решение можно использовать для JAR, WAR и EAR. JPA 2.0: добавление классов сущностей в PersistenceUnit *из другой банки* автоматически

person Jesper Tejlgaard    schedule 26.03.2014