- 浏览: 151373 次
- 性别:
- 来自: 北京
最新评论
-
pandengzhegt:
好牛!正需要!谢谢了!
JPA 2.0 中的动态类型安全查询 -
yanlp:
万分的感谢。
仿google 的输入提示框 -
huangwenji6111:
可谓良师,在此拜谢!受益匪浅!
hibernate lazy -
jwx0925:
不错!mark!
hibernate对象状态 -
leftstick:
大有裨益,谢了!
hibernate lazy
一、简介
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中实时发回主控服务器的。有机会我会发这一系统的关于日志的设计方案写一下,它实现了对各地工作站的集中的、实时的监控,非常实 用。
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中实时发回主控服务器的。有机会我会发这一系统的关于日志的设计方案写一下,它实现了对各地工作站的集中的、实时的监控,非常实 用。
发表评论
-
java实现Tree
2012-07-10 09:59 876/****************************** ... -
Java正则表达式应用总结
2012-05-25 12:23 1096一、概述 正则表达式是Java处理字符串、文本的重要工具。 ... -
JdbcTemplate与事务
2012-05-17 17:42 1122JdbcTemplate与事务 上例中的JdbcTemplat ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-05-09 17:59 922最近的机器内存又爆满 ... -
jconsole远程监控Java进程
2012-05-07 11:44 1073JDK中的工具jconsole可以很好地监控Java进程及其运 ... -
spring集成quartz
2012-04-16 15:56 2218首先,让spring框架运转起来,可以参看一下:ht ... -
JMX RMI 访问
2011-09-02 10:46 4513RMI(Remote Method Invocation) R ... -
采用开发框架quartz调度管理Job
2011-07-11 10:03 19551.所需要的第三方包:quartz-1.5.2.jarcom ... -
java类型转换
2011-05-20 17:13 912string和int之间的转换? 字符串转换成数据 ... -
java整型数与网络字节序的 byte[] 数组转换关系
2011-05-05 10:47 3778因工作需要在java和c/c++之间进行socket通信,而 ... -
线程安全总结(二)
2010-11-12 10:34 851站内很多人都问我,所谓线程的“工作内存”到底是个什么东西? ... -
java线程安全总结
2010-11-12 10:33 831java线程安全总结(二 ... -
ora-02289问题解决
2010-10-19 12:35 1639<id name="id" type ... -
JDBC的批处理操作三种方式 pstmt.addBatch();
2010-09-25 15:58 8716SQL批处理是JDBC性能优化的重要武器,经本人研究总结,批处 ... -
log4j输出多个自定义日志文件
2010-05-12 10:28 1515<转>http://hi.baidu.com/ ... -
spring任务调度
2010-04-28 09:48 1406概述 在JDK 1.3以后的版本中,Java通过java.ut ... -
JDK线程池的使用
2010-04-07 16:35 1454一、简介 线程池类为 j ... -
Java文件操作
2010-02-06 15:29 873本文汇集常用文件操作方法,包括文件的建立/检查与删除,目录的建 ... -
[JMX一步步来] 6、Model Bean
2009-12-21 11:46 1213在上一节是用apache的commons-modeler来 ... -
[JMX一步步来] 5、用Apache的commons-modeler来辅助开发JMX
2009-12-21 11:45 1079一、前言 每一个MBean都要有一个接口,比如前面的Hello ...
相关推荐
在这个特定的上下文中,它可能与博主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...