2017-01-17 4 views
0

меня такая ситуация:Дайте источник данных JPA среди OSGi расслоения

  • один экземпляр базы данных SQL
  • два или более OSGi расслоения с JPA сущностей и хранилищ пружинными данных для «своих» субъектов
  • один «пучков jpa» является «ядром пучка», другие зависят от него (комплект плагинов)

Могу ли я использовать это с помощью одного источника данных?

Пример:

  • "основной пакет" содержит Person сущность
  • "Person список плагинов пакет" содержит PersonList объект, который ссылки на личности лица, проводимого people собственности

я теперь хотите использовать PersonListService из «Плагина плагина списка лиц», который использует PersonListRepository.findByPeoplesFirstName(String firstName)

Фон состоит в том, что я хочу, чтобы база данных моего приложения могла быть расширена путем добавления пакета osgi в качестве плагина.

Прямо сейчас я экспериментирую с apache karaf и hibernate 5 из-за пространственной поддержки, если это важно.

+0

Почему вы все равно хотите использовать «плагины»? Например, если у вас есть объект Person, тогда все классы репозитория, связанные с Лицом, должны быть в одном комплекте. Я думаю, что было бы нецелесообразно разделять сущности и их репозитории. –

+0

Я хочу заменить устаревшее приложение, в котором пользователи могут просто установить «плагин», добавив папку с php-кодом, сейчас есть «плагин кэширования», который добавляет некоторые предварительно вычисленные таблицы в базу данных. Для этого нужен доступ к собственной таблице и к «основным». – dve

ответ

0

В OSGi рекомендуется, чтобы все объекты JPA EntityManager находились в одном комплекте. Вы можете создать EntityManager из пакета, который видит все сущности, но это не будет работать с моделью плагинов, как вы хотите.

В любом случае создание модели на стороне базы данных, которая порождает несколько пакетов, может создать нежелательную связь. Вы должны изучить концепцию ограниченного контекста DDD и создать контексты персистентности для реализации одного ограниченного контекста.

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

Конечно, вы можете совместно использовать DataSource, но это на уровне jdbc, а не на уровне jpa.

+0

Я боялся этого ответа, но будет ли эта идея работать: каждый «jpa-bundle» импортирует те, которые ему нужны, и создает собственный контекст постоянства? Я не могу обмениваться объектами от одного к другому, но все же использовать определения сущности и службы? – dve

+0

Я не думаю, что это сработает. Причина в том, что у EntityManagers будут разные кеши, но они будут эффективно записываться в одну и ту же базу данных. Конечно, вы можете поделиться некоторыми базовыми классами, но каждый EntityManager должен писать в разные таблицы. –