监控WebLogic9/10的项目部署到Tomcat报[Unsupported protocol: t3]异常的解决办法
前言:做了一个监控应用服务器的项目(支持Tocmat、WebSphere、WebLogic各版本), 过程也算是磕磕绊绊,由于网上缺少相关资料,或者深陷于知识的海洋难以寻觅到有效的资料,因而走过不少弯路,遇过不少困难。为了留下点印记,给后来人留下 点经验之谈,助之少走弯路,故将这些经验整理出来,与大家分享。水平有限,难免疏漏,还望指正。如有疑问,欢迎留言,或者加入Q群参与讨 论:35526521。
使用JMX监控WebLogic 9.x、10.x时要用到WebLogic提供的JAR包:
◆ 9.x用到wlclient.jar和wljmxclient.jar
◆ 10.x在JDK6下用到wlfullclient.jar、JDK5下用到wlfullclient5.jar(用 WebLogic JarBuilder Tool生成)
以下只针对wlfullclient.jar,也就是JDK6下的WebLogic 10.x。
错误现象
我们会通过这种方式获取和MBean Server的连接:
-----------------------------------------------------------------------
JMXConnector connector = JMXConnectorFactory.connect(serviceURL, h);
-----------------------------------------------------------------------
但是项目在Eclipse下通过Java程序调用没有任何问题,但作为Web应用部署到Tocmat就出问题了,会报这样的异常:
-----------------------------------------------------------------------
Unsupported protocol: t3
-----------------------------------------------------------------------
你是不是也发现了这个问题?
原因分析
刚发现这个问题是很是诧异,想不通,后来在老外的一个论坛上找到类似问题。
-----------------------------------------------------------------------------------------------
原来, JMXConnector接口是在JDK5/JDK6的rt.jar里面,而具体实现类是在wlfullclient.jar里面,问题就出在这里。rt.jar是由系统类加载器加载的, wlfullclient.jar如果放在WEB-INFO/lib目录下,就不是由系统类加载器加载,而是由Tomcat自定义的每个Web应用独有的WebappClassLoader加载了。所以我们只要把wlfullclient.jar放到Tomcat安装目录下的lib目录下,这样 wlfullclient.jar跟rt.jar就都是由系统类加载器加载了,所以问题就不存在了。
-----------------------------------------------------------------------------------------------
解决方案
解决方法很简单: 将wlfullclient.jar放到Tomcat安装目录下的lib目录下即可。