Мое приложение имеет долго выполняющиеся транзакции, и поэтому я пытался использовать опцию session.close () в конце каждого метода, чтобы гарантировать, что объекты соединения не будут храниться бесконечно долгое время.
Когда используется опция session.close (), я могу видеть, что объект сеанса Hibernate и соответствующий объект Connection, полученный из session.connection (), уничтожаются правильно. Но проблема в пуле соединений. Соединение, полученное сеансом, не освобождается обратно в пул соединений даже после закрытия сеанса. Другие запросы ожидают подключения из пула.
Я использую транзакцию JTA в своем приложении. В hibernate.cfg.xml я установил для connection.release_mode значение auto (по умолчанию) и для 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>
Мы используем JSF и EJB 2.1 на прикладном уровне, соединяющемся с БД Oracle. after_statement
не освобождает соединение с пулом. Пожалуйста, дайте мне знать, если вам нужно больше деталей.