MBean服务介绍

1:JMX简介
JMX(java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务。JMX是一份规范,SUN依据这个规范在JDK(1.3、1.4、1.5)提供了JMX接口,根据这个接口的实现则有很多种,比如webLogic的JMX实现,MX4J和JBOSS的JMX实现,在SUN自己也实现了以份,我们主要介绍JBOSS的JMX实现。整个JBOSS系统都是基于JMX架构来实现的。
JMX架构中各层及相关组件构成
a:工具层(Instrumenttation Level)
MBeans(标准的,动态的,开放的和模型MBeans)
通知模型:Notification,NotificationListener等
,MBean 元数据类:Attribute,Operator等类
b:代理层(AgentLevel)
MBean Server
代理服务
MBean中有getter和setter的就是属性,如果只有getter则表示该属性只读,一共有四种MBean,如下:
标准MBeans(Standard MBeans)设计和实现是最简单的,这类MBean使用自己的方法名作为管理接口;
动态MBeans(Dynamic MBeans)必须实现一个指定的接口,由于动态MBeans在运行期间暴露它们的管理接口,因此更为灵活;
开放MBeans(Open MBeans)属于动态MBeans,这类MBean依靠基础数据类型来实现通用管理,并为友情用户进行自我声明;
模型MBeans(Model MBeans)同样也是动态MBeans,这类MBeans是完全可配置的,在运行期间进行自我声明;它们为资源动态工具提供一个一般性的,有默认行为的MBeans类。

2:公司现有MBeanService 介绍

公司现MBeanService 是在jboss的 MBean 基础之上进行了封装更新,如果采用JBoss的MBean来写一个MBean服务

一般的开发步骤为:

*a:我们需要定义的服务接口 必须继承接口ServiceMBean。*如定义一个HelloWorldServiceMBean接口

import org.jboss.system.ServiceMBean;
public interface HelloWorldServiceMBean extends ServiceMBean {
String getMessage();
void setMessage(String message);
}
b:而到具体的实现类还必须继承ServiceMBeanSupport类

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;
}
}
c:对于 配置文件jboss-service.xml

<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="example.mbean.HelloWorldService" name="www.wxxr.com.cn:service=HelloWorld">
<attribute name="Message">Hello World</attribute>
</mbean>
</server>

说明:

code项指向MBean的实现类HelloWorldService
name项是一个名称,格式一般是:[REFDOC:说明性文字]:service=[REFDOC:类名]
attribute是为属性设置初始值,这样当JBOSS一加载HelloWorldService类时,message属性就有了一个初始值Hello World。注意Message的第一个字母必须是大写

d:将实例部署到JBOSS

在jboss-4.2.1\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-4.2.1\server\default\deploy目录下。
l JBOSS支持热部署,也就是说你在布置这个目录时并不需要重启JBOSS。

打开网址:http://127.0.0.1:8080/jmx-console/就可以看到自己写的MBean服务

*公司现有框架采用JDK1.5新加入的注解特性,使得开发公司框架的MBean服务更加简单,*具体的MBean服务实现上引入了一个@ServiceMBean

如果服务需要暴露接口我们所写的接口类跟普通的接口类是一样的,在具体的实现类中加入@ServiceMBean而不必继承ServiceMBeanSupport类 就可以将一个服务作为一个MBean服务来进行发布了

比如前面的例子

import org.jboss.system.ServiceMBean;
public interface HelloWorldServiceMBean {
String getMessage();
void setMessage(String message);
}
import org.jboss.system.ServiceMBeanSupport;
@ServiceMBean
public class HelloWorldService 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;
}
}
@ServiceMBean 提供了此功能其属性参数 remoteServices就是暴露的可分布式的应用
比如要开发一分布式的应用

import org.jboss.system.ServiceMBeanSupport;
@ServiceMBean(remoteServices = HelloWorldServiceMBean.calss)
public class HelloWorldService 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;
}
}

如果客户端其他服务需要调用此分布式服务,则通过工具类
CommonUtils.getClusterService(HelloWorldServiceMBean.class, null, null); 就可以获得此服务。

因为*@ServiceMBean 默认是提供本地服务的,相当于{*}localServices的设置。

因为MBean最终要的特性就是对于其属性方法的可管理性,我们下边介绍2个注解

a: @ManagedOperation

此注解放在需要管理的方法上,在jmx-console中就可以看到需要管理的方法

b:@ManagedAttribute

此注解放到服务的属性的get,set方法上,就可以实现对相关属性的实时修改管理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值