三、JMX官方指导文档 之 通知

xiaoxiao2021-02-28  42

Lesson: Notifications JMX API定义了一个机制去让MBeans生成通知,例如:状态变化的信号,检测事件或者问题。 为了生成通知,MBean必须实现NotificationEmitter接口或者扩展NotificationBroadcasterSupport类。为了发送一个通知,你需要构造一个 javax.management.Notification或者它子类(AttributeChangedNotification)的实例, 然后把这个实例传递给NotificationBroadcasterSupport.sendNotification。 每一个通知都有源(source)。源是生成通知的MBean对象名字。 每一个通知都有一个序列号。这个号码可以用于给来自同一个源的通知排序。如果不是正确的顺序可能导致一个错误。这个序列号可以是0但最好来自于同一个MBean的通知是自增的。 Hello MBean实现了标准的MBeans,实际上也实现了这个机制。但是,为了简单,这段代码被省略了。完整的Hello代码是: package com.example; import javax.management.*; public class Hello extends NotificationBroadcasterSupport implements HelloMBean { public void sayHello() { System.out.println("hello, world"); } public int add(int x, int y) { return x + y; } public String getName() { return this.name; } public int getCacheSize() { return this.cacheSize; } public synchronized void setCacheSize(int size) { int oldSize = this.cacheSize; this.cacheSize = size; System.out.println("Cache size now " + this.cacheSize); Notification n = new AttributeChangeNotification(this, sequenceNumber++, System.currentTimeMillis(), "CacheSize changed", "CacheSize", "int", oldSize, this.cacheSize); sendNotification(n); } @Override public MBeanNotificationInfo[] getNotificationInfo() { String[] types = new String[]{ AttributeChangeNotification.ATTRIBUTE_CHANGE }; String name = AttributeChangeNotification.class.getName(); String description = "An attribute of this MBean has changed"; MBeanNotificationInfo info = new MBeanNotificationInfo(types, name, description); return new MBeanNotificationInfo[]{info}; } private final String name = "Reginald"; private int cacheSize = DEFAULT_CACHE_SIZE; private static final int DEFAULT_CACHE_SIZE = 200; private long sequenceNumber = 1; } 这Hello MBean扩展了NotificationBroadcasterSupport类。NotificationBroadcasterSupport实现了NotificationEmitter 接口。 标准MBean的属性和操作和之前的一样出来CacheSize 的setter方法现在定义了一个oldSize,用于记录CacheSize之前设置的值。   setCacheSize() 方法里构造了一个AttributeChangeNotification实例,AttributeChangeNotification扩展了javax.management.Notification接口。AttributeChangeNotification 使用了下面的作为参数:   在Hello MBean里this作为通知的对象名。   sequenceNumber被设置成1然后自增作为通知的序列号。   一个时间戳   消息的内容   改变的属性的名字   改变的属性的类型   老的值,这里是oldSize   新的值,这里是this.cacheSize   这个通知n被传递给 NotificationBroadcasterSupport.sendNotification()方法。   最后, 定义了一个MBeanNotificationInfo实例描述MBean生成的通知的信息。在这个例子里,是AttributeChangeNotification类型的通知。      Running the MBean Notification Example   再一次运行Hello MBean 然后使用JConsole和他交互,发送和接收消息。 这个例子需要JDk1.6及以后版本。   1. 如果你已经还没有写好,保存 jmx_examples.zip到你的工作目录。   2. 解压这个例子,在终端窗口中使用下面的命令。   unzip jmx_examples.zip   3. 在工作目录中编译这个例子。   javac com/example/*.java   4. 开始Main应用   java com.example.Main   5.在不同的终端窗口中开启JConsole   jconsole   6.在这个连接窗口中选中com.example.Main然后连接他。   一个当前平台的概述就展示出来了   7. 选择MBeans标签   这个面板展示了当前注册的MBeans。   8. 在窗体的左边,展开MBean树的com.example节点。   你可以看到这个例子的Hello MBean被注册为hello。如果你点击hello,你可以看到MBean树的Notifications节点。   9. 展开Notifications节点。   这个面板是空白的。   10. 点击订阅按钮。   当前的o号通知将被接收到,然后展示在通知节点标签。   11. 展开Hello MBean的属性节点,然后改变CacheSize属性为150   在这个Main应用的窗体中,一个属性改变信息被展示。这个接收到的通知的号码也会变成1.   12. 再展开Hello MBean的Notifications 节点。   通知的详细被人将被展示。   13. 关闭JConsole 然后退出。   
转载请注明原文地址: https://www.6miu.com/read-77033.html

最新回复(0)