Index

Contrôler le Java Service Wrapper à l'aide de JMX

Le Java Service Wrapper fournit une paire d'interfaces MBean Java Management Extensions (JMX) (J2SE 5.0 JMX, JavaSE6 JMX) qui permettent de contrôler le Wrapper à l'aide d'une interface JMX. Cette section décrit comment configurer votre application compatible JMX afin que les MBeans fournis avec le Java Service Wrapper soient disponibles.

JConsole

Le JDK 5.0 de Sun inclut l' outil Java Monitoring and Management Console « JConsole » (J2SE 5.0 JConsole) (JavaSE6 JConsole). Consultez le lien ci-dessus pour plus de détails, mais JConsole facilite la connexion aux JVM correctement configurées, ainsi que la surveillance et la gestion de leurs diverses fonctions.

Pour des raisons de sécurité, la possibilité de surveiller une JVM à distance n'est pas activée par défaut. Pour activer cette fonctionnalité, il est nécessaire de définir la propriété système com.sun.management.jmxremote (J2SE 5.0) (JavaSE6) lors du lancement de la JVM. Cela peut être fait à l'aide du Wrapper en spécifiant un paramètre JVM avec la propriété wrapper.java.additional.<n> comme suit.

Exemple : (un paramètre JVM)
wrapper.java.additional.1=-Dcom.sun.management.jmxremote

Le Java Service Wrapper fournit actuellement 2 interfaces MBean.

L'interface MBean principale, org.tanukisoftware.wrapper.jmx.WrapperManagerMBean, fournit des informations de base sur le Wrapper et la JVM, ainsi que la possibilité d'arrêter et de redémarrer la JVM, et de déclencher un dump complet des threads. L'enregistrement de ce MBean est contrôlé en définissant la propriété système org.tanukisoftware.wrapper.WrapperManager.mbean. Il est activé par défaut.

La seconde interface MBean, org.tanukisoftware.wrapper.jmx.WrapperManagerTestingMBean, permet de déclencher divers états d'échec à des fins de test et ne doit pas être activée en dehors d'un environnement de test. L'enregistrement de ce MBean est contrôlé en définissant la propriété système org.tanukisoftware.wrapper.WrapperManager.mbean.testing. Il est désactivé par défaut.

Exemple : (un paramètre JVM)
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

Les MBeans du Wrapper enregistrés apparaîtront dans l'onglet MBean de l'interface JConsole, sous le package org.tanukisoftware.wrapper.

JBoss

L'enregistrement des interfaces MBean du Java Service Wrapper avec JBoss est étonnamment simple. Ceci suppose que vous avez déjà intégré JBoss avec le Java Service Wrapper. Consultez la section Méthode d'intégration 1, en particulier l'exemple utilisant JBoss. Cette explication suppose que vous avez installé tous les fichiers du Wrapper aux emplacements décrits dans l'exemple d'intégration JBoss. En particulier, le fichier wrapper.jar est supposé se trouver dans le répertoire ${jboss.home}/lib.

JBoss vous permet d'enregistrer en tant que MBean tout objet implémentant une interface dont le nom est identique à celui de la classe, suivi de « MBean ». Le Java Service Wrapper fournit deux classes de ce type, WrapperManager et WrapperManagerTesting, dans le package org.tanukisoftware.wrapper.jmx.

La première classe, WrapperManager, fournit plusieurs fonctions pour redémarrer et arrêter la JVM, ainsi que d'autres informations sur le Java Service Wrapper. La seconde classe, WrapperManagerTesting, expose quelques méthodes qui peuvent être utiles pendant le cycle de test. Elles sont séparées au cas où vous ne souhaiteriez pas les inclure dans une version finale du produit. Consultez les JavaDocs pour plus de détails.

Pour enregistrer les deux MBeans ci-dessus, créez un fichier XML nommé « java-service-wrapper-service.xml » dans le répertoire ${jboss.home}/server/default/deploy. Le fichier doit contenir ce qui suit :

Exemple : (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>

Notez que l'emplacement du fichier wrapper.jar est relatif à l'emplacement du fichier XML.

Dès l'enregistrement du fichier, JBoss devrait le détecter et enregistrer vos nouveaux MBeans presque immédiatement. Pas besoin de redémarrer JBoss. Plutôt cool.

Maintenant, pour utiliser réellement les nouveaux MBeans, pointez simplement votre navigateur vers l'interface JMX de JBoss à l'adresse : http://localhost:8080/jmx-console/ Vous devriez remarquer un agent JavaServiceWrapper avec deux MBeans, WrapperManager et WrapperManagerTesting. La sélection de l'un ou l'autre des MBeans vous présentera un ensemble d'attributs et d'actions fournis par le MBean.

JBoss 6.*

Veuillez vous assurer d'avoir effectué toutes les étapes décrites ci-dessus.

JBoss version 6 utilise en interne une fabrique MBeanServer basée sur org.jboss.system.server.jmx.MBeanServerBuilderImpl, cependant celle-ci est incompatible avec le MBeanServerBuilder par défaut de la JVM (javax.management.MBeanServerBuilder). Habituellement, cela ne poserait pas de problème car JBoss, lorsqu'il s'exécute de manière autonome, définit le MBeanService de la plateforme et tous les MBeans suivants seront créés à partir de son MBeanServerBuilder. Cependant, lorsque le Wrapper démarre, il enregistre ses MBeans et, comme la JVM n'a pas encore de MBeanServer à ce moment-là, elle créera un MBeanServer en utilisant le MBeanServer par défaut de la JVM. Lorsque JBoss démarre, il tente d'enregistrer ses MBeans auprès du MBeanServer ; cependant, en raison de l'incompatibilité avec le MBeanServer par défaut de la JVM, JBoss ne parviendra à enregistrer aucun MBean.

Afin d'utiliser les MBeans du Wrapper et de permettre à JBoss d'enregistrer ses MBeans, la JVM doit être configurée pour ne pas utiliser la fabrique par défaut, mais celle utilisée par JBoss, qui n'est en fait qu'une extension de la fabrique par défaut. Pour ce faire, vous devez définir les propriétés suivantes :

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

Veuillez vous assurer que N est un numéro qui n'a pas encore été attribué.

En détail, les propriétés ci-dessus signifient que JBoss doit utiliser le MBeanServer de la plateforme pour enregistrer les MBeans (-Djboss.platform.mbeanserver). La JVM doit utiliser org.jboss.system.server.jmx.MBeanServerBuilderImpl comme fabrique MBeanServer (-Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl). Par conséquent, le Log Manager de la JVM et de JBoss doit être redéfini. Comme ce Log Manager n'est pas dans le classpath, il doit également y être ajouté.

Une fois ces étapes effectuées, le Wrapper devrait pouvoir exécuter JBoss 6.* sans aucun problème et enregistrer ses MBeans aux côtés de ceux de JBoss.

MX4J

À faire. (Cette section est incomplète et n'est pour l'instant qu'un amas de notes. N'hésitez pas à envoyer des suggestions pour cette section)

MX4J

Implémentation de référence JMX de Sun

À faire. (Cette section est incomplète et n'est pour l'instant qu'un amas de notes. N'hésitez pas à envoyer des suggestions pour cette section)

L'implémentation de référence de Sun est précisément cela, une implémentation de référence. Il n'existe pas d'ensemble fixe d'étapes à suivre pour enregistrer les MBeans du Wrapper. Chaque application a tendance à avoir créé sa propre méthode personnalisée d'enregistrement de ces beans.

Bien que de nombreuses applications aient défini leur propre syntaxe, Oracle a défini les balises MLET, abréviation de Management Applet, comme moyen de définir des MBeans. Leur syntaxe est décrite dans les JavaDocs de la classe javax.management.loading.MLet (J2SE 1.4) (J2SE 5.0) (JavaSE6) (JavaSE7). Les balises MLET suivantes peuvent être utilisées pour enregistrer les MBeans fournis avec le Wrapper. Notez qu'il ne s'agit pas vraiment de XML.

Balises MLET :
<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>

Plus d'informations sont disponibles sur la « page d'accueil Java Management Extensions (JMX) » d'Oracle.

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