2017-02-23 54 views
1

我们正在决定是否使用OSGI。这是一个多方面的决定,但是我有关于OSGI和JPA之间的互操作性的具体问题。我读到了两者的结合有几个问题。 Mike Keith的presentationhere中描述了这些问题的详细描述。JEE环境中OSGI和JPA的互操作性

持久性是另一个具有挑战性的问题。带OSGI的JPA要求我们 将所有要在捆绑中使用的类加倍。这迫使我们为所有实体使用接口,因为它们的类将是 的不同。这里的主要问题是开发人员编写 正确的代码并维护配置文件。诸如 之类的方法通常需要重写,如果对多个 包中存在的实体使用继承,那么可能是 不重要。

而且我发现一个悬而未决post on SO其描述这样的:

我只是想给一个想法,为什么你没有得到这个 问题的任何答案。几年前,我实现了OSGi EE 规范的JPA章节。我真的想在OSGi内支持JPA。事情是,他们 是不兼容OSGi 中的每种技术都存在使用编织,字节码操作,拦截器或其他技巧的问题。 您必须决定,无论是这些技术还是OSGi,否则您将在这样的问题上花费您宝贵的时间。曾经有许多开发人员希望支持JPA,但他们也都消失了。我猜想,他们也向前迈进。

我们在带有EJB,JPA(Hibernate),CDI和Oracle数据库的JBOSS上使用JEE 7。我们是而不是能够切换数据库,JPA提供程序或持久化技术(JPA)。

+0

我真的不知道为什么麦克基思认为有必要翻一番他的所有课程。我没有看到这个问题,他也没有在博客文章中解释。 –

回答

3

不知道这对JBOSS有多好,但JPA在使用Aries JPA作为OSGi细节的适配器时效果很好。使用它的最好方法是在Apache Karaf中,因为它已经准备好了。所以你只需要安装一些功能。

请参阅此处查看使用Aries JPA with declarative servicesblueprint的示例。

这些示例显示了上述幻灯片中提到的问题的解决方案。

  • 向上依赖关系:实体类是自动检测到的,但持久性单元的所有实体必须在一个包中。我不知道需要重复。
  • 编织:使用基于hibernate代理的编织。还支持编译时间和加载时间编织。白羊座JPA负责捆绑加载编织。所以它发生在应用程序可以访问这些类之前。
  • JDBC:使用PAX-JDBC-config来无类加载器技巧
  • JPA规范自动创建XA准备,汇总数据源:这是由OSGi JPA规范定义了如何发现和起诉PersistenceProviders解决。所有当前的提供者都支持这一点

我看到关于好友类加载器的提示..不要使用它。它会使你的代码不可移植,并且更难理解。

所以我想说在OSGi中JPA的所有问题都已经解决了。 JPA仍然比看起来复杂得多。所以即使JPA在OSGi中运行良好,使用更简单的持久性技术也有很好的理由。