[slf4j-dev] [Bug 22] New: jcl104-over-slf4j throws exception on release()

bugzilla-daemon at gil.qos.ch bugzilla-daemon at gil.qos.ch
Wed May 24 10:01:31 CEST 2006


http://bugzilla.slf4j.org/show_bug.cgi?id=22

           Summary: jcl104-over-slf4j throws exception on release()
           Product: SLF4J
           Version: unspecified
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: minor
          Priority: P2
         Component: Implementations
        AssignedTo: dev at slf4j.org
        ReportedBy: bjorn at implior.se


Tomcat refuses to undeploy a webapp that uses jcl104-over-slf4j.
This breaks hot-deployment, and sometimes seems to cause trouble when
shutting down Tomcat.

This has been reproduced in Tomcat 5.0.28 and Tomcat 5.5.15,
but Tomcat 5.5.17 recovers from the problem and manages to
undeploy the webapp anyway.

I traced the cause to an exception thrown by:

    org.apache.commons.logging.impl.SLF4FLogFactory.release()

This method unconditionally throws a runtime exception whenever it
is called. The webapp has jcl104-over-slf4j.jar in its WEB-INF/lib,
and when Tomcat undeploys the webapp, it somehow causes the release
method to be called.

Here is a small servlet that reproduces this behaviour:

import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.logging.*;

public class Hang extends HttpServlet {
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        Log log = LogFactory.getLog(getClass());
        log.warn("foo");
    }
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, java.io.IOException {
        resp.getWriter().println("<html><body>Hello, World!</body></html>");
    }
}

Deploy together with jcl104-over-slf4j.jar and slf4j-simple.jar,
and browse the webapp's URL to initialize it. Then re-create and
redeploy the WAR file (or touch web.xml) to provoke the exception.

Possible solutions: either upgrade to Tomcat 5.5.17, or patch
src/java/org/apache/commons/logging/impl/SLF4FLogFactory.java
so that release() doesn't throw this exception.

Below are stacktraces for Tomcat 5.0.28, 5.5.15, and 5.5.17,
all different. The 5.0.28 trace is not informative since it
hides the original exception which is converted to a string
before it is rethrown.

----------Tomcat 5.0.28-----------------------------------------------

May 24, 2006 9:03:43 AM org.apache.catalina.core.ContainerBase log
INFO: Removing web application at context path /hang
May 24, 2006 9:03:43 AM org.apache.catalina.startup.HostConfig
checkContextLastModified
SEVERE: Cannot find message associated with key hostConfig.undeployJar.error
java.io.IOException: java.lang.UnsupportedOperationException: SLF4J bound
commons-logging does not need to implement release().
        at
org.apache.catalina.core.StandardHostDeployer.remove(StandardHostDeployer.java:796)
        at org.apache.catalina.core.StandardHost.remove(StandardHost.java:971)
        at
org.apache.catalina.startup.HostConfig.checkContextLastModified(HostConfig.java:840)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1085)
        at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:327)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at
org.apache.catalina.core.StandardHost.backgroundProcess(StandardHost.java:800)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1619)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1628)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1608)
        at java.lang.Thread.run(Thread.java:534)
May 24, 2006 9:03:43 AM org.apache.catalina.core.StandardHostDeployer install
INFO: Installing web application at context path /hang from URL
file:/usr/local/tomcat5/webapps/hang

----------Tomcat 5.5.15-----------------------------------------------

May 24, 2006 8:53:37 AM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/hang]
May 24, 2006 8:53:37 AM
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor processChildren
SEVERE: Exception invoking periodic operation: 
java.lang.UnsupportedOperationException: SLF4J bound commons-logging does not
need to implement release().
        at
org.apache.commons.logging.impl.SLF4FLogFactory.release(SLF4FLogFactory.java:168)
        at org.apache.commons.logging.LogFactory.release(LogFactory.java:388)
        at
org.apache.catalina.loader.WebappClassLoader.clearReferences(WebappClassLoader.java:1634)
        at
org.apache.catalina.loader.WebappClassLoader.stop(WebappClassLoader.java:1489)
        at org.apache.catalina.loader.WebappLoader.stop(WebappLoader.java:706)
        at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4360)
        at
org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:892)
        at
org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:984)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1178)
        at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:292)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at
org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1304)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1568)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1577)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1557)
        at java.lang.Thread.run(Thread.java:595)
May 24, 2006 8:53:47 AM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/hang]
May 24, 2006 8:53:47 AM
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor processChildren
SEVERE: Exception invoking periodic operation: 
java.lang.NullPointerException
        at
org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:883)
        at
org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:984)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1178)
        at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:292)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at
org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1304)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1568)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1577)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1557)
        at java.lang.Thread.run(Thread.java:595)

----------Tomcat 5.5.17-----------------------------------------------

May 24, 2006 8:45:22 AM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/hang]
May 24, 2006 8:45:22 AM org.apache.catalina.startup.HostConfig checkResources
WARNING: Error while removing context [/hang]
java.lang.UnsupportedOperationException: SLF4J bound commons-logging does not
need to implement release().
        at
org.apache.commons.logging.impl.SLF4FLogFactory.release(SLF4FLogFactory.java:168)
        at org.apache.commons.logging.LogFactory.release(LogFactory.java:388)
        at
org.apache.catalina.loader.WebappClassLoader.clearReferences(WebappClassLoader.java:1634)
        at
org.apache.catalina.loader.WebappClassLoader.stop(WebappClassLoader.java:1489)
        at org.apache.catalina.loader.WebappLoader.stop(WebappLoader.java:706)
        at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4387)
        at
org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:892)
        at
org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:979)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1187)
        at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:292)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at
org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1305)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1569)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1578)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1558)
        at java.lang.Thread.run(Thread.java:595)
May 24, 2006 8:45:22 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive hang.war

-- 
Configure bugmail: http://bugzilla.slf4j.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.



More information about the slf4j-dev mailing list