`
liyiye
  • 浏览: 421527 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

8、编写程序来连接MBean

    博客分类:
  • jmx
阅读更多

前面用Htmljconsole等方法连接上了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());

        //得到所有的MBeanObjectName
        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 ,
子在川上曰

 

分享到:
评论

相关推荐

    JMX实用例子详解(包括各种Mbean)

    8. **连接器API(JMX Connectors)**:RMI和JMX Remoting接口的使用,以及如何配置JMX连接器服务器。 在"jmx_examples"压缩包中,可能包含了以上各个方面的代码示例,通过这些示例,读者可以更直观地理解和应用JMX...

    C3P0连接池jar包.rar

    6. **连接池的监控**:C3P0提供了MBean(Managed Beans)接口,可以通过JMX(Java Management Extensions)对连接池进行实时监控,查看连接池状态、性能统计等信息。 对比DBCP(BasicDataSource),虽然DBCP也是...

    JMX IN ACTION(四)

    这一章将介绍如何使用标准MBean来配置应用程序资源(如日志工具和应用属性),以及如何将应用程序分解为组件。如果你需要快速实现一个资源,标准MBean是最佳选择。标准MBean通过明确声明的管理接口暴露资源,该接口...

    JMX IN ACTION(七)

    【JMX IN ACTION(七)】章节探讨了JMX中的Model MBean,这是一种特殊类型的MBean,开发者无需编写MBean类。Model MBean是JMX规范定义的一部分,保证在所有符合JMX标准的代理中可用,它是一个通用的MBean,可以被实例...

    jmxri.jar和jmxtools.jar 1.2.1

    JMX RI(Remote Interface)允许远程管理程序连接到JMX代理,从而可以跨网络监控和管理Java应用。这通常涉及到RMI(Remote Method Invocation)和JMX的MBean Server的交互。 2. **jmxtools.jar**:这个库则包含了...

    《jmx技术介绍》配套源代码

    通过JMX连接器,外部客户端可以连接到MBean Server,获取MBean的信息或执行操作。 4. MBean Server: MBean Server是JMX的核心,它负责存储和管理MBeans。开发者可以自定义MBean Server,但通常使用Java提供的内置...

    jmx入门

    例如,可以通过修改`jmxremote.access`文件来控制谁可以连接到MBean服务器。 总之,JMX为Java应用程序提供了强大的管理和监控能力。通过理解并应用JMX的核心概念,开发者可以更好地管理和优化他们的系统,提高软件...

    JMX HelloWorld Download

    8. **使用与实践**:学习这个示例可以帮助开发者了解如何在实际项目中利用JMX来增强应用程序的管理和监控能力。 总之,"JMX HelloWorld Download"是一个学习JMX基础的实用资源,通过解压并研究其中的源代码,可以...

    jmxtools-1.2.1.jar和jmxri-1.2.1.jar

    例如,开发者可以使用JConsole来实时查看和调整应用程序的配置,监控内存使用情况,跟踪线程状态,或者通过编写自定义的JMX客户端来执行特定的管理任务。 总结来说,`jmxtools-1.2.1.jar` 和 `jmxri-1.2.1.jar` ...

    JMX IN ACTION(八)

    协议适配器和连接器在JMX中扮演着桥梁的角色,它们负责将管理应用程序的请求转化为对MBean服务器的操作,以及将服务器的响应传递回应用程序。例如,你可以使用RMI(Remote Method Invocation)连接器使远程管理工具...

    java of core jmx

    5. **JMX客户端**:JMX客户端可以是GUI工具、命令行工具或者自定义的应用程序,它们通过连接器与MBean Server交互,读取或修改MBean的状态,执行操作。 6. **使用JMX的场景**:JMX常用于服务器性能监控、应用健康...

    JMX小例子以及介绍

    Java Management Extensions(JMX)是Java平台上的一个标准...通过理解MBean、MBean Server和连接器的工作原理,以及如何编写和使用JMX代码,我们可以更好地控制和优化我们的应用程序,提升系统的可维护性和稳定性。

    JMXTesting(2)

    我们可能还会学习如何编写客户端代码来连接远程MBean服务器并进行交互。 通过这个深入的实例,你将对JMX有更全面的理解,包括其基本概念、MBean的创建和注册、属性和操作的管理、通知的使用、安全管理以及远程监控...

    jmx osgi 实例

    1. 创建MBean:编写一个实现了特定接口的Java类,这个接口定义了管理操作。 2. 创建MBeanInfo:描述MBean的属性、操作和构造函数。 3. 实例化MBean:创建MBean的实例。 4. 注册MBean:将MBean实例和其对应的Object...

    jmx in action

    - 包括配置文件的编写以及连接参数的设置等。 - **远程管理示例**: - 通过具体的示例演示了如何通过 JMX Agent 远程管理 MBean 服务器。 - 包括如何查询 MBean 属性、调用操作方法等。 #### 十、高级 MBean ...

    jmx所需的jar

    它扩展了基本的JMX功能,使得管理者可以通过网络来连接到MBean服务器,执行操作、获取属性值或接收通知。这个版本可能包含了RMI(Remote Method Invocation)的实现,这是Java中常用的远程调用协议,用于实现JMX的...

    JMX IN ACTION(二)

    MBean的定义通常基于JavaBeans规范,通过定义getters和setters来暴露属性,以及定义方法来执行操作。 **2.4 使用MBean服务器** MBean服务器是JMX架构的核心,它管理MBean的生命周期,包括注册、查询、查找和卸载...

    JMX开发入门

    4. **模型MBean**:通过实现ModelMBeanInfoSupport类,将任何Java对象转化为MBean,无需编写额外接口。 **MBeanServer** 是MBean的容器,负责管理MBean实例,处理MBean的注册、查找、删除等操作,并作为客户端访问...

    cmdline-jmxclient-0.10.3.jar

    `cmdline-jmxclient` 提供了一个命令行界面,使得用户无需编写代码就能与JMX服务器交互,执行查询、获取或修改MBean的属性、调用MBean的操作等。 在Zabbix中集成`cmdline-jmxclient`,可以实现对Java应用的指标收集...

Global site tag (gtag.js) - Google Analytics