参考:http://tuhaitao.iteye.com/blog/786391html
这里以MBean对象进行演示向服务器注册,调用的过程。java
1.MBean接口,接口名必须以MBean结尾服务器
1 package gofAndJavaSourceStudy.jmxstudy.jmxImpl; 2 3 public interface HelloMBean { 4 //管理属性 5 public void setName(String name); 6 7 public String getName(); 8 9 //管理操做 10 public String print(); 11 }
2.实现这个接口,定义属性和行为oracle
1 package gofAndJavaSourceStudy.jmxstudy.jmxImpl; 2 3 import java.lang.management.ManagementFactory; 4 5 import javax.management.Attribute; 6 import javax.management.MBeanServer; 7 import javax.management.ObjectName; 8 9 //MBean的接口和实现类必须位于同一个包中 10 11 public class Hello implements HelloMBean { 12 public String name; 13 14 public void setName(String name) { 15 // TODO Auto-generated method stub 16 this.name = name; 17 } 18 19 public String getName() { 20 // TODO Auto-generated method stub 21 return name; 22 } 23 24 public String print() { 25 // TODO Auto-generated method stub 26 String result = "Hello," + name + "!!"; 27 System.out.println(result); 28 return result; 29 } 30 31 public static void main(String args[]) throws Exception { 32 MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); // 获取MBeanServer 33 ObjectName name = new ObjectName("fjs:type=hello"); // 构造一个名字 34 Hello hello = new Hello(); // 建立须要注册的对象 35 mbs.registerMBean(hello, name); // 注册这个对象 36 37 mbs.setAttribute(name, new Attribute("Name", "bianjie")); //属性首字母必须大写 38 mbs.invoke(name, "print", null, null); //第三个参数为Object[],为传入的参数值,第四个参数为String[],指明参数类型 39 Thread.sleep(Long.MAX_VALUE); 40 } 41 42 }
main方法中演示了申请服务器,向服务器注册MBean以及调用的过程。经过objectname,咱们能够得到对象的属性,传参调用方法等等。工具
几个须要注意的点:1.MBean接口和实现类必须位于同一包下2.Thread.sleep()必须有,阻塞线程,不然服务器和对象的生命周期都结束了,也就无管理可言了。因此运用在监控服务器上的应用程序。性能
3.几个工具测试
oracle java mission control :能够链接虚拟机,并监控虚拟机的各项指标状态,远程管理应用。从此能够深刻研究,应该对性能测试,虚拟机调优做用很是大this
简单调用了一下上面注册的MBeanspa
---------------------------线程
二.关于JMX与JNDI的比较,参考:http://www.bitscn.com/pdb/java/200805/141680.html
操做对象:JMX和JNDI均可以对Java类和对象进行查找和定位(JMX中还支持对MBean的查找,并有特定的Query类)。可是在实际应用中,JMX通常用于系统重要的功能性组件;JNDI用来查找部署在服务器中的各个应用程序中的资源,例如servlet、EJB和POJO等,并会为每一个应用程序创建独立的隔离的Context.各个Context中,只能定位在这个Context中的资源。