`
canofy
  • 浏览: 821024 次
  • 性别: Icon_minigender_1
  • 来自: 北京、四川
社区版块
存档分类
最新评论

JMX服务端和客户端的代码

    博客分类:
  • j2EE
阅读更多
服务端代码如下
package com.rmi;

import java.rmi.registry.LocateRegistry;
import java.util.HashMap;
import java.util.Map;

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;

public class Server {

	/**
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		LocateRegistry.createRegistry(1234);//必须要这句,参数为端口号
		ObjectName helloName = new ObjectName("QianYu:type=oamp,name=hello");
        HelloWorld hello = new HelloWorld();
        MBeanServer server = MBeanServerFactory.createMBeanServer();
		// provide a valid username and password (e.g., via program arguments)
	    String user = "monitorRole";
	    String pw = "password";

	    // place the username and password in a string array of credentials that
	    // can be used when making the connection to the remote JMX agent
	    String[] credentials = new String[] { user, pw };
	    // the string array of credentials is placed in a map keyed against the
	    // well-defined credentials identifier string
	    Map<String, String[]> props = new HashMap<String, String[]>();
	    props.put("jmx.remote.credentials", credentials);
	    // supply the map of credentials to the connect call
	    JMXServiceURL address =
	      new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1234/jmxrmi");

	    JMXConnectorServer cserver =
            JMXConnectorServerFactory.newJMXConnectorServer(address, props, server);
	    cserver.start();
	    server.registerMBean(hello, helloName);

	}

}



以下是客户端代码:
package com.rmi;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

import javax.management.JMX;
import javax.management.MBeanServerConnection;
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 {

	/**
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		// provide a valid username and password (e.g., via program arguments)
	    String user = "monitorRole";
	    String pw = "password";

	    // place the username and password in a string array of credentials that
	    // can be used when making the connection to the remote JMX agent
	    String[] credentials = new String[] { user, pw };
	    // the string array of credentials is placed in a map keyed against the
	    // well-defined credentials identifier string
	    Map<String, String[]> props = new HashMap<String, String[]>();
	    props.put("jmx.remote.credentials", credentials);
	    // supply the map of credentials to the connect call
	    JMXServiceURL address =
	      new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1234/jmxrmi");
	    JMXConnector connector = JMXConnectorFactory.connect(address, props);
	    // it is a trivial matter to get a reference for the MBean server
	    // connection to the remote agent
	    MBeanServerConnection mbsc = connector.getMBeanServerConnection();

	    connector.connect();

	    ObjectName objectName=new ObjectName("hello:name=hello");
	    if(!mbsc.isRegistered(objectName)){
			mbsc.createMBean("com.rmi.HelloWorld", objectName,null,null);
		}

	    System.out.println("\nMBean count = " + mbsc.getMBeanCount());
	    for (ObjectInstance object : mbsc.queryMBeans(null, null)) {//服务器上的所有MBean
            System.out.println("object.getObjectName="+object.getObjectName());
        }

	    //hello对象属于远程的对象,调用sayHello方法,则是调用服务器端的sayHello方法
	    final HelloWorldMBean hello = JMX.newMBeanProxy(mbsc, objectName,
	    			HelloWorldMBean.class);
//	    hello.setName("Peter");
	    hello.sayHello();

//	    ObjectName unObjectName=new ObjectName("hello:name=hello");
//	    Hashtable map=new Hashtable();
//	    map.put("name", "hello");

	    //unregister MBean
//	    ObjectName unObjectName=new ObjectName("hello",map);
//	    ObjectName unObjectName=ObjectName.getInstance("hello:name=hell*");
//	    for (ObjectInstance object : mbsc.queryMBeans(unObjectName, null)) {//这里可根据查询结果进行注销MBean
//	    	 mbsc.unregisterMBean(object.getObjectName());
//        }
	    System.out.println("\nMBean count = " + mbsc.getMBeanCount());
	    System.out.println("end");
	}

}


以下是HelloWorldMBean
package com.rmi;

import java.io.Serializable;

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();
}



以下是HelloWorld.java类:
package com.rmi;

import java.io.Serializable;
import java.util.concurrent.atomic.AtomicInteger;

import javax.management.AttributeChangeNotification;
import javax.management.MBeanRegistration;
import javax.management.MBeanServer;
import javax.management.NotificationBroadcasterSupport;
import javax.management.ObjectName;

public class HelloWorld implements HelloWorldMBean, Serializable{

	static AtomicInteger count = new AtomicInteger();
    private static final long serialVersionUID = 1627976932729278650L;
    int id = 0;
    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() {
//    	System.out.println("1111");
        return "Hello, " + name;
    }

    public synchronized int getId() {
        return id;
    }

    public HelloWorldMBean getThis() {
        return this;
    }

}


分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java开源包8

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包10

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    repo:小虫代码资源开放库

    |-&gt;|-&gt;(抽离tomcat源码之生命周期) |-&gt;|-&gt;(二进制文件加密) |-&gt; (jmx使用演示) |-&gt; (mongodb使用演示) |-&gt; (GUI聊天器-客户端+服务端原始码) |-&gt; (自己实现动态代理) |-&gt; (json与地图,列表,对象之间...

    java开源包1

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包11

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包2

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包3

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包6

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包5

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包4

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包7

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包9

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包101

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    Java资源包01

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    Spring中文帮助文档

    3.9. 粘合代码和可怕的singleton 3.10. 以J2EE RAR文件的形式部署Spring ApplicationContext 3.11. 基于注解(Annotation-based)的配置 3.11.1. @Autowired 3.11.2. 基于注解的自动连接微调 3.11.3. ...

    Spring API

    3.9. 粘合代码和可怕的singleton 3.10. 以J2EE RAR文件的形式部署Spring ApplicationContext 3.11. 基于注解(Annotation-based)的配置 3.11.1. @Autowired 3.11.2. 基于注解的自动连接微调 3.11.3. ...

Global site tag (gtag.js) - Google Analytics