You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Ian Stevens <ia...@phantomfiber.com> on 2005/01/24 21:58:13 UTC

"Error allocating a servlet instance" caused by ClassCircularityError on java.util.Date with Tomcat 5.0.28

I have been trying to get our servlet working with Tomcat5.0, without much
success.  The servlet works flawlessly in Tomcat4.0 and Tomcat4.1, although
dropping the same WAR file in Tomcat5.0 on Windows with JDK1.4.2 (on two
seperate machines, even) produces the following stacktrace:

StandardWrapperValve[Phantom]: Allocate exception for servlet Phantom
javax.servlet.ServletException: Error allocating a servlet instance
    at
org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:691)
    at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:144)
    at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:104)
    at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContext
Valve.java:198)
    at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:152)
    at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:104)
    at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137
)
    at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:104)
    at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118
)
    at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:102)
    at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:109)
    at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:104)
    at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
    at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
    at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
    at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConne
ction(Http11Protocol.java:705)
    at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
    at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav
a:683)
    at java.lang.Thread.run(Thread.java:534) 
----- Root Cause -----
java.lang.ClassCircularityError: java/util/Date 
    at com.phantom.common.util.logging.SimpleLogFormatter.format(Unknown
Source)
    at java.util.logging.StreamHandler.publish(StreamHandler.java:178) 
    at java.util.logging.FileHandler.publish(FileHandler.java:543)
    at java.util.logging.Logger.log(Logger.java:424) 
    at java.util.logging.Logger.doLog(Logger.java:446)
    at java.util.logging.Logger.logp(Logger.java:562) 
    at org.apache.commons.logging.impl.Jdk14Logger.log(Jdk14Logger.java:91)
    at
org.apache.commons.logging.impl.Jdk14Logger.debug(Jdk14Logger.java:103)
    at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.jav
a:1223)
    at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.jav
a:1189)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) 
    at com.phantom.common.util.logging.SimpleLogFormatter.format(Unknown
Source)
    at java.util.logging.StreamHandler.publish(StreamHandler.java:178) 
    at java.util.logging.FileHandler.publish(FileHandler.java:543)
    at java.util.logging.Logger.log(Logger.java:424) 
    at java.util.logging.Logger.doLog(Logger.java:446)
    at java.util.logging.Logger.logp(Logger.java:562) 
    at org.apache.commons.logging.impl.Jdk14Logger.log(Jdk14Logger.java:91)
    at
org.apache.commons.logging.impl.Jdk14Logger.debug(Jdk14Logger.java:103)
    at
org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:685)
    at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:144)
    at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:104)
    at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContext
Valve.java:198)
    at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:152)
    at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:104)
    at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137
)
    at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:104)
    at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118
)
    at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:102)
    at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:109)
    at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:104)
    at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
    at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
    at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
    at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConne
ction(Http11Protocol.java:705)
    at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
    at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav
a:683)
    at java.lang.Thread.run(Thread.java:534)

The line of SimpleLogFormatter.format() which causes the problem looks like
this:

    public String format( LogRecord record )
    {
        StringBuffer buffer = new StringBuffer();
        buffer.append( dateFormat.format( new Date( record.getMillis() ) )
);
        ...

We have found that we can eliminate the above exception by adding the
following static block in the SimpleLogFormatter class.  This is obviously a
hack and I would like to avoid its use:

    static
    {
        synchronized( SimpleLogFormatter.class ) {}
        synchronized( SimpleDateFormat.class ) {}
        synchronized( Date.class ) {}
        synchronized( LogRecord.class ) {}
        synchronized( Formatter.class ) {}
    }

How can this exception be avoided?  As I said, the WAR file worked fine in
Tomcat4.0 and Tomcat4.1, but does not work in Tomcat5.0.  There's nothing
tricky about the above code -- it's just creating a new instance of
java.lang.Date -- so why is it failing?  What was changed in Tomcat or
Catalina code to cause this error?

thanks,
ian.


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Starting a tomcat from a java program

Posted by Rajaneesh <ra...@slk-soft.com>.
Hi,

  How do I start tomcat from a java program?

Regards
Rajaneesh

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org