JMX之Notification
来源:互联网 发布:华珍养血荣发颗粒淘宝 编辑:程序博客网 时间:2024/05/17 21:39
Notification起到了Mbean之间沟通桥梁的作用。JMX notification model 和 java event model 类似,将一些重要的信息,状态的转变,数据的变更传递给 notification listener。以使资源更容易管理。我想象中的Notification使用的场景是:一个服务器的MBean配置做更改了之后,可以通过Notification通知其他所有分布式的服务器也一同做更改。
创建NotificationListener,决定了其他MBean拿到SayHello传递的Notification后需要做什么
注册各个MBean,并且为SayHello添加Notificaiton监听器和消息要传递到的目的MBean
和上一篇Standard MBean相同,访问http://localhost:9999/ ,这次点击作为broadcaster的MBean:SayHello,然后点击hello方法
JMX notification 由四部分组成:
1、 Notification
2、 Notification broadcaster
3、 Notification listerner
4、 Notification filter
下面的例子展示了两个MBean之间的通信:当执行SayHelloMBean的方法后,将一些状态信息传递到HelloMBean中,并且执行HelloMBean的相应的方法。
先创建HelloMBean、SayHelloMBean及其实现
package com.jmx.notification.demo;public interface HelloMBean {public String getName();public void setName(String name);public void helloWorld();public void helloWorld(String name);public String getTelephone();}
package com.jmx.notification.demo;public class Hello implements HelloMBean {private String name;private String telephone ="1351201201";@Overridepublic String getName() {return name;}@Overridepublic void helloWorld() {System.out.println("print......"+name);}@Overridepublic void helloWorld(String name) {System.out.println("print......."+name);}@Overridepublic void setName(String name) {this.name = name;System.out.println("My value is set to "+name);}@Overridepublic String getTelephone() {return telephone;}}
package com.jmx.notification.demo;public interface SayHelloMBean {public void hello();}
package com.jmx.notification.demo;import javax.management.Notification;import javax.management.NotificationBroadcasterSupport;public class SayHello extends NotificationBroadcasterSupport implementsSayHelloMBean {private int seq = 0;@Overridepublic void hello() {System.out.println("SayHello===========hello============");//create a notification(packet)Notification notification = new Notification("sayhello",// notification namethis,//who send++seq,//sequence numberSystem.currentTimeMillis(),//send time"Hello everybody.");//message content//sendsendNotification(notification);}}
创建NotificationListener,决定了其他MBean拿到SayHello传递的Notification后需要做什么
package com.jmx.notification.demo;import javax.management.Notification;import javax.management.NotificationListener;public class SayHelloListener implements NotificationListener {@Overridepublic void handleNotification(Notification notification, Object mbean) {//execute this method when listener receive notificationSystem.out.println("Type=" + notification.getType()+ ";\nSource=" + notification.getSource()+ ";\nSequenceNumber=" + notification.getSequenceNumber()+ "\nSend time=" + notification.getTimeStamp()+ "\nMessage=" + notification.getMessage());if (mbean != null) {if (mbean instanceof Hello) {Hello hello = (Hello) mbean;hello.helloWorld(notification.getMessage());}}}}
注册各个MBean,并且为SayHello添加Notificaiton监听器和消息要传递到的目的MBean
package com.jmx.notification.demo;import java.lang.management.ManagementFactory;import javax.management.InstanceAlreadyExistsException;import javax.management.MBeanRegistrationException;import javax.management.MBeanServer;import javax.management.MalformedObjectNameException;import javax.management.NotCompliantMBeanException;import javax.management.ObjectName;import com.sun.jdmk.comm.HtmlAdaptorServer;public class HelloAgent {public static void main(String[] args) throws MalformedObjectNameException, NullPointerException, InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException {//create mbean serverMBeanServer server = ManagementFactory.getPlatformMBeanServer();//create object nameObjectName helloName = new ObjectName("jmx:name=hello");//create mbeanHello hello = new Hello();//register mbean and hello nameserver.registerMBean(hello, helloName);//create adaptorHtmlAdaptorServer adaptor = new HtmlAdaptorServer();//create adaptor nameObjectName adaptorName = new ObjectName("jmxAD:name=adaptor,port=5050");//create adaptor, adaptor is just a form as show mbean. It has no relation to specific mbean.server.registerMBean(adaptor, adaptorName);//create a notification broadcasterSayHello sayHello = new SayHello();server.registerMBean(sayHello, new ObjectName("jmx:name=sayhello"));sayHello.addNotificationListener(new SayHelloListener(), null, hello);//SayHello notice Hello do sth. through Notificationadaptor.setPort(9999);adaptor.start();System.out.println("....................jmx server start....................");}}
和上一篇Standard MBean相同,访问http://localhost:9999/ ,这次点击作为broadcaster的MBean:SayHello,然后点击hello方法
在控制台输出中可以看到,SayHello将message传递给了Hello
整个代码的一个流程图如下:
0 0
- JMX之Notification
- JMX Notification
- JMX Notification
- JMX : Notification
- 【JMX】2. JMX通知模型:Notification
- JMX学习笔记(二)-Notification
- JMX学习笔记(二)-Notification
- [JMX一步步来] 3、Notification的使用
- [JMX一步步来] 3、Notification的使用
- JMX-Notification的使用(三)
- 【jmx学习】2、jmx之Html Adaptor
- 【jmx学习】3、jmx之RMI Adaptor
- JMX之helloworld
- Java之JMX
- Java之JMX
- Java之JMX
- Java之JMX
- JMX之Standard MBean
- pylab 画直方图,numpy画直方图。
- js遍历 子节点 子元素
- Android 开机自启动应用
- WM_VSCROLL // WM_HSCROLL
- 黑马程序员——面向对象_基础(2)
- JMX之Notification
- go调用其它C库,若采用命令行方式,不支持重定向的输出解决;smp协议未打开,发送信息到对方,没人响应
- 13062hubyee
- 56883xanjzw
- 13416hoizhr
- 青蛙的约会(数论)
- S3K3针对用户注册案例简单介绍了如何使用 DDD
- 身份证尺寸
- 计算机网络----dos攻击基础