概述
在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下,如下图所示: