2011-04-19 61 views
0

其實我已經在tomcat中做了一個本地設置的一個Java應用程序,那時候它的工作正常,但一個月後它再次給出下面的錯誤而不更改任何代碼。Java應用程序停止工作,並給予例外

javax.servlet.ServletException: Servlet.init() for servlet action threw exception 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) 
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870) 
    org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) 
    org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) 
    org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) 
    org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685) 
    java.lang.Thread.run(Thread.java:595) 

根源

java.lang.NoClassDefFoundError 
    com.lexmark.efoundations.lxpd.gui.struts.ActionServlet.init(Unknown Source) 
    javax.servlet.GenericServlet.init(GenericServlet.java:212) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) 
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870) 
    org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) 
    org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) 
    org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) 
    org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685) 
    java.lang.Thread.run(Thread.java:595) 

我還檢查了提級 「com.lexmark.efoundations.lxpd.gui.struts.ActionServlet」 出現在適當的位置。

+0

你說你已經檢查過它「存在於適當的地方」 - 你究竟在哪裏擁有它? – 2011-04-19 05:26:50

+0

當我知道JAR時,這種錯誤的最常見原因實際上是我需要確保預期JAR的更新或更舊版本不在類路徑中的早期版本。 – pickypg 2011-04-19 05:27:53

+0

我已經在「com.lexmark.efoundations.lxpd.gui.struts」中檢查過ActionServlet類是否存在 – 2011-04-19 05:29:15

回答

1

不確定這是否與任何方式有關:但是如果類中的靜態初始化塊失敗(因此導致類加載失敗,因此沒有ClassDef),也會拋出該錯誤。

+0

謝謝詹姆斯,但在那個班裏我沒有任何靜態塊。 – 2011-04-19 05:39:22

+0

嗨,詹姆斯可能是你是對的,但如何解決這個問題。因爲我已經發現下面的靜態塊存在於類中 - static {} {} {}}}。 (HibernateException ex){ } catch(HibernateException ex)Log.fatal(「Hibernate Configuration Problem:」+ ex.getMessage()); throw new RuntimeException(「Probleme de configuration:」+ ex.getMessage()); } } – 2011-04-19 09:29:03

+0

然後根據你的'Log.fatal()'提供的信息修改你的Hibernate配置? – BalusC 2011-04-20 00:08:34

0

看起來像一些資源枯竭給我。

不能連接,因爲它們不會導致NoClassDefFound。因此一定是記憶。究竟是什麼原因導致類加載器突然忘記了這個類 - 我還沒有準備好告訴,但是任何操作人員都知道這種治療方法:在週末期間自動回收服務器。

P.S.有趣的是,異常來自init()方法。這意味着正在創建一個Servlet類的新實例。每個Servlet只創建一個類實例,這意味着應用程序已重新初始化。如果沒有人觸及服務器,那可能是一些Tomcat故障(再次,可能是由資源短缺引起的)。需要閱讀日誌和繁殖很多東西。