Java Hibernate:4.2.21和Jboss 6.4.21数据库连接泄漏

Java Hibernate:4.2.21和Jboss 6.4.21数据库连接泄漏,java,oracle,hibernate,jboss,jboss6.x,Java,Oracle,Hibernate,Jboss,Jboss6.x,带有Hibernate:4.2.21.Final的版本Jboss 6.4.21EAP尽管打开和关闭了会话(Final子句),但仍在我们的数据库Oracle数据库12c企业版12.1.0.2.0-64位产品中创建连接 接下来,我将配置放在hibernate中 从我们所看到的情况来看,Hibernate保留JBoss池中的连接,显然问题是当池大小达到定义的最大值时,应用程序会出现以下异常: 登录Jboss javax.resource.ResourceException:IJ000655:无托管连接

带有Hibernate:4.2.21.Final的版本Jboss 6.4.21EAP尽管打开和关闭了会话(Final子句),但仍在我们的数据库Oracle数据库12c企业版12.1.0.2.0-64位产品中创建连接

接下来,我将配置放在hibernate中

从我们所看到的情况来看,Hibernate保留JBoss池中的连接,显然问题是当池大小达到定义的最大值时,应用程序会出现以下异常:

登录Jboss

javax.resource.ResourceException:IJ000655:无托管连接 在配置的阻塞超时内可用(60000[ms])

在Oracle上登录

显然,这似乎是代码中数据库连接的泄漏,但我们已经检查了代码一千次,所有连接都正常打开和关闭

我们已经看到了另一个,并且我们尝试将参数设置为AFTER_TRANSACTION,我们也看到了一个奇怪的行为,应用程序不再有错误:ResourceException:IJ000655,但是在数据库中,我们有相同数量的空闲连接==最大jboss池大小,但应用程序仍然可以连接,但在理论上它不应该

这种行为是那个版本Hibernate的Jboss的一个BUG

尽管Hibernate Release Mode=after_transaction的行为很奇怪,但是否建议更改默认的发布模式

<property name="hibernate.generate_statistics">false</property>
<property name="hibernate.jdbc.batch_size">30</property>
<property name="hibernate.order_inserts">true</property>
<property name="hibernate.order_updates">true</property>
<property name="hibernate.jdbc.batch_versioned_data">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.datasource">jdbc/myapp</property>
<property name="hibernate.connection.release_mode">auto</property>
public void  addApplication (Application application) {
        Session session = MyAppSessionFactory.getSessionFactory().openSession();
        try {
            session.beginTransaction();
            session.save(application);
            session.getTransaction().commit();
        } catch (Exception e) {
            logger.error("Error in addApplication: ", e);
            session.getTransaction().rollback();
        } finally {
            session.close();
        }
    }