2010-11-23 41 views
4

我已閱讀了很多關於我的問題的stackoverflow的其他問題,但我沒有找到合適的解決方案。在OSGI應用程序中提供EntityManager的最佳實踐

我開發一個OSGI應用程序(Equinox)並使用JPA(EclipseLink)。現在我要求在需要它的捆綁包中獲得EntityManager的最佳方式。當我將EntityManagerFactory作爲服務發佈並使用它來獲取EntityManger時,我必須在每個使用EntityManager的包中提供persistence.xml。當我編寫一個共享一個EntityManger實例的可用性類並將其作爲服務發佈時,我恐怕會遇到線程同步問題。

在使用OSGI和JPA時,是否有任何一種最佳實踐來提供EntityManager?

感謝

回答

1

在的EclipseLink內的OSGi使用時必須聲明,其中捆綁的persistence.xml可以通過增加找到「JPA-PersistenceUnits:myPersistenceUnit」到bundle的MANIFEST.MF在persistence.xml中的位置。 EclipseLink將搜索此聲明並使用此包的類加載器來獲取persistence.xml。然後,您可以將EntityManagerFactory作爲服務發佈,並且不需要在使用該服務的每個包中共享persistence.xml。但我認爲這隻適用於EclipseLink。

0

我以前this blog獲得與OpenJPA的和單獨的樣板束設置爲無每個客戶端包寂寂的persistence.xml。由於EclipseLink是一個JPA提供程序,它應該大致相同的設置。請務必查看博客底部鏈接的example code