我堅持通過多個連接到數據庫的實體。處理持久化的類實現了可運行接口,並且我在run()方法中創建了EntityManagers。在閱讀this之後,我想知道是否最好在類構造函數或靜態初始化塊中初始化EntityManagerFactory。在多線程環境中初始化EntityManagerFactory
0
A
回答
1
我假設你在Java SE中使用JPA而不是Java EE。此外,我認爲你有一個類來處理你的實體的持久性 - 當你要求類構造函數或靜態初始化時,你的意思是這個類。此外,我假設你所有的多連接都是針對同一個數據庫的......我假設你不重用你的實例:既不是你的實例,也不是你的可運行類實例。
如果假設是正確的,那麼我寧願初始化EntityManagerFactory
,要麼是對可運行類進行靜態初始化,要麼是以單例實現的第二個類。
如果在可運行類的類構造函數中創建EntityManagerFactory
,則每個實例(即每個線程)都有一個工廠。這是可能的,但不必要,因爲對於多個邏輯相同的EntityManager
實例,您只需要一個EntityManagerFactory
。
另一個問題是在哪裏創建EntityManager
本身:在類的構造函數中(允許您在啓動線程的早期捕獲錯誤)或者在方法run
中。個人而言,我寧願run
- 方法,因爲它允許您創建和關閉在該EntityManager
在使用try/finally
)同樣的方法
警告:要知道,你有多個線程之間沒有任何交易。
相關問題
- 1. 多線程環境中初始化的內存語義(C++)
- 2. Rails:每個環境初始化程序?
- 3. CherryPy + Jinja,在哪裏初始化環境
- 4. 初始化多線程中的向量
- 5. 錯誤:不允許在環境中使用初始化程序
- 6. 在多線程環境
- 7. JAVA初始化數據庫環境
- 8. Azure角色環境未初始化
- 9. Fastlane不初始化環境變量--env
- 10. 爲什麼eb cli在初始化多環境時崩潰
- 11. 多線程懶惰初始化
- 12. 在開發環境軌道上跳過初始化程序
- 13. 在多線程C#程序中執行一次初始化
- 14. 初始化主線程
- 15. 在多線程環境中使用CList
- 16. Shiro在多線程環境中
- 17. 在多線程環境中使用Log4Net
- 18. 在.net中調試多線程環境
- 19. 在多線程環境中使用TraceSource
- 20. 在多線程環境中重繪
- 21. 在多線程環境中使用NLog
- 22. 線程化類成員函數;線程初始化通過初始化列表
- 23. 實現多線程環境
- 24. SQLite在多線程環境中的只讀優化
- 25. 如何在Servlet環境中初始化一個API
- 26. 在Java中初始化多線程矩陣
- 27. 用於導軌的環境特定初始化程序?
- 28. Android的境界初始化
- 29. 初始化JPA的EntityManagerFactory在applicationscope豆在JSF 2
- 30. 在線列表初始化
我認爲需要注入EntityManagerFactory,然後在每個線程中創建一個新的EntityManager,因爲您的應用程序也需要線程安全,這也是我用於類似需求的解決方案。 – 2013-02-27 23:34:02