2 Replies Latest reply on Mar 22, 2002 2:12 AM by Achilleus Mantzios

    Servlet wierd behaviour regarding concurrency in tomcat 4.0.

    Achilleus Mantzios Newbie

      Hi,
      I have seen a strange threading behaviour in catalina engine.
      For servlets that
      a) Dont implement SingleThreadModel
      b) Dont synchronize over resources
      c) Dont have service methods synchronized,

      the server serves 2 concurrent requests to 2 clients requesting the same URL
      sequentially.
      Suppose the following servlet is mapped to /servlet/ThreadTest.

      When i invoke from 2 clients
      http://myserver/servlet/ThreadTest?foo1=bar1&foo2=bar2 and
      http://myserver/servlet/ThreadTest?foo2=bar2&foo1=bar1 respectively

      the server seems to spawn 2 threads running the service method of the servlet
      as expected.

      However when a invoke the follwing 2 urls (or in general IDENTICAL URLS)
      e.g.

      http://myserver/servlet/ThreadTest?foo1=bar1&foo2=bar2 and
      http://myserver/servlet/ThreadTest?foo1=bar1&foo2=bar2 respectively

      then the threads (thread?) run as if i had synchronized the service method.

      This looks like a bug, here is the source of the simple servlet.

      Thanx for any clues...
      Is it actually a bug in catalina??

      The servlet is as follows....
      /*****************************************************************/
      import javax.servlet.*;
      import javax.servlet.http.*;

      public class ThreadTest extends HttpServlet {
      public void init(ServletConfig config) throws ServletException {
      super.init(config);
      }

      protected void processRequest(HttpServletRequest,HttpServletResponse
      response)
      throws ServletException, java.io.IOException {
      response.setContentType("text/html");
      System.out.println("In the begin damnit");
      try {
      Thread.sleep(10000);
      }
      catch (Exception e) {}
      }

      protected void doGet(HttpServletRequest request, HttpServletResponse
      response)
      throws ServletException, java.io.IOException {
      processRequest(request, response);
      }
      protected void doPost(HttpServletRequest request, HttpServletResponse
      response)
      throws ServletException, java.io.IOException {
      processRequest(request, response);
      }
      }