jmx
Create and register MBean in MBeanServer
In this example we shall show you how to create and register an MBean in MBeanServer. An MBean is a managed Java object, similar to a JavaBeans component, that follows the design patterns set forth in the JMX specification. An MBean can represent a device, an application, or any resource that needs to be managed. MBeans expose a management interface that consists of a set of readable or writable attributes, or both, a set of invokable operations and a self-description. To create and register an MBean in MBeanServer one should perform the following steps:
- Create a Java interface. Here we create
HelloBean. Every method in the interface defines either an attribute or an operation in the MBean. The interface has a method,sayHello()a read-write attribute calledmessageof type String. - Create a Java class,
Helloin the example, that implements that interface - Create an MBeanServer that is the interface for MBean manipulation on the agent side. Use
getPlatformMBeanServer()API method of ManagementFactory. - Define the object name for the MBean. The object name is an instance of the JMX class ObjectName and must contain a domain and a list of key-properties.
- Create a new instance of the MBean and register it to MBeanServer, using
registerMBean(Object object, ObjectName name)API method of MBeanServer. - Use
queryMBeans(ObjectName name, QueryExp query)API method of MBeanServer with the given ObjectName to get all ObjectInstances of the specified MBean. - Get the first ObjectInstance name and class,
as described in the code snippet below.
package com.javacodegeeks.snippets.enterprise;
import java.lang.management.ManagementFactory;
import java.util.Set;
import javax.management.MBeanServer;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
public class CreateAndRegisterMBeanInMBeanServer {
public static void main(String[] args) throws Exception {
String objectName = "com.javacodegeeks.snippets.enterprise:type=Hello";
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
// Construct the ObjectName for the Hello MBean we will register
ObjectName mbeanName = new ObjectName(objectName);
Hello mbean = new Hello();
server.registerMBean(mbean, mbeanName);
Set<ObjectInstance> instances = server.queryMBeans(new ObjectName(objectName), null);
ObjectInstance instance = (ObjectInstance) instances.toArray()[0];
System.out.println("Class Name:t" + instance.getClassName());
System.out.println("Object Name:t" + instance.getObjectName());
}
static class Hello implements HelloMBean {
private String message = "Hello World";
@Override
public String getMessage() {
return this.message;
}
@Override
public void sayHello() {
System.out.println(message);
}
@Override
public void setMessage(String message) {
this.message = message;
}
}
static interface HelloMBean {
// operations
public void sayHello();
// attributes
// a read-write attribute called Message of type String
public String getMessage();
public void setMessage(String message);
}
}
Output:
Class Name: com.javacodegeeks.snippets.enterprise.CreateAndRegisterMBeanInMBeanServer$Hello
Object Name: com.javacodegeeks.snippets.enterprise:type=Hello
This was an example of how to create and register an MBean in MBeanServer.

