想尝试写个WebSphere应用监控的小东东,就照着文档下载Sample试了试(具体参见:Writing PMI applications using the JMX interface),呵呵,碰到不少问题,还好解决了。看Googel上也有人问,就拿出来共享一把了。
1、找不到相关类
报错:java.lang.ClassNotFoundException,或者:java.lang.NoClassDefFoundError,这就需要检查相关的运行期环境了。
首先从Java Stack Trace信息中明确无法找到的类,如下报错:
Exception in thread "main" java.lang.NoClassDefFoundError: com/ibm/websphere/product/WASProduct
at com.ibm.ws.management.util.Utils.getProductVersion(Utils.java:106)
at com.ibm.ws.management.connector.interop.JMXVersionValidation.getJmxVersionHeader(JMXVersionValidation.java:95)
at com.ibm.ws.management.connector.soap.SOAPConnectorClient.invokeTemplate(SOAPConnectorClient.java:582)
at com.ibm.ws.management.connector.soap.SOAPConnectorClient.queryNames(SOAPConnectorClient.java:438)
at com.ibm.ws.management.connector.soap.SOAPConnectorClient.invoke(SOAPConnectorClient.java:370)
at $Proxy0.queryNames(Unknown Source)
at com.ibm.ws.management.AdminClientImpl.queryNames(AdminClientImpl.java:89)
at com.ibm.websphere.pmitool.JmxStat.queryObjectNames(JmxStat.java:321)
at com.ibm.websphere.pmitool.JmxStat.listNodes(JmxStat.java:341)
at com.ibm.websphere.pmitool.JmxStat.main(JmxStat.java:70)
可确认com.ibm.websphere.product.WASProduct类无法找到。
由于WebSphere本身可以正常获取PMI信息,所以可以确定这些类在WebSphere生产环境下必然存在,而开发环境中并未引入这些类从而导致找不到类的错误。那就在生产环境中找找了,看漏了哪些jar包。
如何从生产环境中找到相应jar包呢,呵呵,感谢那些Unix Power Tools了,Window上我还真不知道怎么办了。具体命令和输出如下:
# cd $WAS_HOME/lib
# class="com.ibm.websphere.product.WASProduct"
# find . ! -name . -prune -name "*.jar" -exec jar tvf {} \; -print | egrep "$class|.jar" | sed -n "/$class/{
> :top
> N
> /\.jar/p
> /\.jar/q
> b top
> }"
11886 Wed Jul 04 14:34:10 GMT+08:00 2007 com/ibm/websphere/product/WASProductNLS_de.class
12249 Wed Jul 04 14:34:10 GMT+08:00 2007 com/ibm/websphere/product/WASProductNLS_es.class
12215 Wed Jul 04 14:34:10 GMT+08:00 2007 com/ibm/websphere/product/WASProductNLS_fr.class
12038 Wed Jul 04 14:34:10 GMT+08:00 2007 com/ibm/websphere/product/WASProductNLS_it.class
13175 Wed Jul 04 14:34:10 GMT+08:00 2007 com/ibm/websphere/product/WASProductNLS_ja.class
11856 Wed Jul 04 14:34:10 GMT+08:00 2007 com/ibm/websphere/product/WASProductNLS_ko.class
11833 Wed Jul 04 14:34:10 GMT+08:00 2007 com/ibm/websphere/product/WASProductNLS_pt_BR.class
10359 Wed Jul 04 14:34:10 GMT+08:00 2007 com/ibm/websphere/product/WASProductNLS_zh.class
10539 Wed Jul 04 14:34:10 GMT+08:00 2007 com/ibm/websphere/product/WASProductNLS_zh_TW.class
11091 Wed Jul 04 14:34:10 GMT+08:00 2007 com/ibm/websphere/product/WASProductNLS.class
11097 Wed Jul 04 14:34:10 GMT+08:00 2007 com/ibm/websphere/product/WASProductNLS_en.class
11097 Wed Jul 04 14:34:10 GMT+08:00 2007 com/ibm/websphere/product/WASProductNLS_pt.class
23110 Wed Jul 04 14:34:10 GMT+08:00 2007 com/ibm/websphere/product/WASProduct.class
1720 Wed Jul 04 14:34:10 GMT+08:00 2007 com/ibm/websphere/product/WASProductException.class
1830 Wed Jul 04 14:34:10 GMT+08:00 2007 com/ibm/websphere/product/WASProductInfo.class
4897 Wed Jul 04 14:34:10 GMT+08:00 2007 com/ibm/websphere/product/WASProductFile.class
./wasproduct.jar
呵呵,找到wasproduct.jar,加入到开发环境中就好了。
2、类转换错误
由于Sample代码针对WebSphere5,而我的WebSphere版本6.0,故执行中常碰到:java.lang.ClassCastException异常。
如下语句:
return(Stats)ac.invoke(perfOname, "getStatsObject", params, sigs);
执行中将报错:
java.lang.ClassCastException: com.ibm.ws.pmi.stat.StatsImpl
at com.ibm.websphere.pmitool.JmxStat.collectStatsViaPerfMbean(JmxStat.java:818)
at com.ibm.websphere.pmitool.JmxStat.main(JmxStat.java:194)
检查发现ac.invoke返回类com.ibm.ws.pmi.stat.StatsImpl,该类无法转换为com.ibm.websphere.management.statistics.Stats,事实上该类实现了com.ibm.websphere.pmi.stat.WSStats,故需要将Sample代码做出相应的修改:
return(WSStats)ac.invoke(perfOname, "getStatsObject", params, sigs);
呵呵,由于版本不兼容的类似修改就多了,只能case by case的去解决了。
分享到:
相关推荐
在Java应用中使用JMX通常涉及到引入特定的JAR包来支持其功能。 标题中提到的“使用jmx所需的jar包”是指在进行JMX开发时必要的类库文件。通常,这些JAR包包含了JMX API和实现,它们使得开发者能够构建MBeans...
总结,理解并熟练掌握JBoss的配置、JMX的使用以及EJB3.0的编程模型,将有助于你更好地在企业环境中部署和管理Java应用程序,提升开发效率和系统稳定性。通过深入学习这些知识点,你可以更加游刃有余地应对复杂的Java...
Java Management Extensions(JMX)是Java平台上的一个标准,用于创建和管理应用程序的管理资源,如服务、设备、系统组件等。JMX 提供了一种框架和API来监控和管理运行时的应用程序,使得开发者可以轻松地添加管理...
JMX应用实例与实现,通过一个简单的JavaWeb应用来验证JMX在应用中的植入管理和应用
JMX(Java Management Extensions)是一个用于在Java应用程序中添加管理和监控功能的框架。它提供了一套标准的接口和服务,使得开发者能够轻松地在Java应用中集成管理和监控的能力。JMX的核心概念包括MBeans...
这对于诊断性能问题、监控应用健康和调整资源配置极为关键。 #### GlassFish对JMX的扩展和实现 **AMX**是GlassFish对JMX的一次重大扩展,它不仅简化了MBean的创建和注册过程,还引入了更高级的功能,如动态代理、...
Java Management Extensions(JMX)是Java平台提供的一种标准管理框架,用于监控和管理应用程序、操作系统、网络设备等。它提供了一种统一的方式来暴露管理和控制信息,使得开发者可以创建可管理和自描述的服务。JMX...
NULL 博文链接:https://jonerxq.iteye.com/blog/1990872
书中不仅有对于基础知识的介绍,还有对于JMX开发中重大的体系架构问题的深入探讨,总结了大量JMX开发中的设计模式,并讨论了框架、安全性与性能等等。书中提供了几个典型的例子,兼顾各种开发平台,这些例子的代码...
例如,可以使用JMX API编写代码动态地调用MBean服务器的接口来创建新的MBean,或者发送通知来启动监控中的某些特定任务。这种能力极大地增强了网络监控系统的灵活性和动态配置能力。 综上所述,JMX技术在网络监控中...
在运维过程中,JMX(Java Management Extensions)监控是一个非常重要的工具,可以帮助我们实时查看和管理应用程序的状态,以及诊断和解决问题。本文将详细介绍如何使用 JMX 监控 TongWeb7。 首先,要开启 JMX 监控...
在本项目中,"jmx监控weblogic,tomcat,websphere源码"涉及了使用JMX来监控三个主流的Java应用服务器:WebLogic、Tomcat和WebSphere。这些服务器都是企业级应用部署的常见选择,对它们的监控对于确保系统性能、稳定性...
通过使用JMX,开发者能够方便地集成管理功能到他们的Java应用程序中。 JMX的核心价值在于它为Java应用程序提供了一种统一的管理框架。这意味着开发者可以通过一套标准化的方法来监控和控制应用程序的不同方面,如...
总结起来,使用JMX监控类的实例数量是通过创建、实现和注册MBean来完成的,它提供了对应用程序内部状态的透明度,有助于进行性能调优和问题诊断。结合源码分析和合适的工具,我们可以更好地理解并控制Java应用程序的...