- 浏览: 148492 次
- 性别:
- 来自: 北京
最新评论
-
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 841/****************************** ... -
Java正则表达式应用总结
2012-05-25 12:23 1047一、概述 正则表达式是Java处理字符串、文本的重要工具。 ... -
JdbcTemplate与事务
2012-05-17 17:42 1097JdbcTemplate与事务 上例中的JdbcTemplat ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-05-09 17:59 893最近的机器内存又爆满 ... -
jconsole远程监控Java进程
2012-05-07 11:44 1054JDK中的工具jconsole可以很好地监控Java进程及其运 ... -
spring集成quartz
2012-04-16 15:56 2191首先,让spring框架运转起来,可以参看一下:ht ... -
JMX RMI 访问
2011-09-02 10:46 4432RMI(Remote Method Invocation) R ... -
采用开发框架quartz调度管理Job
2011-07-11 10:03 19231.所需要的第三方包:quartz-1.5.2.jarcom ... -
java类型转换
2011-05-20 17:13 882string和int之间的转换? 字符串转换成数据 ... -
java整型数与网络字节序的 byte[] 数组转换关系
2011-05-05 10:47 3747因工作需要在java和c/c++之间进行socket通信,而 ... -
线程安全总结(二)
2010-11-12 10:34 832站内很多人都问我,所谓线程的“工作内存”到底是个什么东西? ... -
java线程安全总结
2010-11-12 10:33 807java线程安全总结(二 ... -
ora-02289问题解决
2010-10-19 12:35 1603<id name="id" type ... -
JDBC的批处理操作三种方式 pstmt.addBatch();
2010-09-25 15:58 8646SQL批处理是JDBC性能优化的重要武器,经本人研究总结,批处 ... -
log4j输出多个自定义日志文件
2010-05-12 10:28 1487<转>http://hi.baidu.com/ ... -
spring任务调度
2010-04-28 09:48 1381概述 在JDK 1.3以后的版本中,Java通过java.ut ... -
JDK线程池的使用
2010-04-07 16:35 1419一、简介 线程池类为 j ... -
Java文件操作
2010-02-06 15:29 850本文汇集常用文件操作方法,包括文件的建立/检查与删除,目录的建 ... -
[JMX一步步来] 6、Model Bean
2009-12-21 11:46 1177在上一节是用apache的commons-modeler来 ... -
[JMX一步步来] 4、动态MBean:DynamicMBean
2009-12-21 11:37 1503一、前言 动态MBean是在运行期才定义它的属性和方法 ...
相关推荐
commons-modeler.jar,构建JMX必备
用Apache的commons-modeler辅助开发JMX时,必须的jar包。
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 简单...
jmx快速上手 jmx快速上手 jmx快速上手 jmx快速上手
很多jmx教程中提到的几个zip jmx-1_2_1-ri.zip jmx_remote-1_0_1_03-ri.zip jmx-1_1-mr-spec.zip
JMX一步步来JMX一步步来JMX一步步来JMX一步步来
csdn有一个下载包含HtmlAdaptorServer这个class,不过不知道是不是官方的,而且跟网上介绍的资料不一样,所以自己去oracle官网找着下载下来分享给大家,只要2分啦 包含资源文件为如下: jmx_remote-1_0_1_03-ri.zip jmx-1...
jmx-1_2_1-ri.zip jmx源码
jmx所需的jar包 jmxtools.jar、jmxri.jar 还有api jmx-1_2-api.zip
书中不仅有对于基础知识的介绍,还有对于JMX开发中重大的体系架构问题的深入探讨,总结了大量JMX开发中的设计模式,并讨论了框架、安全性与性能等等。书中提供了几个典型的例子,兼顾各种开发平台,这些例子的代码...
tomcat-catalina-jmx-remote-8.0.21.jar架包,用于jconsole使用时tomcat无法启动报错
JMX一步一步来,从最基本的应用开始入手,快速应用开发。
代理Java包,用于生成JVM的健康的数据,jmx_prometheus_javaagent-0.12.0.jar
NULL 博文链接:https://90haofang-163-com.iteye.com/blog/1901416
antlr.jar asm.jar asm-attrs.jar burlap-2.1.12.jar c3p0-0.9.0.2.jar cglib-2.1.jar cglib-nodep-2.1_3.jar commons-attributes-api.jar commons-attributes-compiler.jar commons-beanutils.jar commons-...
文件中包含jmxtools-1.2.1.jar和jmxri-1.2.1.jar资源jar包
NULL 博文链接:https://90haofang-163-com.iteye.com/blog/1904451
maven编译时报找不到这两个jar文件,发现已经无法从网站...Could not resolve dependencies for project ****:jar:0.0.1-SNAPSHOT: The following artifacts could not be resolved: com.sun.jdmk:jmxtools:jar:1.2.1, ...