Java Listener无法启动Tomcat

时间:2009-03-24 13:40:06

标签: java tomcat listener

在我的Tomcat日志(catalina)中,我收到以下错误,阻止我的应用程序启动:

SEVERE: Error listenerStart
24-Mar-2009 13:23:10 org.apache.catalina.core.StandardContext start
SEVERE: Context [/exampleA] startup failed due to previous errors

我不知道为什么我会这样做。在我的web.xml中,我有以下

<listener>
    <listener-class>
        uk.co.a.listener.SessionListener
    </listener-class>
</listener>

<listener>
    <listener-class>
        uk.co.a.listener.SessionAttributeListener
    </listener-class>
</listener>

当我评论听众时,它启动正常。列表人员的代码如下:

public class SessionAttributeListener implements HttpSessionAttributeListener {
    static Log log = LogFactory.getLog(SessionAttributeListener.class.getName());

    public void attributeAdded(HttpSessionBindingEvent hsbe) {
        log.debug("VALUE attributeAdded to THE SESSION:" + hsbe.getName());
    }

    public void attributeRemoved(HttpSessionBindingEvent hsbe) {
        log.debug("VALUE attributeRemoved from THE SESSION:" + hsbe.getName());
    }

    public void attributeReplaced(HttpSessionBindingEvent hsbe) {
        log.debug("VALUE attributeReplaced in THE SESSION:" + hsbe.getName());
    }
}

public class SessionListener implements HttpSessionListener {

    static Log log = LogFactory.getLog(SessionListener.class.getName());

    private static int activeSessions = 0;
    public void sessionCreated(HttpSessionEvent evt)
    {
        activeSessions++;
        log.debug("No. of active sessions on:"+
                new java.util.Date()+" : "+activeSessions);
    }
    public void sessionDestroyed (HttpSessionEvent evt)
    {
        activeSessions--;
    }
} 

为什么不开始?或者我在哪里可以查找更多信息?

更新

启动时,SessionAttributeListener似乎只有一个问题。 SessionListener没有启动,因为&lt; listener&gt;在&lt; servlet&gt;

之后宣布

更新

使用的JAR文件存在问题。未包含SessionAttributeListener的类。当它被包括在内时,应用程序就开始了。

更新

AttributeListener似乎没有运行。使用它时代码失败。有没有一种简单的方法可以检查监听器是否正在运行?

3 个答案:

答案 0 :(得分:2)

由于我最终在其他地方找到了解决方案的路线,我认为用这些信息更新此问题会很有用。

这与基础异常有关,导致可怕的'SEVERE:Error listenerStart'消息未被记录在任何地方,以及如何配置日志记录以产生异常。

here可以清楚地了解日志问题和解决方案。

在我的情况下,我选择了更加简洁的版本,添加了

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/web-app].level = FINE
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/web-app].handlers = java.util.logging.ConsoleHandler

到tomcat conf / logging.properties,并用适当的Web应用程序上下文路径替换/ web-app。

神奇的是隐藏的异常出现并且告诉我Java 6运行时不想知道Java 7编译的代码。令人尴尬,但很容易修复。

这适用于Tomcat 7.您的里程可能会有所不同。

答案 1 :(得分:1)

重新读取更新“AttributeListener似乎没有运行。使用它时代码失败。是否有一种简单的方法可以检查监听器是否正在运行?”你尝试过添加静态初始化程序吗?

之类的东西
static {
log.debug("static initialiser called");
}

第一次引用类时,你应该得到一条日志记录。

答案 2 :(得分:0)

当您在Tomcat日志中遇到“由于先前错误而导致启动失败”时,您将在日志中找到导致此问题的更多异常,或者您需要在Tomcat中完全配置日志记录,以便异常可能是写入日志。一旦将根本原因写入日志,解决方案通常是微不足道的。