Hi,

I've looked at the servlet 2.2 spec, which by the way is very readable
unlike for instance the ejb spec. It states in paragraph 3.2 that 'there
must be only one instance of a servlet class per servlet definition in a
container'. This is the case in Marco's example.

In 3.3.2 it says that 'the container must initialize the servlet before it
can handle requests from clients'. These two combined mean that a second
request cannot be given a new servlet instance (unless the servlet
implements SingleThreadModel, see 3.2 again) and that it cannot start before
the init() method has finished.

So my conclusion is that orion isn't following the specs here. You could
ofcourse try to work around this for the moment, but it should be filed as a
bug.

Regards,
Marcel Schutte


> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED]]On Behalf Of Tim Endres
> Sent: Thursday, February 01, 2001 2:23 AM
> To: Orion-Interest
> Subject: Re: Servlet loading twice if init() not finished?
>
>
> I believe that is perfectly normal behavior. Init() is called
> whenever a servlet
> instance is created, and they may be created at any time and
> in any number (unless
> you specify a limit in your servlet engine, or you use the
> single threaded model
> for your servlet, which I do not recommend for obvious
> reasons). This is why your
> servlet must be written for a multi-threaded environment.
>
> The only workaround I can think of, if you can not redesign
> your code, is to use
> a Singleton to get the loading done, and make the Singleton
> synchronized.
>
> tim.
>
> > Hi,
> >
> > i have a servlet as a front component in my webapp; the
> servlet has also the
> > task of loading objects from a db during his
> inizialization. Loading the
> > objects takes some time & i have encountered a situation
> wich i didn't
> > expected & wich i'm not sure if i'm doing something wrong
> or it is orion.
> > The situation is that if orion recive a request wich point
> to the servlet
> > before the servlet has finished the init() method (wich was
> triggered from a
> > previous request) it creates another instance of the servlet.
> >
> > I have done a small example so that i can explain me in a
> more clear way :
> >
> > in my web.xml file i have defined &  mapped the servlet:
> >     <servlet>
> >             <servlet-name>testServlet</servlet-name>
> >             <servlet-class>TestServlet</servlet-class>
> >     </servlet>
> >     <servlet-mapping>
> >             <servlet-name>testServlet</servlet-name>
> >             <url-pattern>/test</url-pattern>
> >     </servlet-mapping>
> >
> > the code of the servlet is:
> >
> > import java.io.*;
> > import java.util.*;
> > import javax.servlet.*;
> > import javax.servlet.http.*;
> > public class TestServlet extends HttpServlet {
> >     public void doPost(HttpServletRequest req,
> HttpServletResponse res)
> > throws ServletException, IOException {
> >         doGet(req, res);
> >     }
> >     public void doGet(HttpServletRequest req,
> HttpServletResponse res)
> > throws ServletException, IOException {
> >         System.out.println("doGet()");
> >     }
> >     public void init() {
> >         System.out.println("init() " +this);
> >         try {
> >             Thread.currentThread().sleep(5000);    // this
> is for simulating
> > the time consuming task
> >         } catch (Exception e) {}
> >         System.out.println("done! " + this);
> >     }
> > }
> >
> > now, if I start the server & i call the servlet 2 times
> (the second before
> > init() finish) i can see 2 servlet instance created (see
> the output below)
> >
> > D:\orion>java -jar d:/orion/orion.jar
> > Orion/1.4.5 initialized
> > init() TestServlet@704baa
> > init() TestServlet@34fad5
> > done! TestServlet@704baa
> > doGet()
> > done! TestServlet@34fad5
> > doGet()
> >
> > wich is not really what i want(& expected). I haven't
> watched the specs so
> > i'm not sure if this is the correct behavior in a situation
> like that & i
> > would like to know what u people think about it.
> > If someone has also a workaround it will be very much
> appreciated.. ;)
> >
> > I'm running orion on w2k (i tried 1.4.5 & 1.4.4, same
> behaviour for both).
> > Marco
> >
> >
> >
> > --
> >
> > Ing. Marco Isella, Software Engineer
> > TINET SA, Via Violino 1, CH-6928 Manno-Lugano
> > tel. +41 91 612 22 22, fax. +41 91 612 22 23
> > email [EMAIL PROTECTED]
> > http://www.tinet.com
> >
> >
>
>


Reply via email to