簡體   English   中英

JPA EntityManager從其他捆綁軟件(OSGI)發現實體

[英]JPA EntityManager discover entities from other bundle (OSGI)

在Equinox之類的OSGI環境中,我想擁有2個捆綁包(或更多捆綁包),每個捆綁包都有自己的JPA注釋實體(類)。 我希望每個捆綁包的類之間具有依賴關系。

例如:我有捆綁類為Person的捆綁軟件1和捆綁擴展Person的Employee類的捆綁軟件2(這是我能想到的最簡單的示例-我知道我可以將兩個類聲明為一個捆綁軟件,但我需要將它們都放入單獨的捆綁包)。

是否可以將EntityManager或EntityManagerFactory公開為OSGI服務,該服務了解兩個捆綁包中都存在的實體? 我知道每個捆綁包都可以有自己的EntityManager(EM),但是在給定的示例中,捆綁包2中的EM不了解實體Person。 如果可以的話,任何人都可以舉例或建議如何做?

謝謝你的幫助!

我希望每個捆綁包的類之間具有依賴關系。

使用Equinox + OSGI時這是不可能的。 使用未修改的Equinox和Gemini可以實現的最接近的效果JPA使用復合持久性單元,但是仍然要求您的實體在同一捆綁中,但在不同的JAR中。

我使用修補的Gemini JPA捆綁包創建了一個駭客,該捆綁包可以通過合並捆綁包中的持久性上下文來動態創建復合持久性上下文,但是它極其繁瑣和挑剔。 它依賴於捆綁軟件的加載順序,並且不會對捆綁軟件的重新加載做出適當的反應,因此無法解決OSGi的一半目的...

OTOH,您可以公開單獨的實體管理器,並在兩個捆綁軟件中同時使用它們,只要您接受在很短的時間內只有其中一個可用的實體管理器即可。 在捆綁軟件B中,什么都無法阻止您跟蹤捆綁軟件A的EntityManager(當然,除了循環捆綁軟件依賴項,但是如果您交叉導入軟件包,這會發生)。

為什么這不起作用? 如果Employee擴展Person,則捆綁軟件2將導入包含Person的包。 因此,它與bundle1 1具有依賴性。在bundle 2的persistence.xml中,您應該能夠列出Employee和Person。 因此,兩者都在捆綁軟件2的Entitymanager中工作。當然,捆綁軟件1的EntityManager無法了解Employee。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM