2011-04-19 8 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

당신은 그것이 "적절한 장소에"있는지 확인 했습니까 - 정확히 어디에 있습니까? –

+0

JAR 파일이 실제로 있다는 것을 알았을 때이 오류가 발생하는 가장 일반적인 원인은 기대 한 JAR의 새로운 버전이나 이전 버전이 클래스 경로의 앞부분에 없는지 확인해야한다는 것입니다. – pickypg

+0

ActionServlet 클래스가있는 "com.lexmark.efoundations.lxpd.gui.struts"를 확인했습니다. –

답변

1

이것이 어떤 식 으로든 관련이 있는지는 확실하지 않지만 클래스의 정적 초기화 프로그램 블록이 실패하면 클래스로드가 실패하여 ClassDef가없는 경우에도 throw 될 수 있습니다.

+0

James에게 감사하지만 그 클래스에는 정적 블록이 없습니다. –

+0

안녕하세요 제임스는 당신이 옳을 수도 있지만 어떻게 해결할 수 있습니다. 왜냐하면 내가 아래 정적 블록 클래스에 존재하는 것으로 나타났습니다 - 정적 { { \t // Create SessionFactory sessionFactory = new(). configure(). buildSessionFactory(); } catch (HibernateException ex) { Log.fatal ("최대 절전 구성 문제 :"+ ex.getMessage()); 새로운 RuntimeException을 던집니다 ("구성에 문제가 있습니다 :"+ ex.getMessage()); } } –

+0

그럼'Log.fatal()'이 제공 한 정보를 기반으로 Hibernate 설정을 수정하면됩니까? – BalusC

0

일부 자원이 고갈 된 것처럼 보입니다.

NoClassDefFound를 발생시키지 않으므로 연결할 수 없습니다. 따라서 기억이 있어야합니다. 클래스 로더가 갑자기 클래스를 잊어 버리는 원인이되는 논리는 무엇입니까? 말할 필요가 없지만, 치료법은 모든 운영자에게 알려져 있습니다. 주말에는 자동으로 서버를 재활용하십시오.

P. 흥미로운 점은 예외가 init() 메소드에서 발생한다는 것입니다. 즉, Servlet 클래스의 새 인스턴스가 만들어지고 있음을 의미합니다. 서블릿 당 하나의 클래스 인스턴스 만 생성됩니다. 즉, 응용 프로그램이 다시 초기화되었습니다. 아무도 서버를 건드리지 않으면 Tomcat이 실패 할 수 있습니다 (다시 말해서 자원 부족으로 인한 것일 수 있음). 로그를 읽고 많은 것을 먹어야합니다.

관련 문제