假設我有兩個應用程序,每個應用程序都有一個EAR文件,它們在相同的JTA事務中互相調用。如果兩個人共享相同的實體管理者,他們是否獲得相同的會話或每次創建新會話?兩個EAR文件,相同的JPA實體管理器,相同的事務=>相同的會話?
6
A
回答
1
EntityManager(在JPA中)或多或少等同於Session(在Hibernate中)。在純粹的JPA應用程序中,您只能使用EntityManager。它封裝了一個Session。只要EntityManager存在,會話就會繼續。因爲它們運行在不同的JVM中(至少在我使用的應用程序服務器上),所以在兩個應用程序之間共享一個EntityManager是沒有道理的(我認爲也沒辦法)。你可以做的是分享EntityManager 設置(稱爲持久性單元)。您可以通過將實體類和XML放入JAR中並從兩個應用程序中使用它來完成此操作,但完成這個操作可能取決於您的應用程序服務器。它肯定會有與第二個應用程序的類和XML重複相同的效果。
會發生什麼事情是這樣的:兩個應用程序中的每一個都會有自己的持久化上下文。這意味着,當你在一個應用程序中加載一個實體時,它不會被加載到另一個應用程序中。如果您在應用程序一中加載和修改實體,然後將其加載到應用程序二中,則應用程序二將看到未修改的實體(除非您有非常奇怪的事務隔離設置和應用程序一決定先沖刷實體)。
任何衝突只會在JTA事務結束時出現。我不知道會發生什麼,我認爲這取決於您的數據庫和交易設置。如果兩個應用程序試圖對同一數據執行不同的操作,事務處理可能會回滾。每個應用程序都有自己的數據庫連接。它們通過JTA事務綁定在一起,這樣可以確保它們都落實或兩者都回滾。
相關問題
- 1. JPA堅持兩次相同的實體
- 2. 對兩個相同的表使用相同的實體類?
- 3. 具有相同實體的不同數據庫服務器的nhibernate會話
- 4. JPA Eclipselink - 多個EntityManagerFactory實例返回相同的會話
- 5. 兩個併發請求,相同的JPA實體 - 問題?
- 6. 相同類型的相同類型的兩個實例
- 7. 在不同的服務器上創建相同的會話
- 8. 兩次連接相同的實體
- 9. Maven的EAR插件 - 兩個庫與相同的artifactId
- 10. 生成不同ID的相同實體
- 11. 兩個會話Bean能否實現相同的遠程接口?
- 12. JPA persistence.xml共享相同的jar文件
- 13. 管理相同GAE應用程序的兩個實例
- 14. jQuery爲兩個不同的事件運行相同的代碼
- 15. 相同的服務器,不同的域需要不同的會話
- 16. 實體框架6兩個不同的集合提及相同的實體
- 17. 不同服務器上的會話管理以及具有相同數據庫的不同域
- 18. JPA實體映射 - 鏈接相同的實體
- 19. JPA實體和DDD實體應該是相同的類嗎?
- 20. 實體框架相同的實體
- 21. 在兩個瀏覽器和不同的會話相同的頁面 - ASHX
- 22. 相同表格的相同商業實體?
- 23. 相同型號的兩個belongs_to協會
- 24. SelectedRows相同的兩個datagridview
- 25. 同一個jar文件中的兩個相同的類
- 26. JPA在同一類中有兩個相同類型的ElementCollections
- 27. 兩個URL,相同的服務器/文件?
- 28. 兩個實例包含相同的值
- 29. 兩個Python實例,相同的庫
- 30. 相同的Apache服務器
做應用程序共享類文件? – 2010-12-15 14:04:00
是的,實體和一些常見的api – Mauli 2010-12-15 14:08:18
你配置你的entitymanager使用擴展持久化上下文嗎? – HDave 2010-12-18 07:10:59