Назад | Перейти на главную страницу

OpenCMS выбрасывает исключение Java при запуске TomCat

Настройка: -

Система 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)

Я также столкнулся с этим исключением при попытке развернуть OpenCMS и OpenEJB на одном экземпляре Tomcat. Похоже, OpenCMS и OpenEJB не любят друг друга.

Однако я нашел обходной путь: после развертывания OpenCMS при запуске Tomcat я использовал веб-приложение Manager для загрузки и запуска OpenEJB. У меня все сработало.

Эта ошибка, по-видимому, была вызвана другим неисправным приложением. Вероятно, загружается после того, как сервер уже был запущен, поэтому OpenCMS не был затронут до сброса. Вероятным виновником был openjb.

Проблема была решена путем удаления всех веб-приложений и их замены по одному, пока все основные серверы не были подключены к сети.

К сожалению, в настоящее время я не могу больше протестировать, чтобы выяснить точную ошибку.

Похоже, файлы вашего приложения повреждены:

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)

Сервер приложений может хранить старый каталог work / temp. Попробуйте удалить, пока он остановлен, и повторно развернуть.

Offending class: javax/servlet/Servlet.class

Это довольно частое предупреждение для Java-приложений. Поскольку загрузчик классов контейнера веб-приложения предоставляет как api, так и реализацию спецификации сервлета, веб-приложению запрещено предоставлять свою собственную версию.

Однако, как разработчику приложений wep, это немного затрудняет компиляцию ваших классов без поддержки инструментов, поэтому заманчиво включить это в servlet.jar в твоем lib/ каталог. Это позволяет легко случайно отправить .war с ним тоже.

Из-за этого Tomcat сканирует все классы по мере их загрузки и, если обнаруживает, блокирует загрузку класса, представляя эту ошибку.