mercredi 23 février 2005
Hello World avec JBossMX
Par François Pfister, mercredi 23 février 2005 à 17:16 :: General
Il est d'usage de proposer une application minimaliste "HelloWorld" pour évaluer un nouvel environnement. Dans le cas d'un serveur web java (Tomcat par exemple), on montrera en quelques lignes comment écrire une servlet qui affiche "bonjour".
Pour un serveur d'application, ce HelloWorld ne sera pas une servlet, ni une JSP, car la fonction essentielle de ce type de serveur n'est pas le protocole HTTP.
Dans le cas précis de JBoss, il sera intéressant de toucher du doigt la brique de base de son architecture: JMX.
Nous allons donc développer une classe MBean conforme à Java Management Extension, cette API constituant la fondation du micro-kernel de JBoss.
Il s'agit d'instancier un JavaBean un peu particulier. Ce bean est en réalité un service qui sera accessible à différents clients, et notamment à un client HTTP dans le cadre de la console d'administration de JBoss.
A partir de cette page d'administration accessible avec un navigateur web, l'utilisateur peut modifier les propriétés publiées de ce bean, et même appeller des méthodes. Un tel bean peut évidemment encapsuler n'importe quelle application et consituer, à minima, une interface d'administration.
Dans JBoss, les applications résident dans le répertoire deploy situé sous la configuration du serveur (il y a trois configurations par défaut: all, default, minimal, standard). Utilisons la configuration standard.
Ce projet peut être créé dans Eclipse. Afin de simplifier le déploiement, le répertoire de travail sera directement le répertoire cible:
E:\jboss-4.0.0\server\standard\deploy\jmx-test.sar
Notez que le répertoire doit porter le suffixe sar.
Le projet est organisé ainsi:
sources java:
- E:\jboss-4.0.0\server\standard\deploy\jmx-test.sar\lgi2p\fr\test\jmx\HelloWorldService.java
- E:\jboss-4.0.0\server\standard\deploy\jmx-test.sar\lgi2p\fr\test\jmx\ HelloWorldServiceMBean.java
descripteur de déploiement:
- E:\jboss-4.0.0\server\standarddeploy\jmx-test.sar\META-INF\jboss-service.xml
Les bibliothèques suivantes doivent être accessibles au compilateur:
- E:\jboss-4.0.0\lib\jboss-common.jar
- E:\jboss-4.0.0\lib\jboss-jmx.jar
- E:\jboss-4.0.0\lib\jboss-system.jar
Le serveur charge le bean dès qu'il est compilé. En cas de problème, stopper et relancer JBoss.
package lgi2p.fr.test.jmx; import org.jboss.system.ServiceMBean; public interface HelloWorldServiceMBean extends ServiceMBean{ String getMessage(); void setMessage(String message); void printMessage(); }
package lgi2p.fr.test.jmx; import org.jboss.system.ServiceMBeanSupport;
public class HelloWorldService extends ServiceMBeanSupport implements HelloWorldServiceMBean { private String message = "pas de message"; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; log.info("modifié, message="+message); } public void printMessage() { log.info("printMessage, message="+message); } protected void startService() throws Exception{ log.info("démarré, message="+message); } protected void stopService() throws Exception{ log.info("stoppé, message="+message); } }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE server> <server> <mbean name ="lgi2p.fr:service=HelloWorld" code="lgi2p.fr.test.jmx.HelloWorldService"> <attribute name="Message">HelloWorld</attribute> </mbean> </server>
ouvrir un navigateur à l'adresse http://localhost:8080/jmx-console/
filtrer sur lgi2p.fr:*
modifier la propriété Message et invoquer la méthode printMessage
constater les logs dans la console Eclipse:
15:41:50,500 INFO HelloWorldService stoppé, message=HelloWorld 15:42:06,171 INFO HelloWorldService démarré, message=HelloWorld 15:44:22,468 INFO HelloWorldService modifié, message=coucou 16:38:13,968 INFO HelloWorldService modifié, message=bonjour lgi2p 17:01:50,109 INFO HelloWorldService printMessage, message=bonjour lgi2p 17:04:25,609 INFO HelloWorldService stoppé, message=bonjour lgi2p
http://localhost:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=lgi2p.fr:service=HelloWorld