9.2. A Standard MBean Example

download PDF
This section develops two sample MBean services packaged together in a service archive (.sar).
ConfigServiceMBean interface declares specific methods like the start, getTimeout and stop methods to start, hold and stop the MBean correctly without using any JBoss specific classes. ConfigService class implements ConfigServiceMBean interface and consequently implements the methods used within that interface.
PlainThread class extends ServiceMBeanSupport class and implements PlainThreadMBean interface. PlainThread starts a thread and uses ConfigServiceMBean.getTimeout() to determine how long the thread should sleep.

Example 9.1. Sample MBean services


public interface ConfigServiceMBean {

    int getTimeout();

    void start();

    void stop();



public class ConfigService implements ConfigServiceMBean {
    int timeout;

    public int getTimeout() {
        return timeout;

    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");

    public void stop() {
        timeout = 0;


import org.jboss.system.ServiceMBean;

public interface PlainThreadMBean extends ServiceMBean {
    void setConfigService(ConfigServiceMBean configServiceMBean);


import org.jboss.system.ServiceMBeanSupport;

public class PlainThread extends ServiceMBeanSupport implements PlainThreadMBean {

    private ConfigServiceMBean configService;
    private Thread thread;
    private volatile boolean done;

    public void setConfigService(ConfigServiceMBean configService) {
        this.configService = configService;

    protected void startService() throws Exception {
        System.out.println("Starting Plain Thread MBean");
        done = false;
        thread = new Thread(new Runnable() {
            public void run() {
                try {
                    while (!done) {
                } catch (InterruptedException e) {

    protected void stopService() throws Exception {
        System.out.println("Stopping Plain Thread MBean");
        done = true;

The jboss-service.xml descriptor shows how ConfigService class is injected into PlainThread class using inject tag. The inject tag establishes a dependency between PlainThreadMBean and ConfigServiceMBean and thus allows PlainThreadMBean use ConfigServiceMBean easily.

Example 9.2. JBoss-service.xml Service Descriptor

<server xmlns:xsi=""
        xsi:schemaLocation="urn:jboss:service:7.0 jboss-service_7_0.xsd"
 <mbean code="" name=""/>
 <mbean code="" name="">
  <attribute name="configService">
   <inject bean=""/>
After writing the sample MBeans you can package the classes and the jboss-service.xml descriptor in the META-INF folder of a service archive (.sar).
Red Hat logoGithubRedditYoutubeTwitter


Try, buy, & sell


About Red Hat Documentation

We help Red Hat users innovate and achieve their goals with our products and services with content they can trust.

Making open source more inclusive

Red Hat is committed to replacing problematic language in our code, documentation, and web properties. For more details, see the Red Hat Blog.

About Red Hat

We deliver hardened solutions that make it easier for enterprises to work across platforms and environments, from the core datacenter to the network edge.

© 2024 Red Hat, Inc.