tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Craig R. McClanahan" <>
Subject Re: uninitialized instance variables in servlet
Date Wed, 01 Nov 2000 01:15:43 GMT
Have you checked your servlet logs to see if the UnavailableException errors
actually are being thrown?  You don't say what version of Tomcat you are using,
but (if I remember correctly) version 3.1 did not actually honor
UnavailableExceptions thrown from init().

Craig McClanahan

Tom O'Connor wrote:

> In the init() method of my Servlet class, I populate 2 String instance
> variables that are later used in the doPost() method.  The String values are
> populated by calling .getInitParameter() on the ServletConfig instance
> passed into init().  I verify that the String returned from
> .getInitParameter() != null inside init().
> After tomcat starts, I start a client program that generates HTTP requests
> aimed at the servlet.  More often than not, these requests fail with 500
> Server Error as the response.  For each failed request, in
> $TOMCAT_HOME/logs/tomcat.log there is a
> NullPointerException and a stack trace, and the stack trace points me to a
> line in my servlet where I invoke a method on the String instance variables
> that should have been initialized in init().
> This is *NOT* a configuration file issue.  I can say this because in the
> same webapp, I have 2 servlets that each have the same servlet-class element
> in web.xml.  The first servlet will generate failures (sometimes) but the
> second servlet (which is the same class, but a different instance) will
> succeed.  The only thing different between the two instances are the
> init-param values in web.xml.  I also swap which servlet I invoke first and
> it's the first servlet invoked that fails.
> I've tried this using both Apache+mod_jk over Ajp13, and invoking the
> servlet directly through Tomcat's HTTP adapter.
> Doesn't the servlet spec say that no thread shall enter Servlet.service()
> until Servlet.init() has successfully completed?  If that's true, how can my
> instance variables be null?
> The servlet looks like this:
> public class S extends HttpServlet {
>    private String n = null;
>    private String v = null;
>    public void init(ServletConfig config) throws ... {
>       super.init(config);
>       n = config.getInitParameter("n");
>       v = config.getInitParameter("v");
>       if (n == null) throw new UnavailableException();
>       if (v == null) throw new UnavailableException();
>         // snip
>    }
>    public void doPost(...) throws ... {
>       // this.n and this.v are used in here
>    }
> }

View raw message