Java 当事务由于SQLException(超时)而回滚时,如何在Weblogic 10.3(EE容器)中停止计时器重试?

Java 当事务由于SQLException(超时)而回滚时,如何在Weblogic 10.3(EE容器)中停止计时器重试?,java,timer,ejb-3.0,weblogic-10.x,jta,Java,Timer,Ejb 3.0,Weblogic 10.x,Jta,基本上,我有一个EJB3定时器调用另一个EJB3(DAO)——这个调用被包装在catch块中。另一个EJB在尝试获取到DS的连接时抛出超时SQL异常(向调用方抛出异常)。在日志中,我看到这个超时是不断尝试一次又一次执行的。有哪些选项可以防止它再次尝试 .. // Timer @Timeout public void timeout(Timer timer) { // keeps on coming here ... try { dao.processJob(); } catch (SQLE

基本上,我有一个EJB3定时器调用另一个EJB3(DAO)——这个调用被包装在catch块中。另一个EJB在尝试获取到DS的连接时抛出超时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
..
}
从文件:

如果bean取消回滚的事务中的计时器,则计时器 取消被回滚。在这种情况下,计时器 持续时间被重置,就像从未发生过取消一样

因此,计时器可能不会被取消。这可能是继续重试的原因

  • 您可以尝试在
    process
    方法中捕获异常,而不是抛出异常&可以返回
    null

  • 或者,您可以使用
    TransactionAttributeType.REQUIRES\u NEW
    作为方法
    过程
    ,这将是新事务的一部分

TransactionAttributeType.REQUIRES\u我正在寻找新的。非常感谢。