系统已经运行4年,框架为strtus1.2 + hibernate2.0 + weblogic812 + oracle817, 并利用了weblogic的连接池.
最近在weblogic的日志中开始濒繁的出现"Session is currently disconnected",每当出现这个错误的时候就必然会导致客户端的操作失败,但当没有打印这个错误的时候操作是成功的,就说明连接池的connection有些是null有些不是null,根据提示的错误分析,并翻阅了hibernate的源码,发现session中的connection=null会报这个错误.
这个时候开始怀疑是否网络的间歇的经常的中断导致,仔细分析后给排除;
在怀疑代码的问题,仔细分析后还是排除;
服务器是否有病毒,还是排除;
.....,在排除一系列的问题后,上网搜查很少有这类问题的描述,即使有,也不是同一个原因产生的,然后利用google,在hibernate.org的论坛上有人提示:
if (!hsession.isConnected())
hsession.reconnect();
在最初看了这段代码的时候,就发现如果在一个事务的中间过程发生connection=null,在利用该代码就会在一个事务中产生两个及以上connection,就会导致成个事务的操作失败,不可取.
还有一个重要的现象就是周末两天当访问的人不是很多的时候没有这个错误产生,加之联想到以前发生的一些事情给了些许启发(以前做过一套系统,有客户端一访问就会导致tomcat服务器停止工作,但有的客户端就没有问题,在对有问题的客户端杀毒后,该问题解决),就开始怀疑是不是有木马?同时今天联想到可以利用程序不断的访问weblogic的连接池,看什么时候会有connection=null,这个时候根据日志去抓取导致产生这个错误的电脑.
希望高手可以指点迷津!!