JavaSE 6平台中,可以通过调用ManagementFactory.getPlatformMBeanServer()来获取到一个MBean Server,然后向其中注册实现好的MBean资源,就能够通过JMX进行管理。
查找本地的MBean Server(如果没有找到,会自动创建一个),有关如何查找以及可能需要创建,可以通过ManagementFactory.getPlatformMBeanServer()的代码来实现跟踪。示例如下所示:
- package org.shirdrn.java.jmx.standardmbean;
-
- import java.lang.management.ManagementFactory;
-
- import javax.management.InstanceAlreadyExistsException;
- import javax.management.MBeanRegistrationException;
- import javax.management.MBeanServer;
- import javax.management.MalformedObjectNameException;
- import javax.management.NotCompliantMBeanException;
- import javax.management.ObjectName;
-
- public class MyJMX {
-
- private static MBeanServer mBeanServer = null;
- static {
- if(mBeanServer==null) {
- mBeanServer = ManagementFactory.getPlatformMBeanServer();
- }
- }
-
- public void register(Object objectMBean, ObjectName objectName)
- throws InstanceAlreadyExistsException, MBeanRegistrationException,
- NotCompliantMBeanException {
- mBeanServer.registerMBean(objectMBean, objectName);
- }
-
- public static void main(String[] args) throws InterruptedException,
- InstanceAlreadyExistsException, MBeanRegistrationException,
- NotCompliantMBeanException, MalformedObjectNameException,
- NullPointerException {
- MyJMX jmx = new MyJMX();
- String objectNameString = \"mydomain:mykey=MyObjectMBean\";
- ObjectName objectName = new ObjectName(objectNameString);
- MyObjectMBean myObjectMBean = new MyObject(299999007, \"shirdrn\");
- jmx.register(myObjectMBean, objectName);
-
- Object lock = new Object();
- synchronized (lock) {
- lock.wait();
- }
- }
- }
在启动参数中,需要设置-Dcom.sun.management.jmxremote选项,表示可以通过远程进行管理。
3、远程管理层
我们要管理应用系统的某些资源,是通过代理层来间接实现管理,那么在与代理层之间交互最为直接,所以远程远程管理层定义了我们通过什么方式来与MBean Server进行交互,如基于何种协议、怎样建立连接才能通过远程手段在MBean Server的JVM之外进行访问,从而实现管理和监控,例如基于JMXMP、RMI等。
所以,远程管理层最重要的两个组件就是协议适配器和连接器。
Sun公司实现了一个基于JMXMP协议的工具JConsole,可以通过JConsole来方便地进行调试。启动JConsole后,可以通过本地进程或远程进程来进行远程管理。
例如,创建一个基于RMI协议的连接器,示例如下:
- String serviceURL = \"service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi\";
- JMXServiceURL url = new JMXServiceURL(serviceURL);
- JMXConnectorServer connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbeanServer);
参考链接:
http://download.oracle.com/javase/6/docs/technotes/guides/jmx/index.html