背景第一:在WindowsXP的&的OpenSUSE SLEDservlet能夠真正訪問Tomcat的lib目錄中的jar嗎?
- 的Tomcat 6.0 11.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,它是否正確啓動而不會拋出異常?日誌說什麼? – 2011-04-05 21:26:55
我已經幾次重啓Tomcat無濟於事。我添加了上面看到的所有日誌消息。順便說一下,它總是啓動正常,只有當我嘗試訪問Scinv時,它會拋出RuntimeException。 – Jay 2011-04-05 21:32:30
檢查我的答案。 – 2011-04-05 21:51:16