假設我有兩個應用程序,每個應用程序都有一個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. JPA兩個實體使用相同@JoinTable
- 3. 對兩個相同的表使用相同的實體類?
- 4. 具有相同實體的不同數據庫服務器的nhibernate會話
- 5. 兩個不同實體框架中的相同實體名稱
- 6. OSGI兩個相同服務的實例
- 7. JPA Eclipselink - 多個EntityManagerFactory實例返回相同的會話
- 8. 兩個併發請求,相同的JPA實體 - 問題?
- 9. 相同類型的相同類型的兩個實例
- 10. 在不同的服務器上創建相同的會話
- 11. 兩次連接相同的實體
- 12. jQuery的兩個事件兩個選擇器相同的功能
- 13. 阻止來自同一服務器會話的相同請求
- 14. Maven的EAR插件 - 兩個庫與相同的artifactId
- 15. 生成不同ID的相同實體
- 16. 兩個會話Bean能否實現相同的遠程接口?
- 17. 實體框架兩個表相同設計不同的名稱
- 18. JPA persistence.xml共享相同的jar文件
- 19. 管理相同GAE應用程序的兩個實例
- 20. 找到兩個相同的文件行
- 21. jQuery爲兩個不同的事件運行相同的代碼
- 22. 相同的服務器,不同的域需要不同的會話
- 23. 不同服務器上的會話管理以及具有相同數據庫的不同域
- 24. 實體框架6兩個不同的集合提及相同的實體
- 25. JPA實體和DDD實體應該是相同的類嗎?
- 26. JPA實體映射 - 鏈接相同的實體
- 27. 實體框架相同的實體
- 28. 在兩個瀏覽器和不同的會話相同的頁面 - ASHX
- 29. 更新兩個編輯器實例顯示相同的文件
- 30. 相同表格的相同商業實體?
做應用程序共享類文件? – 2010-12-15 14:04:00
是的,實體和一些常見的api – Mauli 2010-12-15 14:08:18
你配置你的entitymanager使用擴展持久化上下文嗎? – HDave 2010-12-18 07:10:59