Wie kann ich den J2EE-Timer-Service-API in dem Servlet-Startcode verwenden?
Frage
Für einen Hintergrundjob die Ich mag würde in einem J2EE-Container laufen, fand ich den Vorschlag, ein Startup-Servlet und verwenden Sie den Timer-Service-API erstellen eine verwaltete Timer (in den Antworten auf die What Tools gibt es für Minuten- Batch-Prozesse in J2EE? ).
einen Timer erstellen, muss ich einen Kontext, der die Timer-API implementiert. ( Beispiel )
In der Servlet-Klasse überschreiben ich die init-Methode, aber es hat nur Zugriff auf einen ServletContext, aber nicht auf eine Session. Ein ServletContext keine Methoden, um Timer zu erstellen, so dass ich hier fest.
Wie kann ich den J2EE-Timer-Dienst in dem Startcode eines Servlet zugreifen?
Lösung
Immer wenn ich Timer Job hören, kann ich nicht umhin zu denken, dass diese von einem Java EE Applikationsserver getrennt werden sollten. Sie können so etwas wie Quarz oder ein Betriebssystem geplante Aufgabe oder einen Batch-Manager wie AutoSys verwenden, aber es in ein Servlet scheinen wie ein Missbrauch von Servlets mir einbetten.
Java EE 5-Container haben eine TimerService-, die ein EJB ist. Vielleicht diese werden Ihnen helfen, aussortieren.
Andere Tipps
Statt den Servlet-Startcode zu verwenden (die nach jeder Umschichtung ausgeführt werden) Ich fand es saubere Timer in der Inbetriebnahme des EJB zu starten. Mit EJB 3.1 und Singleton EJB dies jetzt möglich ist, mit viel weniger Code:
http://blogs.oracle.com/kensaks/entry/application_startup_shutdown_callbacks