在WebSphere环境下如果没有正确处理数据库连接,SystemOut.log文件中会打出以下错误:
[06-5-9 17:02:07:458 GMT+08:00] 1ae9f948 SharedPool I J2CA0086W: 在本地事务包含边界中使用的资源 jdbc/unicall 的可分享连接 MCWrapper id 1df4f943 Managed connection com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl@17feb94d State:STATE_TRAN_WRAPPER_INUSE
在出现大量这种信息后,系统可能会宕机.
详细可参见IBM文档说明。
WebSphere使用了本地事务管理的规则,在Websphere环境下一般要按照如下的规则编写数据库处理逻辑
- get connection
- use connection
- close connection
- commit transaction
如果使用了以下方式则有可能会导致死锁
get con1;
use con1;
get con2; // a new connection is created.
// we can't reuse con1 because
// it hasn't been closed.
use con2;
close con1;
close con2;
解决办法有两种: - 增加连接池大小
- 严格按照LocalTransaction的规范编写程序