JMX Notification

 

JMX Notification 收藏

<script type="text/javascript"> document.body.oncopy = function() { if (window.clipboardData) { setTimeout(function() { var text = clipboardData.getData("text"); if (text && text.length>300) { text = text + "/r/n/n本文来自CSDN博客,转载请标明出处:" + location.href; clipboardData.setData("text", text); } }, 100); } } </script> <script type="text/javascript">function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

 

Mbean 之间的通信是必不可少, Notification 就起到了 Mbean 之间沟通桥梁的作用。 JMX notification model java event model 类似,将一些重要的信息,状态的转变,数据的变更传递给 notification listener 。以使资源更容易管理。

 

JMX notification 由四部分组成:

1、  Notification

2、  Notification broadcaster

3、  Notification listerner

4、  Notification filter

 

 

通过简单的 HelloWorld 例子来说明 Notification 的实现过程吧。

 

HelloWorldMBean.java

 

package notification;

 

public interface HelloWorldMBean {

    public void setGreeting(String greeting);

    public String getGreeting();

    public void printGreeting();

}

 

 

HelloWorld.java

 

/*

  * Created on 2004-12-27

  * @author roson

  */

package notification;

 

import java.io.*;

import javax.management.*;

public class HelloWorld extends NotificationBroadcasterSupport

                                          implements HelloWorldMBean

{

    private String greeting;

    public HelloWorld()

    {

        this.greeting = "Hello World! I am a Standard MBean";

    }

 

    public HelloWorld( String greeting )

    {

        this.greeting = greeting;

    }

    public void setGreeting( String greeting )

    {   // 更改属性这里增加了 notification 只要更改属性就可以看到。

         this.greeting = greeting;

        Notification notification = new Notification(

                "jmxbook.ch2.helloWorld.test"

                this,                                      -1,

                System.currentTimeMillis(),        

                greeting);

                      

        sendNotification( notification );

    }

 

    public String getGreeting()

    {

        return greeting;

    }

 

    public void printGreeting()

    {

        System.out.println( greeting );

    }

   

}

 

 

Notification 的结构体一开始是觉的比较麻烦的,不知道各个参数代表什么意思。可以看下 sun 提供的关于 jmx api , 这里看下 notification 的结构体

1、  Notification ( String  type, Object  source, long sequenceNumber)

2、  Notification ( String  type, Object  source,long sequenceNumber,l ong timeStamp)

3、  Notification ( String  type, Object  source,long sequenceNumber,long timeStamp, String  message)

4、 Notification ( String  type, Object  source,long sequenceNumber, String  message)

 

type 用来标示通知, source 为产生通知的 MBean sequenceNumber 为一系列通知中的序号, timeStamp 为通知创建的时间, message 为具体的通知消息。

 

HelloAgent.java

 

/*

  * Created on 2004-12-27

  * @author roson

  */

package notification;

 

import javax.management.*;

import com.sun.jdmk.comm.HtmlAdaptorServer;

 

public class HelloAgent implements NotificationListener

{

    private MBeanServer mbs = null;

 

    public HelloAgent ( )

    {

        mbs = MBeanServerFactory.createMBeanServer("HelloWorld Server");

        HtmlAdaptorServer adapter = new HtmlAdaptorServer();

        HelloWorld hw = new HelloWorld();

 

        ObjectName adapterName = null;

        ObjectName helloWorldName = null;

 

        try

        {

            adapter.setPort(9092);   //8082 是默认的端口可以不设

            adapterName = new ObjectName("HelloAgent:name=htmladapter,port=9092" );

            mbs.registerMBean(adapter,adapterName );

           

            helloWorldName = new ObjectName("HelloAgent:name=helloWorld1" );

            mbs.registerMBean( hw, helloWorldName );

 

            hw.addNotificationListener( this, null, null );

 

        }

        catch( Exception e )

        {

            e.printStackTrace();

        }

        adapter.start();

    }//constructor

 

    public void handleNotification(Notification notif, Object handback )

{

       // 可以在这里顺便看下 notification 结构体的参数。

        System.out.println( "Receiving notification..." );

        System.out.println( notif.getType());

         System.out.println(notif.getSource());

        System.out.println( notif.getMessage());

    }

 

    public static void main( String args[] )

    {

        System.out.println("Start agent");

        HelloAgent agent = new HelloAgent();

    }

}

 

 

好了可以运行了,打开浏览器 输入 http://localhost:9092 然后在注册 Mbean 的地方找到

 

List of registered MBeans by domain:

 

然后找到 Mbean 的属性

 

List of MBean attributes:

Name

Type

Access

Value

Greeting

java.lang.String

RW

 

 

更改 Value 值,按 Apply ,搞定(如果下一个页面显示成功)。看下 Console 输出什么呢。
顺便说下 Access的值 有三个 RW (Read Write) ,RO(ReadOnly) ,WO(WriteOnly)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值