我已经在stackoverflow上阅读了很多关于我的问题的其他问题,但我找不到合适的解决方案。
我开发OSGI应用程序(Equinox)并使用JPA(EclipseLink)。现在我要求在需要它的bundle中获取EntityManager的最佳方法。当我将EntityManagerFactory发布为服务并使用它来获取EntityManger时,我必须在每个使用EntityManager的bundle中提供persistence.xml。当我编写一个共享一个EntityManger实例并将其作为服务发布的utitlity类时,我害怕遇到线程同步问题。
使用OSGI和JPA时,是否有任何最佳实践来提供EntityManager?
由于
丹
答案 0 :(得分:1)
在EclipseLink中,当在OSGi中使用时,你必须通过在捆绑包的MANIFEST.MF中添加“ JPA-PersistenceUnits:myPersistenceUnit ”来声明可以在哪个bundle中找到persistence.xml,其中包含持久性。 xml位于。 EclipseLink将搜索此声明,并将使用此bundle的类加载器来获取persistence.xml。然后,您可以将EntityManagerFactory发布为Service,并且不需要使用该服务在每个bundle中共享persistence.xml。但我认为这只适用于EclipseLink。
答案 1 :(得分:0)
我使用this blog来设置OpenJPA和单独的模型包,而不是每个客户端包都知道persistence.xml。由于EclipseLink是JPA提供者,因此它应该大致相同。请务必查看博客底部链接的example code。