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:*

console d'administration


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

console d'administration