4

在 Glassfish 中,EJB 事务超时默认设置为 120 秒,我想更改此值。

我知道可以通过在 glassfish-ejb-jar.xml 中定义“cmt-timeout-in-seconds”参数来更改它,但是我使用带有 EJB 类的 Web 模块,并使用 glassfish-web.xml分别。

有没有办法改变超时?

UPD:

事务服务设置中的事务超时值无效。

@Schedule(minute = "*/5", hour = "*", persistent = false)
public void doSomething() {
    log.info("Started");
    try {
        Thread.sleep(1000 * 119);
    } catch (InterruptedException ex) {
        log.info("Interrupted", ex);
    }
    log.info("Finished");
}

上面的代码工作正常。但是如果将睡眠时间改为 121 秒

Thread.sleep(1000 * 121);

在 GF 服务器日志中,我看到一个错误:

Warning:   EJB5123:Rolling back timed out transaction

此后,服务再次调用 doSomething() 方法,2 分钟后我再次看到错误:

Warning:   EJB5123: Rolling back timed out transaction
Info:   EJB5119:Expunging timer [...] after [2] failed deliveries

并且服务不再调用 doSomething() 方法。

4

3 回答 3

4

即使它是一个 Web 模块,也要添加 sun-ejb-jar.xml(或 glassfish-ejb-jar.xml):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 EJB 3.0//EN" "http://www.sun.com/software/appserver/dtds/sun-ejb-jar_3_0-0.dtd">
<sun-ejb-jar>
    <enterprise-beans>
         <ejb>
            <ejb-name>YourEjbName</ejb-name>
            <cmt-timeout-in-seconds>1200</cmt-timeout-in-seconds>
         </ejb>
    </enterprise-beans>
</sun-ejb-jar>
于 2016-09-27T09:20:58.987 回答
1

事务超时的默认值为0(无超时),而不是120。版本 2.1.1的Oracle 教程看起来并不过时。

在 GlassFish 4.1 上测试,与 4.1.1 应该没有太大区别。

于 2016-01-06T12:11:03.427 回答
0

这是一个报告的错误。

http://java.net/jira/browse/GLASSFISH-21495

对我来说,当我有一个导入大量数据并调用flush的方法时。

于 2016-04-20T19:08:17.973 回答