`
fengzl
  • 浏览: 216311 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

JMX-RMI实现

    博客分类:
  • JMX
阅读更多
标准Mbean
package jmxtest;

import java.io.Serializable;  
import java.util.concurrent.atomic.AtomicInteger;
  
/** 
 * 
 * @author fengzl 
 */  
public interface HelloWorldMBean extends Serializable {  
  
    void setName(String name);  
  
    String getName();  
  
    void sayHello();  
  
    String getHelloString();  
  
    int getId();  
  
    String toString();  
  
    int hashCode();  
  
    boolean equals( Object obj);  
      
    HelloWorldMBean getThis();  
}  

class HelloWorld implements HelloWorldMBean, Serializable {  
	  
    static AtomicInteger count = new AtomicInteger();  
    private static final long serialVersionUID = 1627976932729278650L;  
    int id = count.incrementAndGet();  
    String name;  
  
    public synchronized void setName(String name) {  
        this.name = name;  
    }  
  
    public synchronized String getName() {  
        return name;  
    }  
  
    public synchronized void sayHello() {  
        System.out.println(getHelloString());  
    }  
  
    public synchronized String getHelloString() {  
        return "Hello, " + name;  
    }  
  
    public synchronized int getId() {  
        return id;  
    }  
  
    public HelloWorldMBean getThis() {  
        return this;  
    }  
}  



服务端注册
/*
 * Copyrights (C) 2008 Bearice (Bearice@Gmail.com)
 * Release under GNU/GPL Version 2.
 */
package jmxtest;

import java.rmi.registry.LocateRegistry;
import java.util.HashMap;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.remote.JMXAuthenticator;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;
import javax.security.auth.Subject;

public class Main {  
	  
	    /** 
	     * @param args the command line arguments 
	     */  
	    public static void main(String[] args) throws Exception {  
	        LocateRegistry.createRegistry(8877);  
	        MBeanServer server = MBeanServerFactory.createMBeanServer();  
	        ObjectName helloName = new ObjectName("hello:name=hello");  
	        HelloWorld hello = new HelloWorld();  
	        HashMap<String, Object> prop = new HashMap<String, Object>();  
	        prop.put(JMXConnectorServer.AUTHENTICATOR, new JMXAuthenticator() {  
	  
	            public Subject authenticate(Object credentials) {  
	                System.out.println(credentials);  
	                if (credentials instanceof String) {  
	                    if (credentials.equals("hello")) {  
	                        return new Subject();  
	                    }  
	                }  
	                throw new SecurityException("not authicated");  
	            }  
	        });  
	        JMXConnectorServer cserver =  
	                JMXConnectorServerFactory.newJMXConnectorServer(  
	                new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8877/hello"), prop, server);  
	        cserver.start();  
	        server.registerMBean(hello, helloName);  
	        for (ObjectInstance object : server.queryMBeans(null, null)) {  
	            System.out.println(object.getObjectName());  
	        }  
	        System.out.println(hello);  
	        System.out.println("start.....");  
	    }  
	}  




客户端验证
package jmxtest;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.HashMap;

import javax.management.JMX;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

public class Client {  
	  
	    static HelloWorldMBean hello;  
	  
	    public static void main(String[] args) throws Exception {  
	        final AtomicInteger count = new AtomicInteger();  
	        HashMap<String,Object> prop = new HashMap<String, Object>();  
	        prop.put(JMXConnector.CREDENTIALS, "hello");  
	        final JMXConnector conn = JMXConnectorFactory.connect(new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8877/hello"), prop);  
	        conn.connect();  
	        Runnable r = new Runnable() {  
	  
	            public void run() {  
	                for (int i = 0; i < 10; i++) {  
	                    try {  
	                        final HelloWorldMBean hello = JMX.newMBeanProxy(conn.getMBeanServerConnection(), new ObjectName("hello:name=hello"), HelloWorldMBean.class);  
	                        hello.setName("bearice");  
	                        hello.sayHello();  
	                        hello.getHelloString();  
	                        System.out.println(count.incrementAndGet());  
	                        Client.hello = hello;  
	                        System.out.println(hello.equals(hello.getThis()));  
	                    } catch (Exception ex) {  
	                        Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);  
	                    }  
	                }  
	            }  
	        };  
	        Thread[] ts = new Thread[5];  
	        for (int i = 0; i < ts.length; i++) {  
	            ts[i] = new Thread(r);  
	            ts[i].start();  
	        }  
	        for (Thread t : ts) {  
	            t.join();  
	        }  
	        System.out.println(hello.equals(hello.getThis()));  
	        System.out.println(hello.getId());  
	        System.out.println(hello);  
	    }  
	}  

分享到:
评论
3 楼 di1984HIT 2013-11-22  
写的很好,学习了。
2 楼 di1984HIT 2013-11-21  
鞋的很好啊
1 楼 scofielong 2010-03-24  
多谢楼主的分享,学习JMX的RMI方式可以入门,有个疑问,getName为什么不synchronized的呢?

相关推荐

    jmx-1_2_1-ri.zip jmx_remote-1_0_1_03-ri.zip jmx-1_1-mr-spec.zip

    RI是JMX规范的具体实现,允许开发者在Java应用程序中使用JMX功能,如创建MBeans(Managed Beans),管理对象和服务,以及实现远程监控。它包含API库、示例代码和必要的文档,帮助开发者理解和使用JMX 1.2.1的功能。 ...

    jmx-tools.zip

    3. `jmxri.jar`和`jmxtools.jar`:这两个JAR文件是JMX RMI实现的核心库,分别包含了RMI服务器和客户端的实现,使得远程JMX交互成为可能。 4. `jmxri.properties`和`jmxtools.properties`:这些配置文件可能包含了...

    JMX以RMI方式连接的场景示例

    在本场景中,我们将介绍如何使用RMI(Remote Method Invocation)连接方式来实现JMX框架的各层级的连接。 MBean是JMX框架的基本组件,用于提供管理信息和功能。MBean可以是任何Java对象,只要它实现了相关的接口。...

    jmx-1.2.1(jmxri+jmxtools) jar

    这个库提供了RMI(Remote Method Invocation)实现,使得JMX代理(MBeans)可以被远程调用和管理,增强了跨网络的可管理性。 2. **JMX Tools**: jmxtools.1.2.1.jar则包含了一系列用于开发和使用JMX的工具和实用...

    catalina-jmx-remote.rar

    在实际应用中,Catalina JMX远程访问不仅限于基础监控,还可以配合JMX通知机制,实现自动化的运维流程,例如当内存使用超过一定阈值时发送警告,或者在特定条件下自动调整线程池大小。 总之,理解和利用Catalina ...

    jmx-1_1-ri.zip

    JMX连接器定义了客户端和服务器之间的交互协议,如JMX Remote Protocol,它支持RMI和HTTP/HTTPS等传输方式。 压缩包中的"jmx_1.1_ri_bin"很可能包含了JMX API的实现库,这些库可以被Java应用程序引入以利用JMX的...

    jmxri-1.2.1.jar+jmxtools-1.2.1.jar

    3. JMX Connectors:JMX连接器允许客户端与MBean服务器通信,支持RMI、HTTP、HTTPS等多种协议。 4. Notifications:MBeans可以通过发送通知来通告系统状态的变化,客户端可以订阅这些通知。 5. Attributes, ...

    jmx-jvm配置

    4. **连接器配置**: 可以选择RMI、JNDI或者其他类型的JMX连接器。例如,使用RMI连接器需要设置`-Dcom.sun.management.jmxremote.rmi.port`。 5. **密码和访问文件**: 为了安全,JMX连接通常需要用户名和密码。这些...

    使用RMI远程连接JVM.用JMX获取JVM的参数

    总的来说,通过RMI和JMX,我们可以实现对远程JVM的精细管理,从而提高系统的可维护性和稳定性。结合SNMP,还能进一步扩展管理范围,实现更全面的监控。以上就是关于RMI远程连接JVM和使用JMX获取JVM参数的基本知识,...

    jmx 实例 rmi mbean

    在本实例中,我们重点关注的是如何使用Remote Method Invocation(RMI)来实现JMX的MBean管理。RMI是一种在Java平台上进行远程调用的技术,使得一个Java对象的方法可以在不同的Java虚拟机(JVM)之间被调用。结合JMX...

    jmx所需的jar

    这个版本可能包含了RMI(Remote Method Invocation)的实现,这是Java中常用的远程调用协议,用于实现JMX的远程管理。 在使用这些jar文件时,你需要将它们添加到你的Java项目的类路径中。JMX的配置通常涉及到以下...

    jmx-whitepaper

    JMX可以通过定义特定的MBean(Managed Bean)来实现对硬件设备温度的实时监测。例如,可以创建一个名为`DeviceTemperatureMonitor`的MBean,它包含用于读取温度的属性和方法。通过这种方式,管理员可以在不直接访问...

    JMX-how-to-use.rar_jmx_服务器_远程监控 文件

    要实现远程监控,需要配置JMX RMI服务,让JMX服务器暴露一个RMI注册表,允许远程客户端连接。这通常涉及到在Java虚拟机(JVM)启动时添加特定的系统属性,如`com.sun.management.jmxremote`、`...

    cmdline-jmxclient-0.10.3.jar

    在Zabbix中集成`cmdline-jmxclient`,可以实现对Java应用的指标收集,如CPU使用率、内存占用、线程状态等,并将这些数据展示在Zabbix监控界面,以便实时监控系统性能和健康状况。这对于运维人员来说非常有用,因为...

    jmxtools-1.2.1.jar和jmxri-1.2.1.jar

    - RMI JMX连接器服务器:实现JMX代理通过RMI协议接收远程客户端连接。 - RMI JMX连接器客户端:支持JMX客户端通过RMI连接到远程服务器。 - RMI注册表:管理JMX连接器的地址和端口,便于客户端查找和连接。 - ...

    guava-gwt-12.0-rc2.zip

    【描述】"jmx-rmi-agent.zip, ${project.version}发布" 暗示了这个压缩包可能包含了一个JMX(Java Management Extensions)RMI(Remote Method Invocation)代理。JMX是一种在Java应用程序中管理资源的标准,而RMI是...

    jmxri-1.2.1.jar

    它提供了通过RMI(Remote Method Invocation)进行JMX代理的通信机制,使得管理者可以从远程位置监控和管理Java应用程序。 JMX包含以下几个核心概念: - **管理 Beans (MBeans)**:是可管理的Java对象,代表了可被...

    jmx三种访问方式

    1. **远程JMX连接**:Java默认使用Remote Method Invocation (RMI) 协议来实现远程JMX连接。通过设置`-Dcom.sun.management.jmxremote.rmi.port`和`-Dcom.sun.management.jmxremote.port`等参数,可以启用RMI服务,...

    rmi-jndi-ldap-jrmp-jmx-jms:rmi,jndi,ldap,jrmp,jmx,jms一些演示测试

    在“rmi-jndi-ldap-jrmp-jmx-jms”这个项目中,可能包含了对这些技术的实际应用和测试代码。开发者可能创建了各种示例,如RMI服务端和客户端的交互,JNDI查找和绑定对象到LDAP目录,JRMP的远程调用,JMX监控应用程序...

    cmdline-jmxclient-0.10.3

    标签“jmxclient”表明这个工具是JMX的客户端实现,它使得没有图形用户界面(GUI)环境的系统也能访问JMX服务。在某些情况下,例如服务器集群或者自动化脚本中,命令行工具是非常实用的。 在提供的压缩包子文件的...

Global site tag (gtag.js) - Google Analytics