2014-09-23 9 views
5

sto cercando di testare l'annotazione @Schedule con il seguente codice:distribuzione delle applicazioni Java @Schedule con wildfly 8.1.0 Finale

import javax.ejb.Schedule; 
import javax.ejb.Singleton; 
import javax.ejb.Startup; 

@Singleton 
@Startup 
public class TimerTest { 

    public TimerTest() { 

    } 

    @Schedule(second = "*", minute = "*", hour = "*") 
    public void sayHello() { 
     System.out.println("Hello"); 
    } 

} 

Tuttavia, quando ho distribuirlo all'istanza autonoma di wildfly 8.1.0 (finale) Ricevo i seguenti messaggi di errore nei registri:

2014-09-23 08:38:03,076 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC000001: Failed to start service jboss.deployment.unit."test-server.war".component.TimerTest.ejb3.timerService: org.jboss.msc.service.StartException in service jboss.deployment.unit."test-server.war".component.TimerTest.ejb3.timerService: Failed to start service 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.2.Final.jar:1.2.2.Final] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_25] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_25] 
    at java.lang.Thread.run(Thread.java:724) [rt.jar:1.7.0_25] 
Caused by: java.lang.NullPointerException 
    at org.jboss.as.ejb3.timerservice.TimerServiceImpl.doesTimeoutMethodMatch(TimerServiceImpl.java:959) 
    at org.jboss.as.ejb3.timerservice.TimerServiceImpl.restoreTimers(TimerServiceImpl.java:710) 
    at org.jboss.as.ejb3.timerservice.TimerServiceImpl.start(TimerServiceImpl.java:202) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final] 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final] 
    ... 3 more 

2014-09-23 08:38:07,098 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) JBAS014613: Operation ("deploy") failed - address: ([("deployment" => "test-server.war")]) - failure description: {"JBAS014671: Failed services" => {"jboss.deployment.unit.\"test-server.war\".component.TimerTest.ejb3.timerService" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"test-server.war\".component.TimerTest.ejb3.timerService: Failed to start service 
    Caused by: java.lang.NullPointerException"}} 

2014-09-23 08:38:07,145 INFO [org.jboss.as.controller] (Controller Boot Thread) JBAS014774: Service status report 
JBAS014777: Services which failed to start:  service jboss.deployment.unit."test-server.war".component.TimerTest.ejb3.timerService: org.jboss.msc.service.StartException in service jboss.deployment.unit."test-server.war".component.TimerTest.ejb3.timerService: Failed to start service 

JBAS014777: Services which failed to start:  service jboss.deployment.unit."test-server.war".component.TimerTest.ejb3.timerService 

Qualche idea su cosa potrebbe causare questo?

+2

I server delle applicazioni non dovrebbero mai lanciare NullPointerException in questo modo, quindi dovresti probabilmente segnalarlo come un bug a JBoss. Sulla base di 'doesTimeoutMethodMatch', posso indovinare che il server sta cercando di garantire che il tuo' @ Schedule' non sia cambiato da quando è stato creato in un database persistente. Forse provare a ripulire le tabelle del database del timer (o qualsiasi altra cosa) e quindi provare a ridistribuire l'applicazione? –

+3

Ho fatto qualche ricerca e i timer sono memorizzati nella cartella autonoma \ data \ timer-service-data. Rimuovere il timer che si trova qui e distribuire di nuovo ha effettivamente risolto il problema. Grazie per aver evidenziato che (ho avuto a che fare con questo per un po ') – cardori

+1

Probabilmente avrei ancora segnalato il problema a JBoss. Indipendentemente dal contenuto di quel file, tale NPE non dovrebbe verificarsi. –

risposta

10

L'ho visto prima. Nella tua directory WildFly, quando hai fatto una distribuzione standalone, ci sarà una directory autonoma/data/timer-service-data. Probabilmente ci sono alcuni vecchi dati di timerService in quella directory. Spegni il server, elimina questi dati e riprova.

Questi sono probabilmente i dati di un'esecuzione di test che non è stata completata prima dello spegnimento del server. Ricorda che il timerService è persistente. Quindi se ci sono attività in sospeso quando si spegne il server, proverà a riprenderle prima. Se hai aggiornato la tua guerra, quei processi timer probabilmente non corrisponderanno più ai processi in guerra.

Problemi correlati