`
ywChen
  • 浏览: 121643 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JMX(七)编写程序来连接MBean

    博客分类:
  • J2EE
 
阅读更多

 

前面用Html、jconsole等方法连接上了MBeanServer,并能够通过这些界面来操纵MBean。但有时我们需要不借助这些客户端,而是在自己的程序来操纵这些MBean,这就要求我们知道如何在代码里连接MBean。 

 

 

1.HelloMBean

 

package jmx.mbean;

/* HelloMBean.java - MBean interface describing the management  
 operations and attributes for the Hello World MBean.  In this case  
 there are two operations, "sayHello" and "add", and two attributes,  
 "Name" and "CacheSize". */
/**
 * HelloMBean定义方法及属性由Hello实现
 */
public interface HelloMBean {
	public String getName();

	public void setName(String name);

	public void printHello();

	public void printHello(String whoName);
}

 

 2.Hello

 

package jmx.mbean;

public class Hello implements HelloMBean{
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void printHello() {
        System.out.println("Hello World, " + name);
    }
    public void printHello(String whoName) {
        System.out.println("Hello , " + whoName);
    }
} 

 

 3.HelloAgent

 

package jmx.mbean;

import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;

import com.sun.jdmk.comm.HtmlAdaptorServer;

public class HelloAgent {
	public static void main(String[] args) throws Exception {
		MBeanServer server = MBeanServerFactory.createMBeanServer();
        ObjectName helloName = new ObjectName("jmx:name=HelloWorld");
        Hello hello = new Hello();
        server.registerMBean(hello, helloName);
        ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter,port=8082");
        HtmlAdaptorServer adapter = new HtmlAdaptorServer();
        server.registerMBean(adapter, adapterName);
        adapter.start();
        System.out.println("start.....");         
        //创建rmi连接并开启
        JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");
        JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, server);
        cs.start();
        System.out.println("rmi start.....");
    }

}

 

 4.Client

 

package jmx.mbean;

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("jmx: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", "yuwen"));// 设值
		System.out.println("Name = " + mbsc.getAttribute(mbeanName, "Name"));// 取值
		// 得到proxy代理后直接调用的方式
		HelloMBean proxy = (HelloMBean) MBeanServerInvocationHandler
				.newProxyInstance(mbsc, mbeanName, HelloMBean.class, false);
		proxy.printHello();
		proxy.printHello("yuwen");
		// 远程调用的方式
		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();
	}
}

 

 5.运行

(1)在Dos运行一个命令:rmiregistry 9999

(2)运行HelloAgent

(3)运行Client

  运行结果有两个

 HelloAgent控制台

 

Hello World, yuwen

Hello , yuwen

Hello World, yuwen

Hello , 你好

------------------------------------

Client控制台

 

Domains:---------------

Domain[0] = JMImplementation

Domain[1] = jmx

Domain[2] = HelloAgent

MBean count = 3

Name = yuwen

Hello Class: jmx.mbean.Hello

Hello Attriber:Name

Hello Operation:printHello

all ObjectName:---------------

JMImplementation:type=MBeanServerDelegate

HelloAgent:name=htmladapter,port=8082

jmx:name=HelloWorld


 

 

本人开了个充值淘宝网店。有需要的朋友请访问的店铺并拍下所充值的话费,

本店已加入消费保障服务计划,货源来源于淘宝充值平台,安全可靠便捷,

支付过后立即到账

http://xiaowen168.taobao.com

 

 

 

分享到:
评论

相关推荐

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

    5. **使用JConsole或VisualVM**:这两个内置的JMX客户端工具的使用方法,包括连接到远程MBean Server、查看和修改MBean属性、接收和处理通知。 6. **编写自定义管理工具**:介绍如何使用JMX API创建自己的管理工具...

    jmx一步步来 jmx快速上手指南

    通过上述示例可以看出,JMX通过定义MBean接口和其实现类的方式,使得我们能够通过标准的方法来管理和监控应用程序。这种方式不仅提高了应用程序的可管理性,同时也降低了管理操作的复杂度。 #### 六、总结 JMX作为...

    jmx三种访问方式

    2. **自定义JMX客户端**:开发者可以编写自己的JMX客户端,利用JMX的RMI支持建立连接。客户端需要实现JMX的连接逻辑,包括认证、查找MBeans并执行操作。 3. **安全性**:RMI连接通常需要安全控制,例如SSL加密和...

    JMX HelloWorld Download

    4. **JMX连接器**:JMX连接器允许远程客户端连接到MBean Server,进行管理和监控操作。常见的有RMI、HTTP/HTTPS、JMXMP等。 5. **JMX的应用**:JMX可用于监控内存使用、线程状态、系统属性、甚至是自定义的业务指标...

    jmx所需的jar

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

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

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

    JMX开发入门

    Java Management Extensions(JMX)是一种Java平台上的框架,用于管理和监控应用程序、系统和服务。它提供了一种标准的方式来创建可管理的组件,称为MBeans(Managed Beans),这些组件可以暴露其状态和行为,允许...

    JMX小例子以及介绍

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

    JMX IN ACTION(七)

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

    cmdline-jmxclient-0.10.3.jar

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

    JMX IN ACTION(四)

    这一章将介绍如何使用标准MBean来配置应用程序资源(如日志工具和应用属性),以及如何将应用程序分解为组件。如果你需要快速实现一个资源,标准MBean是最佳选择。标准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入门

    3. **JMX连接器**: JMX连接器允许外部工具或应用与MBean服务器通信。它们定义了多种协议,如RMI、HTTP、JMXMP等,用于连接到MBean服务器并执行操作。 4. **管理工具**: 利用JMX,可以创建各种管理工具,如GUI、...

    jmx osgi 实例

    在IT领域,JMX(Java Management Extensions)和OSGi(Open Service Gateway Initiative)是两种重要的技术,它们分别用于管理和模块化Java应用程序。本实例将两者结合,展示了如何将OSGi的bundle注册到JMX以便进行...

    java of core jmx

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

    一个jmx的小例子

    在这个"一个jmx的小例子"中,我们很可能是通过编写Java代码来创建和操作MBeans,然后使用Eclipse这样的集成开发环境(IDE)来运行示例。Eclipse本身并不直接支持JMX,但可以通过安装插件如JConsole或VisualVM来辅助...

    JMX 远程服务器信息监控

    在实际应用中,可以通过编写Java代码来建立JMX客户端,连接到远程服务器的MBeanServer,然后通过MBean接口获取并处理监控数据。也可以使用工具,如JConsole、VisualVM等,它们提供了图形化的界面来直接查看和操作...

    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 Agent 以连接到远程 MBean 服务器。 - 包括配置文件的编写以及连接参数的设置等。 - **远程管理示例**: - 通过具体的示例演示了如何通过 JMX Agent 远程管理 MBean 服务器。 - 包括...

Global site tag (gtag.js) - Google Analytics