设置:-
- 在 TomCat5.5 上运行的 OpenCMS
- 使用 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)
当我尝试在同一个 Tomcat 实例上部署 OpenCMS 和 OpenEJB 时,我也遇到了这个异常。似乎 OpenCMS 和 OpenEJB 互不喜欢。
但是,我找到了一个解决方法:在 Tomcat 启动时部署 OpenCMS 后,我使用 The Manager webapp 上传并运行 OpenEJB。它对我来说很好。
看起来您的应用程序文件已损坏:
应用服务器可能保留了旧的工作/临时目录。尝试在它停止并重新部署时删除。
此错误似乎是由另一个有故障的应用程序引起的。可能在服务器已经启动之后加载,所以直到重置 OpenCMS 才受到影响。可能的罪魁祸首是openjb。
通过删除所有 Web 应用程序并一一替换它们,直到所有基本服务器都上线,解决了这个问题。
遗憾的是,我目前无法进行更多测试以找出确切的错误。
对于 java 应用程序,这是一个相当常见的警告。因为 web 应用程序容器的类加载器同时提供了 servlet 规范的 api 和实现,所以禁止 web 应用程序提供自己的版本。
但是,作为 wep 应用程序的开发人员,在没有工具支持的情况下编译您的类有点困难,因此很容易将其包含
servlet.jar
在您的lib/
目录中。这也很容易意外地.war
随它一起发货。因此,Tomcat 会在加载所有类时对其进行扫描,如果找到,它会阻止加载该类并呈现此错误。