【JMX】2. JMX通知模型:Notification
来源:互联网 发布:以太域名申请 编辑:程序博客网 时间:2024/06/01 20:27
复习
JMX构架中的各层及相关的组件
- 工具层(Instrumentation Level)
(a) MBeans(标准的,动态的,开放的和模型MBeans)
(b) 通知模型:Notification、NotificationListener等类
(c) MBean元数据类:Attribute、Opreator等类 - 代理层(Agent Level)
(a) MBean Server
(b) 代理服务。如前一篇的HtmlAdaptorServer等。
Mbean之间的通信是必不可少的,Notification就起到了在Mbean之间沟通桥梁的作用。JMX notification 由四部分组成:
- Notification 这个相当于一个信息包,封装了需要传递的信息
- Notification broadcaster 这相当于一个广播器,把消息广播出——不需要我们实现,JMX的内部已经有了。
- Notification listerner 这是一个监听器,用于监听广播出来的Notification消息
- Notification filter 这是一个过滤器,过滤掉不需要的Notification消息——一般也很少用
实际上Notification和Java的事件模型是一样的。
接着上一篇的例子,Hello中有一个printHello(String whoName)方法,意思根据碰到的是谁来打招呼,比如:
Jack从对面走过来,说:“hi”
我们回之以礼,说:“Hello, jack”
首先这需要Jack先说一个hi(相应一个操作方法),然后他说的话封装成声波(相当Notification消息包)传递出去。
然后我们还要给Jakc装上一个监听器(Hello的耳朵??^_^),这个监听器将捕捉到Jack的声波语音包,并进行相应处理,即说“Hello, jack”。
然后我们还要给Jakc装上一个监听器(Hello的耳朵??^_^),这个监听器将捕捉到Jack的声波语音包,并进行相应处理,即说“Hello, jack”。
1)再创建一个MBean
public class Jack extends NotificationBroadcasterSupport implements JackMBean { private int seq = 0; @Overridepublic void hi() { Notification n = new Notification(//创建一个信息包 "jack.hi",//给这个Notification起个名称 this, //由谁发出的Notification ++seq,//一系列通知中的序列号,可以设任意数值 System.currentTimeMillis(),//发出时间 "Jack-notif-msg");//发出的消息文本 //发出去 sendNotification(n); } }
public interface JackMBean { public void hi(); }
- 必需继承NotificationBroadcasterSupport
- 此类只有一个hi方法,方法只有两句:创建一个Notification消息包,然后将包发出去
- 如果你还要在消息包上附加其他数据,Notification还有一个setUserData(Object o)方法可供使用
监听到的Notification消息包将由此类负责处理
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 hello = (Hello) handback; hello.printHello(n.getMessage()); } } }}
3)创建Agent
public class HelloAgent { public static void main(String args[]) throws Exception{ MBeanServer server = MBeanServerFactory.createMBeanServer(); ObjectName helloName = new ObjectName("alpha:name=HelloWorld"); Hello hello=new Hello(); server.registerMBean(hello, helloName); ObjectName adapterName = new ObjectName( "HelloAgent:name=htmladapter,port=8082"); HtmlAdaptorServer adapter = new HtmlAdaptorServer(); server.registerMBean(adapter, adapterName); Jack jack = new Jack(); //重点 server.registerMBean(jack, new ObjectName("HelloAgent:name=jack")); //重点 jack.addNotificationListener(new HelloListener(), null, hello); //重点 adapter.start(); System.out.println("start....."); }}4)运行
先运行HelloAgent启动服务,再打开浏览器输入网址:http://localhost:8082/
进入“name=jack”项,然后单击“hi”按钮来执行它。
控制台打印如下:
start.....type=jack.hisource=jmx.notification.Jack@7526e85fseq=1send time=1363846170375message=Jack-notif-msgHello , Jack-notif-msg
- 【JMX】2. JMX通知模型:Notification
- JMX Notification
- JMX Notification
- JMX : Notification
- JMX之Notification
- JMX
- JMX
- JMX
- JMX
- jmx
- JMX
- JMX
- jmx
- jmx
- JMX
- JMX
- jmx
- JMX
- swfupload详解
- hdu 2156 分数矩阵
- PowerDesigner 15.1 破解步骤
- xcode反汇编调试iOS模拟器程序(二)看懂反汇编
- 回调函数接不到值的原因
- 【JMX】2. JMX通知模型:Notification
- SQL 优化原则
- const【C++】
- 多媒体支持
- 如何使用C#对虚拟磁盘文件(VHD)进行操作
- 界面皮肤
- iOS图像拉伸,stretchableImageWithLeftCapWidth
- javascript 版分页类, 可用于ajax
- SqlMapClient对象