JMX Connectors
JMX Connectors
JMX有两种connector:
1、 RMI Connector
2、 JMXMP Connector (JMX message protocol Connector)
RMI Connector支持RMI Transports , Java Remote Method Protocol (JRMP) 和 Inter-Object Request Broker Protocol (IIOP)
下面的例子将利用 RMI Connector 在server 和client 之间建立连接 。
server的主要功能:
1、 建立 Mbean server
2、 建立 RMI connector server
Client 的主要功能:
1、 建立 RMI connector
2、 通过 RMI connector 在Mbean server 注册一个 Mbean
所包含的文件:
Server.java
SimpleStandardMBean.java
SimpleStandard.java
ClientListener.java
Client.java
运行环境:
首先去sun下载两个压缩包:
1、jmx-1_2_1-bin
2、jmxremote-1_0_1-bin
以下程序需要这两个包里面的lib/*.jar
源程序:
Server.java
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;
public class Server {
public static void main(String[] args) {
try {
// Instantiate the MBean server
//
System.out.println("/nCreate the MBean server");
MBeanServer mbs = MBeanServerFactory.createMBeanServer();
// Create an RMI connector server
//
System.out.println("/nCreate an RMI connector server");
JMXServiceURL url = new JMXServiceURL(
"service:jmx:rmi:///jndi/rmi://localhost:9999/server");
JMXConnectorServer cs =
JMXConnectorServerFactory.newJMXConnectorServer(
url, //url
null, //environment map
mbs); //MBeanServer
// Start the RMI connector server
//
System.out.println("/nStart the RMI connector server");
cs.start();
System.out.println("/nRMI connector server successfully started");
System.out.println("/nWaiting for incoming connections...");
} catch (Exception e) {
e.printStackTrace();
}
}
}
为了便于观察Server的情况,可以在Server.java 加入 htmlAdapterServer 通过浏览器察看,具体情况为在 MBeanServer mbs = MBeanServerFactory.createMBeanServer();下面添加代码:可能这么说比较不清楚,直接把全部代码写出来吧,虽然比较多的代码让人看的不舒服了 : )
///更改后的Server.java
Server.java
/*
* Created on 2004-12-25
* @author roson
*/
import javax.management.*;
import javax.management.MBeanServerFactory;
import javax.management.remote.*;
import jmxInAction.Logger;
import com.sun.jdmk.comm.HtmlAdaptorServer;
public class Server {
public static void main(String[] args) {
try
{
System.out.println("Create the MBean server");
MBeanServer mbs=MBeanServerFactory.createMBeanServer();
System.out.println("/n/tCREATE, REGISTER and START a new HTML adaptor:");
HtmlAdaptorServer html = new HtmlAdaptorServer();
ObjectName html_name = null;
try
{
html_name = new ObjectName("Logger:name=html,port=8082");
System.out.println("/tOBJECT NAME = " + html_name);
mbs.registerMBean(html, html_name);
}
catch(Exception e)
{
System.out.println("/t!!! Could not create the HTML adaptor !!!");
e.printStackTrace();
return;
}
html.start();
System.out.println("Create an RMI Connector server");
JMXServiceURL url=new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");
//JMXServiceURL url=new JMXServiceURL("jmxmp",null,5555);
// jmxmp与rmi connector 不同的地方
JMXConnectorServer cs=JMXConnectorServerFactory.newJMXConnectorServer(
url, //url
null, //environment map
mbs); //MBeanServer
cs.start();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
/^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 更改后的Server.java ^^^^^^^^^^^^^^^^^^^^^^^^^^
更改后就可以通过浏览器来察看Server的情况了。http://localhost:8082 为浏览器地址栏
SimpleStandardMBean.java
public interface SimpleStandardMBean {
public String getState(); //读状态State
public void setState(String s); //写状态State
public int getNbChanges(); //状态更改次数
public void reset(); //重至
}
SimpleStandard.java
import javax.management.*;
public class SimpleStandard extends NotificationBroadcasterSupport
implements SimpleStandardMBean{
private String state="initial state";
private int nbChanges=0;
private int nbResets=0;
public String getState() {
return state;
}
public void setState(String state) {
this.state=state;
nbChanges++;
}
public int getNbChanges() {
return nbChanges;
}
public void reset() {
AttributeChangeNotification acn=new AttributeChangeNotification(
this, //source
0, //sequenceNumber
0, //timeStamp
"NbChanges reset", //message
"NbChanges", //属性名
"Integer", //属性的类型
new Integer(nbChanges), //属性更改前的值
new Integer(0)); //属性更改后的值
state="initial state";
nbChanges=0;
nbResets++;
sendNotification(acn);
}
}
ClientListener.java
import javax.management.*;
public class ClientListener implements NotificationListener{
public void handleNotification(Notification notification, Object handback) {
System.out.println("/nReceived notification:"+notification);
}
}
Client.java
import javax.management.Attribute;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
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) {
try {
// Create an RMI connector client and
// connect it to the RMI connector server
//
System.out.println("/nCreate an RMI connector client and " +
"connect it to the RMI connector server");
JMXServiceURL url = new JMXServiceURL(
"service:jmx:rmi:///jndi/rmi://localhost:9999/server");
//JMXServiceURL url=new JMXServiceURL("jmxmp",null,5555);
//jmxmp connector 与 rmi connector不同的地方,此时jmxp connector的端口号为5555
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
// Get an MBeanServerConnection
//
System.out.println("/nGet an MBeanServerConnection");
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
// Get domains from MBeanServer
//
System.out.println("/nDomains:");
String domains[] = mbsc.getDomains();
for (int i = 0; i < domains.length; i++) {
System.out.println("/tDomain[" + i + "] = " + domains[i]);
}
// Create SimpleStandard Mbean 注册了个Mbean
//
ObjectName mbeanName = new ObjectName("MBeans:type=SimpleStandard");
System.out.println("/nCreate SimpleStandard MBean...");
mbsc.createMBean("SimpleStandard", mbeanName, null, null);
// Get MBean count
//
System.out.println("/nMBean count = " + mbsc.getMBeanCount());
// Get State attribute
//
System.out.println("/nState = " +
mbsc.getAttribute(mbeanName, "State"));
// Set State attribute
//
mbsc.setAttribute(mbeanName,
new Attribute("State", "changed state"));
// Get State attribute
//
// Another way of interacting with a given MBean is through a
// dedicated proxy instead of going directly through the MBean
// server connection
//
SimpleStandardMBean proxy = (SimpleStandardMBean)
MBeanServerInvocationHandler.newProxyInstance(
mbsc,
mbeanName,
SimpleStandardMBean.class,
false);
System.out.println("/nState = " + proxy.getState());
// Add notification listener on SimpleStandard MBean
//
ClientListener listener = new ClientListener();
System.out.println("/nAdd notification listener...");
mbsc.addNotificationListener(mbeanName, listener, null, null);
// Invoke "reset" in SimpleStandard MBean
//
// Calling "reset" makes the SimpleStandard MBean emit a
// notification that will be received by the registered
// ClientListener.
//
System.out.println("/nInvoke reset() in SimpleStandard MBean...");
mbsc.invoke(mbeanName, "reset", null, null);
// Sleep for 2 seconds in order to have time to receive the
// notification before removing the notification listener.
//
System.out.println("/nWaiting for notification...");
Thread.sleep(2000);
// Remove notification listener on SimpleStandard MBean
//
System.out.println("/nRemove notification listener...");
mbsc.removeNotificationListener(mbeanName, listener);
// Unregister SimpleStandard MBean
//
System.out.println("/nUnregister SimpleStandard MBean...");
mbsc.unregisterMBean(mbeanName);
// Close MBeanServer connection
//
System.out.println("/nClose the connection to the server");
jmxc.close();
System.out.println("/nBye! Bye!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
在client中注册了个Mbean 这个在命令行是看不到它所在的域名,因为是先连接Server,查看Server所有的域名,接着再注册的。不过,可以在浏览器中看到情况的变化。刷新下试试 : )
运行程序:
1、 将 运行环境 中提到的几个 jar 包放在classpath ,(我是用eclipse 来做的,觉得很方便)
2、 编译。
如果是RMI Connector 就要用 rmiregister : 在命令提示行输入:rmiregistry 9999
Jmxmp 就不需要了。
3、 运行 Server.java ,接着运行 Client.java
摘自 jmxremote-1_0_1-bin/doc/tutorial
JMX Connectors相关推荐
- Java管理扩展JMX入门学习
系列文章目录 Java管理扩展JMX入门学习 Spring JMX编程学习(一)- 手动注册bean到MBeanServer Spring JMX编程学习(二)- 以Bean的方式注册MbeanSer ...
- spring源码分析之spring jmx
JMX架构定义: https://docs.oracle.com/javase/8/docs/technotes/guides/jmx/overview/architecture.html Archi ...
- Basic Example of JMX Technology--转载
原文地址:http://nick-lab.gs.washington.edu/java/jdk1.5b/guide/jmx/tutorial/connectors.html Basic Example ...
- 从零开始玩转JMX(一)——简介和Standard MBean
JMX的全称为Java Management Extensions. 顾名思义,是管理Java的一种扩展.这种机制可以方便的管理.监控正在运行中的Java程序.常用于管理线程,内存,日志Level,服 ...
- tomcat(20)基于JMX的管理
[0]README 1)本文部分文字描述转自:"深入剖析tomcat",旨在学习"tomcat(20)基于JMX的管理"的相关知识: 2)晚辈我在tomcat上 ...
- ActiveMQ学习-Network connectors(1)
本文为network connectors的static connector学习笔记. Network connectors broker网络能够创建多个相互连接的ActiveMq实例组成的簇,以应对 ...
- JMX configuration for Tomcat
Window下执行步骤: D:\apache-tomcat-7.0.57\bin\catalina.bat set CATALINA_OPTS=-Dcom.sun.management.jmxremo ...
- 《Presto(Trino)——The Definitive Guide》CHAPTER 6 Connectors Advanced CHAPTER 7 Connector Examples
Presto(暂译:普雷斯托)系列文章目录-CHAPTER 6 Connectors This book provides a great introduction to Presto and tea ...
- JMX学习笔记(四) JMX RMI
连接器概念: JMX规范定义了连接器的概念(Connectors),连接器位于JMX的3层构架中的分布式服务层.连接器负责建立MBean服务器和管理应用之间的通信.连接器由一个驻留在代理层的连接器服务 ...
最新文章
- [hadoop新实战2]hadoop伪分布式安装序列(支持ubuntu和redhat)
- 建议CSDN增加谈恋爱专区
- pat 1025 反转链表
- 九度OJ #1437 To Fill or Not to Fil
- SVM支持向量机-手写笔记(超详细:拉格朗日乘数法、KKT条件、对偶性质、最优化、合页损失、核函数...)
- 专心写即时通讯软件争取CSDN认证专家
- CSS3径向渐变radial-gradient实现波浪边框和内倒角
- 非root用户安装或升级CUDA和CUDNN版本
- vue2.0和3.0引入阿里字体图标库的步骤
- offer收割者!Alibaba内部独家MySQL优化宝典横空出世,再也不用担心被面试官拦路了
- 求刷百度相关词的方法
- 【学习笔记】计算机基础知识
- tensorbook深度学习笔记本电脑
- CSS 垂直对齐vertical-align属性
- 欧格电商:商家延迟发货有什么影响
- 关于物联网通信协议(接入协议)
- C#:CAN通讯上位机的简单示例Ⅱ
- Chrony与NTP对比
- 马斯京根法matlab程序,(一)马斯京根流量演算法
- Flutter仿微信,支付宝密码输入框+自定义键盘
热门文章
- 肿瘤免疫新抗原鉴定(一)OptiType安装与运行
- Blazor Web Assembly (WASM) 主题切换
- js replace() 使用
- 安全网络通信(SSLJSSE)
- win7手动恢复注册表
- 智慧化工厂安全风险生产预警系统软件
- 音乐音频 | openSMILE提取音频需要掌握的知识
- LUN详解 iscsi
- 1231231312
- 客户端访问https时应无浏览器(含终端)安全警告信息;_Http升级Https(Let#x27;s Encrypt)...