Hi Guys,
I am trying to to shutdown cleanly and redeploy cleanly in tomcat but have failed to
date. Reason I think has to do with the use of commons logging in both jgroups and jboss
cache.
Here is my stack trace when shutdown.sh is called.
| INFO: Stopping Coyote HTTP/1.1 on http-8080
| 17.07.2008 10:50:14 org.apache.catalina.loader.WebappClassLoader loadClass
| INFO: Illegal access: this web application instance has been stopped already. Could
not load java.io.PrintWriter. The eventual following stack trace is caused by an error
thrown for debugging purposes as well as to attempt to terminate the thread which caused
the illegal access, and has no functional impact.
| java.lang.IllegalStateException
| at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1244)
| at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
| at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
| at org.apache.log4j.spi.LoggingEvent.<init>(LoggingEvent.java:154)
| at org.apache.log4j.Category.forcedLog(Category.java:388)
| at org.apache.log4j.Category.log(Category.java:853)
| at org.apache.commons.logging.impl.Log4JLogger.error(Log4JLogger.java:251)
| at org.jgroups.protocols.Discovery$PingSenderTask$1.run(Discovery.java:389)
| at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
| at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
| at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
| at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
| at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
| at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
| at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
| at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
| at java.lang.Thread.run(Thread.java:619)
| 17.07.2008 10:50:14 org.apache.catalina.loader.WebappClassLoader loadClass
| INFO: Illegal access: this web application instance has been stopped already. Could
not load org.apache.log4j.spi.VectorWriter. The eventual following stack trace is caused
by an error thrown for debugging purposes as well as to attempt to terminate the thread
which caused the illegal access, and has no functional impact.
| java.lang.IllegalStateException
| at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1244)
| at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
| at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
| at org.apache.log4j.spi.LoggingEvent.<init>(LoggingEvent.java:154)
| at org.apache.log4j.Category.forcedLog(Category.java:388)
| at org.apache.log4j.Category.log(Category.java:853)
| at org.apache.commons.logging.impl.Log4JLogger.error(Log4JLogger.java:251)
| at org.jgroups.protocols.Discovery$PingSenderTask$1.run(Discovery.java:389)
| at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
| at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
| at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
| at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
| at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
| at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
| at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
| at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
| at java.lang.Thread.run(Thread.java:619)
| Exception in thread "EvictionTimer-0" java.lang.NullPointerException
| at org.apache.log4j.LogManager.getLogger(LogManager.java:188)
| at org.apache.log4j.Logger.getLogger(Logger.java:104)
| at
org.apache.commons.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:283)
| at
org.apache.commons.logging.impl.Log4JLogger.isTraceEnabled(Log4JLogger.java:327)
| at
org.jboss.cache.eviction.BaseEvictionAlgorithm.process(BaseEvictionAlgorithm.java:107)
| at
org.jboss.cache.eviction.EvictionTimerTask$1.run(EvictionTimerTask.java:114)
| at java.util.TimerThread.mainLoop(Timer.java:512)
| at java.util.TimerThread.run(Timer.java:462)
| Listening for transport dt_socket at address: 8000
| 17.07.2008 10:50:27 org.apache.catalina.loader.WebappClassLoader loadClass
| INFO: Illegal access: this web application instance has been stopped already. Could
not load org.apache.log4j.spi.VectorWriter. The eventual following stack trace is caused
by an error thrown for debugging purposes as well as to attempt to terminate the thread
which caused the illegal access, and has no functional impact.
| java.lang.IllegalStateException
| at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1244)
| at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
| at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
| at org.apache.log4j.spi.LoggingEvent.<init>(LoggingEvent.java:154)
| at org.apache.log4j.Category.forcedLog(Category.java:388)
| at org.apache.log4j.Category.log(Category.java:853)
| at org.apache.commons.logging.impl.Log4JLogger.error(Log4JLogger.java:251)
| at org.jgroups.protocols.UDP.run(UDP.java:268)
| at java.lang.Thread.run(Thread.java:619)
| Exception in thread "EvictionTimer-1" java.lang.NullPointerException
| at org.apache.log4j.LogManager.getLogger(LogManager.java:188)
| at org.apache.log4j.Logger.getLogger(Logger.java:104)
| at
org.apache.commons.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:283)
| at
org.apache.commons.logging.impl.Log4JLogger.isTraceEnabled(Log4JLogger.java:327)
| at
org.jboss.cache.eviction.BaseEvictionAlgorithm.process(BaseEvictionAlgorithm.java:107)
| at
org.jboss.cache.eviction.EvictionTimerTask$1.run(EvictionTimerTask.java:114)
| at java.util.TimerThread.mainLoop(Timer.java:512)
| at java.util.TimerThread.run(Timer.java:462)
|
Now I have looked around to see if any one else has this problem. I cant find a definitive
answer that the problem is x,y,z but it looks like a class loader issue with regards
logging.
Here is a bug report in tomcat 5.x version with similar exception problems.
https://issues.apache.org/bugzilla/show_bug.cgi?id=41504
Im using the 6 version and still get it(Even though it was never marked as fixed).
So the question is where is the problem, tomcats fault, commons logging,log4j or jboss
cache/jgroups for not cleaning up when using commons logging? The logging libraries are
packed in the war, have moved them out of the war into the common lib directory in tomcat
but made no difference. I have tried commons 1.1 and 1.1.1. Using log4j 1.2.14 version.
Any thoughts??
Thanks,
LL
p.s When i say jboss/jgroups fault for not cleaning up, i have read that sometimes you
should call
LogFactory.release(Thread.currentThread().getContextClassLoader()) to release the
resources it takes.
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4164997#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...