我堅持通過多個連接到數據庫的實體。處理持久化的類實現了可運行接口,並且我在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. Scala - 初始化REPL環境
- 3. Rails:每個環境初始化程序?
- 4. CherryPy + Jinja,在哪裏初始化環境
- 5. 初始化多線程中的向量
- 6. 錯誤:不允許在環境中使用初始化程序
- 7. AnyEvent在多線程環境
- 8. 在多線程環境
- 9. JAVA初始化數據庫環境
- 10. 初始化批處理環境
- 11. Fastlane不初始化環境變量--env
- 12. Azure角色環境未初始化
- 13. 多線程懶惰初始化
- 14. 爲什麼eb cli在初始化多環境時崩潰
- 15. ShellExecuteEx和在VCL線程中初始化
- 16. 在開發環境軌道上跳過初始化程序
- 17. 在多線程C#程序中執行一次初始化
- 18. 初始化主線程
- 19. 在多線程環境中生成PDF
- 20. 在多線程環境中使用NLog
- 21. Shiro在多線程環境中
- 22. 在.net中調試多線程環境
- 23. 在多線程環境中使用CList
- 24. 在多線程環境中重繪
- 25. 在多線程環境中使用TraceSource
- 26. 在多線程環境中使用StringBuilder
- 27. 在多線程環境中休眠
- 28. 在多線程環境中使用Log4Net
- 29. 在多線程環境中讀取值
- 30. 在多線程環境中使用sqlite
我認爲需要注入EntityManagerFactory,然後在每個線程中創建一個新的EntityManager,因爲您的應用程序也需要線程安全,這也是我用於類似需求的解決方案。 – 2013-02-27 23:34:02