博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[JMX一步步来] 8、编写程序来连接MBean
阅读量:6622 次
发布时间:2019-06-25

本文共 3221 字,大约阅读时间需要 10 分钟。

前面用Html、jconsole等方法连接上了MBeanServer,并能够通过这些界面来操纵MBean。但有时我们需要不借助这些客户端,而是在自己的程序来操纵这些MBean,这就要求我们知道如何在代码里连接MBean。
 
  基于上一篇为jconsole而修改的例子,给出一个示例的客户端程序,基本的操作都有了:
import java.util.Iterator; import java.util.Set;
import javax.management.Attribute; import javax.management.MBeanInfo; import javax.management.MBeanServerConnection; import javax.management.MBeanServerInvocationHandler; import javax.management.ObjectInstance; import javax.management.ObjectName; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL;
public class Client {
    public static void main(String[] args) throws Exception {
        JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");         JMXConnector jmxc = JMXConnectorFactory.connect(url, null);         MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();         ObjectName mbeanName = new ObjectName("chengang:name=HelloWorld");
        //把所有Domain都打印出来         System.out.println("Domains:---------------");         String domains[] = mbsc.getDomains();         for (int i = 0; i < domains.length; i++) {
            System.out.println("\tDomain[" + i + "] = " + domains[i]);         }
        //MBean的总数         System.out.println("MBean count = " + mbsc.getMBeanCount());
        //对name属性的操作(属性名的第一个字母要大写)         mbsc.setAttribute(mbeanName, new Attribute("Name", "Chen.Gang"));//设值         System.out.println("Name = " + mbsc.getAttribute(mbeanName, "Name"));//取值
        //得到proxy代理后直接调用的方式         HelloMBean proxy = (HelloMBean) MBeanServerInvocationHandler.newProxyInstance(mbsc, mbeanName, HelloMBean.class, false);         proxy.printHello();         proxy.printHello("陈刚");
        //远程调用的方式         mbsc.invoke(mbeanName, "printHello", null, null);         mbsc.invoke(mbeanName, "printHello", new Object[] { "子在川上曰" }, new String[] { String.class.getName() });
        //得mbean的信息         MBeanInfo info = mbsc.getMBeanInfo(mbeanName);         System.out.println("Hello Class: " + info.getClassName());         System.out.println("Hello Attriber:" + info.getAttributes()[0].getName());         System.out.println("Hello Operation:" + info.getOperations()[0].getName());
        //得到所有的MBean的ObjectName         System.out.println("all ObjectName:---------------");         Set set = mbsc.queryMBeans(null, null);         for (Iterator it = set.iterator(); it.hasNext();) {
            ObjectInstance oi = (ObjectInstance) it.next();             System.out.println("\t" + oi.getObjectName());         }
        //注销         //mbsc.unregisterMBean(mbeanName);         //关闭MBeanServer连接         jmxc.close();     } }
 
运行后的效果如下:
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, Chen.Gang
Hello , 陈刚
Hello World, Chen.Gang
Hello , 子在川上曰
 

作者简介

陈刚,广西桂林人,著作有《Eclipse从入门到精通》

您可以通过其博客了解更多信息和文章:

转载地址:http://wjnpo.baihongyu.com/

你可能感兴趣的文章
新手应该知道的流量概念
查看>>
16、约瑟夫问题
查看>>
R 安装car包失败
查看>>
软工网络15Alpha阶段敏捷冲刺博客汇总
查看>>
仿写百度首页
查看>>
今日词话:点绛唇·感兴
查看>>
iOS面试题(二)
查看>>
UVA116 Unidirectional TSP 单向TSP
查看>>
React 新手随笔
查看>>
阿里云手动安装特定版本的nginx
查看>>
吉祥三宝--java版
查看>>
[转载] 七龙珠第一部——第036话 恐怖的玛斯鲁塔
查看>>
将HG版本库推送到Git服务器
查看>>
使用 github 做代码管理,知道这些就够了
查看>>
一、机器学习简介
查看>>
Linux 内核进程管理之进程ID【转】
查看>>
SQL Server检测是不是数字类型的函数(非ISNUMERIC)
查看>>
软件工程课程总结
查看>>
地平线发布兼具本地端抓拍与识别功能的嵌入式AI摄像机
查看>>
hdu 6126 Give out candies
查看>>