`
canofy
  • 浏览: 831089 次
  • 性别: 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 实现基于 Netty 的即时通讯系统,包括服务端和客户端.zip

    本项目包括服务端和客户端两部分,为理解 Netty 在即时通讯中的应用提供了实践基础。 1. **Netty 框架介绍** - Netty 是一个非阻塞的 I/O 框架,它基于 Java NIO(非阻塞 I/O)实现,提供了高性能、低延迟的网络...

    jmxdemo.rar

    jmxdemo.rar是一个包含JMX服务端和客户端的示例,帮助我们理解如何利用JMX进行远程监控Java项目,而VisualVM是一个强大的Java诊断工具,它可以利用JMX进行远程连接和监控。 首先,我们需要了解JMX的基本概念。JMX的...

    JMX 连接工具 Eclipse 插件

    首先,JMX客户端连接信息是理解如何与JMX服务端建立通信的关键。JMX客户端通常需要知道服务端的主机名、端口号以及可能的安全凭证(如用户名和密码)。在Java中,这可以通过`javax.management.remote....

    JMI示例代码,其中包括客户端与服务端。

    4. **网络通信**:`JmiServer` 可能会包含网络通信相关的代码,用于接收和响应来自客户端的请求。 **JmiClient** `JmiClient` 文件则代表客户端部分,它的任务是连接到服务端并执行管理操作。客户端可能包括以下...

    腾讯tars 服务端的本地调试

    根据上下文,这里应该包括编译服务端代码和客户端代码。 3. 启动调试:通过执行“mvntars:build”目标,并传递特定的参数来启动本地服务。具体参数包括应用名称(Dapp)、服务端名称(Dserver)、JVM参数等。这里...

    webservice

    【描述】:本项目展示了如何使用Maven构建工具、Spring框架以及Apache CXF库来开发Web服务的两端——服务端(Service)和客户端(Client)。这是一个基础但全面的示例,适合开发者在理解或开发自己的Web服务时参考,...

    java_remote_control_help.rar_java 监控_java 远程控制_remote_计算机监控_远程控制

    服务端需要开启一个RMI注册表或JMX服务器,以便客户端能够发现和连接。为了安全,通常还需要设置认证和授权机制,限制对远程资源的访问。 **文件“java远程监控源码”** 这个压缩包可能包含了一个简单的Java远程...

    guava-gwt-12.0-rc2.zip

    2. **Google Web Toolkit (GWT)**:GWT允许开发者使用Java编写客户端代码,然后通过编译器将其转换为优化过的JavaScript,以便在各种浏览器上运行。它包括了丰富的UI组件、代码分割、异步通信(GWT RPC)等功能,...

    metrics-jmx:一个示例项目,显示Dropwizard指标的用法并通过JMX公开它们

    `metrics-jmx`项目的源代码提供了实际示例,展示了如何在服务端创建和更新指标,以及如何通过JMX客户端工具(如JConsole或VisualVM)查看和操作这些指标。这对于开发者调试、优化和监控生产环境的应用非常有价值。 ...

    shell-plus工具

    Shell Plus 工具利用RMI的特性,使得所有数据操作都在服务端完成,客户端仅通过注册中心调用服务端的代码来执行操作,获取结果。用户可以从其开源地址(https://github.com/0nise/shell-plus)获取源码,自行编译或...

    Java高级视频教程配套的PPT和演示代码

    理解TCP/IP协议,学会编写网络客户端和服务端,是构建分布式系统的基础。 八、设计模式 设计模式是软件工程中解决常见问题的最佳实践,如工厂模式、单例模式、装饰器模式、观察者模式等。学习并应用这些模式可以...

    jmxtools.jar

    2. JMXConnectorServer:提供了启动和配置JMX连接器的服务端接口,支持多种协议,如RMI和JMXMP。 3. JMXConnectorClient:客户端工具,用于连接到远程MBeanServer,实现对远程资源的管理。 五、使用jmxtools.jar...

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

    开发者可能创建了各种示例,如RMI服务端和客户端的交互,JNDI查找和绑定对象到LDAP目录,JRMP的远程调用,JMX监控应用程序状态,以及JMS消息的发送和接收。通过这些测试,可以更好地理解和掌握这些技术的使用方式,...

    jax-ws所需相关jar包

    接着,使用JAX-WS工具(如wsimport)生成服务端和客户端的代码。服务端会部署在应用服务器上,而客户端可以通过生成的代理类调用Web服务。JAXB则在服务的输入输出中处理XML数据的转换。 6. **优势**:JAX-WS和JAXB...

    一个15万的CS架构的连锁店项目

    文件"POS_SQL"可能包含了数据库的设计和初始化脚本,"POS-Home"可能是指项目主入口或者用户界面相关的代码,而"POS-Branch"和"POS-Server"则分别对应分店客户端和服务端的源代码。通过这些文件,开发者可以逐步构建...

    远程桌面 Java Remote Desktop.tar

    1. **源代码**:Java编写的远程桌面客户端和服务端程序,可能包括RMI或JMX相关接口实现。 2. **文档**:可能有详细的设计文档,说明如何配置和使用这套远程桌面系统。 3. **示例**:可能包含一些示例代码,展示如何...

    nagios_check_jmx:用于检查 JMX 值的 Nagios 插件,用于 Hybris 的额外 bean

    1. **Nagios插件原理**:`nagios_check_jmx` 使用JMX的客户端库连接到运行中的Java进程,通过指定的MBean查询服务端的特定属性。插件执行后,会返回查询结果,并根据预设的阈值判断是否触发警报。 2. **配置与安装*...

    hadoop 1.2.1核心源码

    5. **ipc**: Hadoop的远程过程调用(IPC)层在此,它支持服务端和客户端之间的高效通信。例如,NameNode与DataNode之间的通信就是基于IPC实现的。 6. **net**: 网络相关的组件,如Socket通信、网络地址解析等,都在...

    mina2.0下一个例子

    在MINA应用中,开发者会创建服务端和客户端的处理器类,这些类会继承自MINA提供的基础类,如`IoHandler`,并实现相应的事件处理方法,如`sessionCreated()`、`messageReceived()`等,以响应网络连接的建立和数据的...

Global site tag (gtag.js) - Google Analytics