私のアプリケーションには実行時間の長いトランザクションがあるため、すべてのメソッドの最後にオプション session.close() を試して、接続オブジェクトが無期限に長時間保持されないようにしました。
session.close() オプションを使用すると、Hibernate のセッション オブジェクトと、session.connection() から取得した対応する 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>
Oracle DB に接続するアプリケーション層で JSF と EJB 2.1 を使用します。プールへのafter_statement
接続を解放していないようです。詳細が必要な場合はお知らせください。