代码之家  ›  专栏  ›  技术社区  ›  reizintolo

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

  •  0
  • reizintolo  · 技术社区  · 5 年前

    版本 Jboss 6.4.21EAP 冬眠:4.2.21.1决赛 空闲/不活动 Oracle数据库12c 企业版发行版12.1.0.2.0-64位生产

    <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();
            }
        }
    

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

    登录Jboss

    在配置的阻塞超时内可用(60000[ms])

    登录Oracle enter image description here

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

    我们已经看到了另一个 post ,我们已尝试将参数设置为 事后交易 资源异常:IJ000655 不过,在数据库中,我们的最大jboss池大小的空闲连接数是相同的,但应用程序仍然可以连接,而理论上它不应该。。。

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

    尽管有着奇怪的行为 休眠释放模式=事务后 ,是否建议更改默认模式释放?

    0 回复  |  直到 5 年前