【问题标题】:OpenShift Tomcat Processing Annotations Error Deploying WarOpenShift Tomcat 处理注释错误部署战争
【发布时间】:2015-05-22 07:11:49
【问题描述】:

我更新了关于 open shift 的 java 战争,更新后应用程序无法启动。当我查看 jbossews 日志文件时,我发现了问题,但我无法在 OpenShift 之外复制它。在本地的tomcat上运行良好。

我收到一系列处理错误,直到应用程序用完堆空间:

May 22, 2015 12:04:16 AM org.apache.catalina.startup.ContextConfig processAnnotationsJar
SEVERE: Unable to process Jar entry [javassist/ByteArrayClassPath.class] from Jar [jar:jndi:/localhost/cope/WEB-INF/lib/javassist-3.19.0-GA.jar!/] for annotations
java.io.EOFException
    at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:340)
    at org.apache.tomcat.util.bcel.classfile.Utility.swallowMethodParameters(Utility.java:797)
    at org.apache.tomcat.util.bcel.classfile.Attribute.readAttribute(Attribute.java:171)
    at org.apache.tomcat.util.bcel.classfile.FieldOrMethod.<init>(FieldOrMethod.java:57)
    at org.apache.tomcat.util.bcel.classfile.Method.<init>(Method.java:71)
    at org.apache.tomcat.util.bcel.classfile.ClassParser.readMethods(ClassParser.java:267)
    at org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:127)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2058)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1934)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1900)
    at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1885)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1317)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:876)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:374)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5355)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1083)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1880)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

这种情况一直持续到以下情况:

May 22, 2015 12:04:17 AM org.apache.catalina.startup.HostConfig deployWARs
SEVERE: Error waiting for multi-thread deployment of WAR files to complete
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap space
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:188)
    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:818)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1614)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:330)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
    at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:347)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1140)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:799)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.OutOfMemoryError: Java heap space

我在这里错过了什么??

【问题讨论】:

    标签: java tomcat openshift


    【解决方案1】:

    所以,回答我自己的问题,问题似乎出在最新版本的 javassist 上。作为上次更新 3.19.0 的一部分,我们更新到最新版本,它看起来与 OpenShift 上的 Tomcat 不兼容。一旦我降级回 3.17.1,一切正常。

    就像对任何 OpenShift 员工的说明一样,如果可以在 OpenShift 支持页面上突出显示此类问题,那将非常有帮助。 Javassist 3.19.0 在 maven 上已经存在 5 个月了,我无法想象我们是第一个遇到这个问题的人。

    【讨论】:

      【解决方案2】:

      此问题已在the Tomcat 7.0.56 changelog 中得到确认。

      有关更多信息,请参阅此问题:Tomcat 7 Annotation scanner and JDK 8 with -parameters compiler flag exceptions

      Javassist 3.19.0 使用了 java8 编译器参数-parameters

      【讨论】:

        【解决方案3】:

        通过查看此消息“jar:jndi:/localhost/cope/WEB-INF/lib/javassist-3.19.0-GA.jar!/

        您的类路径似乎有问题。使用相对路径而不是绝对路径。例如/lib/javassist-3.19.0-GA.jar

        【讨论】:

        • 这不是由OpenShift容器在部署WAR的时候管理的吗? jar 打包在 WAR 文件中。
        【解决方案4】:

        对于我的项目,我通过排除解决了这个问题:

        也许对你有帮助。

              <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-core</artifactId>
                    <version>5.1.0.Final</version>
                    <exclusions>
                        <exclusion>
                            <groupId>org.javassist</groupId>
                            <artifactId>javassist</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
        

        【讨论】:

          【解决方案5】:

          查找需要org.javassist的依赖项

          mvn dependency:tree 显示(例如 spring-boot-starter-thymeleaf)

          [INFO] \- org.springframework.boot:spring-boot-starter-thymeleaf:jar:1.4.1.RELEASE:compile
          [INFO]    +- org.thymeleaf:thymeleaf-spring4:jar:2.1.5.RELEASE:compile
          [INFO]    |  +- org.thymeleaf:thymeleaf:jar:2.1.5.RELEASE:compile
          [INFO]    |  |  +- ognl:ognl:jar:3.0.8:compile
          [INFO]    |  |  +- org.javassist:javassist:jar:3.20.0-GA:compile (version managed from 3.16.1-GA)
          [INFO]    |  |  \- org.unbescape:unbescape:jar:1.1.0.RELEASE:compile
          [INFO]    |  \- org.slf4j:slf4j-api:jar:1.7.21:compile
          [INFO]    \- nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:jar:1.4.0:compile
          [INFO]       \- org.codehaus.groovy:groovy:jar:2.4.7:compile (version managed from 2.4.3)
          

          该依赖来自 spring-boot-starter-thymeleaf 排除它并添加您的环境支持的版本的依赖

          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-thymeleaf</artifactId>
              <exclusions>
                  <exclusion>
                      <groupId>org.javassist</groupId>
                      <artifactId>javassist</artifactId>
                  </exclusion>
              </exclusions>
          </dependency>
          <dependency>
              <groupId>org.javassist</groupId>
              <artifactId>javassist</artifactId>
              <version>3.17.1-GA</version>
          </dependency>
          

          测试它是否适用于降级版本。

          【讨论】:

            【解决方案6】:

            您可以在扫描中添加跳过 jar。只需进入存储库的路径 nameRepository/.openshift/config/ 中的文件“catalina.properties”。并搜索部分tomcat.util.scan.DefaultJarScanner.jarsToSkip

            在本节的最后添加您的 jar 名称,例如 javassist-*.jar

            【讨论】:

              猜你喜欢
              • 2018-08-30
              • 2013-11-27
              • 2013-09-14
              • 1970-01-01
              • 1970-01-01
              • 2012-04-14
              • 2011-04-12
              • 1970-01-01
              • 2021-10-25
              相关资源
              最近更新 更多