jmx实现简单jmxdemo实例

JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。

废话不多说了,直接说demo代码:


MyMBean.java 代码:

  1. package com.mbean;
  2. public interface MyMBean {
  3.    public String getInfo(String name);
  4.    public int add(int a,int b);
  5. }

My.java代码:

  1. package com.mbean;
  2. public class My implements MyMBean {
  3.      public String getInfo(String name) {
  4.          return “info=”+name;
  5.       }
  6.      public int add(int a, int b) {
  7.          return a+b;
  8.      }
  9. }

服务端Server.java代码:

  1. package com;
  2. import java.rmi.registry.LocateRegistry;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import javax.management.MBeanServer;
  6. import javax.management.MBeanServerFactory;
  7. import javax.management.ObjectName;
  8. import javax.management.remote.JMXConnector;
  9. import javax.management.remote.JMXConnectorServer;
  10. import javax.management.remote.JMXConnectorServerFactory;
  11. import javax.management.remote.JMXServiceURL;
  12. import com.mbean.My;
  13. public class Server {
  14. public static void main(String[] args) {
  15. MBeanServer mbServer=MBeanServerFactory.createMBeanServer();
  16. System.out.println(“——MBean服务器创建成功——–“);
  17. String defaultDomain=mbServer.getDefaultDomain();
  18. My mybean = new My();
  19. ObjectName objectname=null;
  20. try {
  21. objectname=new ObjectName(defaultDomain+”:name=mytest”);
  22. mbServer.registerMBean(mybean, objectname);
  23. System.out.println(“——-mytest向MBean注册成功——–“);
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27. /**
  28. * 创建一个jmx连接服务器
  29. */
  30. try {
  31. String ip = “127.0.0.1”;
  32. int port = 40000;
  33. String user = “admin”;
  34. String password = “admin”;
  35. // 启动RMI注册服务,指定端口
  36. LocateRegistry.createRegistry(port);
  37. // 存取该JMX服务的URL
  38. JMXServiceURL url = new JMXServiceURL(“service:jmx:rmi://” + ip + “:” + port + “/jndi/rmi://” + ip + “:” + port + “/server”);
  39. System.out.println(“url = service:jmx:rmi://127.0.0.1:40000/jndi/rmi://127.0.0.1:40000/server”);
  40. Map<String, Object> map = new HashMap<String, Object>();
  41. map.put(JMXConnector.CREDENTIALS, new String[] { user, password });
  42. JMXConnectorServer jmxConnectorServer = JMXConnectorServerFactory.newJMXConnectorServer(url, map, mbServer);
  43. System.out.println(“——–JMX连接服务器创建成功——–“);
  44. System.out.println(“——–启动JMX服务———-“);
  45. jmxConnectorServer.start();
  46. System.out.println(“——–启动成功————-“);
  47. } catch (Exception e) {
  48. System.out.println(“启动报错!”);
  49. e.printStackTrace();
  50. }
  51. }
  52. }

客户端Client.java代码:

  1. package com;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import javax.management.MBeanServerConnection;
  5. import javax.management.ObjectName;
  6. import javax.management.remote.JMXConnector;
  7. import javax.management.remote.JMXConnectorFactory;
  8. import javax.management.remote.JMXServiceURL;
  9. public class Client {
  10. public static void main(String[] args) {
  11. try {
  12. String ip = “127.0.0.1”;
  13. int port = 40000;
  14. String user = “admin”;
  15. String password = “admin”;
  16. //创建jmx连接
  17. JMXServiceURL jmxUrl = new JMXServiceURL(“service:jmx:rmi://” + ip + “:” + port + “/jndi/rmi://” + ip + “:” + port + “/server”);
  18. Map<String, Object> map=new HashMap<String,Object>();
  19. // map.put(“jmx.remote.protocol.provider.pkgs”, “org.logicblaze.lingo.jmx.remote.provider”);
  20. JMXConnector jmxConn=JMXConnectorFactory.connect(jmxUrl,map);
  21. //获得MBean服务连接
  22. MBeanServerConnection mbsConn=jmxConn.getMBeanServerConnection();
  23. String defaultDedomain=mbsConn.getDefaultDomain();
  24. ObjectName objname= new ObjectName(defaultDedomain + “:name=mytest”);
  25. Object[] para={“yang”};//参数名
  26. String[] paraType={“java.lang.String”};//参数类型
  27. Object str=mbsConn.invoke(objname, “getInfo”, para, paraType);//调用服务端的方法
  28. System.out.println(“rerult:” + str.toString());
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. }
  32. }
  33. }

运行服务端Server.java类,启动jmx服务,运行成功:

20130731160450

用jdk自带的工具jconsole测试:

先在命令提示符中输入jconsole回车,就可以打开jconsole工具,输入url,用户名:admin 密码:admin,点击【连接】按钮。

如图:

20130731161006

连接进去后界面如图:

QQ截图20130731160521

点击左边树中的add方法,再在操作调用中输入参数,点击【add】按钮,弹出结果如图:

20130731161451

测试成功了哦。

jmx其实很简单,如果用过webservice的同学可以对比一下,我就不再这里作评价了。

如果需要原项目的可以到这里下载:

http://download.csdn.net/download/yangsxy/5839873

没csnd积分的同学可以留言,留下邮箱,我可以发给你。

标签