在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()方法。
答案 0 :(得分: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>
答案 1 :(得分:1)
交易超时的默认值为 0 (无超时),而不是 120 。版本2.1.1有Oracle tutorial,看起来没有过时。
转到Administrator console(默认端口为4848,http://localhost:4848)
左侧菜单:配置 - &gt; server-config - &gt;交易服务
字段:交易超时
服务器重启
在GlassFish 4.1上测试,在4.1.1中不应该有太大区别。
答案 2 :(得分:0)