В моем приложении есть длительные транзакции, поэтому я попробовал опцию session.close () в конце каждого метода, чтобы гарантировать, что объекты соединения не будут храниться бесконечно долго.
Когда используется опция session.close (), я мог видеть, что объект сеанса Hibernate и соответствующий объект Connection, полученный из session.connection (), уничтожаются должным образом. Но проблема в пуле подключений. Соединение, полученное в ходе сеанса, не возвращается обратно в пул соединений даже после закрытия сеанса. Обнаружены другие запросы, ожидающие подключения из пула.
Я использую транзакцию JTA в своем приложении. В hibernate.cfg.xml я установил для connection.release_mode значение auto (по умолчанию), а для connection.autocommit - значение true.
Кто-нибудь сталкивался с этой проблемой? Пожалуйста, дайте мне знать, что мне здесь не хватает.
Последующие действия: Это подробности моего файла конфигурации гибернации:
<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 DB. after_statement
, похоже, не освобождает соединение с пулом. Пожалуйста, дайте мне знать, если вам понадобится дополнительная информация.