- 浏览: 375847 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ytlviv:
利器深藏之而不用,非常时方现光芒
[JMX一步步来] 4、动态MBean:DynamicMBean -
fantaxy025025:
总结的不错!搜藏了。原有的链接里面内容css有问题。辛苦楼主! ...
[JMX一步步来] 1、JMX的Hello World(转) -
xuyb_0314:
非常不错~~
查看ORACLE表空间使用情况的SQL语句 -
elan1986:
谢谢 在你这里找到了
在winxp下使用bat文件运行java程序而不弹出dos窗口 -
lqw8668:
...
XP SP2下安装Rose 出现 “MEM_BAD_POINTER”错误的解决方法
一、简介
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,如下:
说明:
* 必需继承NotificationBroadcasterSupport
* 此类只有一个hi方法,方法只有两句:创建一个Notification消息包,然后将包发出去
* 如果你还要在消息包上附加其他数据,Notification还有一个setUserData方法可供使用
2、接下来是他的MBean
3、创建一个Listener,监听到的Notification消息包将由此类负责处理。
4、修改HelloAgent如下:
三、运行
1、先运行HelloAgent启动服务,再打开浏览器输入网址:http://localhost:8082/
2、进入“name=jack”项,然后单击“hi”按钮来执行它。
四、总结
Notification和Java的事件模型是一样的,另外如果你买了《Eclipse从入门到精通》,你会发现第 22.4节也使用了和Notification和Java的事件模型相同的设计方式。Notification在我们的实际项目中也用到了,象我们现在的 给移动做的项目中(基于JMX实现),分散在各地方的工作站的日志,就是通过Notification方式,把每条产生的日志封装在 Notification中实时发回主控服务器的。有机会我会发这一系统的关于日志的设计方案写一下,它实现了对各地工作站的集中的、实时的监控,非常实 用。
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/
2、进入“name=jack”项,然后单击“hi”按钮来执行它。
四、总结
Notification和Java的事件模型是一样的,另外如果你买了《Eclipse从入门到精通》,你会发现第 22.4节也使用了和Notification和Java的事件模型相同的设计方式。Notification在我们的实际项目中也用到了,象我们现在的 给移动做的项目中(基于JMX实现),分散在各地方的工作站的日志,就是通过Notification方式,把每条产生的日志封装在 Notification中实时发回主控服务器的。有机会我会发这一系统的关于日志的设计方案写一下,它实现了对各地工作站的集中的、实时的监控,非常实 用。
发表评论
-
web.xml里<filter-mapping>中的<dispatcher>作用
2009-12-08 17:20 11220在2.4版本的servlet规范在部属描述符中新增加 ... -
(转)Taglib部署的三种方式
2009-12-04 13:07 0本周,由于项目的需要引入了jstl,但是在jsp页 ... -
Iframe页面请求跳转问题解决
2009-11-04 21:15 5234问题描述: 在父页面的一个Iframe页面中,提交请求后 ... -
JAF简介
2009-11-01 21:05 2558JAF全称是JavaBeans ... -
是 String , StringBuffer 还是 StringBuilder ?
2009-10-18 15:42 1424相信大家对 String 和 StringBuffer 的区别 ... -
选择Java接口还是抽象类
2009-10-17 16:23 3491关于java接口与 ... -
Java接口与Java抽象类的区别
2009-10-17 16:01 1413Java接口与Java抽象类的区别: 1. Java抽 ... -
为何不能通过返回值来区分重载方法?
2009-06-28 16:20 3093在java中,重载是其一个非常重要的特性。使用重载,我 ... -
怎么处理警告:编码 GBK 的不可映射字符
2009-04-17 01:31 3062在使用ant编译代码时提示 “编码 GBK 的不可映射字 ... -
既然认为它是好的,就要发挥到极限-系列之二单元测试
2009-03-29 17:07 958(原文)http://www.blogjava.net ... -
weblogic10 下对jVM性能调优设置(参考资料)
2009-03-25 12:36 2907对 JRockit JVM优化 Ta ... -
lazy initialization实现Singleton时synchronized的必要性
2009-03-19 21:48 2470首先了解一下Singleton模式通常的两种表现形式: 第一种 ... -
Guidelines, Patterns, and Code for End-to-End Java
2009-02-02 13:45 1059This document contains recomm ... -
poi即将提供对OOXML的支持
2008-11-06 23:18 9176POI是apache项目之一,最新版是3.2,它提 ... -
JSP在Servlet中的几个编码的作用及原理
2008-10-05 11:27 1610首先,说说JSP/Ser ... -
使用jconsole监控Apusic
2008-08-19 10:39 1601JDK 1.5+提供了jconsole工具,可以对JVM实例的 ... -
jconsole+tomcat配置说明(基于jdk5.0)
2008-08-18 23:18 8570最近需要参与一些java程 ... -
CruiseControl配置文档元素详解
2008-07-31 22:16 0<cruisecontrol> & ... -
抽象类和接口的区别
2008-07-26 20:19 1049在Java语言中, abstract class ... -
十个最好的Java性能故障排除工具
2008-07-21 13:00 1445推荐十个最好的Java性能故障排除工具: 1.jconsole ...
相关推荐
在这个特定的上下文中,它可能与博主Tristan分享的一篇博客文章有关,该文章可能详细介绍了如何利用JMX进行通知服务(Notification Service)的实现或使用。 在Java中,JMX允许开发者创建、注册和管理被称为MBeans...
【JMX学习——一步步来】 JMX,全称为Java Management Extensions,是一个用于植入管理功能到Java应用程序的框架。它提供了一套标准的接口和服务,使得开发者可以在任何Java应用中实现管理和监控。对于初学者来说,...
【JMX 一步步来】 JMX(Java Management Extensions)是一个用于在Java应用程序中添加管理和监控功能的框架。它提供了一套标准的接口和服务,使得开发者能够轻松地在Java应用中集成管理和监控的能力。JMX的核心概念...
Java Management Extensions(JMX)是Java平台提供的一种标准管理框架,用于监控和管理应用程序、操作系统、网络设备等。它提供了一种统一的方式来暴露管理和控制信息,使得开发者可以创建可管理和自描述的服务。JMX...
3. `jmxfetch.jar`: 这可能是JMX Fetch的JAR包,一个开源工具,用于收集和聚合JMX MBean的数据,通常用于监控和报警系统。它可以帮助自动化JMX数据的收集,便于集成到监控解决方案中。 4. `jmxtools.jar`: 这是JMX ...
3. **Management Clients**: 这些是使用JMX API与MBean Server交互的应用程序。在本项目中,"ops-container"可能就是一个管理客户端,它连接到WebLogic、Tomcat和WebSphere的MBean Server,并执行监控任务。 4. **...
1. **远程JMX连接**:Java默认使用Remote Method Invocation (RMI) 协议来实现远程JMX连接。通过设置`-Dcom.sun.management.jmxremote.rmi.port`和`-Dcom.sun.management.jmxremote.port`等参数,可以启用RMI服务,...
Java Management ...总之,JMX提供了一种灵活、统一的方式来管理和监控Java应用,而"最简单JMX例子"是学习这项技术的良好起点。通过实际操作这个例子,你将更好地理解JMX的工作机制,并能将其运用到自己的项目中。
这个例子将探讨如何在实际应用中使用JMX来实现远程监控和管理功能。 首先,JMX允许开发者定义名为MBeans(Managed Beans)的对象,这些对象代表了可管理的资源,如系统状态、配置参数或服务性能指标。MBeans可以是...
在本文中,我们将深入探讨JMX的核心概念、关键组件以及如何使用所提供的JAR和文档来学习和实践JMX。 首先,JMX允许开发者创建可管理的组件,这些组件称为Managed Beans或MBeans。MBeans可以是Standard MBeans、...
4. 启动与停止:通过执行`$JBOSS_HOME/bin/standalone.sh`启动服务器,使用`$JBOSS_HOME/bin/standalone.bat`(Windows系统)或`$JBOSS_HOME/bin/stop-standalone.sh`(Linux系统)来停止服务器。 二、JMX(Java ...
Java Management Extensions(JMX)是Java平台上的一个标准技术,用于管理和监控应用程序、系统和服务。JMX允许开发者创建可管理的组件,这些组件可以暴露其状态、性能指标和操作,以便于通过管理工具进行监控和配置...
jmx的简单介绍和使用,包含一些简单的代码示例,看完基本能了解jmx并使用。
本篇文章将深入探讨JMX的核心概念、功能及如何通过一个小例子来理解和使用JMX。 **1. JMX核心概念** - **MBean(Managed Beans)**: MBean是JMX中最基本的管理单元,它是Java对象,代表可管理的资源或服务。MBean...