OpenCMS 在 TomCat 启动时抛出 Java 异常

OpenCMS 在 TomCat 启动时抛出 Java 异常

设置:-

  • OpenCMS 在 TomCat5.5 上运行
  • 使用 DiabloJVM 在 FreeBSD 上运行的系统

OpenCMS 系统正在运行,但在 TomCat 重新启动后,它停止加载。在不同主机上运行的数据库服务器 (postgres) 已重新启动并正确响应。

有什么建议让它运行起来吗?

当 TomCat 启动时,标准输出中出现以下错误:

org.apache.openejb.OpenEJBException: org.apache.xbean.recipe.ConstructionException: Error invoking constructor: public org.apache.openejb.tomcat.catalina.TomcatSecurityService(): Error invoking constructor: public org.apache.openejb.tomcat.catalina.TomcatSecurityService()

...

6/12/09 10:11:29 AM (I) WebappClassLoader.validateJarFile : validateJarFile(/usr/local/tomcat5.5/webapps/opencms/WEB-INF/lib/servlet.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

`

6/12/09 9:21:08 AM (S) HostConfig.deployDirectory : Error deploying web application directory opencms
java.lang.ArrayIndexOutOfBoundsException: 26
    at org.apache.openejb.asm.ClassReader.readClass(Unknown Source)
    at org.apache.openejb.asm.ClassReader.accept(Unknown Source)
    at org.apache.openejb.asm.ClassReader.accept(Unknown Source)
    at org.apache.openejb.util.AnnotationFinder.readClassDef(AnnotationFinder.java:251)
    at org.apache.openejb.util.AnnotationFinder.find(AnnotationFinder.java:157)
    at org.apache.openejb.config.DeploymentLoader.discoverModuleType(DeploymentLoader.java:1090)
    at org.apache.openejb.tomcat.catalina.TomcatWebAppBuilder.loadApplication(TomcatWebAppBuilder.java:540)
    at org.apache.openejb.tomcat.catalina.TomcatWebAppBuilder.start(TomcatWebAppBuilder.java:234)
    at org.apache.openejb.tomcat.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:58)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4148)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:448)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)

答案1

当我尝试在同一个 Tomcat 实例上部署 OpenCMS 和 OpenEJB 时,我也遇到了同样的异常。看来 OpenCMS 和 OpenEJB 彼此都不喜欢对方。

但是,我找到了一种解决方法:在 Tomcat 启动时部署 OpenCMS 后,我使用 Manager webapp 上传并运行 OpenEJB。对我来说效果很好。

答案2

看起来你的应用程序文件已损坏:

6/12/09 9:21:08 AM (S) HostConfig.deployDirectory : Error deploying web application directory opencms 
java.lang.ArrayIndexOutOfBoundsException: 26 at
org.apache.openejb.asm.ClassReader.readClass(Unknown Source) at
org.apache.openejb.asm.ClassReader.accept(Unknown Source) at 
org.apache.openejb.asm.ClassReader.accept(Unknown Source) at 
org.apache.openejb.util.AnnotationFinder.readClassDef(AnnotationFinder.java:251)

应用服务器可能保留了旧的工作/临时目录。请尝试在停止时删除并重新部署。

答案3

此错误似乎是由另一个故障应用程序引起的。可能是在服务器启动后加载的,因此直到重置后 OpenCMS 才受到影响。可能的罪魁祸首是 openjb。

问题的解决方法是删除所有 Web 应用程序并逐个替换它们,直到所有必要的服务器上线。

遗憾的是,我目前无法进行更多测试来找出确切的错误。

答案4

Offending class: javax/servlet/Servlet.class

对于 Java 应用程序来说,这是一个相当常见的警告。由于 Web 应用程序容器的类加载器为 servlet 规范提供了 api 和实现,因此禁止 Web 应用程序提供自己的版本。

但是,作为 wep 应用程序的开发人员,如果没有工具支持,编译类会有点困难,因此很容易将其包含servlet.jarlib/目录中。这.war也很容易意外地将 也一起发布。

因此,Tomcat 会在加载时扫描所有类,如果发现存在此错误的类,它会阻止加载。

相关内容