8.2. Exemple de MBean standard
Cette section développe deux exemples de services MBean qui font partie d'un même package d'archive de service (
.sar
).
L'interface
ConfigServiceMBean
déclare des méthodes spécifiques telles que les méthodes start
, getTimeout
et stop
pour qu'elles démarrent
, mettent en attente
et stoppent
le MBean correctement sans utiliser de classes spécifiques à JBoss. La classe ConfigService
implémente l'interface ConfigServiceMBean
et de ce fait implémente les méthodes utilisées dans cette interface.
La classe
PlainThread
étend la classe ServiceMBeanSupport
et implémente l'interface PlainThreadMBean
. PlainThread
démarre un thread et utilise la méthode ConfigServiceMBean.getTimeout()
pour déterminer la durée pendant laquelle le thread doit dormir.
Exemple 8.1. Exemples de services MBean
package org.jboss.example.mbean.support; public interface ConfigServiceMBean { int getTimeout(); void start(); void stop(); } package org.jboss.example.mbean.support; public class ConfigService implements ConfigServiceMBean { int timeout; @Override public int getTimeout() { return timeout; } @Override public void start() { //Create a random number between 3000 and 6000 milliseconds timeout = (int)Math.round(Math.random() * 3000) + 3000; System.out.println("Random timeout set to " + timeout + " seconds"); } @Override public void stop() { timeout = 0; } } package org.jboss.example.mbean.support; import org.jboss.system.ServiceMBean; public interface PlainThreadMBean extends ServiceMBean { void setConfigService(ConfigServiceMBean configServiceMBean); } package org.jboss.example.mbean.support; import org.jboss.system.ServiceMBeanSupport; public class PlainThread extends ServiceMBeanSupport implements PlainThreadMBean { private ConfigServiceMBean configService; private Thread thread; private volatile boolean done; @Override public void setConfigService(ConfigServiceMBean configService) { this.configService = configService; } @Override protected void startService() throws Exception { System.out.println("Starting Plain Thread MBean"); done = false; thread = new Thread(new Runnable() { @Override public void run() { try { while (!done) { System.out.println("Sleeping...."); Thread.sleep(configService.getTimeout()); System.out.println("Slept!"); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }); thread.start(); } @Override protected void stopService() throws Exception { System.out.println("Stopping Plain Thread MBean"); done = true; } }
Le descripteur
jboss-service.xml
montre comment la classe ConfigService
est injectée dans la classe PlainThread
en utilisant la balise inject
. La balise inject
établit une dépendance entre PlainThreadMBean
et ConfigServiceMBean
permettant ainsi à PlainThreadMBean
d'utiliser ConfigServiceMBean
aisément.
Exemple 8.2. Décripteur de service JBoss-service.xml
<server xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:jboss:service:7.0 jboss-service_7_0.xsd" xmlns="urn:jboss:service:7.0"> <mbean code="org.jboss.example.mbean.support.ConfigService" name="jboss.support:name=ConfigBean"/> <mbean code="org.jboss.example.mbean.support.PlainThread" name="jboss.support:name=ThreadBean"> <attribute name="configService"> <inject bean="jboss.support:name=ConfigBean"/> </attribute> </mbean> </server>
Aprés avoir rédigé les exemples de MBeans, vous pouvez empaqueter les classes et le descripteur
jboss-service.xml
dans le dossier META-INF
d'une archive de service (.sar
).