【问题标题】:Java Listener not starting Under TomcatJava Listener 未在 Tomcat 下启动
【发布时间】:2009-03-24 13:40:05
【问题描述】:

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

严重:错误 listenerStart 2009 年 3 月 24 日 13:23:10 org.apache.catalina.core.StandardContext 开始 严重:上下文 [/exampleA] 由于先前的错误而启动失败

我不知道我为什么会得到这个。在我的 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 没有启动,因为 是在

之后声明的

更新

使用的 JAR 文件有问题。不包括 SessionAttributeListener 的类。当它被包含时,应用程序启动。

更新

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

【问题讨论】:

  • 如果你把完整的错误日志放在里面会很有用。
  • 另外,您的 web.xml 中哪里有监听器声明?
  • 位于 之上
  • 我们很欣赏这些代码示例,但这里不需要包含“import”语句;他们只是增加了混乱。
  • 这现在是谷歌上“SessionAttributeListener tomcat”的第一名。起床几个小时后还不错。

标签: java tomcat listener


【解决方案1】:

由于我最终在其他地方找到了解决方案,因此我认为使用该信息更新此问题会很有用。

这完全与导致可怕的“严重:错误 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-app 替换为适当的 Web 应用程序上下文路径。

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

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

【讨论】:

    【解决方案2】:

    您的更新内容为“AttributeListener 似乎没有运行。使用时代码失败。是否有一种简单的方法来检查侦听器是否正在运行?”您是否尝试过添加静态初始化程序?像

    static {
    log.debug("static initialiser called");
    }
    

    这样,第一次引用该类时,您应该得到一个日志记录。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2017-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-10
        • 2019-12-30
        • 2018-11-15
        相关资源
        最近更新 更多