利用JBossMX开发标准MBean

2008-07-04 16:07:40.0     推荐:0    收藏:0    评论:0     来源:e800Java频道
JBoss 服务器是建立在 JBoss 的 JMX 实现工具( JBossMX )基础上的,访问 JBoss 网站( http://www.jboss.org )可以下载到独立的 JBoss JMX 实现工具软件包 。将下载到的 jbossmx-1.1.2.zip 压缩包解压之后,把下列 jar 文件添加到 CLASSPATH 中:

jbossmx-1.1.2/jbossmx-1.1.2/lib/jboss-jmx.jar
jbossmx-1.1.2/jbossmx-1.1.2/lib/jboss-jmx-core.jar
JBOSS_HOME/client/gnu-regexp.jar
JBOSS_HOME/client/jbossall-client.jar

标准MBean 在 JBoss 中使用范围最广, JBoss 中的许多组件都是利用标准 MBean 开发的。

1 .计数器 MBean

下面是一个计数器 MBean 的开发示例。

( 1 )确定 MBean 的接口。

分析计数器的功能,确定了两个方法, 即 add() 和 get() , add() 负责加数, get() 负 责加数并取回总数:
package com.liuyang.jmx.mbeans.counter;
public interface CounterMBean {
public void add(int num);
public int get(int num);
}
从代码中可以看到,开发标准 MBean 的 MBean 接口和开发普通接口除了需要在 MBean 类名称后面加上“ MBean ”之外,没有其他区别。

( 2 )实现 MBean 接口。

CounterMBean 是一个标准 MBean ,所以 MBean 实现类的名称必须和 MBean 接口 之间遵守标准 MBean 的命名规范,所以 CounterMBean 的实现类 Counter 比 CounterMBean 少了尾部的 MBean 部分,下面是 Counter 的实现代码:
package com.liuyang.jmx.mbeans.counter;
public class Counter implements CounterMBean {
int sum = 0;
public void add(int num) {
sum
+=num;
}
public int get(int num) {
sum
+=num;
return sum;
}
}
从代码中也可以看到,标准 MBean 实现类与普通的 Java 程序也没什么区别。

( 3 )利用 JMX API 编写调用 CounterMBean 的程序。

JMX API 是 Sun 公司为 JMX 技术所设计的一套用来开发 JMX 应用的编程接口,通过 JMX API 可以管理和控制前面开发的 CounterMBean 资源。下面是利用 JMX API 编写调用 CounterMBean 的程序代码:
package com.liuyang.jmx.mbeans.counter;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
public class CounterServer {
public static void main(String[] args) throws Exception {
MBeanServer server
= MBeanServerFactory.createMBeanServer();
ObjectName name
= new ObjectName("book.liuyang:service=Counter");
server.registerMBean(
new Counter(), name);
String[] sig1
= {"int"};
Object[] opArgs1
= {new Integer(3)};
Object result1
= server.invoke(name, "add", opArgs1, sig1);
System.
out.println(result1);
String[] sig2
= {"int"};
Object[] opArgs2
= {new Integer(0)};
Object result2
= server.invoke(name, "get", opArgs2, sig2);
System.
out.println(result2);
}
}
2 . ObjectName

ObjectName 代表一个 MBean 对象的名,创建一个 ObjectName 需要符合 MBean 的命名规范,例如:
ObjectName name = new ObjectName("book.liuyang:service=Counter");
3 . MBeanServer

在 CounterServer 程序中,首先创建的 MBeanServer 这个对象代表前文中介绍的 MBean 服务器,它负责管理 MBean 资源,每个 MBean 资源可以被注册到 MBeanServer 之中:
server.registerMBean(new Counter(), name);
通过 MBeanServer 的 invoke 方法还可以调用一个 MBean ,在调用时需要传递一些与调用有关的参数:
Object result1 = server.invoke(name, "add", opArgs1, sig1);
其中:

name 是被调用对象的对象名。
"add" 要求 调用被调对象的方法名称。
opArgs1 是一个数组,包含着的每个数据将被作为参数传递到被调方法。
sig1 是 一个数组,包含着将被作为参数传递的每个数据的数据类型。
调用之后返回的对象包含着执行的结果。
您可以针对本文进行:[评论]  [收藏]  [推荐]  
  • 共有0条评论  点击查看更多评论
  • 网友评论仅供网友表达个人看法,并不表明e800同意其观点或证实其描述
我想发表评论:
用户名密码
  • 匿名发表
    验证码: