JMX学习笔记(四) JMX RMI

JMX之通过RMI方式连接JMX Server 除了可以在HTML中管理 阅读详情

连接器概念:

JMX规范定义了连接器的概念(Connectors),连接器位于JMX的3层构架中的分布式服务层。连接器负责建立MBean服务器和管理应用之间的通信。连接器由一个驻留在代理层的连接器服务器(connector server)和管理应用的连接器客户端(connector client)构成。连接器服务端(connector server)连接到MBean服务器并监听来自客户端(connector client)的请求。一个connector client负责与connector server建立连接。connnector client通常与connector server在不同的JVM里并且通常运行在不同的机器上。


1.连接器类型(Connector type)

connnector client通过给定协议与connector server建立连接,远程访问MBean服务器。JMX API允许使用不同类型的连接器来连接MBean服务器。
* JMX API定义了一个标准连接器 - RMI Connector,它支持通过RMI协议远程访问一个MBeanServer
* JMX API定义了一个可选的连接器 - JMXMP Connector.它实现了JMXMP协议(JMX Message Protocol).作为一个可选连接器,它不集成在JavaSE平台中,若需要,从Sun官方      下载jar
* 用户自定义连接器协议


2.连接器服务器地址

通常,一个connector server有一个地址,由类JMXServiceURL表示,这个类的实例是不可变的。使用不同的连接器,会有不同的JMXServiceURL编写方式。
格式看起来如下:
service:jmx:protocol:sap
说明:
service:jmx: 这个是JMX URL的标准前缀,所有的JMX URL都必须以该字符串开头。
protocol是指定连接连接器服务器(connector server)的传输协议
方括号中的部分为可选部分
sap是连接器服务器的地址,sap的语法格式://[host[:port]][url-path]
host表示主机名,port是十进制的端口号
host和port可以省略,但没有host时,不能出现port
url-path 开始于一个"/"符号
参考JMX API : http://docs.oracle.com/javase/8/docs/api/index.html?javax/management/remote/rmi/package-summary.html

参考:http://www.l99.com/EditText_view.action?textId=480750


3. RMI连接器

JMX API定义了一个标准连接器 - RMI Connector,它支持通过RMI远程访问一个MBeanServer

RMI连接器服务器的地址示例如下:
service:jmx:rmi://localhost:1099/jndi/rmi://localhost:8899/myname
说明:
在这个JMXServiceURL中,第一个rmi指的是rmi连接器,表示用连接器使用RMI传输协议,第二个rmi指定RMI注册RMI连服务接器存储存根
localhost:1099: 这个是connector server的IP和端口,该部分是一个可选项,可以被省略掉。如果省略的话,则connector server会随机任意选择一个可用的端口
/jndi/rmi://localhost:8899/myname: 这个是connector server的路径,表示Connector server的stud是使用JNDI API绑定在rmi://localhost:8899/myname这个地址上

创建一个RMI connector server

通常是提供一个RMI connector server的连接器地址,用JMXConnectorServerFactory.newJMXConnectorServer方法来创建RMI connector cerver

参考JMX API:http://docs.oracle.com/javase/8/docs/api/index.html?javax/management/remote/rmi/package-summary.html


下面是使用RMI连接器远程管理程序的例子:

Step 1.MBean接口定义

package com.jmx.demo9;

import java.io.Serializable;

public interface HelloMBean extends Serializable {
	public void setName(String name);

	public String getName();

	public void sayHello();

}

Step 2.MBean接口实现类

package com.jmx.demo9;

import java.io.Serializable;

public class Hello implements HelloMBean, Serializable {

	private String name;

	public synchronized void setName(String name) {
		this.name = name;
	}

	public synchronized String getName() {
		return name;
	}

	public synchronized void sayHello() {
		System.out.println("Hello," + name);
	}

}

Step 3.服务端

package com.jmx.demo9;

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 JMXAgent {
	/**
	 * @param args
	 *            the command line arguments
	 */
	public static void main(String[] args) throws Exception {
		System.out.println("--------------JMX Agent----------- ");
		LocateRegistry.createRegistry(1099);
		MBeanServer server = MBeanServerFactory.createMBeanServer();
		ObjectName helloName = new ObjectName("com.jmx.demo9:name=Hello");
		Hello hello = new Hello();
		HashMap<String, Object> prop = new HashMap<String, Object>();
		prop.put(JMXConnectorServer.AUTHENTICATOR, new JMXAuthenticator() {
			public Subject authenticate(Object 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:1099/jmxrmi"),
						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.....");
		System.out.println("\n");
	}
}

note:ObjectName对象标识符命名规则参考JMX API:http://docs.oracle.com/javase/8/docs/api/javax/management/ObjectName.html

Step 4.客户端(管理应用程序)

package com.jmx.demo9;

import java.util.HashMap;

import javax.management.JMX;
import javax.management.MBeanServerConnection;
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 {
		
		HashMap<String, Object> prop = new HashMap<String, Object>();
		prop.put(JMXConnector.CREDENTIALS, "Hello");
		JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi");
		JMXConnector conn = JMXConnectorFactory.connect(url, prop);
		MBeanServerConnection mbsc = conn.getMBeanServerConnection();
		ObjectName mbeanName = new ObjectName("com.jmx.demo9:name=Hello");
		HelloMBean hello = JMX.newMBeanProxy(mbsc, mbeanName,HelloMBean.class);
		hello.setName("World!");
		hello.sayHello();

	}
}

测试结果:

先启动JMXAgent,在启动Client

--------------JMX Agent----------- 
JMImplementation:type=MBeanServerDelegate
com.jmx.demo9:name=Hello
com.jmx.demo9.Hello@47eaec
start.....


Hello,world




JMX,RMI与RPC 参考文献: https文章目录1. RPC1.1 RMI1.2 hessian://1.3 http://1.4 thrift://1.5 rest://2. RMI2.1 示例2.1.1 Server端2.1.2 client端:3.JMX3.1 基本概念3.2 JMX的架构3.3 示例3.3.1 MBean3.3.2 Agent 与MBeanServer3.3.3 client3.3.4 其... 阅读详情

相关推荐

JMX-RMI反序列化中的小研究

简述 RMI 数据传输基于反序列化,如果服务中实现了 RMI 的调用且具有 Object 类型参数,那么就会造成反序列化(实际攻击中需要反序列化链) JMX 服务是基于 RMI 实现,且将凭证对象作为Object 参数传入,如果使用恶意构造的对象替代凭证传入,是否能攻击需要凭证认证的 JMX 服务了。 针对 JMX 的攻击 YSO 中有一个针对 JMX 的攻击模块,当 JMX 服务器存在反序列化链时,可以对JMX服务进行攻击 java -cp ysoserial.jar ysoserial.expl

xxsiyao的博客 827

java JMX实践:JMX RMI Server 和Client的使用

JMX RMI Server 和Client的使用,完整代码

zbz1006572352的博客 1274

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

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

JMX学习笔记(五) JMX RMI

连接器概念: JMX规范定义了连接器的概念(Connectors),连接器位于JMX的3层构架中的分布式服务层。连接器负责建立MBean服务器和管理应用之间的 通信。连接器由一个驻留在代理层的连接器服务器(connector server)和管理应用的连接器客户端(connector client)构成。连接器服务端(connector server)连接到MBean服务器并监听来自客户端...

u012219089的博客 612

DataEaseV2.9 本地开发环境搭建与调试指南

本文详细指导如何搭建DataEase V2.9的本地开发环境,涵盖从软件准备、源码获取、数据库初始化到在IDEA中配置、编译和调试的全过程。重点解决了本地运行环境的关键配置与常见问题,帮助开发者高效开启DataEase的定制化开发与二次开发。

weixin_29290863的博客 143

手把手教你离线部署Jupyter Notebook及高效插件配置

本文详细介绍了如何在离线环境中部署Jupyter Notebook及配置高效插件,包括离线安装步骤、依赖管理、核心扩展安装及常见问题排查。特别针对金融、科研等封闭网络场景,提供完整的whls包和requirements.txt解决方案,帮助开发者和数据分析师突破网络限制,提升工作效率。

weixin_28839549的博客 585

JMX service URL使用说明

在项目中经常用到JMX的service url,一直都没有完全理解它的用法,下面本文以RMI方式为例,分别从JMX server和JMX client两方面入手,简单的说明一下: service:jmx:rmi://hostname1:port1/jndi/rmi://hostname2:port2/jmxrmi 比如有以上url,JMX server和JMX client都会用到这...

顺其自然~专栏 6393

【Qt实战项目】记事本完整项目

效果图如下所示: 全部代码如下: #include “notepad.h” #include int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.showMaximized(); return a.exec(); }

YIZHILIUSHA2020的博客 575

JNDI,SPI,JMS(AMQP) , JMX,RMI与RPC

JNDI(Java Naming and Directory Interface)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI SPI的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。

cristianoxm的博客 1062

别再瞎调参数了!分子动力学模拟新手必看的力场选择与验证实战指南

本文为分子动力学模拟新手提供力场选择与验证的实战指南,详细解析主流力场特性及适用场景,并通过水分子案例演示完整的验证流程。文章重点对比SPC/E、TIP3P和OPLS-AA三种力场在GROMACS中的表现,帮助读者避免常见参数调整误区,提升模拟准确性。

weixin_26934905的博客 426

告别手动标注!用ENVI Classic高效搞定高光谱图像语义分割标签(以农业/地物分类为例)

本文详细介绍了如何利用ENVI Classic实现高光谱图像的半自动化智能标注,特别针对农业和地物分类场景。通过光谱特征分析、智能标注技巧和MAT文件转换,显著提升标注效率和质量,助力AI模型训练。

weixin_28694169的博客 251

JMX 注册MBean服务 MBean RMI

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

asmallrole的专栏 633

python代码实现了一个基于图注意力网络(GAT)和长短期记忆网络(LSTM)的股票成交量预测模型

自定义数据集类:定义了类,继承自。该类用于生成股票数据的时间序列样本,每个样本包含一个长度为seq_length的时间序列和对应的目标成交量。数据加载器:使用DataLoader对数据集进行批量加载,设置批量大小为 64,并开启数据打乱功能。GAT - LSTM 模型:定义了GAT_LSTM类,继承自。该模型结合了 GAT 和 LSTM 两种神经网络:GAT 部分:使用GATConv处理全局图特征,捕获股票之间的相互关系。LSTM 部分:使用nn.LSTM处理时间序列数据,捕捉时间序列的动态变化。

huanghm88的专栏 427

jms rmi jmx

jms https://www.cnblogs.com/chenpi/p/5559349.html Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建、发送、读取消息等,用于支持JAVA应用程序开发。在J2EE中,当两个应用程序使用JMS进行通信时,它们之间并不是直接相连的,而是通过一个共同的消息收发服务连接起来,比如active...

weixin_30907935的博客 175

基于生存结局(生存分析/COX回归)的中介效应分析

① 建立观察变量OVB和中介变量MVB的回归模型(注意:这里根据mediation包的介绍,需要构建的是probit模型,而不是logist回归模型,网上有很多的代码用的logistic回归,结果自己跑的时候发现报错,我在这里陷了很久;为了方便演示,我们生成了一个协变量(Age)、一个连续型观察变量(liaOVC)、一个二分类观察变量(OVB)、一个连续型中介变量(MVC)、一个二分类中介变量(MVB)以及最后的结局变量(生存时间[time],生存结局[stats])。

m0_61863309的博客 1万+

2026华为OD机试(JAVA&Go)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,Java实现。

MISAYAONE的博客 34万+

关于jmx三个端口介绍

JMX(Java Management Extensions)是一个为应用程序提供管理功能的框架。也就是应用程序暴露一个端口,可以通过这个端口,查看程序的状态,修改程序的配置。 网上关于程序员四个层次,很形象说明JMX的功能。 程序新手,配置是写死在程序中,修要修改时就去改代码,然后重新编译发布。 程序熟手,配置在文件中(JAVA一般都是properties文件),修要修改时就去修改配置文件,但还是必须重启系统,以便读取配置文件里最新的值。 程序好手,则会写一段代码,把配置值缓存起来,系统在获取的.

那又怎样?的博客 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

使用 JMX 和 RMI 远程管理 Quartz

原文地址为:http://www.oschina.net/question/12_67413 方法1: JMX 很多人询问如何通过 JMX 来管理 Quertz,很奇怪的是 Quartz 的文档完全没有提及这方面的问题,你可以在 quartz.properties 中通过以下配置来启用 JMX 的支持: view source print ? 1 ...

hqmln的博客 556

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

JMX RMI相关

JMX trail: http://docs.oracle.com/javase/tutorial/jmx/index.html Server (MBean --> Agent ) --> Client JMX RMI example : http://docs.oracle.com/javase/tutorial/jmx/remote/custom.html 其中,

学习笔记 723

关于JMX三个端口的说明

JMX(Java Management Extensions) 是一个为应用程序提供管理功能的框架。也就是应用程序暴露一个端口,可以通过这个端口,查看程序的状态,修改程序的配置。 网上关于程序员四个层次,很形象说明JMX的功能。 程序新手,配置是写死在程序中,修要修改时就去改代码,然后重新编译发布。 程序熟手,配置在文件中(JAVA一般都是properties文件),修要修改时就去修改配置文件,...

俊伟的博客 1万+

JMX RMI连接器使用

package com.fanshadoop.rmi; import javax.management.InstanceAlreadyExistsException; import javax.management.MBeanRegistrationException; import javax.management.MBeanServer; import javax.management.MB

Java&&大数据专栏 1789

service:jmx:rmi:///jndi/rmi

service:jmx:rmi:///jndi/rmi://ip:9889/jmxrmi  http://stackoverflow.com/questions/2768087/explain-jmx-url According to javax.management.remote.rmi this url is assembled like this service:jmx:rmi://...

weixin_34342207的博客 1965

JMX RMI服务

参考: Tomcat开启JMX远程监控 在catalina.bat文件中新增 SET CATALINA_OPTS= %CATALINA_OPTS% -Dcom.sun.management.jmxremote SET CATALINA_OPTS= %CATALINA_OPTS% -Dcom.sun.management.jmxremote.port=7199 SET CATALINA_OPTS= %CATALINA_OPTS% -Dcom.sun.management.jmxremote.ssl=fal

公众号shadow sock7 783

【小贴士】如何用jconsole连接jmx agent-rmi、jmxmp协议

1 以rmi协议连接 jvm启动时添加参数(更多参数参考 -Dcom.sun.management.jmxremote.port=8888 2 以jmxmp协议连接

beFocused的博客 931

JMX的学习笔记

JMX的学习笔记 1. JMX简介 ​ JMX(Java Management Extemsions) 是一个为应用程序、设备、系统等植入管理功能的框架。 ​ JMX 是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。主要用于对JAVA应用程序和JVM进行监控和管理。JConsole和JVisualVM中能够监控到JAVA应用程序和JVM的相关信息都是通过JMX实现的。 ​ JMX 规范可以分为三层:设备层,代理层,分布式服务层。设备层规范定义了编写可由JMX管

weixin_45866849的博客 1522
上一篇: JMX学习笔记(四):Notifications
下一篇: 斐波拿契数列实现
java_huashan
博客等级 码龄14年 37粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值