Thinking

兵胜非常事,要善于总结

ClassNotFoundException, org.jboss.netty.channel.ChannelPipelineFactory 缺少jar包【远程调用dubbo分布式服务框架遇到的问题】

文章来源:http://blog.csdn.net/cuidiwhere/article/details/20402347


现象&异常

    在开发机上,myApp web应用可以正常访问。但在daily环境可以访问index.htm,访问其他页面出现异常,浏览器内显示的异常内容为 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.myCompany.buc.client.service.provider.AclServiceProvider  
  2.         at com.myapp.buc.MyAppSecurityHandler.hasUrlAuth(MySecurityHandler.java:70)  
  第一反应是负责权限控制的第三方服务AclServiceProvider没有提供服务。但仔细一想异常是 NoClassDefFoundError,说明该类没有初始化,查看日志文件myApp.log里异常详情为:   

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. Caused by: java.lang.ClassNotFoundException: org.jboss.netty.channel.ChannelPipelineFactory  
  2.         at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1701)  
这才是问题的症结所在,把问题定位准了,就完成了解决问题80%的工作量。


解决方法

  •       第一步:定位该类在哪个jar包

     由于开发机上是可以正常启动的,于是在Eclipse里利用Ctrl+T查找 ChannelPipelineFactory, 发现workspace里有两个jar包都包含该类。这两个ja包为

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. jboss.jboss-netty-3.2.5.Final.jar  
  2. netty-3.6.3.Final.jar  

于是在myApp.war包里查找这两个jar包,可以预测不能找到。实验结果跟预测一致,这两个netty相关的jar包没被打包到myApp.war里。

  •     第二步:该引入哪个jar包呢

    虽然找到了该类位于的jar包,但应该依赖哪一个呢? 于是查看线上机器的war包,发现线上机器依赖的是netty-3.6.3.Final.jar,在pom.xml里添加该依赖即解决问题


思考

    虽然问题解决了,但心中有个疑惑: 为什么开发机没有依赖netty-3.6.3.Final.jar,web应用依然可以正常工作呢?

    猜测:开发机和daily环境使用的web服务器不同,开发机还使用了web插件,有可能org.jboss.netty.channel.ChannelPipelineFactory在开发机web环境中已经存在。



阅读更多
想对作者说点什么? 我来说一句

Netty/NIO实践

Netty NIO 实践

winy_lm winy_lm

2016-09-07 14:08:46

阅读数:999

没有更多推荐了,返回首页

不良信息举报

ClassNotFoundException, org.jboss.netty.channel.ChannelPipelineFactory 缺少jar包【远程调用dubbo分布式服务框架遇到的问题】

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭