Hibernate无法关闭连接?

Hibernate无法关闭连接?,hibernate,jsf-2,Hibernate,Jsf 2,是否存在休眠无法关闭打开的连接的情况 我正在使用Hibernate 3.2.5和Oracle 10g express开发一个JSF 2.0应用程序。在固定数量的事务之后,hibernate可以不再连接到数据库,甚至我也无法使用sqlDeveloper进行连接。正如我所检查的,此失败之前的事务数几乎等于init.ora中的进程数 我总是这样处理hibernate会话: try { session.beginTransaction(); ... } catch

是否存在休眠无法关闭打开的连接的情况

我正在使用Hibernate 3.2.5和Oracle 10g express开发一个JSF 2.0应用程序。在固定数量的事务之后,hibernate可以不再连接到数据库,甚至我也无法使用sqlDeveloper进行连接。正如我所检查的,此失败之前的事务数几乎等于init.ora中的进程数

我总是这样处理hibernate会话:

try {
      session.beginTransaction();

      ... 

    } catch (Exception ex) {
      Transaction tx = session.getTransaction();
      if (tx.isActive()) {
        tx.rollback();
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, ex.getMessage(), ex.getMessage()));
      }
    } finally {
      session.close();
    }
我的hibernate配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
    <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
    <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:XE</property>
    <property name="hibernate.connection.username">CUSTOMS_G2G</property>
    <property name="hibernate.connection.password">123456</property>
    <mapping resource="ir/khorasancustoms/g2g/persistance/UserGroup.hbm.xml"/>
    <mapping resource="ir/khorasancustoms/g2g/persistance/User.hbm.xml"/>
    <mapping resource="ir/khorasancustoms/g2g/persistance/CatalogGroup.hbm.xml"/>
    <mapping resource="ir/khorasancustoms/g2g/persistance/CatalogValue.hbm.xml"/>
    <mapping resource="ir/khorasancustoms/g2g/persistance/gates/Receipt.hbm.xml"/>
    <mapping resource="ir/khorasancustoms/g2g/persistance/gates/Price.hbm.xml"/>
    <mapping resource="ir/khorasancustoms/g2g/persistance/gates/Promise.hbm.xml"/>
    <mapping resource="ir/khorasancustoms/g2g/persistance/gates/Exit.hbm.xml"/>
    <mapping resource="ir/khorasancustoms/g2g/persistance/gates/Weight.hbm.xml"/>
    <mapping resource="ir/khorasancustoms/g2g/persistance/gates/Fee.hbm.xml"/>
    <mapping resource="ir/khorasancustoms/g2g/persistance/Page.hbm.xml"/>
    <mapping resource="ir/khorasancustoms/g2g/persistance/Permission.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

org.hibernate.dialen.oraclealent
oracle.jdbc.OracleDriver
jdbc:oracle:thin:@localhost:1521:XE
海关(G2G)
123456

在.net世界中,我在关闭前检查会话是否为
非空
打开
,因为有时我会看到这个错误,不确定JPA是否也是如此,但请参见下面的代码

e、 g


另请参见此

可能存在与hibernate.connection.release\u模式相关的问题。看看
.

我将启用调试(特别是org.hibernate.transactionorg.hibernate.jdbc)并查看发生了什么。这样更容易,而且由于您不使用任何池,这是查找发生了什么的最简单方法

调用session.close()时我没有问题,但它似乎根本不会关闭基础连接。您能否更详细地解释如何启用它?顺便问一下,我在使用GlassFish应用服务器时,如何配置域并让hibernate从其池中获取连接?一次一件事。首先,集中精力确定连接未关闭的原因。您需要阅读有关如何在slf4j中启用登录的教程。Hibernate将其用于日志记录,因此一旦您知道如何为slf4j配置日志记录,您就可以了。大多数时候在这里阅读它只是在类路径中放置一个xml配置文件。我手动将其设置为on_close,但问题仍然存在。事务处理后如何?无更改!:(有没有办法使用玻璃鱼池?是的,有。看看这个链接。谢谢,这个问题似乎为我解决了;)(使用玻璃鱼池)
if (session != null && session.IsOpen)
      session.close();