Hibernate не может закрыть соединение? - PullRequest
2 голосов
/ 03 января 2011

Есть ли ситуации, когда hibernate не может закрыть открытое соединение ???

Я занимаюсь разработкой JSF 2.0 приложения с использованием Hibernate 3.2.5 и Oracle 10g express . После фиксированного количества транзакций hibernate может не подключаться к базе данных больше, и даже я не могу подключиться с помощью sqlDeveloper . Как я уже проверял, количество транзакций до этого сбоя практически равно числу процессов в init.ora .

Я всегда работаю со сессиями в спящем режиме, как это:

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

Моя конфигурация гибернации

<?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>

Ответы [ 3 ]

2 голосов
/ 03 января 2011

Может быть проблема, связанная с вашим hibernate.connection.release_mode. Взгляните на здесь .

2 голосов
/ 03 января 2011

Я бы включил DEBUG для режима гибернации (в частности, org.hibernate.transaction и org.hibernate.jdbc ) и посмотрю, что происходитТаким образом, это проще, и, поскольку вы не используете пул, это самый простой способ узнать, что происходит

1 голос
/ 03 января 2011

В мире .net я проверяю, является ли сессия not null и open перед закрытием, так как иногда я видел эту ошибку, не уверен, что то же самое относится и к JPA, но см. Код ниже ...

например

if (session != null && session.IsOpen)
      session.close();

Также смотрите это сообщение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...