概述
在JBoss 6及JBoss 6之前的版本,JBoss使用JMX MBean架构,例如,JBoss 6中我们可以将MBean通过*-bean.xml,打包在sar包中,部署于JBoss。但在JBoss 7/WildFly中我们如何部署JMX MBean呢?本文给出一个简单步骤来完成这一需求。
JBoss 7/WildFly中 MBean部署需要依赖JBoss service,这就需要我们符合JBoss service的要求,MBean需要包括一系列生命周期相关的操作,例如create, start, stop, 以及destroy,这些操作被JBoss容器调运来通知MBean相关的事件发生。我们需要在MBean中添加这些方法。
部署TestMBean到JBoss 7/WildFly
我们通过如下四步部署TestMBean到JBoss 7/WildFly。
创建TestMBean接口
创建TestMBean接口如下:
package org.jboss.jmx.test;
public interface TestMBean {
public void setMessage(String message);
public String getMessage();
}
创建Test类实现TestMBean
创建Test类实现TestMBean,Test中我们需要添加start() a和stop()方法,如下:
package org.jboss.jmx.test;
public class Test implements TestMBean {
boolean flag = true;
public String Message;
public Test() {
System.out.println(" TestMBean is activated...inside Test() constructor--setting default Message=Hello");
}
public void setMessage(String Message) {
System.out.println(" Server Watch Message is set to : " + Message);
this.Message = Message;
}
public String getMessage() {
System.out.println(" Server Watch Message is set to : " + Message);
return this.Message;
}
public void start() throws Exception {
System.out.println("Starting start() Test invoked");
Message = "JBoss";
}
public void stop() throws Exception {
System.out.println("Stopping stop() Test invoked");
}
}
编译生成部署包
编译以上class到mbean-test.sar。示例代码位于:https://github.com/kylinsoong/wildfly-architecture/tree/master/mbean
我们可以使用软件安装及资料下载中描述的方法下载,编译上传部署包。
添加jboss-service.xml到$YOUR_SAR/META-INF
添加jboss-service.xml到mbean-test.sar/META-INF,编辑jboss-service.xml,添加内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<server xmlns="urn:jboss:service:7.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:jboss:service:7.0 jboss-service_7_0.xsd">
<mbean code="org.jboss.jmx.test.Test" name="test.testing:service=MyTestMBean">
<attribute name="Message">JBoss</attribute>
</mbean>
</server>
部署及测试
使用使用4种方式部署应用到JBoss7/WildFly中描述的方法,部署mbean-test.sar到JBoss 7,启动JBoss 7过程我们可以发现如下输出日志:
14:56:25,370 INFO [stdout] (MSC service thread 1-6) TestMBean is activated...inside Test() constructor, Message: null
14:56:25,374 INFO [stdout] (MSC service thread 1-1) Server Watch Message is set to : JBoss
14:56:25,375 INFO [stdout] (MSC service thread 1-1) Starting start() Test invoked
启动JBOSS_HOME/bin/jconsole,我们可以看到MyTestMBean位于test.testing下,如下图所示:
转载于:https://my.oschina.net/iwuyang/blog/197233