C3P0 调试和解决有问题的客户端应用(Broken Client Applications

有时候客户端应用程序对关闭连接这种工作很马虎。于是最后池内连接数增长到了maxPoolSize,然后就用尽了所有连接,这种结果是这些有问题得客户端造成的。

解决这个问题的正确的方法就是修复这些客户端程序。c3p0可以帮助你找到那些偶尔不能正确地返回连接池的连接。在一些极少见并且不幸的情况下,即使你关闭了有漏洞的应用程序,你也修复不了它。c3p0能够帮你解决这些问题。

下面的几个参数可以帮助你调试和解决有问题得客户端程序。

[list=1]
[]debugUnreturnedConnectionsStackTraces
[
]unreturnedConnectionTimout
[/list]

unreturnedConnectionTimeout决定了从池中取出的连接能维持多少秒。

如果这个值非零,那么从池中取出的那些在超过这个限制时间的连接还没有返回池得话,就会被立刻销毁,然后在池中被替代。

很显然,你必须要保证这个参数的值能够让连接有时间完成那些应该做的工作。你可以用这个参数来解决那些关闭连接失败的不可靠的客户端程序。

完全修复漏洞要比仅仅使应用恢复正常工作要好得多。除了设置了unreturnedConnectionTimeout之外,如果你还把debugUnreturnedConnectionStackTraces设置为true的话,你将可以得到那些从池中取出的连接的轨迹栈(stack trace)。

当有连接没有按时返回池的时候,轨迹栈将会被打印出来,来揭示哪里有连接没有按时返回。

REF:
http://cwiki.ossez.com/pages/viewpage.action?pageId=4719835