2014-02-20 46 views
0

我正在使用spring的taskexecutor(在WAS和jetty上使用workmanager)在獨立線程上運行的Web應用程序上工作。從碼頭到WAS的不同鎖定行爲

該應用程序使用spring/hibernate/db2(udb)。

異步進程創建一個包含狀態和進度的記錄,可以在包含進程歷史記錄的頁面中查看。

當在websphere上運行並嘗試訪問進程列表時,它似乎在等待進程完成並最終拋出「正在使用的文件」sql異常並回滾更改。這在具有相同數據庫的碼頭上不會發生。

我的問題是,爲什麼我看到從碼頭到websphere的不同鎖定行爲,我該如何解決這個問題。兩者都默認使用jdbc驅動程序設置。

+0

你使用哈德嗎? – AngocA

+0

我沒有關於dbms設置的更多信息。爲了澄清,jetty和WAS都設置爲使用相同的數據庫。 – miklesw

回答

1

看起來像兩個容器使用不同的事務隔離級別。看看這是否有助於WAS:http://www-01.ibm.com/support/docview.wss?uid=nas8N1012999。引用「,本文將討論默認情況下以及特定資源引用在WebSphere應用程序中如何設置事務隔離級別以及事務隔離級別。」

+0

感謝您的鏈接,這真的有幫助。這個問題似乎是雙重的。 1. WAS默認爲可重複讀取。我將webSphereDefaultIsolationLevel DS屬性和resource_ref擴展設置爲READ_COMMITTED。問題仍然存在,症狀略有不同。 2.狀態記錄的更新沒有提交。我在@Transactional中將propagation = REQUIRES_NEW添加到狀態方法中,以便日誌在單獨的事務中運行。 我猜我沒有遇到任何使用碼頭的probs,因爲它默認爲read_uncommitted。將運行一些更多的測試來確認。 – miklesw

+0

我刪除了READ_COMMITTED設置,我沒有收到使用中的文件問題。設置TR傳播解決了問題。這確認碼頭默認爲READ_UNCOMMITTED – miklesw