三大写 基于JBoss来写MBean
基于JBoss来写MBean
用JDK自带的JMX实现来写的MBean JMX的实现不独SUN一家 JBoss也有自己的JMX实现 如果你使用JBoss来做WEB服务器 那么基于JBoss的实现来写MBean 是一个不错的选择 象我们公司就是用JBoss的 因此所有MBean都是基于JBoss来写的 基于JBoss的MBean和基于SUN的MBean有什么不同吗?有一些不同之外 但绝大部份都一样
一 HelloWorld实例
准备工作 JBOSS实现了JMX规范 这个实例是基于JBoss来实现的 请先去下载一个JBoss 我是JBoss 这个实例需要JBoss的两个JAR包的支持 jboss system jar jboss jmx jar 如果你和我一样用Eclipse来开发(推荐) 那么把这个两个包加入到项目的库引用中(加入到库引用的方法参考前面两章)
程序代码 假设我们有一个叫message的属性要需要经常进行改动配置的 那么我们就把它写成一个MBean
) HelloWorldServiceMBean接口在写MBean之前 我们先需要写一个MBean接口 接口里的方法都是属性的set/get方法 这个接口必须继承接口ServiceMBean java 代码
import jboss system ServiceMBean; public interface HelloWorldServiceMBean extends ServiceMBean { String getMessage(); void setMessage(String message); }) HelloWorldService实现类 然后写出HelloWorldServiceMBean接口的实现类HelloWorldService 这个实现类还必须继承ServiceMBeanSupport类 这种类再简单不过了 就是属性和相应的set/get方法 EJB中叫实体类 Hibernate中叫POJO java 代码
import jboss system ServiceMBeanSupport; public class HelloWorldService extends ServiceMBeanSupportimplements HelloWorldServiceMBean {
private String message; public String getMessage() { System out println( getMessage()= + message); return message; }
public void setMessage(String message) { System out println( setMessage( + message + ) ); ssage = message; } }
) 配置文件jboss service xml
xml version= encoding= UTF ?> <server> <mbean code= example mbean HelloWorldService name= :service=HelloWorld >
<attribute name= Message >Hello Worldattribute> mbean> server>
说明 ◆code项指向MBean的实现类HelloWorldService ◆name项是一个名称 格式一般是 [说明性文字]:service=[类名] ◆attribute是为属性设置初始值 这样当JBOSS一加载HelloWorldService类时 message属性就有了一个初始值 Hello World 注意Message的第一个字母必须是大写
二 将实例部署到JBOSS
在jboss serverdefaultdeploy目录下创建一个hello sar目录 然后创建如下目录文件结构
hello sar| example| | mbean| | HelloWorldService class (注意 是* class 不是* java)| | HelloWorldServiceMBean class| META INF| jboss service xml
其他说明 ◆也可以将hello sar目录用zip格式压缩成一个同名的hello sar文件 放到jboss serverdefaultdeploy目录下 ◆JBOSS支持热部署 也就是说你在布置这个目录时并不需要重启JBOSS
三 MBean的效果
后单击 service=HelloWorld 项打开详细页面

将 HelloWorld 改成 Hello World ChenGang 再单击 Apply Changes 应用修改
四 其他类如何使用Messag属性
现在我们可以通过一个自动提供的WEB页面来设置Message属性了 接下来的问题是 在其他类中应该如何得到Message的属性值 MBean在JBoss是只保留一个MBean的实例(单例模式?) 也就是说问题转成我们如何去取得这个唯一实例 例程如下
创建一个使用到Message属性的类
import jboss mx util MBeanProxyExt; import jboss mx util ObjectNameFactory; public class Client { public void go() { HelloWorldServiceMBean mbean = (HelloWorldServiceMBean) MBeanProxyExt create(HelloWorldServiceMBean class ObjectNameFactory create(:service=HelloWorld)); String msg = mbean getMessage(); System out println( Client go()= + msg); } } 注意 go方法里是三句 第一句比较长 它是根据jboss service xml文件中设置的MBean名称 来取得此MBean在JBOSS中的实例
在Mbean中加一个相应的调用Client go的方法在HelloWorldServiceMBean接口中加入一句
void callGo();ublic void callGo() { new Client() go(); }更新布署将三个类的class文件 Clien class HelloWorldServiceMBean class HelloWorldService class 更新到JBOSS的hello sarexamplembean目录下 然后重启JBOSS
查看效果打开JBOSS提供的MBean设置页面 发现多了一个callGo 单击callGo项后的invoke按钮 得到DOS输出
lishixinzhi/Article/program/Java/ky/201311/28796