Servlet Stop-Signal abfangen

Hi

ist es möglich in einem Servlet das Stop-Signal abzufangen?

Mein Algorithmus muss auf jeden Fall abgearbeitet werden. Das heisst es darf nicht in der Verarbeitung abgebrochen werden.

Mein Ziel ist es, wenn ich ein STopsignal bekomme, dass ich dann die Verarbeitung "sanft" stoppe

Ist soetwas möglich?

Gruss
 
N

nillehammer

Meinst Du mit Stop-Signal, dass der Context gestoppt wird? Das geht. Dafür kannst Du das Interface javax.Servlet.ServletContextListener implementieren und deine sanfte Stop-Logik in der Methode "contextDestroyed" unterbringen. Du musst Deine Implementierung dann noch in der web.xml mit Hilfe des listener-Elements referenzieren.
 
Meinst Du mit Stop-Signal, dass der Context gestoppt wird?
Ganz kurz ausgeholt: Also stell Dir mal vor:
Ich hab n alleinlaufendes Servlet - sozusagen als deamon.
Es hat dauernd Aufgaben zu erledigen - Alle Aufgaben sind in Teilaufgaben einzuteilen.
Jede Teilaufgabe dauert ca. 15 Sekunden - Muss aber zwingend abgeschlossen sein bevor das Servlet runterfährt.
Falls das nicht geschieht bleiben Reste übrig die Fehler bringen.

Deshalb will ich sicherstellen, das wenn jemand das Servlet runterfährt, dass auf jeden fall die aktuelle Teilaufgabe vollständig abgehandelt ist.

Weeeste wie ?
 
Du hast einen Thread laufen. Der kennt dann eine Shutdownmethode welche man in der Destroy-Methode des Servlets aufrufen kann. Danach weiß der Thread "ok das ist der letzte Chunk den ich bearbeiten darf". Ist der fertig geht der Thread aus.

Java:
public class Foo extends Servlet {
    private Task task = new Task();

    public void init(...) {
        new Thread(task).start();
    }

    public void destroy(...) {
        task.shutdown();
    }

    private static class Task extends Runnable {
        private AtomicBoolean running = new AtomicBoolean(true);

        @Override
        public void run() {
            while (running.get) {
                // Do a chunk of work
            }
        }

        public void shutdown() {
            running.set(false);
        }
    }
}
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben