我使用的服务器是GlassFish,但Weblogic上也会出现此问题。
我的客户端机器开始一个事务,从服务器中查找几个EJB,并开始一些需要一段时间才能完成的工作。在此过程中,客户端计算机终止(假设是一个powercut)。
客户端计算机打开的数据库查询永远不会关闭(因为客户端已终止),这会导致死锁和其他问题。
有没有办法检测这个死信息并收回所有资源?
下面的伪代码示例
transaction.begin();
MyBean bean = (MyBean)ctx.lookup("MyBean");
bean.doComplicatedWorkPart1();
bean.writeResultsToTheDatabase();
// Client dies during this method (powercut), so the transaction
// is simply left hanging.
bean.doComplicatedWorkPart2();
bean.writeResultsToTheDatabase();
transaction.commit();
答案 0 :(得分:0)
IIRC这是不容易处理的。这取决于您使用的数据库,您需要使用数据库管理来查找挂起的事务。
为了拥有一个更可靠的环境,你应该为此创建一个服务器端bean,在这里,进程在某个地方更不可能死亡或松散连接。