Java 当事务由于SQLException(超时)而回滚时,如何在Weblogic 10.3(EE容器)中停止计时器重试?
基本上,我有一个EJB3定时器调用另一个EJB3(DAO)——这个调用被包装在catch块中。另一个EJB在尝试获取到DS的连接时抛出超时SQL异常(向调用方抛出异常)。在日志中,我看到这个超时是不断尝试一次又一次执行的。有哪些选项可以防止它再次尝试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
..
// 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
,这将是新事务的一部分过程