Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tomcat7/Jackson/WebApp部署崩溃/_Java_Tomcat_Jackson - Fatal编程技术网

Java Tomcat7/Jackson/WebApp部署崩溃/

Java Tomcat7/Jackson/WebApp部署崩溃/,java,tomcat,jackson,Java,Tomcat,Jackson,我正试图在运行Tomcat7.0.26的Ubuntu服务器(12.04)上部署我的web应用程序的新版本。我没有包括我使用的jackson库(-core、-annotations和-databind),而是试图将它们放在/usr/share/tomcat7/lib区域中,供我计划部署的其他应用程序使用 我可以启动服务器并部署我的应用程序。然而,一旦我这么做了,应用程序就会崩溃并关闭Tomcat。显然,ObjectMapper没有被正确加载,但它存在于databind jar文件中(我已经检查过了

我正试图在运行Tomcat7.0.26的Ubuntu服务器(12.04)上部署我的web应用程序的新版本。我没有包括我使用的jackson库(
-core
-annotations
-databind
),而是试图将它们放在
/usr/share/tomcat7/lib
区域中,供我计划部署的其他应用程序使用

我可以启动服务器并部署我的应用程序。然而,一旦我这么做了,应用程序就会崩溃并关闭Tomcat。显然,ObjectMapper没有被正确加载,但它存在于databind jar文件中(我已经检查过了)

对客户的回应是:

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应用程序时如何防止服务器停机(崩溃)


谢谢。

我对Jersey REST库也有类似的问题。事实证明,Tomcat正在破坏我的应用程序,因为我在WAR文件中包含的一些JAR与我移动到Tomcat的lib文件夹中的JAR之间存在版本冲突


我建议您首先在本地开发机器上解决这个问题,因为移动jar文件更快更容易。从Tomcat附带的库和打包到war文件中的所有必需库开始。你的应用程序应该运行良好。然后将jar文件从应用程序移动到Tomcat库。您无需重新构建应用程序即可完成此操作。只需使用解压工具(如7-zip)打开war文件,并在将文件移动到Tomcat/lib时将其从war文件中删除即可。您可能每次都需要重新启动Tomcat,但我发现用这种方式很快就得到了一个正常的配置。现在我的war文件只有735KB,而不是8MB,这对我很重要,因为我的上传速度很慢。

只有在部署应用程序时才会崩溃,这一事实令人怀疑。在您的战争中捆绑了哪些库?如果您使用Maven管理您的应用程序,请将POM添加到您的问题中,否则请从WEB-INF/lib文件夹中列出JAR。lib文件夹中不包含JAR。(是否需要存在一个空文件夹?)。我还没来得及学。根本没有罐子?那么所有应用程序的代码都在WEB-INF/classes文件夹中?除了最简单的web应用程序之外,这听起来不太可能。在WEB-INF/classes中是否有任何第三方类?为了方便起见,我试图将所有第三方JAR放入TOMCAT库中,这样当我更改应用程序时,就不需要创建一个大的war文件。另外,整个应用程序的一些核心底层功能也在它自己的jar中,也在lib中。然后,webapp就是创建web服务的代码,它反过来调用第三方lib和我的lib。更新:我在mac上安装了Tomcat7,并用所有lib重新整理了文件。结果完全一样@docSquale-看看你的要点,你的web应用程序中仍然捆绑着Jackson罐子。您不能在两个位置都使用它们(捆绑在应用程序中,也部署在Tomcats库中)。从WAR中删除它们,重新部署并重新测试。@docSquale如果您只是在Mac上安装了Tomcat,那么它就不应该有jackson库,所以我很惊讶您会出现这个错误。你有没有让你的应用程序运行过?如果是,它是在什么环境下运行的?Ubunu?Tomcat安装在我的本地机器(Mac)上(作为您上面建议的测试)。我没有看到Tomcat安装的jackson库,也不熟悉Mac上可能安装的其他库。然而,我似乎已经将问题归结为这样一个事实:我的代码(线程)抛出了中断的异常,线程正在消亡。ObjectMapper加载是在线程使用之后进行的,看起来这是一个残余的副作用。在我有了重构代码的好主意并将一些代码放入它自己的库之前,这一切都很好。看起来你的问题不是库的位置,而是你可能已经完成的其他重构。Mac或Ubuntu不重要。我认为基本的Tomcat安装都带有相同的库,无论您将它放在哪个平台上。