- 浏览: 151884 次
- 性别:
- 来自: 北京
最新评论
-
pandengzhegt:
好牛!正需要!谢谢了!
JPA 2.0 中的动态类型安全查询 -
yanlp:
万分的感谢。
仿google 的输入提示框 -
huangwenji6111:
可谓良师,在此拜谢!受益匪浅!
hibernate lazy -
jwx0925:
不错!mark!
hibernate对象状态 -
leftstick:
大有裨益,谢了!
hibernate lazy
一、前言
每一个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包),如下:
1.package mbean.modelbean;
2.3.import mbean.standard.HelloMBean;
4.5.public class Hello{
6.private String name;
7.public String getName() {
8.return name;
9.}
10.public void setName(String name) {
11.this.name = name;
12.}
13.public void printHello() {
14.System.out.println("Hello World, " + name);
15.}
16.public void printHello(String whoName) {
17.System.out.println("Hello , " + whoName);
18.}
19.}
2、MBean不用写了,但需要写一个XML描述文件。文件名任取,这里取名为:mbeans-descriptors
1.xml version="1.0"?>
2.<mbeans-descriptors>
3.<mbean name="Hello" description="the hello bean" domain="chengang" group="helloGroup" type="mbean.modelbean.Hello">
4.<attribute name="name" description="a name attribute" type="java.lang.String" writeable="true"/>
5.<operation name="printHello" description="a operation to print hello" impact="INFO" returnType="String"/>
6.mbean>
7.mbeans-descriptors>
这里只对标签做一下说明:
* name mbean在xml中的唯一标识,不一定要和类同名
* description mbean的注释说明信息
* domain mbean所属域
* group mbean所属组
* type mbean的类全名(包名+类名)
* classname 指定实现代理功能的ModelMbean的全名,如果不指定则默认为BaseModelMBean
3、接下来改写HelloAgent
1.package mbean.modelbean;
2.3.import java.io.InputStream;
4.import javax.management.MBeanServer;
5.import javax.management.ObjectName;
6.import javax.management.modelmbean.ModelMBean;
7.import org.apache.commons.modeler.ManagedBean;
8.import org.apache.commons.modeler.Registry;
9.import com.sun.jdmk.comm.HtmlAdaptorServer;
10.11.public class HelloAgent {
12.public static void main(String[] args) throws Exception {
13.//基于xml中的信息构建一个Registry
14.Registry registry = Registry.getRegistry(null, null);
15.InputStream stream = HelloAgent.class.getResourceAsStream("mbeans-descriptors.xml");
16.registry.loadMetadata(stream);
17.stream.close();
18.//由Registry得到一个MBeanServer
19.MBeanServer server = registry.getMBeanServer();
20.21.//得到Hello在描述文件中的信息类,对应于xml文件标签的name属性。
22.ManagedBean managed = registry.findManagedBean("Hello");
23.//创建ObjectName
24.ObjectName helloName = new ObjectName(managed.getDomain() + ":name=HelloWorld");
25.//得到ModelMBean
26.ModelMBean hello = managed.createMBean(new Hello());
27.//注册MBean
28.server.registerMBean(hello, helloName);
29.30.ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter,port=8082");
31.HtmlAdaptorServer adapter = new HtmlAdaptorServer();
32.server.registerMBean(adapter, adapterName);
33.adapter.start();
34.System.out.println("start.....");
35.}
36.}
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包),如下:
1.package mbean.modelbean;
2.3.import mbean.standard.HelloMBean;
4.5.public class Hello{
6.private String name;
7.public String getName() {
8.return name;
9.}
10.public void setName(String name) {
11.this.name = name;
12.}
13.public void printHello() {
14.System.out.println("Hello World, " + name);
15.}
16.public void printHello(String whoName) {
17.System.out.println("Hello , " + whoName);
18.}
19.}
2、MBean不用写了,但需要写一个XML描述文件。文件名任取,这里取名为:mbeans-descriptors
1.xml version="1.0"?>
2.<mbeans-descriptors>
3.<mbean name="Hello" description="the hello bean" domain="chengang" group="helloGroup" type="mbean.modelbean.Hello">
4.<attribute name="name" description="a name attribute" type="java.lang.String" writeable="true"/>
5.<operation name="printHello" description="a operation to print hello" impact="INFO" returnType="String"/>
6.mbean>
7.mbeans-descriptors>
这里只对标签做一下说明:
* name mbean在xml中的唯一标识,不一定要和类同名
* description mbean的注释说明信息
* domain mbean所属域
* group mbean所属组
* type mbean的类全名(包名+类名)
* classname 指定实现代理功能的ModelMbean的全名,如果不指定则默认为BaseModelMBean
3、接下来改写HelloAgent
1.package mbean.modelbean;
2.3.import java.io.InputStream;
4.import javax.management.MBeanServer;
5.import javax.management.ObjectName;
6.import javax.management.modelmbean.ModelMBean;
7.import org.apache.commons.modeler.ManagedBean;
8.import org.apache.commons.modeler.Registry;
9.import com.sun.jdmk.comm.HtmlAdaptorServer;
10.11.public class HelloAgent {
12.public static void main(String[] args) throws Exception {
13.//基于xml中的信息构建一个Registry
14.Registry registry = Registry.getRegistry(null, null);
15.InputStream stream = HelloAgent.class.getResourceAsStream("mbeans-descriptors.xml");
16.registry.loadMetadata(stream);
17.stream.close();
18.//由Registry得到一个MBeanServer
19.MBeanServer server = registry.getMBeanServer();
20.21.//得到Hello在描述文件中的信息类,对应于xml文件标签的name属性。
22.ManagedBean managed = registry.findManagedBean("Hello");
23.//创建ObjectName
24.ObjectName helloName = new ObjectName(managed.getDomain() + ":name=HelloWorld");
25.//得到ModelMBean
26.ModelMBean hello = managed.createMBean(new Hello());
27.//注册MBean
28.server.registerMBean(hello, helloName);
29.30.ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter,port=8082");
31.HtmlAdaptorServer adapter = new HtmlAdaptorServer();
32.server.registerMBean(adapter, adapterName);
33.adapter.start();
34.System.out.println("start.....");
35.}
36.}
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应用
发表评论
-
java实现Tree
2012-07-10 09:59 882/****************************** ... -
Java正则表达式应用总结
2012-05-25 12:23 1108一、概述 正则表达式是Java处理字符串、文本的重要工具。 ... -
JdbcTemplate与事务
2012-05-17 17:42 1127JdbcTemplate与事务 上例中的JdbcTemplat ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-05-09 17:59 930最近的机器内存又爆满 ... -
jconsole远程监控Java进程
2012-05-07 11:44 1078JDK中的工具jconsole可以很好地监控Java进程及其运 ... -
spring集成quartz
2012-04-16 15:56 2223首先,让spring框架运转起来,可以参看一下:ht ... -
JMX RMI 访问
2011-09-02 10:46 4526RMI(Remote Method Invocation) R ... -
采用开发框架quartz调度管理Job
2011-07-11 10:03 19621.所需要的第三方包:quartz-1.5.2.jarcom ... -
java类型转换
2011-05-20 17:13 914string和int之间的转换? 字符串转换成数据 ... -
java整型数与网络字节序的 byte[] 数组转换关系
2011-05-05 10:47 3784因工作需要在java和c/c++之间进行socket通信,而 ... -
线程安全总结(二)
2010-11-12 10:34 853站内很多人都问我,所谓线程的“工作内存”到底是个什么东西? ... -
java线程安全总结
2010-11-12 10:33 838java线程安全总结(二 ... -
ora-02289问题解决
2010-10-19 12:35 1651<id name="id" type ... -
JDBC的批处理操作三种方式 pstmt.addBatch();
2010-09-25 15:58 8720SQL批处理是JDBC性能优化的重要武器,经本人研究总结,批处 ... -
log4j输出多个自定义日志文件
2010-05-12 10:28 1519<转>http://hi.baidu.com/ ... -
spring任务调度
2010-04-28 09:48 1411概述 在JDK 1.3以后的版本中,Java通过java.ut ... -
JDK线程池的使用
2010-04-07 16:35 1461一、简介 线程池类为 j ... -
Java文件操作
2010-02-06 15:29 876本文汇集常用文件操作方法,包括文件的建立/检查与删除,目录的建 ... -
[JMX一步步来] 6、Model Bean
2009-12-21 11:46 1214在上一节是用apache的commons-modeler来 ... -
[JMX一步步来] 4、动态MBean:DynamicMBean
2009-12-21 11:37 1531一、前言 动态MBean是在运行期才定义它的属性和方法 ...
相关推荐
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...