Ram*_*mki 8 entitymanager jpa-2.0
在我的项目中,我忘了关闭每个操作的实体管理器.一段时间后,由于与mysql服务器的连接过多,我得到了异常.这是否意味着每个实体经理建立连接?当我们忘记关闭连接时会发生什么?我只使用了一个实体经理工厂.
Vin*_*lds 12
假设您使用的是应用程序管理的实体管理器,那么您负责初始化和关闭实体管理器.另一方面,如果您依靠容器将实体管理器注入会话bean(或任何托管类),则容器负责确保实体管理器已关闭.
通常,实体管理器不负责创建与数据库的连接.它将改为使用在中定义的连接池persistence.xml.JTA实体经理和资源本地实体经理都是如此; JTA实体管理器依赖于应用程序服务器环境提供的JTA数据源,而资源本地实体管理器则创建和管理自己的池.
如果不关闭实体管理器,并且如果继续创建它们的新实例,则可能会耗尽JTA数据源中的连接(对于JTA实体管理器)或在客户端连接上达到服务器定义的限制(对于JTA和资源本地实体经理).每个数据库实例都将配置为接受不超过一定数量的连接.如果所有客户端建立的连接数超过此限制,则服务器将简单地删除添加连接.如果您打开请求来自池(对于JTA实体管理器)的其他连接的实体管理器实例,或者创建新池(对于资源本地实体管理器),那么池本身很可能已经耗尽,或者也是很多连接都会被打开.
由于无法直接关闭连接,甚至无法从应用程序调整连接池的大小,因此当您不再需要实体管理器实例时,必须将其关闭; 这将自动释放为实体管理器建立的连接.
此外,如果您出于某种原因使用资源本地实体管理器,那么查看为每个实体管理器实例使用经过良好调整且尺寸合适的连接池是明智的.如果您正在使用JTA实体管理器,请考虑使用容器注入的实体管理器和由经过良好调整且尺寸合适的连接池支持的JTA数据源.
| 归档时间: |
|
| 查看次数: |
15218 次 |
| 最近记录: |