EntityManager.close не освобождает соединение обратно в пулJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 EntityManager.close не освобождает соединение обратно в пул

Сообщение Anonymous »

У меня есть старое приложение Spring, которое использует следующую конфигурацию для Spring JPA и Hibernate: В код DAO правильно вводится указанный выше EMF, и он использует ThreadLocal для получения/создания EntityManager. После использования EM он вызывает em.close(). Однако даже после вызова em.close() статистика пула соединений hikaricp показывает, что соединение не возвращается обратно в пул. Из-за этого у cp заканчивается соединение.
Есть идеи, что может быть не так в этой конфигурации?
=======ДОБАВЛЕНО ПОЗЖЕ ======
Я удалил HibernateJpaVendorAdapter и добавил следующее в файл persistence.xml, но никакой разницы:

Код: Выделить всё

org.hibernate.jpa.HibernatePersistenceProvider





Я позаботился о том, чтобы методentityManager.close() вызывался в конце запроса с использованием фильтра. Другой экземпляр менеджера сущностей не открыт.

Код: Выделить всё

public void closeEntityManager(){
EntityManager em = (EntityManager) threadLocal.get();
if (em != null && em.isOpen()) {
if(em.isJoinedToTransaction()){
em.getTransaction().commit();
}
em.flush();
em.clear();
em.close();
//((org.hibernate.Session) em.getDelegate()).close();
threadLocal.remove();
}
}
Я также пробовал изменить пул соединений с HikariCP на Apache commons dbcp.
Но результат тот же. Hibernate не освобождает соединение с базой данных обратно в пул.

Подробнее здесь: https://stackoverflow.com/questions/792 ... o-the-pool
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»