【发布时间】:2013-03-11 01:59:40
【问题描述】:
我正在尝试在运行 Tomcat 7.0.26 的 Ubuntu 服务器 (12.04) 上部署我的 Web 应用程序的新版本。我没有包含我使用的 jackson- 库(-core、-annotations 和 -databind),而是尝试将它们放在 /usr/share/tomcat7/lib 区域中,以供我计划部署的其他应用程序使用。
我可以启动服务器并部署我的应用程序。但是,一旦我这样做,应用程序就会崩溃并关闭 Tomcat。显然 ObjectMapper 没有正确加载,但它存在于数据绑定 jar 文件中(我已经 jar tvf 对其进行检查)...
给客户端的响应是:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
java.lang.NullPointerException
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:679)
并且,catalina.out 日志文件在应用程序执行后显示以下内容:
Mar 11, 2013 1:42:55 AM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-bio-8080"]
Mar 11, 2013 1:42:55 AM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
Mar 11, 2013 1:42:57 AM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["http-bio-8080"]
Mar 11, 2013 1:42:57 AM org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already. Could not load com.fasterxml.jackson.databind.ObjectMapper. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1587)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)
at org.comtor.authserv.APIServer.doPost(APIServer.java:150)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:679)
Mar 11, 2013 1:42:57 AM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["http-bio-8080"]
感谢您提供任何帮助。我正在尝试了解发生了什么问题,如何防止它发生,以及在执行 Web 应用程序并发生这种情况时防止服务器宕机(崩溃)。
谢谢。
【问题讨论】:
-
在部署您的应用时它仅崩溃的事实令人怀疑。您的 WAR 中捆绑了哪些库?如果您使用 Maven 管理您的应用程序,请将 POM 添加到您的问题中,否则请从 WEB-INF/lib 文件夹中列出 JAR。
-
lib 文件夹中没有包含 jar。 (是否需要存在一个空文件夹?)另外,我没有使用 Maven。我还没有时间学习(还)。
-
根本没有 JAR?所以你所有的应用程序代码都在 WEB-INF/classes 文件夹中?除了最微不足道的网络应用程序之外,这听起来不太可能。 WEB-INF/classes 中有第三方类吗?
-
为了方便起见,我试图将所有第三方 jar 放入 TOMCAT 库中,这样当我更改应用程序时,我不需要创建一个大的战争文件。此外,整个应用程序的一些核心底层功能在它自己的 jar 中,也在 lib 中。然后,webapp 只是创建 web 服务的代码,该服务反过来调用 3rd 方库和我的库。