基于JBoss来写MBean (转)
来源:互联网 发布:mac aecc2015 编辑:程序博客网 时间:2024/05/20 09:48
一、 HelloWorld实例
1、准备工作
JBOSS实现了JMX规范,这个实例是基于JBOSS来实现的。请先去下载一个JBOSS,我是jboss-3.2.6,下载地址:http://www.jboss.com/downloads/index#as。这个实例需要JBOSS的两个JAR包的支持:jboss-system-3.2.6.jar、jboss-jmx-3.2.6.jar,如果你和我一样用Eclipse来开发(推荐),那么把这个两个包加入到项目的库引用中(加入到库引用的方法参考前面两章)。
2、程序代码
假设我们有一个叫message的属性要需要经常进行改动配置的,那么我们就把它写成一个MBean。
1、HelloWorldServiceMBean接口
在写MBean之前,我们先需要写一个MBean接口,接口里的方法都是属性的set/get方法。这个接口必须继承接口ServiceMBean。
import org.jboss.system.ServiceMBean;
public interface HelloWorldServiceMBean extends ServiceMBean {
String getMessage();
void setMessage(String message);
}
2、HelloWorldService实现类
然后写出HelloWorldServiceMBean接口的实现类HelloWorldService,这个实现类还必须继承ServiceMBeanSupport类。这种类再简单不过了,就是属性和相应的set/get方法,EJB中叫实体类、Hibernate中叫POJO。
import org.jboss.system.ServiceMBeanSupport;
public class HelloWorldService extends ServiceMBeanSupport implements HelloWorldServiceMBean {
private String message;
public String getMessage() {
System.out.println("getMessage()=" + message);
return message;
}
public void setMessage(String message) {
System.out.println("setMessage(" + message + ")");
this.message = message;
}
}
3、配置文件jboss-service.xml
<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="example.mbean.HelloWorldService" name="www.chengang.com.cn:service=HelloWorld">
<attribute name="Message">Hello World</attribute>
</mbean>
</server>
说明:
l code项指向MBean的实现类HelloWorldService
l name项是一个名称,格式一般是:[说明性文字]:service=[类名]
l attribute是为属性设置初始值,这样当JBOSS一加载HelloWorldService类时,message属性就有了一个初始值Hello World。注意Message的第一个字母必须是大写。
二、将实例部署到JBOSS
在jboss-3.2.6/server/default/deploy目录下创建一个hello.sar目录,然后创建如下目录文件结构:
hello.sar
|----example
| |----mbean
| |----HelloWorldService.class (注意:是*.class,不是*.java)
| |----HelloWorldServiceMBean.class
|----META-INF
|----jboss-service.xml
其他说明:
l 也可以将hello.sar目录用zip格式压缩成一个同名的hello.sar文件,放到jboss-3.2.6/server/default/deploy目录下。
l JBOSS支持热部署,也就是说你在布置这个目录时并不需要重启JBOSS。
三、MBean的效果
打开网址:http://127.0.0.1:8080/jmx-console/ ,出现下图
然后单击“service=HelloWorld”项打开详细页面如下:
将“HelloWorld”改成“Hello World,ChenGang”,再单击“Apply Changes”应用修改,得到如下效果:
四、其他类如何使用Messag属性
现在我们可以通过一个自动提供的WEB页面来设置Message属性了,接下来的问题是:“在其他类中应该如何得到Message的属性值”。MBean在JBoss是只保留一个MBean的实例(单例模式?),也就是说问题转成我们如何去取得这个唯一实例。例程如下:
1、创建一个使用到Message属性的类
import org.jboss.mx.util.MBeanProxyExt;
import org.jboss.mx.util.ObjectNameFactory;
public class Client {
public void go() {
HelloWorldServiceMBeanmbean = (HelloWorldServiceMBean)MBeanProxyExt.create(HelloWorldServiceMBean.class,ObjectNameFactory.create(www.chengang.com.cn:service=HelloWorld));
String msg = mbean.getMessage();
System.out.println("Client.go()=" + msg);
}
}
注意:go方法里是三句。第一句比较长,它是根据jboss-service.xml文件中设置的MBean名称,来取得此MBean在JBOSS中的实例。
2、在Mbean中加一个相应的调用Client.go的方法
在HelloWorldServiceMBean接口中加入一句:
void callGo();
在HelloWorldService类中加入现实方法:
public void callGo() {
new Client().go();
}
3、更新布署
将三个类的class文件:Clien.class、HelloWorldServiceMBean.class、HelloWorldService.class,更新到JBOSS的hello.sar/example/mbean目录下。然后重启JBOSS。
4、查看效果
打开JBOSS提供的MBean设置页面,如下,发现多了一个callGo。
单击callGo项后的invoke按钮,得到如下的DOS输出:
五、其他说明
l 本实例仅演示了一个Message属性,你当然可以在HelloWorldService中加入更多属性,别忘了在HelloWorldServiceMBean接口也加入相应的set/get方法。
l 本实例的message属性是String类型的,但JMX也支持其他的类型,甚至是XML信息。对于jboss-service.xml中的XML信息,这时属性类型要求是org.w3c.dom.Element,JMX将它封装成了一个XML的DOM对象。
l 回顾一下,JMX也是将配置信息写在了一个文件(jboss-service.xml文件)里嘛,相对于将配置文件写到*.properties文件的方式,它似乎也没什么新鲜的地方。但通过本章实例我们可以看到JMX的一些好处:我们不用写代码去读配置文件的信息,而且JMX支持的属性类型是多种多样的(如上面说的org.w3c.dom.Element)。更重要的是JMX还提供了一整套的属性之前互相访问、互相调用的功能,这个HelloWorld实例所反映的只是冰山一角而已。
六、参考资料:http://www.huihoo.com/java/jmx/jmx_base.html
相关文章:
- 利用JBossMX开发标准MBean(经典!转)
- 开发Jboss Mbean服务
- 7、用JDK5.0的JConsole来连接MBean
- 6、模型Bean:Model Bean
- 5、用Apache的commons-modeler来辅助开发JMX
- 4、动态MBean:DynamicMBean
- 3、Notification的使用
- 2、JMX简介
- 1、JMX的Hello World
- 基于JBoss来写MBean (转)
- [JMX一步步来] 9、基于JBoss来写MBean
- [JMX一步步来] 9、基于JBoss来写MBean
- 【转】JBoss扩展MBean
- 一个基于JBOSS平台的MBean例子
- 开发Jboss Mbean服务
- JBoss MBean实现方法
- JBoss之MBean实例
- MBean部署到JBoss下运行
- 关于JMX通过MBean监控JBoss
- JBOSS下JMX-MBean的实例
- Jboss MBean开发与部署示例
- 编写程序来连接MBean
- JBoss 系列六十四:部署JMX MBean到JBoss 7/WildFly
- Mbean
- [JMX一步步来] 4、动态MBean:DynamicMBean
- 8、编写程序来连接MBean
- [JMX一步步来] 4、动态MBean:DynamicMBean
- 关于变量的一个奇怪的SQL
- hash(开放地址法解决冲突)
- 表联接查询
- 如何实现SSL 我要做的是U盘登录
- 用opencv加强cview的显示图像功能
- 基于JBoss来写MBean (转)
- 堆排序
- 求两个字符串的最大子串
- 理解有符号数和无符号数
- JS验证表单大全
- Log4j是输出日志时是如何获知当前方法、行号的
- 6条定律 让你由穷变富
- BMP资料
- C# 中2,10,16进制及其ASCII码之间转化