9

いくつかのクエリが実行された後、Hibernateから次のメッセージが表示されます。

HHH000106: Forcing container resource cleanup on transaction completion

すべてが正常に機能しているようで、エラーはありませんが、このメッセージが何を意味するのか、またはそれについて何かする必要があるのか​​についての説明は見つかりませんでした。

JTAグローバルトランザクションでHibernate/JPAを使用しています。

何か案は?

4

3 に答える 3

7

(xwokerの答えを完成させるため。)

私たちが話しているリソースは次のとおりです。

  • ResultSet
  • 声明

このメッセージは、これらのリソースの一部を開いたままにした、つまりメソッドを呼び出さなかったために発生しますclose()。現在のConnectionReleaseModeが原因で、これらのリソースは使用できなくなり、Hibernateはclose()メソッドを呼び出していることを通知します。

このログを回避するには、トランザクションが終了する前に、(ResultSet(s)およびStatement(s)で)close()メソッドを自分で呼び出すだけです。

于 2013-09-20T12:50:25.437 に答える
6

このメッセージはorg.hibernate.engine.jdbc.internal.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はこれらのリソースを解放することを通知します。

これが望ましい動作である場合は、何もしないでください。

于 2013-09-19T06:41:51.650 に答える
1

このログメッセージHHH000106: Forcing container resource cleanup on transaction completionは、Hibernateセッションが誤って異なるスレッド間で(したがって異なるトランザクション間で)共有された場合に、スレッドセーフの問題によってトリガーされる可能性もあります。その場合Trying to return an unknown connection2!、接続プールからのJDBC接続のリークなどの例外が続く場合があります。

于 2013-10-17T07:12:56.810 に答える