Tenho um EJB Scheduler com o código
[code]@Stateless
@Local
public class OnlineBackupJob {
@Schedule(second = "0", minute = "*", hour = "*")
protected void scheduledTimeout(final Timer t) {
// faz alguma coisa
}
}[/code]
Quando há alguma RuntimeException o JTA faz o rollback normalmente, porém após o segundo rollback o container desativa o scheduler e nunca mais o executa.
Criei então um método interno nesse mesmo EJB chamado doBackup que possui o atributo para usar uma nova transação, porém mesmo assim após as duas execuções o scheduler é desativado.
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
private void doBackup() {
// faz alguma coisa
}
Como posso então fazer para evitar que o container desative “para sempre” meu scheduler?
[code]Caused by: javax.ejb.TransactionRolledbackLocalException: Client’s transaction aborted
at com.sun.ejb.containers.BaseContainer.useClientTx(BaseContainer.java:4625)
at com.sun.ejb.containers.BaseContainer.preInvokeTx(BaseContainer.java:4503)
at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:1875)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:188)
… 37 more
INFO: EJB5119:Expunging timer [‘2@@1279410748624@@server@@domain1’ ‘TimedObject = OnlineBackupJob’ ‘BEING_DELIVERED’ ‘PERIODIC’ ‘Container ID = 83847456082886672’ ‘Sat Jul 17 20:53:00 BRT 2010’ ‘0’ ‘0 # * # * # * # * # * # * # null # null # null # true # scheduledTimeout # 1’ ] after [2] failed deliveries[/code]