To test the MBean, you must develop a JMX agent that registers the MBean to an MBeanServer. However, before doing this is important to know what characterizes an MBeanServer:
An MBeanServer keeps a registry containing all registered MBeans.
JMX 1.0 provides an interface called javax.management.MBeanServer, that contains dedicated methods to create, register, and delete MBeans. It also provides access to registered MBeans methods.
You can obtain the platform MBeanServer by using the java.lang.management.ManagementFactory.getPlatformMBeanServer() method, or by using the methods provided in the javax.management.MBeanServerFactory class. The argument domain represents the default domain name for the created MBeanServer:
public static MBeanServer createMBeanServer()
public static MBeanServer newMBeanServer()
public static MBeanServer createMBeanServer(String domain)
public static MBeanServer newMBeanServer(String domain)
Every MBean must have a unique identity in the MBeanServer registry. A unique identifier contains two parts:
A domain name: If this isn't specified, the agent will use the MBeanServer default domain.
A list of one more keys: In this case, the keys are stored into a Hashtable.
To create a unique identity, create a javax.management.ObjectName instance. The constructors listed below can help you to do this:
public ObjectName(String domain,String key, String value)
throws MalformedObjectNameException, NullPointerException
public ObjectName(String domain,Hashtable table)
throws MalformedObjectNameException,NullPointerException
public ObjectName(String name) throws MalformedObjectNameException,
NullPointerException
If you are using the third constructor for the above (which has only a String argument), you can specify both the domain and the keys with the format below:
domain: key1 = value1 , key2 = value2
To register an MBean, use the MBeanServer.registerMBean method. This method receives the MBean as an object and the unique identity as an ObjectName instance and returns an ObjectInstance object, which represents both the MBean's object and class names.
To find an MBeanServer instance, call the javax.management.MBeanServerFactory.findMBeanServer method. This method receives an argument that represents the agent identifier corresponding to the MBeanServer instance. The agent identifier can be obtained from the StringId attribute of the MBeanServerDelegate class, which is automatically registered as an MBean with the object name JMImplementation:type=MBeanServerDelegate. The registration of MBeanServerDelegate is made for every MBeanServer instance. If agentId is null, then findMBeanServer will return all the registered MBeanServer instances from the current JVM.
public static ArrayList<MBeanServer> findMBeanServer(String agentId)
Having all this knowledge, is should be very easy now to develop a basic JMX agent to expose your MBean. Listing 2 shows an example.
Now, with all three above classes in a directory (StandardJMX is used in this example), you can test the JMX implementation like this:
Open the JConsole, New Connection window of your jconsole tool. Go to Local Process and select the BasicAgent process. Click Connect and wait until the connection is made.
After the connection is established, go into the MBeans tab.
In the left panel expand the BasicAgent node until you see something like Figure 4.
Figure 4: The Interface Of the jconsole Tool
Now, take your time and try to run operations (start/stop/halt the process) and monitor your attributes (notice the output in the agent prompt command). When you want to stop JMX monitoring, just close jconsole and press Enter in the agent output prompt.
Home / Articles
/ Soup-to-Nuts Application Management with JMX / 1 / 2 / 3 /
JavaBytes
Internet Cyclone
This powerful, easy-to-use, internet optimizer is for
Windows 95, 98, ME, NT, 2000 and XP. It's designed to
automatically optimize your Windows settings, boosting your
Internet connection up to 200%.