想尝试写个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监控weblogic,tomcat,websphere源码"涉及了使用JMX来监控三个主流的Java应用服务器:WebLogic、Tomcat和WebSphere。这些服务器都是企业级应用部署的常见选择,对它们的监控对于确保系统性能、稳定性...
总结起来,使用JMX监控类的实例数量是通过创建、实现和注册MBean来完成的,它提供了对应用程序内部状态的透明度,有助于进行性能调优和问题诊断。结合源码分析和合适的工具,我们可以更好地理解并控制Java应用程序的...
**标题解析:** "JMX HelloWorld Download" 指的是一个关于Java Management Extensions(JMX)的简单示例,可能是用于教学或演示如何在Java应用中使用JMX技术。"Download"表明这是一个可以下载的资源,可能包含了...