【发布时间】:2011-04-05 21:18:52
【问题描述】:
背景优先:
- WindowsXP 和 OpenSUSE SLED 11.0 上的 Tomcat 6.0(两个平台上的结果相同)
- Oracle JDK v6
- 春季 3.0
- Javolution 5.5.1
我的应用程序正在使用的 jar (javolution-5.5.1.jar) 有一个奇怪的问题。我已经在 WEB-INF/lib 中有这个 jar 一段时间了,没有任何问题。我们确定这个 jar 确实需要位于 Tomcat 的 lib 目录而不是我们应用的 lib 目录中,因为它在多个应用之间共享,所以我们移动了它。
但是,这样做会导致新的 RuntimeException 试图访问从 javolution.jar 扩展 Struct 的类 (Scinv)。是否有某种原因,应用程序无法以这种方式从 Tomcat 的 lib 目录访问 JAR 中的类?
我的班级是(删除了不相关的细节):
import javolution.io.Struct;
public class Scinv extends Struct {
public static methodA() {...}
public static methodB() {...}
public static class ProdRecs extends Struct {...}
public static class ProdRec extends Struct {...}
}
当我尝试访问使用静态嵌套类的 Scinv 的静态方法时,我得到了这个:
Apr 5, 2011 3:40:50 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet inventory threw exception
java.lang.RuntimeException: Struct class: general.dao.externalfiles.Scinv$ProdRec not found
at javolution.io.Struct.array(Struct.java:557)
at general.dao.externalfiles.Scinv$ProdRecs.<init>(Scinv.java:447)
Apr 5, 2011 3:40:50 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet default threw exception
java.lang.RuntimeException: Struct class: general.dao.externalfiles.Scinv$ProdRec not found
at javolution.io.Struct.array(Struct.java:557)
at general.dao.externalfiles.Scinv$ProdRecs.<init>(Scinv.java:447)
我所要做的就是将 javolution-5.5.1.jar 从 Tomcat/lib 移动到我的 WEB-INF/lib 目录,然后应用程序再次正常工作,没有 RuntimeExceptions。
关于为什么失败的任何想法?我们在 Tomcat/lib 目录中也有 postgres-9.0.jar 文件,它似乎工作正常。
如果您需要,我很乐意提供更多详细信息,如果您有任何建议,我将不胜感激,因为我对此感到有点难过!
【问题讨论】:
-
好的,如果你重启tomcat,它是否可以正确启动而不会抛出异常?日志说什么?
-
我重启了 Tomcat 几次都没有用。我已经添加了我在上面看到的所有日志消息。顺便说一句,它总是启动得很好,只有当我尝试访问 Scinv 时它才会抛出 RuntimeException。
标签: java tomcat jar javolution