一千萬個為什麽

搜索

在Websphere中關閉後臺線程的JDBC連接

我在Websphere Application Server 6.0(WAS)內部的Websphere Portal Server中運行了一個應用程序。在這個需要很長時間才能完成的特定功能的應用程序中,我正在觸發一個執行此操作的新線程。這個新線程從Hibernate打開一個新的Session,並開始用它執行數據庫事務。有時(無法看到模式),線程內的事務工作正常,並且流程成功完成。其他時候我得到以下錯誤:

org.hibernate.exception.GenericJDBCException: could not load an entity: [OBJECT NAME#218294]
...
Caused by: com.ibm.websphere.ce.cm.ObjectClosedException: DSRA9110E: Connection is closed.
Method cleanup failed while trying to execute method cleanup on ManagedConnection [email protected] from resource jdbc/MyJDBCDataSource. Caught exception: com.ibm.ws.exception.WsException: DSRA0080E: An exception was received by the Data Store Adapter. See original exception message: Cannot call 'cleanup' on a ManagedConnection while it is still in a transaction..

我怎麽能阻止這種情況發生?為什麽看起來WAS想要殺死我的連接,即使他們沒有完成。有沒有辦法阻止WAS嘗試關閉這個特定的連接?

謝謝

最佳答案

我在其他答案:1。 hibernate.connection.release_mode 可選參數或2. 非托管線程。現在我已經閱讀了這個問題,我真的開始認為你的問題可能與你正在產生你自己的線程有關。由於它們不是由容器管理的,因此這些踏板中使用的連接可能顯示為“泄露”(未正確關閉),如果WAS嘗試在某些時候恢復它們,我不會感到驚訝。

如果要啟動長時間運行的作業,則應使用WorkManager。不要自己生成線程。

轉載註明原文: 在Websphere中關閉後臺線程的JDBC連接