2014-03-24 65 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] –

回答

相关问题