前言:做了一个监控应用服务器的项目(支持Tocmat、WebSphere、WebLogic各版本), 过程也算是磕磕绊绊,由于网上缺少相关资料,或者深陷于知识的海洋难以寻觅到有效的资料,因而走过不少弯路,遇过不少困难。为了留下点印记,给后来人留下 点经验之谈,助之少走弯路,故将这些经验整理出来,与大家分享。水平有限,难免疏漏,还望指正。如有疑问,欢迎留言,或者加入Q群参与讨 论:35526521。
前提
需要监控多个Tomcat,而其中有些Tomcat使用JDK5,有些Tomcat使用JDK6,这时可能会遇到的一个问题,请看下文。
现象
采集某个Web应用的所有的Servlet监控信息,使用如下的 URL :
----------------------------------------------------------------------------
http://localhost:58080/manager/jmxproxy?qry=*:j2eeType=Servlet,WebModule=/manager,*
----------------------------------------------------------------------------
从上面的URL可以看到,查询字符串为『 *:j2eeType=Servlet,WebModule=* / manager,* 』
但是这样的查询字符串只对使用JDK6环境的Tomcat有效,如果您监控的Tomcat使用JDK5的环境,那么这个查询字符串会被认为是错误的,从而返回异常信息:
----------------------------------------------------------------------------
Error - javax.management.MalformedObjectNameException: Invalid character '*' in value part of property
----------------------------------------------------------------------------
原因分析
经验证,这是由于不同版本的JDK 对 ObjectName 的支持不同,验证代码如下:
----------------------------------------------------------------------------
ObjectName objName = new ObjectName("*:j2eeType=Servlet,WebModule=*/manager,*"); System.out.println(objName);
----------------------------------------------------------------------------
在JDK6 环境下运行这段代码没有问题,但是在 JDK5 环境下运行这段代码就会报异常:
----------------------------------------------------------------------------
Exception in thread "main" javax.management.MalformedObjectNameException: Invalid character '*' in value part of property at javax.management.ObjectName.construct(ObjectName.java:529) at javax.management.ObjectName.<init>(ObjectName.java:1304) at cn.chenfeng.Test.main(Test.java:10)
----------------------------------------------------------------------------
得出结论
在JDK6 的帮助文档中有这样一段:
----------------------------------------------------------------------------
ObjectName模式的示例有:
◆ *:type=Foo,name=Bar匹配键的具体设置为 type=Foo,name=Bar 的任何域中的名称。
◆ d:type=Foo,name=Bar,*匹配具有键 type=Foo,name=Bar 以及 0 或其他键的域 d 中的名称。
◆ *:type=Foo,name=Bar,*匹配具有键 type=Foo,name=Bar 以及 0 或其他键的域中的名称。
◆ d:type=F?o,name=Bar将与诸如 d:type=Foo,name=Bar 和 d:type=Fro,name=Bar 之类的键和名称匹配。
◆ d:type=F*o,name=Bar将与诸如 d:type=Fo,name=Bar 和 d:type=Frodo,name=Bar 之类的键和名称匹配。
◆ d:type=Foo,name="B*"将与诸如 d:type=Foo,name="Bling" 之类的键和名称匹配。通配符在引号中也能被识别,并且像其他特殊字符一样可以使用 \ 转义。
----------------------------------------------------------------------------
可见JDK6 是支持字符串中有 ? 和 * 的匹配模式的,但是JDK5 却不支持,这点一定要注意!
如果遇到这种错误,就得针对两种情况使用不同的应对措施了。
相关推荐
Java Management Extensions(JMX)是Java平台上的一个标准技术,用于管理和监控应用程序、操作系统和网络设备等资源。在JDK1.6版本中,JMX已经成熟并被广泛使用。本篇文章将深入探讨JMX的基本概念、核心组件、功能...
Java Management Extensions(JMX)是Java平台上的一个标准技术,用于管理和监控应用程序、系统和服务。JMX提供了一种灵活的框架,使得开发者可以创建管理工具,以及让运行时的组件暴露其管理特性。在Java应用中,...
通过JMX,开发者可以轻松地在Java应用程序中集成管理和监控的功能,从而实现对应用程序状态和服务的远程管理。 在深入探讨JMX的具体用法之前,我们首先来了解它能够带来的实际益处: 1. **动态配置**:JMX允许应用...
它通过一系列接口、工具和技术来帮助开发者为Java应用程序添加管理和监控的能力。 #### 二、JMX核心概念解读 在深入理解JMX之前,我们需要了解几个关键的概念: 1. **MBean** (Managed Bean):这是JMX中最基本的...
JMX还可以通过MBean服务器来实现跨应用的通信,并允许远程监控和管理。 ### MBeans MBeans是JMX的核心元素,它们是Java对象,负责封装管理信息和操作。有四种类型的MBeans: 1. **Standard MBean**: 定义了标准...
WebLogic Server内置了对JMX的支持,允许开发者通过编程方式访问WebLogic的各种管理特性,实现对服务器的动态配置、性能监控等功能。 ##### 3.1 配置MBeanServer WebLogic Server默认就已经包含了MBeanServer实例...
- JMX (Java Management Extensions) 在 JDK 1.7 中得到了增强,提供了更多的监控和管理功能,便于监控和调整应用程序的性能。 以上是 JDK 1.5、1.6 和 1.7 中的一些关键新特性及其示例。这些特性极大地丰富了 ...
而JMX(Java Management Extensions)则是一种标准,用于提供监控和管理Java应用程序的能力。在这个场景中,我们关注的是JMXTools-1.2.1.jar,这是一个专门针对JMX的工具集,用于扩展Java应用程序的管理功能。\n\...
2.3.3. 对bean命名pointcut( bean name pointcut element)的支持 2.3.4. 对AspectJ装载时织入(AspectJ load-time weaving)的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. 对Websphere ...
2.3.3. 对bean命名pointcut( bean name pointcut element)的支持 2.3.4. 对AspectJ装载时织入(AspectJ load-time weaving)的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. 对Websphere ...
2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. 控制反转容器 3.1. 简介 3.2. 容器和bean的基本原理 3.2.1. 容器 3.2.2. ...
2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. 控制反转容器 3.1. 简介 3.2. 容器和bean的基本原理 3.2.1. 容器 3.2.2. ...
2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.7.1.1. Jar包 2.7.1.2. XML配置 2.7.1.3. Deprecated的类和方法 2.7.1.4. Apache OJB 2.7.1.5. iBatis 2.8. 更新的样例应用 2.9. 改进的...
在 Java 领域中,容器通常指 Java 应用服务器或 Servlet 容器,它们为部署在其中的应用程序提供运行时支持和服务。 #### Cluster 集群是由多台计算机组成的集合,这些计算机通过网络连接在一起,共同完成一项任务...
Its product version number is 6 and developer version number is 1.6.0, as described in Platform Name and Version Numbers. For information on a feature of the JDK, click on a component in the diagram ...