2014-03-24 63 views
0

這可能會是一個可怕的SO問題,因爲只能提供很少的信息。 當我們在MySQL中使用Slick 1.0.1時,我們得到了一個java.sql.SQLException: Operation not allowed after ResultSet closed,它看起來像是隨機時間。java.sql.SQLException:在使用Slick 1.0.1時ResultSet關閉後不允許操作

我查了一下這個異常,似乎它發生的原因是因爲ResultSet被提前關閉,或者多個ResultSets是由同一個Statement對象(見Getting java.sql.SQLException: Operation not allowed after ResultSet closed)生成的。

現在的問題是我使用的是Slick,所以ResultSet的整個想法都被抽象出來了。我不能真正向你展示任何代碼,因爲我不知道問題發生在哪裏(當它發生時,堆棧跟蹤指向代碼的不同部分。非常多,在試圖訪問代碼的隨機部分DB,它會失敗)。

沒有真正做到瘋狂的事情,只是用Session和withTransaction以及Session.withTransaction的。 C3P0提供連接。

我們已經能夠注意到發生在3次調用中。這3個電話的共同之處在於它們有些長期運行(它們在同一個會話中對數據庫進行了大約3-5次調用,這是不是很糟糕?)。

有沒有人在Slick 1.0.1中看到過這種錯誤?我知道有一個Slick 2.0,但我們還沒有準備好升級到那個版本(除非有人告訴我這是2.0版中的一個bug)。

謝謝。

編輯:關於一些更多的信息:

SHOW VARIABLES LIKE '%_TIMEOUT'; enter image description here

在3調用一些信息:

呼叫1:

  • 3至5讀取(2讀取是可選的)
  • 2寫入

呼叫2:

  • 4閱讀(我剛剛注意到,這些是4大讀。跨越幾個連接)
  • 沒有寫

呼叫3(只注意到失敗的這一呼籲的數量近來下降):

  • 2讀取
  • 2寫道:
+0

你可以添加關聯號碼到「some-what long running」以及一般描述爲神祕的'3調用'採取的行動(插入,選擇等)的種類?另外 - 你可以發佈什麼'SHOW VARIABLES LIKE'%_timeout';'報告mysql? – n0741337

+0

@ n0741337我已經添加了關於mysql實例的調用和變量的更多信息。 – Nacht

+2

在C3P0側,確保了C3P0的配置參數'unreturnedConnectionTimeout'或者未設置(其值應爲0),其他的設置爲大到足以容納你的運行時間最長的查詢的值。 'unreturnedConnectionTimeout'對於泄漏連接的解決方案應用程序來說是一種醜陋的破解;如果連接停留時間過長,它將關閉連接。 [見http://www.mchange.com/projects/c3p0/#unreturnedConnectionTimeout http://www.mchange.com/projects/c3p0/#configuring_to_debug_and_workaround_broken_clients] –

回答

相關問題