14

我的应用程序有长时间运行的事务,因此我在每个方法的末尾尝试了选项 session.close() 以确保连接对象不会无限期地保持很长时间。

当使用 session.close() 选项时,我可以看到 Hibernate 的会话对象和从 session.connection() 获得的相应 Connection 对象被正确销毁。但问题在于连接池。会话获得的连接即使关闭会话后也不会释放回连接池。发现其他请求正在等待来自池的连接。

我在我的应用程序中使用 JTA 事务。在 hibernate.cfg.xml 中,我已将 connection.release_mode 设置为 auto(默认)并将 connection.autocommit 设置为 true。

有没有人遇到过这个问题?请让我知道我在这里缺少什么。

跟进:这是我的hibernate配置文件详情:

<property name="connection.datasource">MXoraDS</property> 
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> 
<property name="connection.release_mode">after_statement</property> 
<property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.WeblogicTransactionManagerLookup</property> 
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
<property name="hibernate.current_session_context_class">org.hibernate.context.JTASessionContext</property> 
<property name="transaction.auto_close_session">true</property> 
<property name="max_fetch_depth">2</property>

我们在连接到 Oracle DB 的应用层使用 JSF 和 EJB 2.1。after_statement似乎没有释放与池的连接。如果您需要更多详细信息,请告诉我。

4

2 回答 2

20
于 2010-10-14T17:15:49.413 回答
0

如果您使用的是 JDBCTransactionManager,则在事务结束时,连接将返回到连接池。

于 2010-10-13T13:35:36.873 回答