2016-06-15 15 views
3

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) .......

+0

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

+0

Danke Kumpel, ich habe es gemacht und der Log-Fehler geändert, ich habe es auf die Frage gestellt. @mjn – fdam

+0

Mit der Funktion @Schedule (second = "*", minute = "*", hour = "*") klappt das gut. Ich werde die Wildfly ausprobieren 8.3 – fdam

Antwort

2

Die Methode mit @ Timeout bezeichnet ist nur ein Argument vom Typ javax.ejb.Timer haben darf. Sie haben versehentlich den Timer aus dem Hilfspaket (java.util.Timer) importiert. Wenn Sie den Import beheben, sollte der Timer wie ein Charme funktionieren :).

+0

Du hast recht, diese automatischen IDE-Importe haben mich gespielt ein Trick. Ich habe es gemacht und funktioniert gut, danke Alter! – fdam