Mache ich etwas falsch?Warum funktioniert dieser einfache Scheduler nicht?
import java.util.Date;
import java.util.Timer;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.ejb.Timeout;
import javax.ejb.TimerService;
@Singleton
@LocalBean
@Startup
public class CIScheduler {
@Resource
private TimerService timerService;
@PostConstruct
public void init() {
timerService.createTimer(1000, 5000, "myTimerInterval");
}
@Timeout
public void execute(Timer timer) {
System.out.println("Current Time : " + new Date());
}
}
Stack: JDK 8, Wildfly 10
Fehlerprotokoll:
09: 31: 31.781 WARN [org.jboss.as.ejb3] (EJB default - 9) WFLYEJB0161: Fehler beim Wiederherstellen des Timers 'config-api.config-api.CIScheduler' (id = f571b03a-efa 9-467d-a9de-b17d88bf54c7) aus dem persistenten Zustand 09: 31: 31.783 ERROR [org.jboss.as.ejb3 ] (EJB default - 9) WFLYEJB0022: Fehler beim Wiederholen der Zeitüberschreitung für den Zeitgeber: [id = 35f55f82-a982-43d8-BeCe-42cfc89debe8 timedObj ectId = config-api.config-api.CIScheduler Auto-Timer:? False persistent :? True TimerService- = org.jboss.as.ejb3.timerservice. TimerServiceImpl @ 1eef0fd init ialExpiration = Mi 15. Juni 09.20.46 BRT 2016 intervalDuration (in Milli sec) = 5000 n = extExpiration Mi 15. Juni 09.31.36 BRT 2016 timerState = RETRY_TIMEOUT info = myTimer Intervall]: javax.ejb.EJBException: java.lang.IllegalArgumentException: ja [email protected]
Proben von extrahiert: https://examples.javacodegeeks.com/enterprise-java/ejb3/timer/ejb-timer-service-example/
UPDATE: reinigte ich die Daten und tmp-Ordner und das Fehlerprotokoll geändert:
09: 49: 42.178 INFO [org.jboss.as.ejb3] (EJB Standard - 2) WFLYEJB0021 : Timer: [id = 26b74afb-625d-4007-a786-1c0caa92a70b timedObjectId = Konfigurations-api.config-api.CIScheduler auto-Timer:? false persistent:? true TimerService- = org.jboss.as.e JB3 .timerservice.TimerServiceImpl @ 1b701e2 initialExpiration = Mi Jun 15 09:49:37 BRT 2016 intervalDuration (in Millisekunden) = 5000 nextExpiration = Wed Jun 15 09: 49:47 BRT 2016 timerState = IN_TIMEOUT info = myTimerInterval] wird wiederholt 09: 49: 42,179 INFO [org.jboss.as.ejb3] (EJB default - 2) WFLYEJB0023: Erneuter Versuch für Timer: [id = 26b74afb-625d-4007-a786-1c0caa92a70b timedObjectId = config-api.config-api.CIScheduler auto-Timer:? false persistent:? true Timern [email protected] initialExpiration = Mi Jun 15 09:49:37 BRT 2016 intervalDuration (in Millisekunden) = 5000 nextExpiration = Mi Jun 15 09:49:47 BRT 2016 timerState = IN_TIMEOUT info = myTimerInterval] 09: 49: 42,181 ERROR [org. jboss.as.ejb3] (EJB default - 2) WFLYEJB0022: Fehler beim Wiederholen der Zeitüberschreitung für den Zeitgeber: [id = 26b74afb-625d-4007-a786-1c0caa92a70b timedObj ectId = Konfig-api.config-api.CIScheduler Auto-Timer?: False persistent?: True timerService = org.jboss.as.ejb3.timerservice. TimerServiceImpl @ 1b701e2 init ialExpiration = Mi 15. Juni 09.49.37 BRT 2016 intervalDuration (in Milli sec) = 5000 n = extExpiration Mi 15. Juni 09.49.47 BRT 2016 timerState = RETRY_TIMEOUT info = myTimer Intervall]: javax.ejb.EJBException: java.lang.IllegalArgumentException: Argument Typenkonflikt bei org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx (CMTTxInt erceptor.java:187) .......
Ich würde das deploy-Verzeichnis bereinigen - alte Temp- und Arbeitsverzeichnisse entfernen - zuerst (ich nehme an, Sie arbeiten mit einer Testinstallation, nicht in der Produktion). Ein Neustart der Domain könnte helfen. – mjn
Danke Kumpel, ich habe es gemacht und der Log-Fehler geändert, ich habe es auf die Frage gestellt. @mjn – fdam
Mit der Funktion @Schedule (second = "*", minute = "*", hour = "*") klappt das gut. Ich werde die Wildfly ausprobieren 8.3 – fdam