martini应用搭建问题记录一--重复类载入

来源:互联网 发布:mysql update多张表 编辑:程序博客网 时间:2024/06/06 01:08


一。问题情况 

昨天开始搭建一个应用matini,因为有文档参考,所以搭建还是比较快的,这个应用跑在apache+jboss组成的服务器上面,基本框架是shy3+spring+oracle组成;布置环境,编译代码,一切正常后,开始启动。。。,日志文件报了一个类错误,启动失败,如下:

2012-06-08 12:26:36,582 ERROR support.RegistryDirectory -  [DUBBO] Failed to refer invoker for interface:interface com.ali.caesar.platform.common.esb.DubboCustomerInfoServiceProviderInterface,url:(hessian://10.20.143.205:27777/com.ali.caesar.platform.common.esb.DubboCustomerInfoServiceProviderInterface?anyhost=true&application=martini&check=false&dubbo=2.1.4&interface=com.ali.caesar.platform.common.esb.DubboCustomerInfoServiceProviderInterface&methods=queryMultiMemberInfoList,findBatchLatestCustomerInfo&pid=19199&revision=3.1.25&server=jetty&timestamp=1339122204533&version=1.0.0)com.caucho.hessian.client.HessianProxy.<init>(Ljava/net/URL;Lcom/caucho/hessian/client/HessianProxyFactory;)V, dubbo version: 2.0.12, current host: 10.16.46.65

  java.lang.NoSuchMethodError: com.caucho.hessian.client.HessianProxy.<init>(Ljava/net/URL;Lcom/caucho/hessian/client/HessianProxyFactory;)V

二。处理过程

看了下,应该是说初始化类过程中,有个类的方法没有找到;DubboCustomerInfoServiceProviderInterface这个类是DUBBO反射实例化的。

是不是dubbo类的提供方的方法有问题?查询了dubbo注册平台,类提供方正常,版本号也正常,而且出错不是提示没有调用方,那么应该是调用后初始化失败;

然后在eclipse里面使用类检索功能,查询出错的com.caucho.hessian.client.HessianProxy类,发现有两个不同的jar里面存在同名类;比较了下,其中一个类有两个初始化方法如下:

  /**
   * Package protected constructor for factory
   */
  HessianProxy(HessianProxyFactory factory, URL url)
  {
    _factory = factory;
    _url = url;
  }

  /**
   * Protected constructor for subclassing
   */
  protected HessianProxy(URL url, HessianProxyFactory factory)
  {
    _factory = factory;
    _url = url;
  }

而另一个只有第一个方法,再比照出错的提示没有找到的方法,基本可以确认就是由于同名不同类载入的问题,导致出错。

找到原因后,就把war包lib里面打包的类jar删除,重新启动jboss,可以看到出错消失了,应用启动成功~!

三。后续问题

   我拉的martini是主干,清空二方库后重新打得包,拥有同名文件的jar包生成日期是一致的,换句话说,martini应用主干本身依赖关系里面就存在这种风险,怎么之前没有暴露出这个问题,线上环境也没有这种同名不同类载入的问题呢?我需要再跟进调查下。

原创粉丝点击