weblogic服务,包名类名相同导致加载异常

问题描述:

        定时器服务在执行商户退款时出现异常,经排查,发现是调用netbank.base.Reflect类的findGetterMethod时报NoSuchMethodError错误。全局搜索后发现在eService和mService两个服务都有这个类存在。

原因:

        由于定时器服务依赖了这两个服务,当执行商户退款的时候,mService中定义了findGetterMethod方法,而eService没有该方法。jvm加载包名,类名相同的类时,会先加载classpath中jar路径放在前面的。如果包名,类名相同,那jvm就没法区分,只会引入第一个包eService(在classpath路径下排在前面的包),第二个包会在classloader加载类时判断重复而忽略。由于加载的eService没有findGetterMethod方法,导致商户退款时找不到方法抛出异常。

解决方案:

        把这两个服务的公共类提取到core包,其他服务依赖这个包,保持代码一致。

 

猜你喜欢

转载自z1414644039.iteye.com/blog/2416019
今日推荐