镜像系统的硬盘扩容方案(11)
【IT168 技术文档】
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() 负 责加数并取回总数:
( 2 )实现 MBean 接口。
CounterMBean 是一个标准 MBean ,所以 MBean 实现类的名称必须和 MBean 接口 之间遵守标准 MBean 的命名规范,所以 CounterMBean 的实现类 Counter 比 CounterMBean 少了尾部的 MBean 部分,下面是 Counter 的实现代码:
( 3 )利用 JMX API 编写调用 CounterMBean 的程序。
JMX API 是 Sun 公司为 JMX 技术所设计的一套用来开发 JMX 应用的编程接口,通过 JMX API 可以管理和控制前面开发的 CounterMBean 资源。下面是利用 JMX API 编写调用 CounterMBean 的程序代码:
ObjectName 代表一个 MBean 对象的名,创建一个 ObjectName 需要符合 MBean 的命名规范,例如:
在 CounterServer 程序中,首先创建的 MBeanServer 这个对象代表前文中介绍的 MBean 服务器,它负责管理 MBean 资源,每个 MBean 资源可以被注册到 MBeanServer 之中:
name 是被调用对象的对象名。
"add" 要求 调用被调对象的方法名称。
opArgs1 是一个数组,包含着的每个数据将被作为参数传递到被调方法。
sig1 是 一个数组,包含着将被作为参数传递的每个数据的数据类型。
调用之后返回的对象包含着执行的结果。
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() 负 责加数并取回总数:
从代码中可以看到,开发标准 MBean 的 MBean 接口和开发普通接口除了需要在 MBean 类名称后面加上“ MBean ”之外,没有其他区别。package com.liuyang.jmx.mbeans.counter;
public interface CounterMBean {
public void add(int num);
public int get(int num);
}
( 2 )实现 MBean 接口。
CounterMBean 是一个标准 MBean ,所以 MBean 实现类的名称必须和 MBean 接口 之间遵守标准 MBean 的命名规范,所以 CounterMBean 的实现类 Counter 比 CounterMBean 少了尾部的 MBean 部分,下面是 Counter 的实现代码:
从代码中也可以看到,标准 MBean 实现类与普通的 Java 程序也没什么区别。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;
}
}
( 3 )利用 JMX API 编写调用 CounterMBean 的程序。
JMX API 是 Sun 公司为 JMX 技术所设计的一套用来开发 JMX 应用的编程接口,通过 JMX API 可以管理和控制前面开发的 CounterMBean 资源。下面是利用 JMX API 编写调用 CounterMBean 的程序代码:
2 . ObjectNamepackage 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);
}
}
ObjectName 代表一个 MBean 对象的名,创建一个 ObjectName 需要符合 MBean 的命名规范,例如:
3 . MBeanServerObjectName name = new ObjectName("book.liuyang:service=Counter");
在 CounterServer 程序中,首先创建的 MBeanServer 这个对象代表前文中介绍的 MBean 服务器,它负责管理 MBean 资源,每个 MBean 资源可以被注册到 MBeanServer 之中:
通过 MBeanServer 的 invoke 方法还可以调用一个 MBean ,在调用时需要传递一些与调用有关的参数:server.registerMBean(new Counter(), name);
其中:Object result1 = server.invoke(name, "add", opArgs1, sig1);
name 是被调用对象的对象名。
"add" 要求 调用被调对象的方法名称。
opArgs1 是一个数组,包含着的每个数据将被作为参数传递到被调方法。
sig1 是 一个数组,包含着将被作为参数传递的每个数据的数据类型。
调用之后返回的对象包含着执行的结果。
0
相关文章