设置:-
- 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.jar
在lib/
目录中。这.war
也很容易意外地将 也一起发布。
因此,Tomcat 会在加载时扫描所有类,如果发现存在此错误的类,它会阻止加载。