ste*_*mac 65 java persistence jpa toplink
我刚刚开始将我自己开发的持久性框架迁移到JPA.
鉴于持久性框架隐藏了大量的管道,我有兴趣知道是否关闭EntityManagers会造成资源泄漏,或者框架是否会收集并关闭它们.
我打算在所有地方关闭它们,但我必须这样做吗?
目前使用TopLink,只是因为它可以轻松地与NetBeans协同工作,但我很乐意调查其他JPA提供商.
jb.*_*jb. 78
这取决于你如何获得它.
如果您使用EntityManagerFactory创建它,则无论您使用何种框架,都必须关闭它.
如果使用依赖注入(例如使用EJB和@PersistenceContext注释)获取它,则不应手动关闭它(AFAIK会导致RuntimeException).
Vla*_*hev 11
你应该.
框架不知道您打算如何使用EM,因此他们无法关闭它(除非,可能是在最终确定时,这是无法保证的).是的,不关闭它们会造成资源泄漏.
这个想法与"始终关闭java.sql.Connection"相同(尽管有些数据源具有通过不活动自动关闭它们的设置)或"始终关闭Hibernate会话".
此外,如果您打算编写可移植代码,则不应该依赖特定的JPA提供程序"聪明" - 其他可能无法及时关闭EM.
我已经在我的存储库中EntityManager使用了@PersistenceContext注释。我可以看到在连接池到达它之后maxPoolSize它没有被清理。
但是,如果我创建EntityManagerusingEntityManagerFactory并调用,entitymanager.close()则连接将被清理。我正在c3p0用作连接池库。
| 归档时间: | 
 | 
| 查看次数: | 49813 次 | 
| 最近记录: |