MBean之间的通信是必不可少的,Notification就起到了在MBean之间沟通桥梁的作用,JMX Notification由4个部分组成:
Notification 这个相当于一个信息包,封装了需要传递的信息。
Notification broadcast 这相当于一个广播器,把消息广播出去。
Notification listerner 这是一个监听器,用于监听广播出来的Notification 消息。
Notification filter 这是一个过滤器,过滤掉不需要的Notification 消息。
Notification broadcast不需要我们实现,JMX内部已经有了,Notification filter 一般也很少用,下面的例子主要用到
Notification 、Notification listerner。
1.目录结构
在hello中有一个sayHello(String message)方法,意思是根据碰到的是谁来打招呼,比如:
jack从对面走过来,说:‘hi’
我们回礼,说:‘hello jack“
首先需要jack先说一个hi(相应一个操作),然后他说的话封装成声波(相当于Notification 消息包)传递出去,然后我们还要给jack装上一个监听器(耳朵),这个监听器将捕捉到jack的声波语音包,并进行相应的处理,即说”hello jack“。
2.将jack写成一个MBean
JackMBean
package jmx.notification;
public interface JackMBean {
public void hi();
}
Jack
package jmx.notification;
import javax.management.Notification;
import javax.management.NotificationBroadcasterSupport;
/**
* Jack必须继承NotificationBroadcasterSupport
* 此类只有一个hi方法,方法只有两句:创建消息报,然后将包发出去
* 如果你还要在消息包上附加其他数据,notification还有一个setUserData()方法
* @author chenyw
*
*/
public class Jack extends NotificationBroadcasterSupport implements JackMBean{
private int seq =0;
@Override
public void hi() {
Notification n = new Notification(//创建一个信息包
"jack.hi",//给这个Notifiction起一个名字
this,//由谁发出的Notification
++seq,//一系列通知中的序列号,可以设置任意数
System.currentTimeMillis(),//发出时间
"Jack"//发出文本
);
sendNotification(n);
}
}
3.创建一个Listerner,监听到的Notification 消息包将由此类负责处理。
HelloListener
package jmx.notification;
import javax.management.Notification;
import javax.management.NotificationListener;
/**
* 创建一个Listener,监听到的Notification消息包将由此类负责处理
* @author chenyw
*
*/
public class HelloListener implements NotificationListener{
@Override
public void handleNotification(Notification n, Object handback) {
System.out.println("type:"+n.getType());
System.out.println("source:"+n.getSource());
System.out.println("seq:"+n.getSequenceNumber());
System.out.println("send time:"+n.getTimeStamp());
System.out.println("message:"+n.getMessage());
if(handback!=null){
if(handback instanceof Hello ){
Hello h = (Hello)handback;
h.sayHello(n.getMessage());
}
}
}
}
4.修改HelloAgent
package jmx.notification;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import com.sun.jdmk.comm.HtmlAdaptorServer;
/**
*
*该类是一个Agent类,说明: 先创建了一个MBeanServer,用来做MBean的容器
* 将Hello这个类注入到MBeanServer中,注入需要创建一个ObjectName类
* 创建一个AdaptorServer,这个类将决定MBean的管理界面,这里用最普通的Html型界面。 AdaptorServer其实也是一个MBean。
* jmx.hello:name=Hello的名字是有一定规则的,格式为:“域名:name=MBean名称”,
* 域名和MBean名称都可以任意取。 打开网页:http://localhost:8082/
*
*/
public class HelloAgent {
public static void main(String[] args) throws Exception {
// 创建一个MBeanServer,用来做MBean的容器
MBeanServer mbs = MBeanServerFactory.createMBeanServer();
// 将Hello这个类注入到MBeanServer中,注入需要创建一个ObjectName类
ObjectName helloAdaptor = new ObjectName(
"jmx.hello:name=Hello");
Hello hello = new Hello();
mbs.registerMBean(hello, helloAdaptor);
ObjectName htmlAdaptorON = new ObjectName(
"jmx.agent:name=HelloAgent,port=8082");
// 创建一个AdaptorServer,这个类将决定MBean的管理界面,这里用最普通的Html型界面
HtmlAdaptorServer htmlAdaptor = new HtmlAdaptorServer();
mbs.registerMBean(htmlAdaptor, htmlAdaptorON);
//加入Notification
Jack jack = new Jack();
mbs.registerMBean(jack, new ObjectName(
"jmx.jack:name=Jack"));
jack.addNotificationListener(new HelloListener(), null, hello);
System.out.println("Starting the HtmlAdaptor....");
htmlAdaptor.start();
}
}
5.运行HelloAgent,打开浏览器http://localhost:8082
进入那么=jack,然后点击hi按钮来执行它,这是控制台显示:
- 大小: 13.1 KB
- 大小: 38.4 KB
- 大小: 9.8 KB
分享到:
相关推荐
Jmx简单应用,http页面方式,vm参数方式,rmi方式
JMX实战 书中不仅有对于基础知识的介绍,还有对于JMX开发中重大的体系架构问题的深入探讨,总结了大量JMX开发中的设计模式,并讨论了框架、安全性与性能等等。书中提供了几个典型的例子,兼顾各种开发平台,这些...
NULL 博文链接:https://tristan-s.iteye.com/blog/1997741
jmx快速上手 jmx快速上手 jmx快速上手 jmx快速上手
为什么JMX那么受欢迎,JMX到底有那些优势只得人们去学习和理解,本文从JMX的基本架构、hellowold jmx以及spring对JMX的支持讲起,希望大家能通过本文对JMX有个基础的认识,并能通过本文为今后学习JMX打个基础
Fiddler导出jmx文件,解决Fiddler导出文件中 没有jmx文件选项,各个版本fiddler都适用
Description Resource Path Location Type Missing artifact com.sun.jmx:jmxri:jar:1.2.1 pom.xml /eshop-storm line 2 Maven Dependency Problem
jmx配置
JBoss JMX实现架构 JBoss JMX实现架构
catalina-jmx-remote.jar放到tomcat/lib目录下 如果是windows版本,编辑TOMCAT_HOME/bin/catalina.bat,在开头加入下面几行: set CATALINA_OPTS=%CATALINA_OPTS% -Djava.rmi.server.hostname=JMX_HOST set CATALINA...
JMX小例子以及介绍 JMX小例子以及介绍 JMX小例子以及介绍
Hbase和Hadoop JMX监控实战
JMX与JMS的概念
JMX一步一步来,从最基本的应用开始入手,快速应用开发。
java实现Jmx实例,jmxdemo项目源码下载
jmx的简单介绍和使用,包含一些简单的代码示例,看完基本能了解jmx并使用。
jmx和jmx在glassfish中的应用
activeMQ开启jmx固定rmi端口,穿透防火墙,用了一天的时间,踩了无数的坑,拿出来共享.
有关JMX学习的一些文档,对初学JMX的朋友有帮助.