Spring: Wie Server sauber runterfahren?

DarthShader

Erfahrenes Mitglied
Hallo,

ich habe eine recht simple Frage (vermutlich) - ich habe eine Serveranwendung in Spring geschrieben (läuft noch Standalone, nicht als Servlet). Die main-Methode des Servers macht nichts anderes, als den ApplicationContext aus einer XML-Datei zu erstellen. Alle anderen Funktionalitäten baut auf den im Kontext definierten Beans auf.

Unter diesen Beans gibt es z.B. eine RmiServiceExporter-Bean, die eine über RMI aufrufbare Methode für Clients bereitstellt. Damit ist ja der Lebenszyklus des Servers verbunden - er beendet sich nicht sofort wieder, weil eben diese eine RMI Bean da ist, und auf Verbindungen horcht.

Ich frage mich jedoch gerade, wie ich diesen Server "sauber" wieder herunter fahre. Ich kann ja unter Linux nicht einfach den Prozess killen, wer weiß, was der gerade macht - aktuelle Aufgaben sollten ja schon noch erledigt werden.

Gibt es hier Best Practices, wie man das am besten macht? Vielleicht über JMX und MBeans?


Über einen kleinen Erfahrungsaustausch (der wohl nur in meine Richtung geht ;) ) würde ich mich sehr freuen.


Danke!
 
Hallo,

du kannst Spring einen expliziten ShutdownHook für einen Kontext registrieren lassen:
Java:
        ConfigurableApplicationContext appContext = new FileSystemXmlApplicationContext("context.xml");
        appContext.registerShutdownHook();

Dieser sorgt dann dafür dass beim beenden der Anwendung bzw. beim Empfang eines kill Signals
der Context geschlossen und die entsprechenden beans heruntergefahren werden.

Unter linux kann man die Ausführung eines ShutdownHooks beispielsweise via:
kill PIDderSpringApp
erreichen.

Gruß Tom
 
Hallo Tom,

vielen Dank für die Hilfe, das habe ich gesucht. Ich hatet eben gerade schon einen shutdown hook für die JVM installiert, aber das ist ja noch besser, sodass Spring sich darum kümmern, die destroy Methoden der BEans aufzurufen (oder was auch immer man für einen destroy-mechanismus konfiguriert hat).

Danke!
 
Eine kurze Frage hinterher: Wie kann ich erkennen, dass der Context heruntergefahren wurde, d.h. alle Beans zerstört wurden?

Ich würde gerne, ganz simpel, am Ende des Programmes eine Art von "Shutdown finished" Meldung ausgeben, nur weiß ich den Zeitpunkt nicht, wann ich das tun kann.
 

Neue Beiträge

Zurück