2016-07-29 51 views
0

我正在使用的服务器是GlassFish,但在Weblogic上也会出现此问题。检测EJB数据源客户端断开

我的客户端机器开始一个事务,从服务器查找几个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

伪代码示例IIRC这是不能被容易地处理。这取决于你使用的数据库,你需要使用数据库管理来查找挂起的事务。

要有一个更可靠的环境,你应该为此创建一个服务器端bean,在这里它更不可能是该进程在事务过程中死亡或连接松动。

+0

谢谢,我认为这可能是一个棘手的情况下处理。它并不经常发生,但当它发生时可能会造成滋扰。 –

相关问题