- 浏览: 236408 次
- 性别:
- 来自: 北京
最新评论
-
Xgeeeeek:
讲的很细致,多谢~
JAVA RMI 实例 -
zontim:
...
JAVA RMI 实例 -
czl026:
简单明了,谢谢
[JMX一步步来] 1、JMX的Hello World -
manxisuo:
jtianguo 写道服务端和客户端在同一个包下,这句代码He ...
JAVA RMI 实例 -
manxisuo:
非常好,多谢!!
JAVA RMI 实例
一、简介
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,如下:
java 代码
- 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
java 代码
- public interface JackMBean {
- public void hi();
- }
3、创建一个Listener,监听到的Notification消息包将由此类负责处理。
java 代码
- 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如下:
java 代码
- 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/
2、 进入“name=jack”项,然后单击“hi”按钮来执行它。
四、总结
Notification和Java的事件模型是一样的,另外如果你买了《Eclipse从入门到精通》,你会发现第22.4节也使用了和Notification和Java的事件模型相同的设计方式。Notification在我们的实际项目中也用到了,象我们现在的给移动做的项目中(基于JMX实现),分散在各地方的工作站的日志,就是通过Notification方式,把每条产生的日志封装在Notification中实时发回主控服务器的。有机会我会发这一系统的关于日志的设计方案写一下,它实现了对各地工作站的集中的、实时的监控,非常实用。
发表评论
-
Lucene全文检索样例(解决大文本建索引)
2008-01-31 10:05 6476建索引:package com.pccw; i ... -
txt读取字符串(为实习生作的例子)
2008-01-29 18:27 1928try { FileInputStream fi = n ... -
关于Lucene索引合并解决方法
2008-01-28 10:21 9278由于Clustor的问题造成无法对索引进行同步,脑子中马上浮现 ... -
Spring 2.0 AOP 与事务配置
2007-11-20 16:13 2760Spring 2.0 AOP 与事务配置 ********* ... -
关于Soeckt 流操作的数据转换工具方法
2007-11-02 10:50 2178java 代码 package com ... -
Java socket开发实例入门
2007-08-21 16:08 12192socket用中文意思就是我 ... -
不使用webwork标签直接用Jsp取得Action中的值
2007-05-22 14:23 3057今天突然一个同事问我webwork如果不用标签只用JSP ... -
23种模式趣味解释
2007-05-22 10:36 1942创建型模式 1、FACTORY ... -
关于领域逻辑的三个主要模式
2007-05-13 22:36 2674事务脚本 事务脚本比较好理解,简单来说,就是将大多是事务,以过 ... -
又谈领域模型
2007-04-29 09:58 2222昨天,突然和阿敏谈起领域模型,发现自己的理解还是 ... -
简单Socket编程,来理解Socket
2007-02-27 09:34 2212Server端: java 代码 p ... -
[JMX一步步来] 9、基于JBoss来写MBean
2007-02-02 13:31 13817前面都是用JDK自带的JMX ... -
[JMX一步步来] 8、编写程序来连接MBean
2007-02-02 13:18 5923前面用Html、jconsole等方法连接上了MBeanSer ... -
[JMX一步步来] 7、用JDK5.0的JConsole来连接MBean
2007-02-02 13:09 8612前面所有看效果都是通过Html网页来看的。JDK5.0自带了一 ... -
[JMX一步步来] 6、模型Bean:Model Bean
2007-02-02 13:06 5723在上一节是用apache的commons-modeler来开发 ... -
[JMX一步步来] 5、用Apache的commons-modeler来辅助开发JMX
2007-02-02 12:59 6960一、前言 每一个MBean都要有一个接口,比如前面的H ... -
[JMX一步步来] 4、动态MBean:DynamicMBean
2007-02-02 12:48 6479一、前言 动态MBean是在运行期才定义它的属性和方法 ... -
[JMX一步步来] 2、JMX简介
2007-02-02 11:25 8772一、JMX简介 JMX是一 ... -
[JMX一步步来] 1、JMX的Hello World
2007-02-02 11:23 10109一、JMX简介 什么是JMX?在一篇网文中是这样说的: ... -
JAVA RMI 实例
2007-02-02 10:51 39285JAVA RMI 快速入门实例 本实例为参考多篇文章写就而成 ...
相关推荐
JMX一步步来JMX一步步来JMX一步步来JMX一步步来
jmx快速上手 jmx快速上手 jmx快速上手 jmx快速上手
jmx的简单介绍和使用,包含一些简单的代码示例,看完基本能了解jmx并使用。
JMX一步一步来,从最基本的应用开始入手,快速应用开发。
NULL 博文链接:https://tristan-s.iteye.com/blog/1997741
使用JMX接口来编写PMI应用程序,经验证,确实可行。
JMX实战 书中不仅有对于基础知识的介绍,还有对于JMX开发中重大的体系架构问题的深入探讨,总结了大量JMX开发中的设计模式,并讨论了框架、安全性与性能等等。书中提供了几个典型的例子,兼顾各种开发平台,这些...
使用jmx技术所需要的jar包,共有4个jar文件,可用于jmx开发
JBOSS的配置,JMX原理和应用,EJB3.0使用说明
1. 服务器端配置:(如果是本地监控,直接启动再选本地进程) 2. 主机名配置 3. 客户端配置
为什么JMX那么受欢迎,JMX到底有那些优势只得人们去学习和理解,本文从JMX的基本架构、hellowold jmx以及spring对JMX的支持讲起,希望大家能通过本文对JMX有个基础的认识,并能通过本文为今后学习JMX打个基础
server想知道一台主机上的特定的JMX值时,它向Zabbix-Java-gateway询问,而Zabbix-Javagateway使用“JMXmanagementAPI”去查询特定的应用程序,而前提是应用程序这端在开启时需要“-Dcom.sun.management.jmxremote”...
Fiddler导出jmx文件,解决Fiddler导出文件中 没有jmx文件选项,各个版本fiddler都适用
NULL 博文链接:https://jonerxq.iteye.com/blog/1990872
jmx配置
Description Resource Path Location Type Missing artifact com.sun.jmx:jmxri:jar:1.2.1 pom.xml /eshop-storm line 2 Maven Dependency Problem
BEA WebLogic Server实现了JMX大部分的API,并且提供了一个完全兼容JMX的控制台来管理各种资源。OPEN SOURCE的应用服务器JBoss也是基于JMX来实现。并且对之评价很高,认为是目前为止最好的软件集成工具。JBoss的成功...