`
bluestar
  • 浏览: 376469 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[JMX一步步来] 3、Notification的使用

    博客分类:
  • java
阅读更多
一、简介
   
Mbean之间的通信是必不可少的,Notification就起到了在Mbean之间沟通桥梁的作用。JMX notification 由四部分组成:
   
* Notification 这个相当于一个信息包,封装了需要传递的信息
   
* Notification broadcaster 这相当于一个广播器,把消息广播出去
   
* Notification listerner 这是一个监听器,用于监听广播出来的Notification消息
   
* Notification filter 这是一个过滤器,过滤掉不需要的Notification消息
   
Notification broadcaster不需要我们实现,JMX的内部已经有了。Notification filter一般也很少用。下面的例子主要用到了Notification、Notification listerner。

二、实例
   
在第一篇的Hello中有一个printHello(String whoName)方法,意思根据碰到的是谁来打招呼,比如:
    Jack从对面走过来,说:“hi”
    我们回之以礼,说:“Hello, jack”
   
先这需要Jack先说一个hi(相应一个操作方法),然后他说的话封装成声波(相当Notification消息包)传递 出去。然后我们还要给Jakc装上一个监听器(Hello的耳朵??^_^),这个监听器将捕捉到Jack的声波语音包,并进行相应处理,即说 “Hello, jack”。
   
好,我们看看如何实现的:

   
1、Jack类及其相应的MBean
      
我们把Jack写成一个MBean,如下:
  1. import javax.management.Notification;  
  2. import javax.management.NotificationBroadcasterSupport;  
  3.   
  4. public class Jack extends NotificationBroadcasterSupport implements JackMBean {  
  5.     private int seq = 0;  
  6.     public void hi() {  
  7.         Notification n = new Notification(//创建一个信息包  
  8.                 "jack.hi",//给这个Notification起个名称  
  9.                 this//由谁发出的Notification  
  10.                 ++seq,//一系列通知中的序列号,可以设任意数值  
  11.                 System.currentTimeMillis(),//发出时间  
  12.                 "Jack");//发出的消息文本  
  13.         //发出去  
  14.         sendNotification(n);  
  15.     }  
  16. }  
说明:
   
* 必需继承NotificationBroadcasterSupport
   
* 此类只有一个hi方法,方法只有两句:创建一个Notification消息包,然后将包发出去
   
* 如果你还要在消息包上附加其他数据,Notification还有一个setUserData方法可供使用

   
2、接下来是他的MBean
  1. public interface JackMBean {  
  2.     public void hi();  
  3. }  
   
   
3、创建一个Listener,监听到的Notification消息包将由此类负责处理。
 
  1. import javax.management.Notification;  
  2. import javax.management.NotificationListener;  
  3. public class HelloListener implements NotificationListener {  
  4.     public void handleNotification(Notification n, Object handback) {  
  5.         System.out.println("type=" + n.getType());  
  6.         System.out.println("source=" + n.getSource());  
  7.         System.out.println("seq=" + n.getSequenceNumber());  
  8.         System.out.println("send time=" + n.getTimeStamp());  
  9.         System.out.println("message=" + n.getMessage());  
  10.   
  11.         if (handback != null) {  
  12.             if (handback instanceof Hello) {  
  13.                 Hello hello = (Hello) handback;  
  14.                 hello.printHello(n.getMessage());  
  15.             }  
  16.         }  
  17.     }  
  18. }  

   
4、修改HelloAgent如下:
  1. import javax.management.MBeanServer;  
  2. import javax.management.MBeanServerFactory;  
  3. import javax.management.ObjectName;  
  4. import com.sun.jdmk.comm.HtmlAdaptorServer;  
  5. public class HelloAgent {  
  6.     public static void main(String args[]) throws Exception{  
  7.         MBeanServer server = MBeanServerFactory.createMBeanServer();  
  8.         ObjectName helloName = new ObjectName("chengang:name=HelloWorld");  
  9.         Hello hello=new Hello();  
  10.         server.registerMBean(hello, helloName);  
  11.         ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter,port=8082");  
  12.         HtmlAdaptorServer adapter = new HtmlAdaptorServer();  
  13.         server.registerMBean(adapter, adapterName); 
  14.         Jack jack = new Jack();  
  15.         server.registerMBean(jack, new ObjectName("HelloAgent:name=jack"));  
  16.         jack.addNotificationListener(new HelloListener(), null, hello);  
  17.         adapter.start();  
  18.         System.out.println("start.....");  
  19.     }  
  20. }  

三、运行
   
1、先运行HelloAgent启动服务,再打开浏览器输入网址:http://localhost:8082/
   
2、进入“name=jack”项,然后单击“hi”按钮来执行它。

四、总结
   
Notification和Java的事件模型是一样的,另外如果你买了《Eclipse从入门到精通》,你会发现第 22.4节也使用了和Notification和Java的事件模型相同的设计方式。Notification在我们的实际项目中也用到了,象我们现在的 给移动做的项目中(基于JMX实现),分散在各地方的工作站的日志,就是通过Notification方式,把每条产生的日志封装在 Notification中实时发回主控服务器的。有机会我会发这一系统的关于日志的设计方案写一下,它实现了对各地工作站的集中的、实时的监控,非常实 用。
分享到:
评论

相关推荐

    jmx一步步来 jmx快速上手指南

    2. **监控与诊断**:JMX提供了一种机制来收集有关应用程序的运行时信息,包括但不限于内存使用情况、线程统计信息等,有助于开发者进行故障排查。 3. **自动化管理**:利用JMX,可以编写脚本或者工具来自动生成报告...

    jmx_tristan_notification

    在这个特定的上下文中,它可能与博主Tristan分享的一篇博客文章有关,该文章可能详细介绍了如何利用JMX进行通知服务(Notification Service)的实现或使用。 在Java中,JMX允许开发者创建、注册和管理被称为MBeans...

    JMX学习——一步步来

    【JMX学习——一步步来】 JMX,全称为Java Management Extensions,是一个用于植入管理功能到Java应用程序的框架。它提供了一套标准的接口和服务,使得开发者可以在任何Java应用中实现管理和监控。对于初学者来说,...

    JMX一步一步来,快速学会开发JMX应用

    【JMX 一步步来】 JMX(Java Management Extensions)是一个用于在Java应用程序中添加管理和监控功能的框架。它提供了一套标准的接口和服务,使得开发者能够轻松地在Java应用中集成管理和监控的能力。JMX的核心概念...

    JMX配置与使用

    Java Management Extensions(JMX)是Java平台提供的一种标准管理框架,用于监控和管理应用程序、操作系统、网络设备等。它提供了一种统一的方式来暴露管理和控制信息,使得开发者可以创建可管理和自描述的服务。JMX...

    使用jmx所需的jar包

    3. `jmxfetch.jar`: 这可能是JMX Fetch的JAR包,一个开源工具,用于收集和聚合JMX MBean的数据,通常用于监控和报警系统。它可以帮助自动化JMX数据的收集,便于集成到监控解决方案中。 4. `jmxtools.jar`: 这是JMX ...

    jmx监控weblogic,tomcat,websphere源码

    3. **Management Clients**: 这些是使用JMX API与MBean Server交互的应用程序。在本项目中,"ops-container"可能就是一个管理客户端,它连接到WebLogic、Tomcat和WebSphere的MBean Server,并执行监控任务。 4. **...

    jmx三种访问方式

    1. **远程JMX连接**:Java默认使用Remote Method Invocation (RMI) 协议来实现远程JMX连接。通过设置`-Dcom.sun.management.jmxremote.rmi.port`和`-Dcom.sun.management.jmxremote.port`等参数,可以启用RMI服务,...

    最简单JMX例子

    Java Management ...总之,JMX提供了一种灵活、统一的方式来管理和监控Java应用,而"最简单JMX例子"是学习这项技术的良好起点。通过实际操作这个例子,你将更好地理解JMX的工作机制,并能将其运用到自己的项目中。

    jmx例子一则

    这个例子将探讨如何在实际应用中使用JMX来实现远程监控和管理功能。 首先,JMX允许开发者定义名为MBeans(Managed Beans)的对象,这些对象代表了可管理的资源,如系统状态、配置参数或服务性能指标。MBeans可以是...

    JMX需要的JAR和文档和可运行的例子

    在本文中,我们将深入探讨JMX的核心概念、关键组件以及如何使用所提供的JAR和文档来学习和实践JMX。 首先,JMX允许开发者创建可管理的组件,这些组件称为Managed Beans或MBeans。MBeans可以是Standard MBeans、...

    JBOSS使用指南,JMX原理和应用,EJB3.0使用说明

    4. 启动与停止:通过执行`$JBOSS_HOME/bin/standalone.sh`启动服务器,使用`$JBOSS_HOME/bin/standalone.bat`(Windows系统)或`$JBOSS_HOME/bin/stop-standalone.sh`(Linux系统)来停止服务器。 二、JMX(Java ...

    JAVA JMX 学习资料

    Java Management Extensions(JMX)是Java平台上的一个标准技术,用于管理和监控应用程序、系统和服务。JMX允许开发者创建可管理的组件,这些组件可以暴露其状态、性能指标和操作,以便于通过管理工具进行监控和配置...

    jmx介绍和使用

    jmx的简单介绍和使用,包含一些简单的代码示例,看完基本能了解jmx并使用。

    JMX小例子以及介绍

    本篇文章将深入探讨JMX的核心概念、功能及如何通过一个小例子来理解和使用JMX。 **1. JMX核心概念** - **MBean(Managed Beans)**: MBean是JMX中最基本的管理单元,它是Java对象,代表可管理的资源或服务。MBean...

Global site tag (gtag.js) - Google Analytics