Может ли сервлет действительно обращаться к банкам в директории lib Tomcat? - PullRequest
0 голосов
/ 06 апреля 2011

Сначала фон:

  • Tomcat 6.0 в WindowsXP и OpenSUSE SLED 11.0 (одинаковые результаты на обеих платформах)
  • Oracle JDK v6
  • Spring 3.0
  • Javolution 5.5.1

У меня странная проблема с jar (javolution-5.5.1.jar), который использует мое приложение.У меня была эта банка в WEB-INF / lib в течение некоторого времени без каких-либо проблем.Мы определили, что этот jar-файл действительно должен находиться в директории lib Tomcat, а не в директории lib нашего приложения, потому что он используется несколькими приложениями, поэтому мы переместили его.

Однако это вызвало новую исключительную ситуацию RuntimeException, которая пытается получить доступ к классу (Scinv), который расширяет Struct из javolution.jar.Есть ли какая-то причина, по которой приложение не сможет получить доступ к классу в JAR из директории lib Tomcat таким образом?

Мой класс (несущественные детали удалены):

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.

Есть идеи, почему это не удается?У нас также есть файл postgres-9.0.jar в Tomcat / lib dir, и он, кажется, работает нормально.

Я был бы рад предоставить более подробную информацию, если они вам понадобятся, и любые предложения будут оценены, так как я отчасти озадачен этим!

1 Ответ

1 голос
/ 06 апреля 2011

Не думаю, что проблема в том, чтобы поместить javolution-5.5.1.jar в папку TOMCAT_HOME/lib, JVM уже беспокоилась бы об объекте Struct (javolution.io.Struct.array(Struct.java:557)).Истинная причина проблемы: что происходит с вашим конструктором в general.dao.externalfiles.Scinv$ProdRecs классе (Scinv.java:447)?Что-то заставляет объект не инициализироваться и, следовательно, исключение времени выполнения.

...