复习
JMX构架中的各层及相关的组件
Mbean之间的通信是必不可少的,Notification就起到了在Mbean之间沟通桥梁的作用。JMX notification 由四部分组成:
接着上一篇的例子,Hello中有一个printHello(String whoName)方法,意思根据碰到的是谁来打招呼,比如:
1)再创建一个MBean
public class Jack extends NotificationBroadcasterSupport implements JackMBean { private int seq = 0; @Override public 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(); }
监听到的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/
start..... type=jack.hi source=jmx.notification.Jack@7526e85f seq=1 send time=1363846170375 message=Jack-notif-msg Hello , Jack-notif-msg