Index

Steuern des Java Service Wrappers durch Nutzung von JMX

Der Java Service Wrapper stellt ein Paar von Java Management Extensions (JMX) MBean-Schnittstellen zur Verfügung (J2SE 5.0 JMX, JavaSE6 JMX), die es ermöglichen, den Wrapper über eine JMX-Schnittstelle zu steuern. Dieser Abschnitt beschreibt, wie Sie Ihre JMX-fähige Anwendung steuern können, so dass die MBeans, die mit dem Java Service Wrapper bereitgestellt werden, verfügbar sind.

JConsole

Die JDK 5.0 von Sun beinhaltet das Java-Überwachungs- und Management-Konsolentool "JConsole" (J2SE 5.0 JConsole) (JavaSE6 JConsole). Sehen Sie den oben erwähnten Link für mehr Details; JConsole macht es einfach, sich mit ordnungsgemäß konfigurierten JVMs zu verbinden und ihre verschiedenen Funktionen zu überwachen und zu verwalten.

Aus Sicherheitsgründen ist die Fähigkeit, eine JVM fernzusteuern, standardmäßig nicht aktiviert. Um diese Funktionalität zu aktivieren, ist es notwendig, die Systemeigenschaft com.sun.management.jmxremote (J2SE 5.0) (JavaSE6) zu definieren, wenn Sie die JVM starten. Dies kann durch Nutzung des Wrappers unter Spezifizierung eines JVM-Parameters mit der wrapper.java.additional.<n> Eigenschaft wie folgt erledigt werden.

Beispiel: (ein JVM-Parameter)
wrapper.java.additional.1=-Dcom.sun.management.jmxremote

Der Java Service Wrapper bietet aktuell 2 MBean-Schnittstellen an.

Die erste MBean-Schnittstelle, org.tanukisoftware.wrapper.jmx.WrapperManagerMBean, stellt grundlegende Informationen über den Wrapper und die JVM zur Verfügung sowie auch die Fähigkeit, die JVM zu beenden und neuzustarten wie auch ein vollständiges Speicherabbild auszulösen. Die Registrierung dieser MBean wird durch Festlegen der org.tanukisoftware.wrapper.WrapperManager.mbean- Systemeigenschaft gesteuert. Diese ist standardmäßig aktiviert.

Die zweite MBean-Schnittstelle, org.tanukisoftware.wrapper.jmx.WrapperManagerTestingMBean, ermöglicht es, verschiedene Fehlerzustände zwecks Testen auszulösen und sollte nicht außerhalb einer Testumgebung aktiviert werden. Die Registrierung dieser MBean wird durch Festlegen der Systemeigenschaft org.tanukisoftware.wrapper.WrapperManager.mbean.testing festgelegt. Diese ist standardmäßig deaktiviert.

Beispiel: (ein JVM-Parameter)
wrapper.java.additional.1=-Dcom.sun.management.jmxremote
wrapper.java.additional.2=-Dorg.tanukisoftware.wrapper.WrapperManager.mbean=TRUE
wrapper.java.additional.3=-Dorg.tanukisoftware.wrapper.WrapperManager.mbean.testing=false

Die registrierte Wrapper MBeans wird auf der MBean-Registerkarte der JConsole-Schnittstelle unter dem org.tanukisoftware.wrapper- Package angezeigt.

JBoss

Die Registrierung der MBean-Schnittstelle des Java Service Wrappers ist mit JBoss überraschend einfach. Dies setzt voraus, dass Sie bereits JBoss integrated mit dem Java Service Wrapper erhalten haben. Sehen Sie bitte in den Abschnitt Integrationsmethode 1, insbesondere das Beispiel, welches JBoss benutzt. Diese Erklärung setzt voraus, dass Sie alle Wrapper-Dateien in den Speicherorten, die im JBoss-I-Integrationsbeispiel beschrieben sind, installiert haben. Insbesondere wird angenommen, dass die wrapper.jar-Datei sich im ${jboss.home}/lib-Verzeichnis befindet.

JBoss erlaubt Ihnen, diese als ein MBean zu registrieren, jedes Objekt, welches eine Schnittstelle implementiert, dessen Name identisch mit deren Klasse ist, angehängt von "MBean". Der Java Service Wrapper bietet zwei solcher Klassen WrapperManager und WrapperManagerTesting in dem Package org.tanukisoftware.wrapper.jmx an.

Die erste Klasse, WrapperManager, bietet mehrere Funktionen für das Neustarten und Anhalten der JVM an, und liefert auch andere Informationen über den Java Service Wrapper. Die zweite Klasse WrapperManagerTesting, stellt ein paar Methoden heraus, die während des Testzyklus nützlich sein können. Sie werden für den Fall, dass sie diese nicht in einem finalem Produktrelease enthalten haben möchten, "ausgebrochen". Sehen Sie bitte die JavaDocs bezüglich mehr Details.

Um beide der oben erwähnten MBeans zu registrieren, erstellen Sie bitte eine XML-Datei namens "java-service-wrapper-service.xml" im ${jboss.home}/server/default/deploy-Verzeichnis. Die Datei sollte das Folgende enthalten:

Beispiel: (java-service-wrapper-service.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE server>
<server>
    <classpath archives="wrapper.jar" codebase="../../lib"/>
    
    <mbean code="org.tanukisoftware.wrapper.jmx.WrapperManager"
               name="JavaServiceWrapper:service=WrapperManager"/>
    
    <mbean code="org.tanukisoftware.wrapper.jmx.WrapperManagerTesting"
               name="JavaServiceWrapper:service=WrapperManagerTesting"/>
</server>

Beachten Sie bitte, dass der Speicherort der wrapper.jar-Datei relativ zum Speicherort der XML-Datei ist.

Beim Speichern der Datei sollte JBoss es feststellen und und Ihre neue MBeans praktisch unmittelbar registrieren. Es ist nicht notwendig, JBoss neu zu starten. Ziemlich cool.

Nun, um tatsächlich die neue MBeans zu nutzen, verweisen Sie einfach Ihren Browser auf die JMX-Schnittstelle von MBeans: http://localhost:8080/jmx-console/ Sie sollten einen JavaServiceWrapper-Agenten mit zwei MBeans wahrnehmen, WrapperManager und WrapperManagerTesting. Durch Auswählen beider MBeans sollten Sie einen Satz von von Attributen und Aktionen, die von der MBean angeboten wird, angezeigt bekommen.

JBoss 6.*

Bitte stellen Sie sicher, dass Sie alle Schritte, so wie oben beschrieben, getan haben.

JBoss mit Version 6 nutzt intern eine MBeanServer-Factory, die auf org.jboss.system.server.jmx.MBeanServerBuilderImpl basiert, jedoch ist diese inkompatibel zum standardmäßigen JVM MBeanServerBuilder (javax.management.MBeanServerBuilder). Gewöhnlich wird dies kein Problem sein, da JBoss, wenn es als ein Einzelbetrieb läuft, die Plattform MBeanService und alle nachfolgenden MBeans von seinem MBeanServerBuilder erstellt werden. Jedoch, wenn der Wrapper startet, wird dieser seine MBeans registrieren und infolgedessen hat die JVM zu dieser Zeit noch keinen MBeanServer, daher erstellt diese unter Nutzung des standardmäßigen MBeanServers der JVM seinen eigenen MBeanServer. Wenn JBoss startet, versucht dieser, seine MBeans am MBeanServer zu registrieren, jedoch wird es JBoss aufgrund der Inkompatibilität mit dem standardmäßigen MBeanServer der JVM, nicht gelingen, irgendeine MBean zu registrieren.

Um die MBeans des Wrappers zu nutzen und um es für JBoss zu ermöglichen, seine MBeans zu registrieren, muss die JVM darüber informiert werden, nicht die standardmäßig werkseigene zu nutzen, sondern die, die von JBoss genutzt wird, die in Wirklichkeit nur eine Erweiterung der standardmäßigen ist. Um dies so zu tun, müssen Sie die folgenden Eigenschaften festlegen:

wrapper.java.classpath.N=%JBOSS_HOME%/lib/jboss-logmanager.jar

wrapper.java.additional.N=-Djboss.platform.mbeanserver
wrapper.java.additional.N=-Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl
wrapper.java.additional.N=-Djava.util.logging.manager=org.jboss.logmanager.LogManager
wrapper.java.additional.N=-Dorg.jboss.logging.Logger.pluginClass=org.jboss.logging.logmanager.LoggerPluginImpl

Stellen Sie bitte sicher, dass N eine Zahl ist, die noch nicht zugewiesen wurde.

Im Detail bedeuten die oben erwähnten Eigenschaften, dass JBoss die MBeanServer-Plattform nutzen sollte, um MBeans (-Djboss.platform.mbeanserver) zu registrieren. Die JVM sollte org.jboss.system.server.jmx.MBeanServerBuilderImpl als MBeanServer Factory nutzen (-Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl). Demzufolge mussten die Log-Manager von JVM und JBoss neu definiert werden. Da dieser Log-Manager sich nicht auf dem Klassenpfad befindet, muss er dort hinzugefügt werden.

Nachdem diese Schritte getan wurden, sollte der Wrapper imstande sein, JBoss 6.* ohne irgendwelche Probleme auszuführen und seine MBeans zusammen mit JBoss registrieren zu können.

MX4J

Zu erledigen. (Dieser Abschnitt ist unvollständig and zum Zeitpunkt der Erstellung dieses Dokuments nur eine Zusammenstellung / Mix an Notizen. Bitten fühlen Sie sich frei, uns Vorschläge jeder Art für diesen Abschnitt zu senden)

MX4J

Die JMX-Referenz-Implementierung von Sun

Zu erledigen. (Dieser Abschnitt ist unvollständig and zum Zeitpunkt der Erstellung dieses Dokuments nur eine Zusammenstellung / Mix an Notizen. Bitten fühlen Sie sich frei, uns Vorschläge jeder Art für diesen Abschnitt zu senden)

Die Referenzimplementierung von Sun ist genau nur das, eine Referenzimplementierung. Es gibt keine fest festgelegte Anzahl von Schritten, denen Sie folgen können, um die Mbeans des Wrappers zu registrieren. Jede Anwendung tendiert dazu, ihren eigenen spezifischen Weg für die Registrierung solcher Beans zu schaffen.

Obwohl viele Anwendungen ihre eigene Syntax definiert haben, hat Oracle MLET-Tags definiert, Kurzform für Management Applet, als ein Mittel, um MBeans zu definieren. Ihre Syntax wird in den JavaDocs für die javax.management.loading.MLet (J2SE 1.4) (J2SE 5.0) (JavaSE6) (JavaSE7) Klassen definiert. Die folgenden MLET-Tags können genutzt werden, um die mit dem Wrapper mitgelieferten MBeans zu registrieren. Beachten Sie bitte, dass sie keine wirklichen XML-Dateien sind.

MLET-Tags:
<MLET
    CODE = org.tanukisoftware.wrapper.jmx.WrapperManager
    ARCHIVE = "../lib/wrapper.jar"
    NAME = JavaServiceWrapper:service=WrapperManager>
<MLET
    CODE = org.tanukisoftware.wrapper.jmx.WrapperManagerTesting
    ARCHIVE = "../lib/wrapper.jar"
    NAME = JavaServiceWrapper:service=WrapperManagerTesting>

Mehr Information finden Sie auf der "Java Management Extensions (JMX) Homepage" von Oracle.

(Java Management Extensions(JMX) Dokumentation: J2SE 5.0 / JavaSE6)