14

私のアプリケーションには実行時間の長いトランザクションがあるため、すべてのメソッドの最後にオプション 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接続を解放していないようです。詳細が必要な場合はお知らせください。

4

2 に答える 2

20
于 2010-10-14T17:15:49.413 に答える
0

JDBCTransactionManager を使用している場合、トランザクションが終了すると、接続は接続プールに返されます。

于 2010-10-13T13:35:36.873 に答える