3

我有一个 Spring/Hibernate 应用程序,我已将其转换为 Web 应用程序以提供 RESTful Web 服务(使用 Jersey)。我正在尝试将 Web 应用程序部署到 Tomcat 6.0.20 上,但在日志文件中只收到一条神秘的错误消息:

Jul 8, 2009 2:25:22 PM org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
Jul 8, 2009 2:25:22 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/lmrest] startup failed due to previous errors

我已将日志记录级别设置为调试,但没有任何可疑消息显示出了什么问题,除了这个,这对我来说看起来很无害:

1360 [http-8080-1] INFO  org.hibernate.cfg.search.HibernateSearchEventListenerRegister  - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.

我正在使用最新版本的 Spring 和 Hibernate。我在 web.xml 中使用 ContextLoaderListener。这可能是无法启动的侦听器吗?我假设它至少部分运行,因为我可以看到许多 Hibernate 配置日志消息在 Web 应用程序启动失败之前滚动过去。我的主要问题是我看不到任何错误消息,表明它抱怨的侦听器无法启动。

我正在使用的 web.xml 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <!-- listener to pull in the Spring application context -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:appContext.xml</param-value>
    </context-param>

    <!-- Jersey servlet container to intercept all URIs -->
    <servlet>
        <servlet-name>JerseyContainer</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>JerseyContainer</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

如果有人能给我一些关于在哪里寻找我的错误的想法,我会非常感激,因为我很难过。提前致谢!

- 詹姆士

4

7 回答 7

3

请执行以下操作:

  • 从您的战争文件中删除所有与 log4j 相关的工件 - 包括 log4j.jar/properties/xml;
  • 在 common/lib 或 lib 中包含 log4j.jar(取决于您的 Tomcat 版本);
  • 在 common/classes 中添加一个 log4j.properties 文件(在 Tomcat 6 上不确定)。

此配置应确保正确定向所有 log4j 输出。如果需要,切换到调试,但它不应该是:

log4j.rootLogger=info, R 

log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=${catalina.home}/logs/catalina.out 
log4j.appender.R.MaxFileSize=10MB 
log4j.appender.R.MaxBackupIndex=10 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%d %p %t %c - %m%n 
于 2009-07-09T08:07:20.313 回答
3

ubuntu 12.04下,tomcat7系统日志存放在/var/lib/tomcat7/localhost.<date>.log

此位置由以下人员控制/etc/tomcat7/logging.properties

handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.

2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler

由于启动失败是由于 Tomcat 错误而不是应用程序错误,因此详细报告就在这里结束了。就我而言,Tomcat 抱怨缺少类定义。

SEVERE: Error configuring application listener of class com.foo.security.tomcat.CustomSessionListener
java.lang.ClassNotFoundException: com.alleni.zebra.security.tomcat.CustomSessionListener
于 2013-10-28T16:03:34.660 回答
1

Apache 找不到类 org.hibernate.cfg.search.HibernateSearchEventListenerRegister。您确定启动休眠所需的所有类都加载到类路径中吗?Hibernate分为很多.jar包,建议你检查一下.jar文件之间的依赖关系

于 2009-07-09T00:41:51.503 回答
1

检查您的 log4j.properties 或 log4j.xml 并确保您的日志记录级别设置为DEBUG

于 2009-07-08T21:00:16.793 回答
0

是 SprinSource 论坛上的类似讨论。由于 applicationContext.xml 使用标准 JAR,这很可能是类路径问题。仔细检查 WEB-INF/lib 文件夹并确保 Tomcat 的共享文件夹中没有冲突的 jar。

于 2009-07-09T11:53:57.110 回答
0

日志中是否有任何错误(在较早的时间点)?这没什么好说的(尽管如果是这样的话我不会感到惊讶)。

于 2009-07-08T20:58:20.963 回答
0

可能是类路径,或者没有加载的东西......正如其他人所说,让日志记录工作。

1)我推荐一种“二分查找”方法来查找故障。注释掉 web.xml 中的“Jersey”部分。看看它是否有效(或至少启动)。

2)如果不是,注释掉Spring ContextLoaderListener。看看它是否有效。

3) 一旦你找到了有问题的项目,你可以“二进制搜索”到它的配置文件中——注释掉一半的配置,等等,直到你找到有问题的部分或类参考。

如果删除 web.xml 的两个/所有部分,并且您的上下文仍然无法加载..查看 Tomcat/Catalina 上下文侦听器和服务器配置。

于 2011-10-11T23:57:43.230 回答