Während der Anwendungsentwicklung gerät das Systemmanagement leider allzu oft in Vergessenheit. Das Ergebnis: Hängt eine Anwendung, bekommt es keiner mit. Der Unterschied zwischen einer hängenden Applikation und einer, die läuft, ist nicht erkennbar. Server-basierte Programme sind hier besonders betroffen, denn die Ursachen sind schwer zu finden (Netzwerker kennen das: Im Zweifelsfall ist das Netzwerk schuld) und sie treffen immer viele Anwender. Desktop-Anwendungen sind eher unproblematisch, hier helfen notfalls ein beherztes Kill und ein Neustart.
Systemmanagement nicht nur für den Ernstfall
Aber auch wenn es gar nicht zu Problemen kommt, sind Informationen über laufende Programme wichtig. Benutzt ein Applikationsserver etwa einen Connection-Pool für die Datenbank, dann sind Antwortzeit-Verhalten und Ressourcenbedarf abhängig von der Auslastung des Pools. Zu wenige Connections bedeuten lange Wartezeiten, zu viele einen unnötig hohen Ressourcenverbrauch. Das Monitoring und die Umkonfiguration im laufenden Betrieb der Anwendung sind Kerneigenschaften jeder guten Serveranwendung.
Typischerweise gibt es für Serveranwendungen deshalb eine Managementkonsole, die zur Konfiguration und Überwachung dient. Abbildung 1 zeigt das Prinzip: Während die normalen Clients über einen offiziellen Port auf den Server zugreifen, gibt es für das Management einen eigenen Port. Alternativ gibt es einen geschützten Einstieg in das Managementmodul über den normalen Zugang.
Modern ist Web-basiertes Management; hier enthält die Anwendung einen eingebauten Webserver. Eine Anwendung kann auch ein Gerät sein, viele Netzwerkdrucker erlauben zum Beispiel die Konfiguration und Statusabfrage über einen Webserver - oft völlig ungeschützt.
Die JMX-Architektur
Um das Rad nicht für jede (Java-)Anwendung neu zu erfinden, gibt es für das Management von Java-Anwendungen einen Standard: die Java Management Extensions, kurz JMX. Kernelemente dieses Standards sind die Managed Beans, kurz MBeans. Diese Folge des Coffee-Shops erläutert die Architektur und zeigt anhand eines Beispiels, wie einfach eine Anwendung JMX-fähig gemacht werden kann.
Die JMX-Architektur unterscheidet sich nicht prinzipiell von der oben skizzierten Struktur. Auf der einen Seite steht die Managementkonsole, auf der anderen die JMX-fähige Anwendung. Insgesamt kann man sechs (logische) Komponenten unterscheiden (siehe auch Abbildung 2):
- Die eigentliche Anwendung. Sie enthält die Parameter (allgemeiner: die Ressourcen), die abgefragt (Monitoring) oder gesetzt und manipuliert werden können (Umkonfiguration). Typischerweise gibt es dafür Klassen mit Getter/Setter-Methoden.
- Die MBeans. Sie instrumentieren die Ressourcen der Anwendung und machen sie somit durch JMX verwaltbar. Es sind Java-Klassen, die entweder einem festgelegten Design-Pattern folgen oder ein definiertes Interface implementieren. Der Kasten "MBeans" erläutert die Details. MBeans sind die Brücke zwischen dem MBeans-Server und der Anwendung (Instrumentation Level).
- Der MBeans-Server. Dieser Teil der Anwendung verwaltet die MBeans und bildet zusammen mit den Agent- Services den Agent-Level.
- Die Agent-Services sind Objekte, die Managementoperationen an MBeans durchführen können. Agent-Services sind oft selbst als MBeans implementiert. Die Spezifikation definiert in der Version 1.2 vier Services: Dynamic Class Loading, Monitoring, Timer und den Relation-Service.
- Ein oder mehrere Adapter und Konnektoren. Sie dienen der Interaktion von anderen Applikationen mit dem Agent-Level. Ein HTML-Adapter zum Beispiel stellt einen minimalen Webserver zur Verfügung, über den die MBeans angesprochen werden können. Auch Adapter können selbst als MBeans implementiert sein.
- Die Management-Applikationen, im einfachsten Fall ist das ein Webbrowser. Diese Schicht bildet mit den Adaptern und Konnektoren den Distributed-Services-Level und ist zurzeit noch nicht spezifiziert.
Die ersten fünf Komponenten sind Teil derselben Anwendung und laufen in derselben JVM. Je nach Anwendungsarchitektur und Philosophie gibt es auch einen fließenden Übergang zwischen Anwendung und MBeans. Die Architektur und das Zusammenspiel der Komponenten wird später anhand eines Beispiels schnell klar.
Der MBeans-Server verwaltet die MBeans. Jede JMX-Implementation stellt zu diesem Zweck eine Factory-Methode bereit (»MBeanServerFactory.createMBeanServer()«), die einen Server erzeugt. Mit der »MBeanServer«-Instanz erzeugt man die MBeans (»server.createMBean()«), führt Methoden aus (»server.invoke()«) und setzt oder liest Attribute (»server.setAttribute()« und »server.getAttribute()«).
« Zurück
1
2
3
4
Weiter »