Red Hat Training
A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform
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 être mis en veille.
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. Descripteur 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
).