- 浏览: 375832 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ytlviv:
利器深藏之而不用,非常时方现光芒
[JMX一步步来] 4、动态MBean:DynamicMBean -
fantaxy025025:
总结的不错!搜藏了。原有的链接里面内容css有问题。辛苦楼主! ...
[JMX一步步来] 1、JMX的Hello World(转) -
xuyb_0314:
非常不错~~
查看ORACLE表空间使用情况的SQL语句 -
elan1986:
谢谢 在你这里找到了
在winxp下使用bat文件运行java程序而不弹出dos窗口 -
lqw8668:
...
XP SP2下安装Rose 出现 “MEM_BAD_POINTER”错误的解决方法
一、前言
每一个MBean都要有一个接口,比如前面的Hello要有一个HelloMBean接口。要多维护一个接口,的确是件麻 烦的事。 Apache的commons-modeler利用JMX中的动态MBean原理很好的解决了这一问题,commons-modeler使用得我们可以只 写Hello,而不用写HelloMBean这个接口。不过这是有代价的,它要求我们写一个mbean的xml描述文件(唉,少了一件事,却又多出另一件 事来)。但commons-modeler还是有优点的,就是它让mbean的装配更加灵活,把多个mbean的装配都集中在一个XML文件里来了。
开始实例之前,你需要先去apache网站下载commons-modeler,以及modeler的依赖项目commons-logging。下载网 址为:http://jakarta.apache.org/site/downloads/downloads_commons.html,下载的文件 是ZIP压缩包,解压后找到commons-logging.jar和commons-modeler.jar。如果在DOS下用命令行开发,则把这两个 JAR包加入到classpath系统变量中。如果你用Eclipse开发,则把JAR包加入到项目属性的Libratries(库)引用中。
二、HelloWorld实例
我们以本系统的第一篇“1、JMX的Hello World”为例,来重新实现一次。
1、Hello.java的代码不用实现HelloMBean接口(注:为了在Eclipse上和原来的Hello文件放在不同的地方,我把新Hello放到了mbean.modelbean包),如下:
2、MBean不用写了,但需要写一个XML描述文件。文件名任取,这里取名为:mbeans-descriptors
这里只对标签做一下说明:
* name mbean在xml中的唯一标识,不一定要和类同名
* description mbean的注释说明信息
* domain mbean所属域
* group mbean所属组
* type mbean的类全名(包名+类名)
* classname 指定实现代理功能的ModelMbean的全名,如果不指定则默认为BaseModelMBean
3、接下来改写HelloAgent
HelloAgent是效复杂的地方,我们来和以前的HelloAgent逐步比较一下,前后有什么不同:
(1)首先,新的HelloAgent需要将xml信息读入到Registry对象中,这是旧HelloAgent所没有的。
Registry registry = Registry.getRegistry(null, null);
InputStream stream = HelloAgent.class.getResourceAsStream("Mbeans-descriptors.xml");
registry.loadMetadata(stream);
stream.close();
(2)接着创建MBeanServer的方式也不同了
现在:MBeanServer server = registry.getMBeanServer();
以前: MBeanServer server = MBeanServerFactory.createMBeanServer();
(3)Hello相应的ObjectName创建也略不相同。主要是域名在XML描述文件里设置好了。
现在:ManagedBean managed = registry.findManagedBean("Hello");
ObjectName helloName = new ObjectName(managed.getDomain() + ":name=HelloWorld");
以前:ObjectName helloName = new ObjectName("chengang:name=HelloWorld")
(4)得到MBean的方式也不同,这里就是关键的不同点
现在:ModelMBean hello = managed.createMBean(new Hello());
以前:Hello hello = new Hello();
注 意:为什么现在要比以前多一个createMbean步骤呢,就是因为现在的写法并没有写Mbean,所以需要动态才需要生成一个。而以前就直接把new Hello()注册到mbean server就可以了,server会自动找到它的HelloMBean接口文件。
也就上面四点区别,其他代码完全一样。测试和查看效果的方法和以前一样,在此不累述了。
commons Modeler为Hello动态生成了一个MBean接口:BaseModelBean
参考资料
用Commons Modeler 开发JMX应用
每一个MBean都要有一个接口,比如前面的Hello要有一个HelloMBean接口。要多维护一个接口,的确是件麻 烦的事。 Apache的commons-modeler利用JMX中的动态MBean原理很好的解决了这一问题,commons-modeler使用得我们可以只 写Hello,而不用写HelloMBean这个接口。不过这是有代价的,它要求我们写一个mbean的xml描述文件(唉,少了一件事,却又多出另一件 事来)。但commons-modeler还是有优点的,就是它让mbean的装配更加灵活,把多个mbean的装配都集中在一个XML文件里来了。
开始实例之前,你需要先去apache网站下载commons-modeler,以及modeler的依赖项目commons-logging。下载网 址为:http://jakarta.apache.org/site/downloads/downloads_commons.html,下载的文件 是ZIP压缩包,解压后找到commons-logging.jar和commons-modeler.jar。如果在DOS下用命令行开发,则把这两个 JAR包加入到classpath系统变量中。如果你用Eclipse开发,则把JAR包加入到项目属性的Libratries(库)引用中。
二、HelloWorld实例
我们以本系统的第一篇“1、JMX的Hello World”为例,来重新实现一次。
1、Hello.java的代码不用实现HelloMBean接口(注:为了在Eclipse上和原来的Hello文件放在不同的地方,我把新Hello放到了mbean.modelbean包),如下:
- package mbean.modelbean;
- import mbean.standard.HelloMBean;
- public class Hello{
- private String name;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public void printHello() {
- System.out.println("Hello World, " + name);
- }
- public void printHello(String whoName) {
- System.out.println("Hello , " + whoName);
- }
- }
2、MBean不用写了,但需要写一个XML描述文件。文件名任取,这里取名为:mbeans-descriptors
- xml version="1.0"?>
- <mbeans-descriptors>
- <mbean name="Hello" description="the hello bean" domain="chengang" group="helloGroup" type="mbean.modelbean.Hello">
- <attribute name="name" description="a name attribute" type="java.lang.String" writeable="true"/>
- <operation name="printHello" description="a operation to print hello" impact="INFO" returnType="String"/>
- <!---->mbean>
- <!---->mbeans-descriptors>
这里只对标签做一下说明:
* name mbean在xml中的唯一标识,不一定要和类同名
* description mbean的注释说明信息
* domain mbean所属域
* group mbean所属组
* type mbean的类全名(包名+类名)
* classname 指定实现代理功能的ModelMbean的全名,如果不指定则默认为BaseModelMBean
3、接下来改写HelloAgent
- package mbean.modelbean;
- import java.io.InputStream;
- import javax.management.MBeanServer;
- import javax.management.ObjectName;
- import javax.management.modelmbean.ModelMBean;
- import org.apache.commons.modeler.ManagedBean;
- import org.apache.commons.modeler.Registry;
- import com.sun.jdmk.comm.HtmlAdaptorServer;
- public class HelloAgent {
- public static void main(String[] args) throws Exception {
- //基于xml中的信息构建一个Registry
- Registry registry = Registry.getRegistry(null, null);
- InputStream stream = HelloAgent.class.getResourceAsStream("mbeans-descriptors.xml");
- registry.loadMetadata(stream);
- stream.close();
- //由Registry得到一个MBeanServer
- MBeanServer server = registry.getMBeanServer();
- //得到Hello在描述文件中的信息类,对应于xml文件标签的name属性。
- ManagedBean managed = registry.findManagedBean("Hello");
- //创建ObjectName
- ObjectName helloName = new ObjectName(managed.getDomain() + ":name=HelloWorld");
- //得到ModelMBean
- ModelMBean hello = managed.createMBean(new Hello());
- //注册MBean
- server.registerMBean(hello, helloName);
- ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter,port=8082");
- HtmlAdaptorServer adapter = new HtmlAdaptorServer();
- server.registerMBean(adapter, adapterName);
- adapter.start();
- System.out.println("start.....");
- }
- }
HelloAgent是效复杂的地方,我们来和以前的HelloAgent逐步比较一下,前后有什么不同:
(1)首先,新的HelloAgent需要将xml信息读入到Registry对象中,这是旧HelloAgent所没有的。
Registry registry = Registry.getRegistry(null, null);
InputStream stream = HelloAgent.class.getResourceAsStream("Mbeans-descriptors.xml");
registry.loadMetadata(stream);
stream.close();
(2)接着创建MBeanServer的方式也不同了
现在:MBeanServer server = registry.getMBeanServer();
以前: MBeanServer server = MBeanServerFactory.createMBeanServer();
(3)Hello相应的ObjectName创建也略不相同。主要是域名在XML描述文件里设置好了。
现在:ManagedBean managed = registry.findManagedBean("Hello");
ObjectName helloName = new ObjectName(managed.getDomain() + ":name=HelloWorld");
以前:ObjectName helloName = new ObjectName("chengang:name=HelloWorld")
(4)得到MBean的方式也不同,这里就是关键的不同点
现在:ModelMBean hello = managed.createMBean(new Hello());
以前:Hello hello = new Hello();
注 意:为什么现在要比以前多一个createMbean步骤呢,就是因为现在的写法并没有写Mbean,所以需要动态才需要生成一个。而以前就直接把new Hello()注册到mbean server就可以了,server会自动找到它的HelloMBean接口文件。
也就上面四点区别,其他代码完全一样。测试和查看效果的方法和以前一样,在此不累述了。
commons Modeler为Hello动态生成了一个MBean接口:BaseModelBean
参考资料
用Commons Modeler 开发JMX应用
发表评论
-
web.xml里<filter-mapping>中的<dispatcher>作用
2009-12-08 17:20 11220在2.4版本的servlet规范在部属描述符中新增加 ... -
(转)Taglib部署的三种方式
2009-12-04 13:07 0本周,由于项目的需要引入了jstl,但是在jsp页 ... -
Iframe页面请求跳转问题解决
2009-11-04 21:15 5234问题描述: 在父页面的一个Iframe页面中,提交请求后 ... -
JAF简介
2009-11-01 21:05 2558JAF全称是JavaBeans ... -
是 String , StringBuffer 还是 StringBuilder ?
2009-10-18 15:42 1424相信大家对 String 和 StringBuffer 的区别 ... -
选择Java接口还是抽象类
2009-10-17 16:23 3491关于java接口与 ... -
Java接口与Java抽象类的区别
2009-10-17 16:01 1413Java接口与Java抽象类的区别: 1. Java抽 ... -
为何不能通过返回值来区分重载方法?
2009-06-28 16:20 3093在java中,重载是其一个非常重要的特性。使用重载,我 ... -
怎么处理警告:编码 GBK 的不可映射字符
2009-04-17 01:31 3062在使用ant编译代码时提示 “编码 GBK 的不可映射字 ... -
既然认为它是好的,就要发挥到极限-系列之二单元测试
2009-03-29 17:07 958(原文)http://www.blogjava.net ... -
weblogic10 下对jVM性能调优设置(参考资料)
2009-03-25 12:36 2907对 JRockit JVM优化 Ta ... -
lazy initialization实现Singleton时synchronized的必要性
2009-03-19 21:48 2469首先了解一下Singleton模式通常的两种表现形式: 第一种 ... -
Guidelines, Patterns, and Code for End-to-End Java
2009-02-02 13:45 1058This document contains recomm ... -
poi即将提供对OOXML的支持
2008-11-06 23:18 9176POI是apache项目之一,最新版是3.2,它提 ... -
JSP在Servlet中的几个编码的作用及原理
2008-10-05 11:27 1610首先,说说JSP/Ser ... -
使用jconsole监控Apusic
2008-08-19 10:39 1599JDK 1.5+提供了jconsole工具,可以对JVM实例的 ... -
jconsole+tomcat配置说明(基于jdk5.0)
2008-08-18 23:18 8569最近需要参与一些java程 ... -
CruiseControl配置文档元素详解
2008-07-31 22:16 0<cruisecontrol> & ... -
抽象类和接口的区别
2008-07-26 20:19 1049在Java语言中, abstract class ... -
十个最好的Java性能故障排除工具
2008-07-21 13:00 1445推荐十个最好的Java性能故障排除工具: 1.jconsole ...
相关推荐
commons-modeler.jar,构建JMX必备
Apache Commons Modeler是Apache软件基金会开发的一个开源项目,主要用于简化Java Management Extensions (JMX)的开发。JMX是一种Java平台上的标准,它提供了一种框架来管理并监控应用程序、服务和设备,允许开发者...
Apache Commons是一个非常有用的工具包,解决各种实际的通用问题。(附件中提供了该工具包的jar包,及源文件以供研究) BeanUtils Commons-BeanUtils 提供对 Java 反射和自省API的包装 Betwixt Betwixt提供将 ...
commons-modeler 创建符合 JMX 规范的 MBeans 机制 commons-net 网络和协议实现的集合 commons-pool 提供了通用对象池接口,一个用于创建模块化对象池的工具包,以及通常的对象池实 commons-primitives java 简单...
commons-modeler 创建符合 JMX 规范的 MBeans 机制 commons-net 网络和协议实现的集合 commons-pool 提供了通用对象池接口,一个用于创建模块化对象池的工具包,以及通常的对象池实 commons-primitives java 简单...
- `commons-modeler-2.0.1.zip`:Apache Commons Modeler,用于动态建模和MBean创建,有助于实现JMX的MBean功能。 - `jmx-1_2_1-ri.zip`:早期版本的JMX实现,包含运行时接口(RI)和API。 - `jdmkrt.jar`:可能...
- **Apache Commons Modeler**:这是一个用于构建MBeans的工具包,它提供了丰富的API来简化MBeans的创建过程。 - **XDoclet**:这是一个源代码元数据工具,它可以通过注释自动为Java类生成JMX相关的代码。 通过以上...
Apache Commons 是一系列小型实用工具库,它为Java开发者提供了丰富的组件和类库,极大地扩展了标准Java库的功能。这些组件涵盖了各种领域,如数据编码、集合操作、配置管理、网络通信、XML处理、脚本执行等。以下是...
Apache Jakarta Commons 是一组由 Apache 软件基金会提供的 Java 库,这些库旨在解决常见的编程问题,提供便捷的功能,减少开发人员重复编写基础代码的工作。Jakarta Commons 包含了许多子项目,每个子项目专注于...
20.5 Commons Modeler 161 20.5.1 MBean描述符 162 20.5.1.1 mbean 162 20.5.1.2 attribute 163 20.5.1.3 operation 163 20.5.1.4 parameter 163 20.5.2 mbean标签实例 164 20.5.3 自己编写一个model MBean 164 20.5...