2011-04-19 47 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故障(再次,可能是由资源短缺引起的)。需要阅读日志和繁殖很多东西。