Общий доступ к источнику данных JPA среди пакетов osgi

У меня такая ситуация:

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

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

Образец:

  • «core bundle» содержит Personсущность
  • «Person list plugin bundle» содержит PersonListсущность, которая ссылается на сущность Person с помощью peopleсвойства

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

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

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

1 ответ

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

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

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

    Вы можете, конечно, поделиться источником данных, но это на уровне jdbc, а не на уровне jpa.