`
damies
  • 浏览: 236406 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[JMX一步步来] 8、编写程序来连接MBean

阅读更多
前面用Html、jconsole等方法连接上了MBeanServer,并能够通过这些界面来操纵MBean。但有时我们需要不借助这些客户端,而是在自己的程序来操纵这些MBean,这就要求我们知道如何在代码里连接MBean。
 
  基于上一篇为jconsole而修改的例子,给出一个示例的客户端程序,基本的操作都有了:
java 代码
  1. import java.util.Iterator;   
  2. import java.util.Set;   
  3. import javax.management.Attribute;   
  4. import javax.management.MBeanInfo;   
  5. import javax.management.MBeanServerConnection;   
  6. import javax.management.MBeanServerInvocationHandler;   
  7. import javax.management.ObjectInstance;   
  8. import javax.management.ObjectName;   
  9. import javax.management.remote.JMXConnector;   
  10. import javax.management.remote.JMXConnectorFactory;   
  11. import javax.management.remote.JMXServiceURL;   
  12. public class Client {   
  13.     public static void main(String[] args) throws Exception {      
  14.         JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");      
  15.         JMXConnector jmxc = JMXConnectorFactory.connect(url, null);       
  16.         MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();     
  17.         ObjectName mbeanName = new ObjectName("chengang:name=HelloWorld");   
  18.         // 把所有Domain都打印出来   
  19.         System.out.println("Domains:---------------");      
  20.         String domains[] = mbsc.getDomains();       
  21.         for (int i = 0; i < domains.length; i++) {       
  22.             System.out.println("\tDomain[" + i + "] = " + domains[i]);    
  23.         }   
  24.         // MBean的总数   
  25.         System.out.println("MBean count = " + mbsc.getMBeanCount());   
  26.         // 对name属性的操作(属性名的第一个字母要大写)   
  27.         mbsc.setAttribute(mbeanName, new Attribute("Name""PANDA"));// 设值   
  28.         System.out.println("Name = " + mbsc.getAttribute(mbeanName, "Name"));// 取值   
  29.         // 得到proxy代理后直接调用的方式   
  30.         HelloMBean proxy = (HelloMBean) MBeanServerInvocationHandler.newProxyInstance(mbsc, mbeanName, HelloMBean.classfalse);        
  31.         proxy.printHello();        
  32.         proxy.printHello("Raymend");   
  33.         // 远程调用的方式   
  34.         mbsc.invoke(mbeanName, "printHello"nullnull);         
  35.         mbsc.invoke(mbeanName, "printHello"new Object[] { "熊猫烧香" }, new String[] { String.class.getName() });   
  36.         // 得mbean的信息   
  37.         MBeanInfo info = mbsc.getMBeanInfo(mbeanName);         
  38.         System.out.println("Hello Class: " + info.getClassName());      
  39.         System.out.println("Hello Attriber:" + info.getAttributes()[0].getName());     
  40.         System.out.println("Hello Operation:" + info.getOperations()[0].getName());   
  41.         // 得到所有的MBean的ObjectName   
  42.         System.out.println("all ObjectName:---------------");        
  43.         Set set = mbsc.queryMBeans(nullnull);       
  44.         for (Iterator it = set.iterator(); it.hasNext();) {        
  45.             ObjectInstance oi = (ObjectInstance) it.next();        
  46.             System.out.println("\t" + oi.getObjectName());        
  47.             }   
  48.         // 注销   
  49.         // mbsc.unregisterMBean(mbeanName);   
  50.         // 关闭MBeanServer连接   
  51.         jmxc.close();     
  52. }   
  53. }   
运行后的效果如下:
Domains:---------------
 Domain[0] = HelloAgent
 Domain[1] = JMImplementation
 Domain[2] = chengang
MBean count = 3
Name = Chen.Gang
Hello Class: mbean.connector.Hello
Hello Attriber:Name
Hello Operation:printHello
all ObjectName:---------------
 chengang:name=HelloWorld
 JMImplementation:type=MBeanServerDelegate
 HelloAgent:name=htmladapter,port=8082
 
 
它有两个Console输出,这里是另一个
Hello World, PANDA
Hello ,  熊猫
Hello World, PANDA
Hello , 熊猫烧香
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics