4

我在stackoverflow上阅读了很多关于我的问题的其他问题,但我没有找到合适的解决方案。

我开发了一个 OSGI 应用程序(Equinox)并使用 JPA(EclipseLink)。现在我要求在需要它的包中获取 EntityManager 的最佳方法。当我将 EntityManagerFactory 作为服务发布并使用它来获取 EntityManger 时,我必须在使用 EntityManager 的每个包中提供 persistence.xml。当我编写一个实用程序类共享一个 EntityManger 实例并将其作为服务发布时,我害怕遇到线程同步问题。

在使用 OSGI 和 JPA 时,是否有任何最佳实践来提供 EntityManager?

谢谢

4

2 回答 2

1

在 EclipseLink 中,当在 OSGi 中使用时,您必须通过将“<strong>JPA-PersistenceUnits: myPersistenceUnit”添加到persistence.xml 所在的bundle 的MANIFEST.MF 来声明可以在哪个bundle 中找到persistence.xml。EclipseLink 将搜索此声明并将使用此捆绑包的类加载器来获取 persistence.xml。然后,您可以将 EntityManagerFactory 发布为服务,并且不需要在使用该服务的每个包中共享 persistence.xml。但我认为这只适用于 EclipseLink。

于 2010-12-01T07:35:50.983 回答
0

我使用这个博客来设置 OpenJPA 和单独的模型包,而每个客户端包都不知道 persistence.xml。由于 EclipseLink 是一个 JPA 提供者,它应该是大致相同的设置。请务必查看博客底部链接的示例代码。

于 2010-11-29T15:43:58.000 回答