Мое приложение имеет длительные транзакции и, следовательно, я попробовал параметр 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
, похоже, не освобождает соединение с пулом. Пожалуйста, дайте мне знать, если вам нужны подробности.