我坚持通过多个连接到数据库的实体。处理持久化的类实现了可运行接口,并且我在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