【问题标题】:Detecting EJB Datasource client disconnect检测 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


    【解决方案1】:

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

    为了有一个更可靠的环境,您应该为此创建一个服务器端 bean,在这里,在事务期间进程死亡或连接松动的可能性较小。

    【讨论】:

    • 谢谢,我认为这可能是一个难以处理的情况。它不会经常发生,但一旦发生可能会很麻烦。
    猜你喜欢
    • 2014-04-14
    • 2020-01-15
    • 1970-01-01
    • 2012-05-17
    • 2021-02-21
    • 2020-08-27
    • 2013-04-17
    • 2015-11-21
    • 2014-01-24
    相关资源
    最近更新 更多