Ticket #49 (closed defect: fixed)

Opened 14 years ago

Last modified 14 years ago

重点问题补录:由于旧版passport引发的NoClassDefFoundError问题

Reported by: chenchongqi Owned by:
Priority: major Milestone:
Component: 商家后台 Version: 5.0
Keywords: NoClassDefFoundError,passport Cc:
Due Date:

Description (last modified by chenchongqi) (diff)

今天商城报障登录页面时常出现问题,检查了几台服务器的日志后,发现其中有一台一直在报错:

java.lang.NoClassDefFoundError: Could not initialize class cn.pconline.passport.auth.Passport

检查比较了一下几台服务器passport.jar、应用类、应用配置、resin、jdk之后没发现什么不一样的地方,为什么独有这一台会报这样的错呢?向小虎请教之后,原来是旧版本passport的初始化是放在静态方法里的,第一次初始化的时候如果不成功(网络、数据库等原因),就不能自动尝试恢复,导致这个类一直保留在无法初始化的状态,NoClassDefFoundError只是一个表象,不知道是不是初始化类失败都会归结于NoClassDefFoundError。

所以如果有数据库重启、网络中断情况的,IT商城的应用必须要重启以确保旧版passport能够正常使用。
注:新版passport已经没有这个问题。

Change History

comment:1 Changed 14 years ago by chenchongqi

  • Status changed from new to closed
  • Resolution set to fixed
  • Description modified (diff)

comment:2 Changed 14 years ago by chenyinle

具体问题没查出。

可能的情况如下:

Passport类里面有一段static的代码,是类加载的时候执行的,里面包含一些数据库的查询代码

大概是12月07日14:05分,数据库连接出了问题

刚好那个时候,应用自动重启,所有执行到的类开始加载,那么加载到Passport的时候,要执行里面的static代码(包含数据库操作),因为数据库连接出问题,导致那段代码执行失败,Passport类没有初始化成功,所以报了NoClassDefFoundError。

Note: See TracTickets for help on using tickets.