检测EJB数据源客户端断开连接

最后发布: 2016-07-29 12:53:58


问题

我使用的服务器是GlassFish,但是Weblogic上也会发生此问题。

我的客户端计算机开始事务,从服务器中查找多个EJB,然后开始一些工作,这需要一段时间才能完成。 在此过程中,客户端计算机死亡(比如断电)。

客户端计算机打开的数据库查询永远不会关闭(因为客户端已终止),这会导致死锁和其他问题。

有什么方法可以检测到此无效事务并回收所有资源?

下面的伪代码示例

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();
java ejb jndi disconnect
回答

IIRC这是不容易处理的。 这取决于您使用的数据库,需要使用数据库管理来查找挂起的事务。

为了拥有一个更可靠的环境,您应该为此创建一个服务器端Bean,在此情况下,在事务过程中进程死掉或连接断开的可能性较小。