JMX Notification

王朝网络·java/jsp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

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,long 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:

HelloAgent

name=helloWorld1 //就是这里了。当然不是这里点击噢(浏览器上)

name=htmladapter,port=9092

JMImplementation

type=MBeanServerDelegate

然后找到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)

参考 :http://www.huihoo.com/java/jmx/jmx2.html 和 jmxremote-1_0_1-bin\doc

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有