`
liyiye
  • 浏览: 425189 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

3、Notification的使用

    博客分类:
  • jmx
阅读更多
一、简介
 
  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,如下: 
import javax.management.Notification;
import javax.management.NotificationBroadcasterSupport;
public class Jack extends NotificationBroadcasterSupport implements JackMBean {
    private int seq = 0;
    public void hi() {
        Notification n = new Notification(//创建一个信息包
                "jack.hi",//给这个Notification起个名称
                this, //由谁发出的Notification
                ++seq,//一系列通知中的序列号,可以设任意数值
                System.currentTimeMillis(),//发出时间
                "Jack");//发出的消息文本
        //发出去
        sendNotification(n);
    }
}
 
 说明:
  • 必需继承NotificationBroadcasterSupport
  • 此类只有一个hi方法,方法只有两句:创建一个Notification消息包,然后将包发出去
  • 如果你还要在消息包上附加其他数据,Notification还有一个setUserData方法可供使用
2、接下来是他的MBean 
public interface JackMBean {
    public void hi();
}
 
3、创建一个Listener,监听到的Notification消息包将由此类负责处理。
 
import javax.management.Notification;
import javax.management.NotificationListener;
public class HelloListener implements NotificationListener {
    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());
            }
        }
    }
}
 
4、修改HelloAgent如下(加上了红色的三句):
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import com.sun.jdmk.comm.HtmlAdaptorServer;
public class HelloAgent {
    public static void main(String args[]) throws Exception{
        MBeanServer server = MBeanServerFactory.createMBeanServer();
        ObjectName helloName = new ObjectName("chengang: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.....");
    }
}
 
三、运行 
1、先运行HelloAgent启动服务,再打开浏览器输入网址:http://localhost:8082/,出现如下界面。1133701664014_6541.jpg
 
2、 进入“name=jack”项,然后单击“hi”按钮来执行它。这时Eclipse的console视图显示如下:
 
1133702044916_7117.jpg

四、总结

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

分享到:
评论
1 楼 maomaoyusp 2009-07-08  
代码重复了,看不清呀

相关推荐

    android Notification使用大全

    在Android系统中,Notification是应用与用户交互的重要方式,它可以在状态栏中显示信息,即使用户不在使用应用时也能提醒用户有新的事件发生。本文将深入探讨如何在Android中使用Notification,包括基本用法、自定义...

    Android NOtification 使用

    3. Dialog Notification: 对话框通知通常用于显示需要用户立即响应的信息,如警告或确认操作。与前面两种不同,Dialog Notification不直接使用Notification Manager,而是通过`AlertDialog.Builder`创建对话框并...

    iphone notification 使用实例

    本教程将基于“iphone notification 使用实例”这一主题,详细介绍如何在iPhone上实现通知功能。 首先,我们要了解iOS中的通知类型:本地通知(Local Notification)和远程通知(Remote Notification,通常与Apple ...

    android Notification使用例子

    本项目是一个基于Android 2.3(Gingerbread)版本的小实例,旨在帮助开发者学习如何使用Notification API创建和管理通知。 首先,创建Notification需要使用`NotificationCompat.Builder`类,它是Android Support ...

    Notification的使用示例各种效果

    在构建`Notification`时,我们需要使用`NotificationCompat.Builder`类,它是Android Support Library提供的兼容版本,能确保在多个Android版本上运行。 1. **创建基本Notification** 使用`NotificationCompat....

    FFXIV_Notification.mp3

    FFXIV_Notification.mp3

    Notification的用法和PendingIntent使用

    3. 设置通知信息:使用 `setLatestEventInfo` 方法设置通知的标题、内容和 pending Intent。 4. 发送通知:使用 `NotificationManager` 的 `notify` 方法发送通知,并指定发送信息的显示图标和 Notification 对象。 ...

    Notification

    在"疯狂Android中有关Notification的简单例子"这个主题中,我们将深入探讨`Notification`的基本概念、创建过程以及相关的使用技巧。 首先,我们要明白`Notification`的作用。在繁忙的手机屏幕上,`Notification`能...

    Ext JS Notification 插件

    本文将深入探讨Ext JS Notification插件的使用方法、功能特性以及如何集成到项目中。 首先,Notification插件提供了一种非侵入性的方法来向用户传达关键信息,如操作成功、警告或错误提示。这些通知可以是临时的,...

    Notification最新用法、实现Notification的通知栏常驻、Notification的big View、解决Notification点击无效

    3. **Notification的big View样式** - big View是Android引入的一种扩展通知,可以展示更多的信息。通过`setStyle(new NotificationCompat.BigTextStyle())`启用。 - 可以使用`bigTextStyle.bigText()`来设置大...

    Notification示例

    3. **悬挂式Notification(heads-up)**: 这种类型的通知会在屏幕顶部短暂悬浮显示,吸引用户注意力。实现悬挂式Notification需要在创建时设置`Priority`为`PRIORITY_HIGH`或`PRIORITY_MAX`。同时,为了保证用户体验...

    3gpp-parlayx-wsdl-Call notification.zip

    标题 "3gpp-parlayx-wsdl-Call notification.zip" 涉及的是3GPP(第三代合作伙伴计划)中的ParlayX Web服务接口规范,特别是关于呼叫通知(Call Notification)的功能。3GPP是一个国际标准组织,致力于开发和推广...

    Notification 使用详解(很全)

    3. 设置 `Notification` 的属性: - `icon`:设置状态栏显示的图标,通常是应用资源中的一个 drawable 图标,如 `R.drawable.icon`。 - `tickerText`:通知滑出时显示的文本,通常简短地概括通知内容。 - `...

    Notification的使用demo

    3. **设置通知图标**:使用`setSmallIcon(int icon)`设置通知小图标,通常是应用的launcher图标。 4. **添加额外数据**:如果需要,可以使用`addExtras(Bundle extras)`添加额外的信息,这些信息可以通过点击通知后...

    Notification的示例源码

    综上所述,`Notification`是Android应用与用户交互的重要方式,理解和正确使用`Notification`能够提升用户体验。在实际项目中,开发者需要考虑通知的可见性、重要性和交互性,以提供恰当的反馈。`TestNotification`...

    Notification Demo

    下面我们将深入探讨Android通知的原理、使用方法以及在`NotificationDemo`中可能包含的关键代码。 首先,通知在Android系统中由`Notification`类表示,它包含了所有用于创建和管理通知的属性和行为。通知通常由`...

    vue-notification:使用Vue3的NotificationToast组件

    @ dafcoe / vue-notification 使用Vue3构建的易于使用,可自定义的通知/吐司库。 在页面上查看操作。安装使用yarn或npm将软件包安装为项目依赖项: $ yarn add @dafcoe/vue-notification--- or ---$ npm install --...

    Notification顶部通知栏demo

    本示例"Notification顶部通知栏demo"显然是为了演示如何创建和使用`Notification`。现在我们将深入探讨`Notification`的相关知识点。 首先,`Notification`的创建通常需要以下几个步骤: 1. **创建`...

Global site tag (gtag.js) - Google Analytics