我的应用程序有长时间运行的事务,因此我在每个方法的末尾尝试了选项 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
似乎没有释放与池的连接。如果您需要更多详细信息,请告诉我。