Может ли сервлет действительно получить доступ к банкам в директории lib Tomcat?
Фон первый:
- Tomcat 6.0 в WindowsXP и OpenSUSE SLED 11.0 (одинаковые результаты на обеих платформах)
- Oracle JDK v6
- Весна 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 из библиотеки 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, и приложение снова работает нормально, без исключений RuntimeException.
Любые идеи о том, почему это не удается? У нас также есть файл postgres-9.0.jar в Tomcat/lib dir, и он, кажется, работает нормально.
Я был бы рад предоставить более подробную информацию, если они вам понадобятся, и любые предложения будут оценены, так как я отчасти озадачен этим!
1 ответ
Я не думаю, что это проблема размещения 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
)? Что-то заставляет объект не инициализироваться и, следовательно, исключение времени выполнения.