Что надлежащий путь состоит в том, чтобы гарантировать, что соединения EntityManager закрываются?

Существует 19 методов в нашем уровне DAO, каждый - некоторое изменение этого:

public TicketProp saveTicketProp(TicketProp prop) {
    EntityManager em = this.emf.createEntityManager();
    try {
        em.getTransaction().begin();
        prop = (TicketProp) em.merge(prop);
        em.getTransaction().commit();
        return prop;
    } finally {
        em.close();
    }
}

Значение: В каждом методе мы обрабатываем нашу собственную транзакцию и окружаем его наконец блок. Мы тестируем приложение Джерси, таким образом, наши тесты JUnit расширяют JerseyTest. Каждый метод тестирования инстанцирует Серого контейнера, запускает тест, затем закрывает контейнер. EntityManagerFactory введен к пружине. Мы используем JPA, В спящем режиме.

Я контролирую соединения с нашим тестом MySQL DB, и они всегда высоки. Один единственный тест выполняет переменную MySQL "Max_used_connections" к 38. Для забавы я пошел и прокомментировал весь em.close () вызовы, и тест все еще использует 38 соединений.

Я использую встроенную организацию пула подключений Hibernate (не для использования напоминания, я знаю). Я все еще ожидал своего рода интеллектуальное объединение.

Я обрабатываю EntityManager неправильно? Как еще я могу закрыть соединения?

5
задан gmoore 27 July 2010 в 21:26
поделиться