基本上我有EJB3计时器调用另一个EJB 3(DAO) - 这个调用包含在catch块中。当尝试获取与DS的连接时,另一个EJB会抛出超时SQL异常(向调用者抛出异常)。在日志中,我看到此超时一直在尝试一次又一次地执行。有什么选择可以阻止它再次尝试?
..
// Timer
@Timeout
public void timeout(Timer timer) { // keeps on coming here
...
try {
dao.processJob();
} catch (SQLException) { // catches the timeout
log
}
// dao
@Resource(...)
private Datasource ds
public void process() throws SQLException {
ds.getConnection() // throws timeout here
..
}
答案 0 :(得分:2)
来自文档:
如果bean取消了回滚的事务中的计时器,那么计时器 取消被退回。在这种情况下,计时器 持续时间重置,好像取消从未发生。
因此,计时器可能不会被取消。这可能是连续重试的可能原因。
process
方法捕获异常,而不是抛出异常&可以返回null
。TransactionAttributeType.REQUIRES_NEW
,您可以process
,这将是新交易的一部分。