package foo.mbean;public interface FooServiceMBean { public String getBar(); public void start(); public void stop();}
Mule as MBean
An MBean is a named managed object representing a resource in an JMX environment. You can easily deploy an MBean with Mule by taking the following steps:
-
Create an MBean
-
Create service descriptor
-
Deploy MBean (as
.sar
) to application server -
Copy dependencies to the service’s classpath
This page describes these steps using the JBoss application server.
Creating a Simple MBean
To create an MBean, you need an interface and an implementation:
package foo.mbean;import org.jboss.system.ServiceMBeanSupport;import org.mule.config.spring.SpringXmlConfigurationBuilder;import org.mule.api.MuleContext;import org.mule.api.context.notification.ServerNotification;public class FooService extends ServiceMBeanSupport implements FooServiceMBean { public String getBar() { return "bar"; } public void start() { this.getLog().info("MBean being started"); try { MuleContext context = new DefaultMuleContextFactory().createMuleContext(new SpringXmlConfigurationBuilder("foo-config.xml")); context.registerListener(this); context.start(); } catch(Exception e) { e.printStackTrace(); } this.getLog().info("MBean started"); } public void stop() { this.getLog().info("MBean being stopped"); try { if (context != null) { context.stop(); context.dispose(); } this.getLog().info("Done stopping Mule MBean Service!"); } catch (Exception ex) { this.getLog().error("Stopping Mule caused and exception!", ex); } }}
The extension of ServiceMBeanSupport
is simply to provide you more control over the API provided by JBoss.
Creating JBoss Service Descriptor
You must create a service descriptor and add it to to META-INF/
. Following is a simple example:
<?xml version="1.0" encoding="UTF-8"?><server> <mbean code="foo.FooService" name="foo:service=Foo"> </mbean></server>
Deploying MBean to JBoss
Based on the examples above, your distribution looks like this:
../foo./foo/FooService./foo/FooServiceMBean./META-INF./META-INF/jboss-service.xml
Package the distribution either as a JAR, which you can then rename to a *.sar
that you will eventually extract, or as a directory called <dirName>.sar
.
Copy the Dependencies
Follow the steps below to copy the dependencies and complete the deployment:
-
Copy your
<dirName>.sar/
directory toJBOSS_HOME/server/default/deploy/
. -
Copy all dependencies of Mule, such as
MULE_HOME/lib//.jar
to the<dirName>.sar/
directory -
Start JBoss. You will see the MBean appears in its MBean console.