JMX服务端和客户端的代码

JMX:Java程序监控的基石 JMX:Java程序监控的基石 一、什么是JMX? 二、JMX架构 三、JMX应用场景 四、自定义MBean 1.MBean接口方式 2.MXBean接口方式 3.Spring Bean方式 阅读详情
 

JMX服务端和客户端的代码

服务端代码如下
Java代码 复制代码  收藏代码
  1. package com.rmi;   
  2.   
  3. import java.rmi.registry.LocateRegistry;   
  4. import java.util.HashMap;   
  5. import java.util.Map;   
  6.   
  7. import javax.management.MBeanServer;   
  8. import javax.management.MBeanServerFactory;   
  9. import javax.management.ObjectName;   
  10. import javax.management.remote.JMXConnectorServer;   
  11. import javax.management.remote.JMXConnectorServerFactory;   
  12. import javax.management.remote.JMXServiceURL;   
  13.   
  14. public class Server {   
  15.   
  16.     /**  
  17.      * @param args  
  18.      * @throws Exception  
  19.      */  
  20.     public static void main(String[] args) throws Exception {   
  21.         LocateRegistry.createRegistry(1234);//必须要这句,参数为端口号   
  22.         ObjectName helloName = new ObjectName("QianYu:type=oamp,name=hello");   
  23.         HelloWorld hello = new HelloWorld();   
  24.         MBeanServer server = MBeanServerFactory.createMBeanServer();   
  25.         // provide a valid username and password (e.g., via program arguments)   
  26.         String user = "monitorRole";   
  27.         String pw = "password";   
  28.   
  29.         // place the username and password in a string array of credentials that   
  30.         // can be used when making the connection to the remote JMX agent   
  31.         String[] credentials = new String[] { user, pw };   
  32.         // the string array of credentials is placed in a map keyed against the   
  33.         // well-defined credentials identifier string   
  34.         Map<String, String[]> props = new HashMap<String, String[]>();   
  35.         props.put("jmx.remote.credentials", credentials);   
  36.         // supply the map of credentials to the connect call   
  37.         JMXServiceURL address =   
  38.           new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1234/jmxrmi");   
  39.   
  40.         JMXConnectorServer cserver =   
  41.             JMXConnectorServerFactory.newJMXConnectorServer(address, props, server);   
  42.         cserver.start();   
  43.         server.registerMBean(hello, helloName);   
  44.   
  45.     }   
  46.   
  47. }  
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);

	}

}



以下是客户端代码:
Java代码 复制代码  收藏代码
  1. package com.rmi;   
  2.   
  3. import java.util.HashMap;   
  4. import java.util.Hashtable;   
  5. import java.util.Map;   
  6.   
  7. import javax.management.JMX;   
  8. import javax.management.MBeanServerConnection;   
  9. import javax.management.ObjectInstance;   
  10. import javax.management.ObjectName;   
  11. import javax.management.remote.JMXConnector;   
  12. import javax.management.remote.JMXConnectorFactory;   
  13. import javax.management.remote.JMXServiceURL;   
  14.   
  15. public class Client {   
  16.   
  17.     /**  
  18.      * @param args  
  19.      * @throws Exception  
  20.      */  
  21.     public static void main(String[] args) throws Exception {   
  22.         // provide a valid username and password (e.g., via program arguments)   
  23.         String user = "monitorRole";   
  24.         String pw = "password";   
  25.   
  26.         // place the username and password in a string array of credentials that   
  27.         // can be used when making the connection to the remote JMX agent   
  28.         String[] credentials = new String[] { user, pw };   
  29.         // the string array of credentials is placed in a map keyed against the   
  30.         // well-defined credentials identifier string   
  31.         Map<String, String[]> props = new HashMap<String, String[]>();   
  32.         props.put("jmx.remote.credentials", credentials);   
  33.         // supply the map of credentials to the connect call   
  34.         JMXServiceURL address =   
  35.           new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1234/jmxrmi");   
  36.         JMXConnector connector = JMXConnectorFactory.connect(address, props);   
  37.         // it is a trivial matter to get a reference for the MBean server   
  38.         // connection to the remote agent   
  39.         MBeanServerConnection mbsc = connector.getMBeanServerConnection();   
  40.   
  41.         connector.connect();   
  42.   
  43.         ObjectName objectName=new ObjectName("hello:name=hello");   
  44.         if(!mbsc.isRegistered(objectName)){   
  45.             mbsc.createMBean("com.rmi.HelloWorld", objectName,null,null);   
  46.         }   
  47.   
  48.         System.out.println("\nMBean count = " + mbsc.getMBeanCount());   
  49.         for (ObjectInstance object : mbsc.queryMBeans(nullnull)) {//服务器上的所有MBean   
  50.             System.out.println("object.getObjectName="+object.getObjectName());   
  51.         }   
  52.   
  53.         //hello对象属于远程的对象,调用sayHello方法,则是调用服务器端的sayHello方法   
  54.         final HelloWorldMBean hello = JMX.newMBeanProxy(mbsc, objectName,   
  55.                     HelloWorldMBean.class);   
  56. //      hello.setName("Peter");   
  57.         hello.sayHello();   
  58.   
  59. //      ObjectName unObjectName=new ObjectName("hello:name=hello");   
  60. //      Hashtable map=new Hashtable();   
  61. //      map.put("name", "hello");   
  62.   
  63.         //unregister MBean   
  64. //      ObjectName unObjectName=new ObjectName("hello",map);   
  65. //      ObjectName unObjectName=ObjectName.getInstance("hello:name=hell*");   
  66. //      for (ObjectInstance object : mbsc.queryMBeans(unObjectName, null)) {//这里可根据查询结果进行注销MBean   
  67. //           mbsc.unregisterMBean(object.getObjectName());   
  68. //        }   
  69.         System.out.println("\nMBean count = " + mbsc.getMBeanCount());   
  70.         System.out.println("end");   
  71.     }   
  72.   
  73. }  
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
Java代码 复制代码  收藏代码
  1. package com.rmi;   
  2.   
  3. import java.io.Serializable;   
  4.   
  5. public interface HelloWorldMBean extends Serializable{   
  6.     void setName(String name);   
  7.   
  8.     String getName();   
  9.   
  10.     void sayHello();   
  11.   
  12.     String getHelloString();   
  13.   
  14.     int getId();   
  15.   
  16.     String toString();   
  17.   
  18.     int hashCode();   
  19.   
  20.     boolean equals( Object obj);   
  21.   
  22.     HelloWorldMBean getThis();   
  23. }  
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类:
Java代码 复制代码  收藏代码
  1. package com.rmi;   
  2.   
  3. import java.io.Serializable;   
  4. import java.util.concurrent.atomic.AtomicInteger;   
  5.   
  6. import javax.management.AttributeChangeNotification;   
  7. import javax.management.MBeanRegistration;   
  8. import javax.management.MBeanServer;   
  9. import javax.management.NotificationBroadcasterSupport;   
  10. import javax.management.ObjectName;   
  11.   
  12. public class HelloWorld implements HelloWorldMBean, Serializable{   
  13.   
  14.     static AtomicInteger count = new AtomicInteger();   
  15.     private static final long serialVersionUID = 1627976932729278650L;   
  16.     int id = 0;   
  17.     String name;   
  18.   
  19.     public synchronized void setName(String name) {   
  20.         this.name = name;   
  21.     }   
  22.   
  23.     public synchronized String getName() {   
  24.         return name;   
  25.     }   
  26.   
  27.     public synchronized void sayHello() {   
  28.         System.out.println(getHelloString());   
  29.     }   
  30.   
  31.     public synchronized String getHelloString() {   
  32. //      System.out.println("1111");   
  33.         return "Hello, " + name;   
  34.     }   
  35.   
  36.     public synchronized int getId() {   
  37.         return id;   
  38.     }   
  39.   
  40.     public HelloWorldMBean getThis() {   
  41.         return this;   
  42.     }   
  43.   
  44. }  
JMX实现远程服务器Tomcat系统监控之三 JMX对Tomcat远程服务器监控,配置用户名密码,实现如下 1、编辑Tomcat/bin中的catalina.bat。如果配置权限,需要将autenticate设置为true,将1中的下面两行代码添加到最上面一行,注意:这些所有的命令必须在一行!。 2、在Tomcat/conf目录下新建两个文件:jmxremote.accessjmxremote.password 第一个文件存的是角色信息,第二个存放的是密码信息(可修改)。 配置完上面信息后:我们启动tomcat时,To 阅读详情

相关推荐

机器人动力学仿真软件:V-REP (CoppeliaSim)_(15).仿真项目案例分析

通过以上几个具体的仿真项目案例,我们展示了如何在V-REP (CoppeliaSim)中进行二次开发,实现复杂的机器人动力学仿真任务。这些案例涵盖了六轴机械臂的运动学仿真、移动机器人的路径规划避障、以及无人机的飞行控制环境感知。每个项目都通过编写Lua脚本实现了对机器人模型的控制任务执行,并通过仿真结果分析验证了算法的有效性系统性能。希望这些案例能够为读者在实际项目中使用V-REP (CoppeliaSim)提供有益的参考启发。

kkchenjj的博客 1253

JMX 客户端

控制如何发送通知、如何编辑属性、如何通过电子邮件发送日志文件对其进。它不但包含一些经过良好集成并可提供升。通过电子邮件发送日志文件查看日志文件。进程列表,该计算机就是已被配置为启用本地。自身拥有一组用于管理监视应用程。在您视为重要内容处创建书签,以。使系统管理员能够监视管理。一旦启动,它便会为当前用户。选项卡的插件,还可嵌入任何。行查看以及如何启动停止。配置为使用远程服务器。此外,还提供了许多其他。发送服务器状态通知。够轻松浏览到所关注的。便今后返回到这些位置。客户端可找到更多信息。

桂云帆的博客 498

rk3588上适配wifi模组aic8800

记录一下在rk3588上调试aic8800,调试分为Debian11以及Android12两个平台,这里主要是讲过程以及修改的过程,以补丁的形式来提供解决方法。在Debian11下主要通过配置设备树、编译驱动并自动加载固件完成调试,详细介绍了设备树修改、驱动编译脚本调整驱动加载流程。

m0_60805802的博客 956

JMX 入门(二)Java客户端

这篇博客参考官方教程以及个人的理解,通过实际的代码操作来学会使用 JMXJMX 入门(一)基础操作 JMX 入门(二)Java客户端 JMX 入门(三)认证加密 创建 JMX 客户端 前面一篇中,通过 MBeanServer 发布的 JMX 服务称之为服务端,我们已经知道如何通过 JConsole 作为客户端连接 JMX 服务,在这一篇中,我们将通过 Ja...

偶尔记一下 - mybatis.io 4368

JMX客户端及对commons-pool的监控

分享一套我整理的面试干货,这份文档结合了我多年的面试官经验,站在面试官的角度来告诉你,面试官提的那些问题他最想听到你给他的回答是什么,分享出来帮助那些对前途感到迷茫的朋友。

2301_79655496的博客 745

使用 JMX 客户端监控队列

则引发该问题的原因可能是:要处理的条目的执行时间过长,或者发生了创建大量条目的异常活。针对高队列负载及处理时间过长的条目预配置了失败条目执行通知基于阈值的通。队列中队列条目总数的通知阈值,不考虑各条目的状况。下表对这些属性进行了定义并为其提供了更多相关信息。各个队列条目需要执行的最大秒数通知阈值。阈值,请检查执行机制的性能。例如,针对发布队列检查。的队列条目总数的通知阈值。您可以根据需要调整每个队列的阈值。例如,错误的工作流可能会创建一系列任务。工作器,或针对索引队列检。

桂云帆的博客 443

JMX的使用

JMX是Java Management Extention的缩写,出发点是让外部通过属性/方法来读取或设置程序状态。对于提供对外服务的程序来说,天生就有这样的能力,Web程序通过HTTP接口对外暴露,RPC应用通过RPC接口暴露。不过带来的问题,一是依赖环境,不同的环境能力不同;二是需要单独处理安全性问题,尤其是对公网暴露的情况下。JMX从某种程度上来说,解决了上述两个问题,无论什么应用都能通过JMX对外暴露管理功能,单独的非业务含义的协议通道,可以避免非必要的公网暴露。

你若盛开,清风自来 1900

java jmx 例子_jmx完整示例

很早就开始去了解这个了,不过一直都是皮毛,基本概念明白,具体api几乎一无不知。。。认真看了几篇文章,做了测试,终于有所了解写得最好的:http://www.cnblogs.com/yaohonv/archive/2012/02/08/jmx.html, 图也很清楚,不过初入门的时候看起来比较吃力, 其中对jmx-rmi有所涉及,不错,可惜实验不通。没地方下载jmxremoting.jar个人理解...

weixin_39727706的博客 451

JMX服务及MBean注册代码

以下代码可以开启一个MBean服务,并将MBean注册到该服务中。 在做JMX开发调试时,可以比较方便的用于测试,无需每次都将代码发布到服务器中测试。 import java.lang.management.ManagementFactory; import javax.management.MBeanServer; import javax.management.MBeanServe...

xingxingjia的专栏 374

jmx完整示例

jmx完整示例 很早就开始去了解这个了,不过一直都是皮毛,基本概念明白,具体api几乎一无不知。。。 认真看了几篇文章,做了测试,终于有所了解 参考 入门级别: http://www.cnblogs.com/agou/articles/286871.html http://www.cnblogs.com/allenn...

weixin_30872789的博客 116

JMX 注册MBean服务 MBean RMI

X的概念不说了,可以管理很多组件,例子程序用了简单的bean,然后JMX注册它进行管理,JMX可以管理其他高级组件,管理osgi等等。jmx可以通过http,rmi等方式管理组件,jmx配上osgi来管理组件就很好了,osgi。。。 try {             String DOMAIN = "localhost";             // 创建一个MBeanServer            MBeanServer server = MBeanServerFactory.crea

IOT之无线网络传输技术 967

基于语音分析的阿尔茨海默症早期筛查:技术实现与工程实践

语音分析作为一种无创、可及性高的生物行为信号采集方式,其核心原理在于通过解析语音中蕴含的声学特征(如语调、语速、停顿)语言特征(如词汇丰富度、句法复杂度),来量化反映个体的认知功能状态。这项技术的价值在于,它为大规模、低成本的认知障碍早期筛查提供了数字化解决方案,尤其适用于阿尔茨海默症等神经退行性疾病的早期预警。在应用场景上,它可集成于智能手机应用或嵌入式设备,实现居家长期监测。本文聚焦于如何构建一个完整的工程化Pipeline,其中涉及INMP441麦克风等硬件选型与音频采集,以及支持向量机(SVM)、

chuannaoxuan4674的博客 317

Mina(Multipurpose Infrastructure for Network Applications)完全文档

  Mina文档Nio:NIO是一个基于事件的IO架构,最基本的思想就是:有事件我通知你,你再去做你的事情,没事件时你大可以节约大把时间去做其它任何事情。而且NIO的主线程only one,不像传统的模型,需要N个线程去,也减轻了JVM的工作量,使得JVM处理任务时显得更加高效。Mina 综述•         Multipurpose Infrastructure for

kanful的专栏 2485

Springside3.0发布

    这个版本里的SpringSide,终于放弃梦想,不再奢望做一个框架,或者一个像RoR/Gails那样极简的、创新的封装,唯余对如何用不轻也不重的主流选型、编程实践来开发JavaEE企业应用的老老实实的总结。        如果说Sun 的代码规范规定了大家在代码中如何命名变量,怎么编写注释的话,SpringSide就是对JavaEE企业应用开发的建议。    当然,SpringSide 3

yanick技术博客 1274

JMX客户端服务端(Spring配置的方式编码的方式)

一、Spring配置的方式: 1、客户端: [color=red]client.xml[/color] [code="java"] [/code] [color=red]SpringJmxClientMain [/color] package client; import javax.management.Attribute;...

备战备荒 297

JMX安全漏洞修复 服务端增加用户名密码验证机制

JMX安全漏洞修复 服务端增加用户名密码验证机制

zhaoshuangjian 1995

使用JMX监控Tomcat(监控应用服务器系列文章)

前言:做了一个监控应用服务器的项目(支持Tocmat、WebSphere、WebLogic各版本), 过程也算是磕磕绊绊,由于网上缺少相关资料,或者深陷于知识的海洋难以寻觅到有效的资料,因而走过不少弯路,遇过不少困难。为了留下点印记,给后来人留下 点经验之谈,助之少走弯路,故将这些经验整理出来,与大家分享。水平有限,难免疏漏,还望指正。如有疑问,欢迎留言,或者加入Q群参与讨 论:3552652...

清晨之风专栏 271

施用JMX远程监控、管理JVM

运用JMX远程监控、管理JVM 问题背景讨论:在JAVA运行时,对JVM系统的检测、管理是开发同学一直期望的,目前有一些开源产品开源针对JVM进行监控,例如javamelody等等,这样框架虽然好,但是如果使用会带来一些问题。第一:由于javamelody入口是一个filter,所以会带来性能问题、第二:如果应用服务器很多,会缺乏统一管理,此外安全性、爬虫等等问题略过不提       JD

caomiao2006的专栏 3325

Spring JMX编程学习(三)- 自定义JMX客户端

系列文章目录 系列文章目录 Java管理扩展JMX入门学习 Spring JMX编程学习(一)- 手动注册bean到MBeanServer Spring JMX编程学习(二)- 以Bean的方式注册MbeanServer 文章目录系列文章目录系列文章目录 前言 一、暴露MBeanServer 二、自定义客户端1. 创建客户端连接clientConnector2. 注册MBean代理Bean3. 创建客户端启动类 三、源码分析1. 服务端2. 客户端 总结 前言 在前面的项目当中,我们通过Sprin

m0_37607945的博客 1194

北交-编译原理-基于SLR(1)分析法的语法制导翻译及中间代码生成程序设计原理与实现-内含源码说明书.zip

北交-编译原理-基于SLR(1)分析法的语法制导翻译及中间代码生成程序设计原理与实现-内含源码说明书.zip

上一篇: JMX连接Mbean获取Tomcat信息
下一篇: Java SE 6 新特性: JMX 与系统管理(2)
asmallrole
博客等级 码龄15年 2粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值