Hibernate 休眠会话。关闭()不返回到池的连接

Hibernate 休眠会话。关闭()不返回到池的连接,hibernate,session,ejb,jta,Hibernate,Session,Ejb,Jta,我的应用程序有长时间运行的事务,因此我在每个方法的末尾都尝试了session.close选项,以确保连接对象不会无限期地长时间保留 当使用session.close选项时,我可以看到Hibernate的session对象和从session.Connection获得的相应连接对象被正确地销毁。但问题在于连接池。即使在关闭会话后,会话获得的连接也不会释放回连接池。发现其他请求正在等待来自池的连接 我正在应用程序中使用JTA事务。在hibernate.cfg.xml中,我将connection.rel

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

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

我正在应用程序中使用JTA事务。在hibernate.cfg.xml中,我将connection.release\u模式设置为自动默认,将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和EJB2.1。after_语句似乎没有释放到池的连接。如果您需要更多详细信息,请告诉我。

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

我正在应用程序中使用JTA事务。在hibernate.cfg.xml中,我将connection.release\u模式设置为自动默认,将connection.autocommit设置为true

能否尝试将hibernate.connection.release\u mode属性显式定义为after\u语句?我知道这应该是默认设置,但是,根据您的上下文,您是否可以使用Spring?,auto可能不会按预期运行,请参见

以下是编写的关于hibernate.connection.release_mode属性的内容,以供参考:

指定应在何时使用Hibernate 释放JDBC连接。默认情况下, JDBC连接一直保持到 会话已显式关闭或关闭 断开的。申请 服务器JTA数据源,使用 事后声明 在每个JDBC之后释放连接 呼叫对于非JTA连接,它 通常,发布 连接在每个端口的末尾 事务,通过使用 交易后。自动遗嘱 为JTA选择after_语句 以及CMT交易策略和 JDBC的after_事务 交易策略

e、 g.自动默认|在|交易结束|后| 事后声明

此设置仅影响会话 从 SessionFactory.openSession。对于 通过以下途径获得的会议 SessionFactory.getCurrentSession中的 CurrentSessionContext实现 配置为使用控件 这些设备的连接释放模式 会议。看


如果没有帮助,请添加有关您的环境和配置Spring?、如何获得会话等的更多详细信息。

您应该提供有关配置的更多信息。如哪种transactionmanager&transaction配置,您如何管理您的事务,谢谢您的回复。我们正在使用Weblogic事务管理器org.hibernate.Transaction。WeblogicTransactionManagerLookup和JTATransactionFactory。事务由负责连接对象的容器管理。使用CMT时,是否可以通过关闭hibernate会话以编程方式将连接返回到连接池?在这种情况下,weblogic会将连接添加到事务中。当事务结束时,weblogic将返回到池的连接。它将在事务结束后通过提交或回滚返回到池的连接。但是在事务内部,我有对外部应用程序的调用,这需要更长的时间来执行。我正试图在调用长时间运行的方法之前关闭连接并将其返回到池中,如果需要,再次重新连接。这样我就不会长时间保持连接。请告诉我这是否可能。我是否可以使用session.close或disconnect在长时间运行的事务中返回到池的连接?事务正在进行时,无法返回到池的连接。暂停交易无效。因此,重构程序,使长时间运行的调用在事务之外执行,即在启动事务之前执行。或者向连接池添加更多连接这是我的hibernate配置文件详细信息:MXoraDS org.hibernate.dialen.oracle9dialent after_statement org.hibernate.transaction.WeblogicTransactionManagerLookup org.hibernate.transaction.JTATransactionFactory更多详细信息:org.hibernate.context.JTASessionContexttrue 2我们在连接到Oracle DB的应用程序层使用JSF和EJB2.1。after_语句似乎没有释放到池的连接。如果你需要更多的细节,请告诉我。