`
ywChen
  • 浏览: 121080 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JMX(三)Notification

    博客分类:
  • J2EE
 
阅读更多

MBean之间的通信是必不可少的,Notification就起到了在MBean之间沟通桥梁的作用,JMX Notification由4个部分组成:

Notification 这个相当于一个信息包,封装了需要传递的信息。

Notification broadcast 这相当于一个广播器,把消息广播出去。

Notification listerner 这是一个监听器,用于监听广播出来的Notification 消息。

Notification filter 这是一个过滤器,过滤掉不需要的Notification 消息。

Notification broadcast不需要我们实现,JMX内部已经有了,Notification filter 一般也很少用,下面的例子主要用到

Notification 、Notification listerner。

 

1.目录结构

 

在hello中有一个sayHello(String message)方法,意思是根据碰到的是谁来打招呼,比如:

jack从对面走过来,说:‘hi’
我们回礼,说:‘hello jack“

首先需要jack先说一个hi(相应一个操作),然后他说的话封装成声波(相当于Notification 消息包)传递出去,然后我们还要给jack装上一个监听器(耳朵),这个监听器将捕捉到jack的声波语音包,并进行相应的处理,即说”hello jack“。

 

 

2.将jack写成一个MBean 

 

   JackMBean

package jmx.notification;

public interface JackMBean {

	public void hi();
}

 Jack

 

package jmx.notification;

import javax.management.Notification;
import javax.management.NotificationBroadcasterSupport;
/**
 * Jack必须继承NotificationBroadcasterSupport
 * 此类只有一个hi方法,方法只有两句:创建消息报,然后将包发出去
 * 如果你还要在消息包上附加其他数据,notification还有一个setUserData()方法
 * @author chenyw
 *
 */
public class Jack extends NotificationBroadcasterSupport implements JackMBean{
	private int seq =0;
	@Override
	public void hi() {
		Notification n = new Notification(//创建一个信息包
				"jack.hi",//给这个Notifiction起一个名字
				this,//由谁发出的Notification
				++seq,//一系列通知中的序列号,可以设置任意数
				System.currentTimeMillis(),//发出时间
				"Jack"//发出文本
		);
		sendNotification(n);
	}

}
 

 

3.创建一个Listerner,监听到的Notification 消息包将由此类负责处理。

HelloListener

package jmx.notification;

import javax.management.Notification;
import javax.management.NotificationListener;

/**
 * 创建一个Listener,监听到的Notification消息包将由此类负责处理
 * @author chenyw
 *
 */
public class HelloListener implements  NotificationListener{

	@Override
	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 h = (Hello)handback;
				h.sayHello(n.getMessage());
			}
			
		}
	}

}
 

4.修改HelloAgent

package jmx.notification;


import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import com.sun.jdmk.comm.HtmlAdaptorServer;

/**
 * 
 *该类是一个Agent类,说明: 先创建了一个MBeanServer,用来做MBean的容器
 * 将Hello这个类注入到MBeanServer中,注入需要创建一个ObjectName类
 * 创建一个AdaptorServer,这个类将决定MBean的管理界面,这里用最普通的Html型界面。 AdaptorServer其实也是一个MBean。
 * jmx.hello:name=Hello的名字是有一定规则的,格式为:“域名:name=MBean名称”,
 * 域名和MBean名称都可以任意取。 打开网页:http://localhost:8082/
 * 
 */
public class HelloAgent {
	public static void main(String[] args) throws Exception {
		// 创建一个MBeanServer,用来做MBean的容器
		MBeanServer mbs = MBeanServerFactory.createMBeanServer();
		// 将Hello这个类注入到MBeanServer中,注入需要创建一个ObjectName类
		ObjectName helloAdaptor = new ObjectName(
				"jmx.hello:name=Hello");
		Hello hello = new Hello();
		mbs.registerMBean(hello, helloAdaptor);
		ObjectName htmlAdaptorON = new ObjectName(
				"jmx.agent:name=HelloAgent,port=8082");
		// 创建一个AdaptorServer,这个类将决定MBean的管理界面,这里用最普通的Html型界面
		HtmlAdaptorServer htmlAdaptor = new HtmlAdaptorServer();
		mbs.registerMBean(htmlAdaptor, htmlAdaptorON);
		//加入Notification
		Jack jack = new Jack();
		mbs.registerMBean(jack, new ObjectName(
				"jmx.jack:name=Jack"));
		jack.addNotificationListener(new HelloListener(), null, hello);
		System.out.println("Starting the HtmlAdaptor....");
		htmlAdaptor.start();

	}
}

 

5.运行HelloAgent,打开浏览器http://localhost:8082


进入那么=jack,然后点击hi按钮来执行它,这是控制台显示:


 

  • 大小: 13.1 KB
  • 大小: 38.4 KB
  • 大小: 9.8 KB
分享到:
评论

相关推荐

    jmx_tristan_notification

    7. **工具支持**:提到了Java标准工具(如JConsole、VisualVM)和其他第三方工具,如何利用这些工具与JMX交互,查看和接收通知。 由于没有具体的博客内容,以上推测基于通常JMX通知服务会涉及的话题。如果想深入...

    JAVA JMX 学习资料

    JMX架构由三个主要部分组成:MBeans(Managed Beans)、Servers和Clients。MBeans是可管理的对象,代表服务或资源;Servers是运行在Java虚拟机中的代理,它们暴露MBeans给外部访问;Clients则是与Server交互的应用...

    jmx监控weblogic,tomcat,websphere源码

    4. **Notification**: JMX支持发布/订阅模型,MBeans可以发送通知到感兴趣的客户端,使得实时监控成为可能。 通过JMX,开发者可以实现自定义的监控解决方案,例如收集性能指标、触发警报或自动调整系统设置。这个...

    jmx学习资料

    4. **Notification**: JMX支持Notification机制,MBeans可以发布通知,其他组件可以通过订阅来接收这些通知,实现事件驱动的管理。 5. **JMX Connectors**: 这是JMX与外部世界的桥梁,提供了多种标准的协议和API,...

    最简单JMX例子

    4. **Notification**:MBean可以发送通知事件,告知管理器其状态的改变或其他重要事件。 5. **Connector**:连接器提供客户端与MBeanServer之间的通信,允许客户端访问和管理MBean。 在"jxmdemo"这个压缩包中,很...

    JMX小例子以及介绍

    - **Notification**: JMX允许MBean发送通知,这使得其他MBeans或管理工具可以订阅并接收有关系统状态变化的信息。 - **JMX连接器**: 连接器是JMX与外部世界交互的桥梁,它们允许管理应用程序通过JMX API连接到MBean...

    JMX 入门 详细 教程

    3. **Notification**: JMX 支持Notification机制,MBeans 可以发送通知给感兴趣的监听者,这对于事件驱动的管理系统特别有用。 4. **Management Agents**: JMX 还包括Management Agents,它们负责暴露MBean Server...

    jmx-1_2_1-ri.zip jmx_remote-1_0_1_03-ri.zip jmx-1_1-mr-spec.zip

    这里提到的三个ZIP文件包含了不同版本的JMX实现和规范,分别是: 1. **jmx-1_2_1-ri.zip**:这个文件提供了JMX 1.2.1版本的运行时实现(Runtime Implementation,RI)。RI是JMX规范的具体实现,允许开发者在Java...

    jmx中包含的主要API

    这个类继承自 `Notification`,用于表示客户端连接的开启、关闭、失败或通知丢失等事件。这些事件由连接器服务器(`JMXConnectorServer` 实例)和连接器客户端(`JMXConnector` 实例)发出。例如,类型为 `jmx....

    网络管理之jmx开发实战

    3. **定义NotificationHandler**:用于接收来自Timer的通知。 4. **实例化监听器并注册到MBeanServer**。 5. **启动计时器**: ```java lServer.invoke(new ObjectName(":service=timer"), "start", new Object[]{...

    JMXTools.jar和jmxri.jar下载

    MBeans有三种类型:Standard MBeans、Dynamic MBeans和Open MBeans。 2. **MBean Server**:MBean服务器是JMX架构的心脏,它负责实例化、注册、查询和操作MBeans。所有MBean都在MBean服务器中注册并管理。 3. **...

    jmxtools.jar jmxri.jar

    5. **通知机制**:JMX还支持通知(Notification)机制,允许MBean发送事件到感兴趣的监听器,实现异步通信。 在实际应用中,JMX常用于监控服务器性能、管理应用程序配置、追踪日志、甚至控制系统的启动和停止等。...

    jmx入门

    **三、简单JMX示例** 让我们通过一个简单的例子来了解JMX的工作流程: 1. 首先,定义一个MBean接口,比如`HelloWorldMBean`,包含一个返回字符串的属性`greeting`和一个输出问候的`sayHello`操作。 ```java ...

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

    Java Management Extensions(JMX)是Java平台上的一个标准,它提供了管理和监控应用程序、操作系统和网络设备的能力。在本文中,我们将深入探讨JMX的核心概念、关键组件以及如何使用所提供的JAR和文档来学习和实践...

    jmxtools-1.2 jmxri jar

    3. **JMX Notification Broadcaster**:帮助应用程序发布JMX通知,使得其他JMX客户端可以订阅并接收这些通知。 4. **MBeanServerBuilder**:帮助创建和配置MBeanServer,这是JMX的核心组件,负责注册、查找和管理...

    jmx依赖jar包 jmxtools-1.2.1.jar jmxri-1.2.1.jar

    3. **Notification**: JMX支持发布/订阅模型的通知机制,使得MBeans可以向感兴趣的客户端发送事件。 4. **Standard MBeans and Dynamic MBeans**: 标准MBeans是预先定义好的接口,而动态MBeans可以根据其属性和操作...

    JMX Step by Step

    **JMX(Java Management Extensions)**是Java平台提供的一种用于管理与监控应用程序、服务器和设备的标准框架。通过JMX,开发者可以轻松地为Java应用程序添加管理功能,使得系统管理员能够远程监控和控制程序的运行...

    JMX初学资料 初学者入门教程

    在JMX中,有三个主要元素:管理Bean(MBean)、MBean服务器和代理(Agent)。MBean是JMX的核心,它代表了可管理的资源或对象,可以是系统的一个特定方面,如内存使用情况或线程池状态。MBean服务器是运行MBean的地方...

Global site tag (gtag.js) - Google Analytics