Hibernate-принудительная очистка ресурсов контейнера при завершении транзакции

после выполнения нескольких запросов я получаю следующее сообщение от Hibernate:

HHH000106: Forcing container resource cleanup on transaction completion

Кажется, что все работает нормально, ошибок нет, но я не нашел никаких объяснений относительно того, что означает это сообщение, или если я должен что-то с этим сделать.

Я использую Hibernate / JPA с глобальными транзакциями JTA.

какие идеи?

3 ответов


(для завершения ответа xwoker.)

ресурсы, о которых мы говорим:

  • ResultSet
  • сообщении

это сообщение возникает, потому что вы оставили некоторые из этих ресурсов открыть то есть вы не называли их close() метод. Из-за текущего ConnectionReleaseMode: эти ресурсы стали бесполезными, и Hibernate сообщает вам, что он вызывает метод close() для вас.

чтобы избежать этого журнала: просто вызовите метод close () (на ваших ResultSet(S) и Statement(S)) самостоятельно до конца транзакции.


это сообщение создается в org.зимовать.двигатель.интерфейс jdbc.внутренний.JdbcCoordinatorImpl (по крайней мере, это единственное место, где я его нашел) и объявлено как INFO:

public void afterTransaction() {
    transactionTimeOutInstant = -1;
    if ( connectionReleaseMode() == ConnectionReleaseMode.AFTER_STATEMENT ||
            connectionReleaseMode() == ConnectionReleaseMode.AFTER_TRANSACTION ) {
        if ( hasRegisteredResources() ) {
            LOG.forcingContainerResourceCleanup();
            releaseResources();
        }
        getLogicalConnection().aggressiveRelease();
    }
}

Если используются определенные ConnectionReleaseModes и есть зарегистрированные ресурсы, Hibernate сообщает вам, что он освобождает эти ресурсы.

Если это желаемое поведение, ничего не делайте с этим.


данное сообщение журнала HHH000106: Forcing container resource cleanup on transaction completion также может быть вызвано проблемами безопасности потоков, если сеансы гибернации случайно разделяются между различными потоками (и, следовательно, различными транзакциями). Если это так, за ним может последовать исключение, например Trying to return an unknown connection2! и утечка соединения JDBC из пула соединений.