在osgi包之间共享JPA数据源

时间:2017-01-17 16:06:18

标签: hibernate jpa osgi spring-data-jpa apache-karaf

我遇到这种情况:

  • 一个SQL数据库实例
  • 两个或多个带有jpa实体和弹簧数据存储库的osgi包,用于"他们的"实体
  • 其中一个" jpa包"是"核心包",其他依赖它(插件包)

我可以将其与单一数据源一起使用吗?

示例:

  • "核心捆绑"包含Person实体
  • "人员列表插件包"包含PersonList实体,该实体通过people属性
  • 引用Person实体

我现在想要使用"人员列表插件包中的PersonListService"使用PersonListRepository.findByPeoplesFirstName(String firstName)

背景是我希望通过添加osgi包作为插件来扩展我的应用程序的数据库。

现在我尝试使用apache karaf和hibernate 5,因为空间支持,如果这很重要。

1 个答案:

答案 0 :(得分:0)

在OSGi中,建议JPA EntityManager的所有实体都驻留在同一个包中。您可以从看到所有实体的包中创建EntityManager,但这不适用于您想要的插件模型。

无论如何,在数据库端创建一个产生多个bundle的模型可能会产生不必要的耦合。您应该研究有界上下文的DDD概念,并创建持久化上下文,以实现每个有界上下文。

无论如何,插件模型与数据库的兼容性不高,因为数据库通常需要具有非常静态的结构,而插件可能会在运行时出现。

您当然可以共享DataSource,但这是在jdbc级别而不是在jpa级别。