Java EE 6 @Startup und @Schedule nie ausgeführt wird
Ich bin sicher, dass diese Frage gestellt wurde unzählige Male, aber ich habe alles versucht, was ich gelesen habe, und nichts scheint zu funktionieren. Ich bin sicher, die Korrektur ist wahrscheinlich etwas einfacher zu.
Habe ich die folgende singleton, die ausgeführt werden soll, wenn die web-Anwendung wird gestartet, aber es funktioniert nicht, und der geplante task nicht ausgeführt.
@Singleton
@Startup
public class Scheduler {
private static int count = 0;
@PostConstruct
public void onStartup() {
System.out.println("Initialization success.");
}
@Schedule(second="*/10", minute="*", hour="*")
public void execute() {
System.out.println("its running count..."+count);
count++;
}
}
Ich bin mit Glassfish server 3.1.2.
Jede Hilfe wird sehr geschätzt.
Dank.
BEARBEITEN
Die Start-Methode wird nun ausgeführt, aber der Zeitplan-Methode nicht ausgeführt.
Können Sie den import für die Singleton-annotation?
Hi. es ist: import javax.ejb.Singleton;
Sehen Sie irgendwelche Fehler / logs von GlassFish während der (re -) deployment?
Keine Fehler. Nichts im Zusammenhang mit diesem sowieso. Ist der Standort des singleton einen Unterschied machen? Momentan habe ich es in einer .util-Paket. Kämpfen, um zu finden, was sonst falsch sein könnte.
vielleicht ist meine Antwort hier gilt. stackoverflow.com/questions/13092567/...
Hi. es ist: import javax.ejb.Singleton;
Sehen Sie irgendwelche Fehler / logs von GlassFish während der (re -) deployment?
Keine Fehler. Nichts im Zusammenhang mit diesem sowieso. Ist der Standort des singleton einen Unterschied machen? Momentan habe ich es in einer .util-Paket. Kämpfen, um zu finden, was sonst falsch sein könnte.
vielleicht ist meine Antwort hier gilt. stackoverflow.com/questions/13092567/...
InformationsquelleAutor Paul Blundell | 2013-03-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinzufügen einer weiteren Antwort, denn es gab einige Fragen, auf Boreded eigene Antwort.
Der Grund, warum die Einstellung
persistence=false
das problem ist wahrscheinlich, dass persistente Timer nicht neu erstellt werden, wenn bereits vorhandene, wennkeepstate
auf true gesetzt ist.sehen Sie das folgende in der log -
Ich glaube, meine Antwort hier (zusammen mit Roland Tiefenbrunner Antwort auf dieselbe Frage) deckt das Problem einigermaßen gut.
Die andere Antwort in der Frage im Zusammenhang, scheint vernünftig. Haben Sie keine derby-Fehler bei der GF, startup?
Auch sicher, dass der timer immer noch feuert, aber was ich glaube, was hier passiert, ist, dass zunächst ein timer, ohne eine Spur bereitgestellt wird. Also, wenn Sie Sie später ändern Sie den timer, um die Ausgabe-Spur, es wird nicht bereitgestellt. Ändern halten-Staat machen, oder die timer-non-persistent redeployes der neuen timer.
InformationsquelleAutor Aksel Willgert
Mein problem war, dass ich den falschen
Singleton
Klasse, nichtjavax.inject.Singleton
aberjavax.ejb.Singleton
Welche der beiden Klassen soll es sein?
Ich Stimme Peter zu, es ist schwer zu sagen, aus den Kommentar!
Das war mein Fehler auch. Für eine vollständige Erklärung, wie das erstellen einer scheduler über ein singleton in Java EE/Jarkata EE finden Sie unter stackoverflow.com/a/7499769/1090666. Stellen Sie nur sicher, dass, wenn Sie tun, Sie importieren die richtige Singleton-Klasse.
InformationsquelleAutor Jojo
Achten Sie auch auf die Standard-Werte der annotation. Stunde, minute und Sekunde default auf 0, NICHT *, während die anderen die Standard-an * , also z.B. @Schedule(minute = "*/20", persistent = false) wird nur ausgelöst, bei 20 + 40 Minuten nach Mitternacht.
InformationsquelleAutor Jon Vaughan
Für jemand anderes mit einem ähnlichen Problem hinzufügen die folgenden festen mein problem:
Also mein schedule-annotation ist jetzt
InformationsquelleAutor Paul Blundell