`

JMX的Mbean之间的通信Notification的使用

    博客分类:
  • JMX
SUN 
阅读更多
Mbean之间的通信是必不可少的,Notification就起到了在Mbean之间沟通桥梁的作用。JMX notification 由四部分组成:

  • Notification 这个相当于一个信息包,封装了需要传递的信息
  • Notification broadcaster 这相当于一个广播器,把消息广播出去
  • Notification listerner 这是一个监听器,用于监听广播出来的Notification消息
  • Notification filter 这是一个过滤器,过滤掉不需要的Notification消息



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


在http://ldbjakyo.iteye.com/admin/blogs/778268
这篇文章中的例子HelloWorld中有一个printHello(String whoName)方法,意思根据碰到的是谁来打招呼,比如:


Jack从对面走过来,说:“hi”
我们回之以礼,说:“Hello, jack”



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


1、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起个名称 Notification n  n.getType()         
                this, //由谁发出的Notification Notification n  n.getSource()      
                ++seq,//一系列通知中的序列号,可以设任意数值 Notification n n.getSequenceNumber()              
                System.currentTimeMillis(),//发出时间 Notification n n.getTimeStamp()
                "Jack");//发出的消息文本   Notification n  n.getMessage()
        //发出去           
        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) {                
        		HelloWorld hello = (HelloWorld) handback;                
        		hello.printHello(n.getMessage());            
    		}        
    	}    
    }
}




4、修改HelloAgent如下(加上了关于jack的三句):


import javax.management.MBeanServer;   
import javax.management.MBeanServerFactory;   
import javax.management.ObjectName;   

import com.lidongbo.HelloWorld;
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("author:name=HelloWorld");      
        HelloWorld hello=new HelloWorld();          
        server.registerMBean(hello, helloName);       
        ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter");     
        HtmlAdaptorServer adapter = new HtmlAdaptorServer();          
        server.registerMBean(adapter, adapterName);        
        adapter.setPort(8080);

        Jack jack = new Jack();          
        server.registerMBean(jack, new ObjectName("HelloAgent:name=jack"));       //注册jack的那个MBean实现
        jack.addNotificationListener(new HelloListener(), null, hello);          //jackMBean 添加说hello的监听  ,这样就实现了MBean调MBean了  
        adapter.start();   
       
        System.out.println("start.....");       
    }   
}  




这样当调用jack hi方法 的时候,就顺带调用了HelloWorld  的 void printHello(String name)方法

0
0
分享到:
评论

相关推荐

    jmx_tristan_notification

    在这个特定的上下文中,它可能与博主Tristan分享的一篇博客文章有关,该文章可能详细介绍了如何利用JMX进行通知服务(Notification Service)的实现或使用。 在Java中,JMX允许开发者创建、注册和管理被称为MBeans...

    最简单JMX例子

    5. **Connector**:连接器提供客户端与MBeanServer之间的通信,允许客户端访问和管理MBean。 在"jxmdemo"这个压缩包中,很可能是包含了一个简单的JMX应用程序,可能包含以下关键部分: 1. **MBean类**:定义一个类...

    JMX小例子以及介绍

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

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

    RI是JMX规范的具体实现,允许开发者在Java应用程序中使用JMX功能,如创建MBeans(Managed Beans),管理对象和服务,以及实现远程监控。它包含API库、示例代码和必要的文档,帮助开发者理解和使用JMX 1.2.1的功能。 ...

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

    此外,MBean可以使用Notification机制发送事件,让其他MBean或监听器得知状态变化。 在远程管理方面,JMX提供了Connector接口,使得外部管理系统可以通过特定的协议(如JMX Remote Protocol)连接到MBean服务器。这...

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

    这些文档将帮助你理解MBean的生命周期管理、MBeanServer的交互方式,以及如何使用Notification机制进行事件处理。此外,它们可能还会涵盖如何使用JMX与外部管理系统(如SNMP或Web管理协议)集成。 为了有效地学习和...

    JAVA JMX 学习资料

    学习JMX,需要理解其基本概念,熟悉MBean的创建和注册,掌握如何使用JMX Connectors进行远程监控,以及如何利用JMX进行应用性能调优。对于开发者而言,JMX是提高应用可维护性和可管理性的重要工具。通过深入学习和...

    jmxtools.jar jmxri.jar

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

    jmx监控weblogic,tomcat,websphere源码

    3. **Management Clients**: 这些是使用JMX API与MBean Server交互的应用程序。在本项目中,"ops-container"可能就是一个管理客户端,它连接到WebLogic、Tomcat和WebSphere的MBean Server,并执行监控任务。 4. **...

    jmx学习资料

    2. **MBean Server**: MBean Server是JMX的核心组件,它负责注册MBeans、执行对MBeans的操作并处理MBeans之间的交互。它是管理域的中心,管理所有的MBeans。 3. **MBean操作和属性**: MBeans提供了接口,包含了操作...

    JMXTools.jar和jmxri.jar下载

    5. **JMX Connectors**:提供客户端和MBean服务器之间的通信机制。JMX Connectors有多种协议实现,如RMI、HTTP/HTTPS、JNDI等,使得远程管理成为可能。 在实际应用中,JMX常用于监控和管理Java应用程序的性能、配置...

    jmx入门

    4. **Notification**:MBean可以发布通知,向其他感兴趣的服务或组件广播特定事件的发生,如系统状态变化。 5. **Management Agents**:这些代理负责将JMX管理能力扩展到网络中其他非Java的系统。它们通常作为桥接...

    网络管理之jmx开发实战

    本文详细介绍了如何使用JMX进行网络管理的实际操作过程,包括创建Mlet配置文件、创建MBeanServer、调用MBean的方法等。此外,还介绍了几种不同的JMX实现以及如何使用Timer MBean。这些知识对于理解JMX的工作原理及其...

    JMX Step by Step

    3. **访问MBean**:客户端通过JMX Connector连接到MBean Server,然后使用`ObjectName`定位特定的MBean,调用其暴露的方法。 4. **管理MBean**:客户端可以读取MBean的属性,调用其操作,甚至可以订阅和接收MBean...

    JMX 入门 详细 教程

    3. **管理界面**: 使用JMX,你可以创建一个简单的Web界面,如HtmlAdaptorServer,允许用户通过浏览器直接修改MBean的`name`属性,并触发`printHello()`方法。 总结,JMX 提供了一种标准化的方法来管理和监控Java...

    JMX SPRING

    - **Notification**:MBean发送的事件,用于向管理者报告状态变化或其他重要事件。 - **NotificationListener**:接收并处理MBean发出的通知的接口。 **Spring中使用JMX的步骤**: 1. **定义MBean**:创建实现特定...

    JMX应用技术架构系统(包括具体开发说明)

    - **Connector**:用于MBean Server与其他系统的通信接口。 ## 3. JMX体系架构 ### 3.1 JMX体系结构 JMX架构包含三个主要组件:MBean、MBean Server和管理客户端。 - **MBean**:提供管理功能的对象,通过MBean ...

    jmxtools-1.2 jmxri jar

    2. **JMXMP-Agent**:JMX Message Passing Protocol(JMXMP)是一个简单的JMX远程连接协议,`jmxtools-1.2.jar`可能包含了实现这个协议的代码,用于建立客户端和服务器之间的JMX连接。 3. **JMX Notification ...

Global site tag (gtag.js) - Google Analytics