You have a global servlet variable 'trafficCop'. If two requests come in at the same time, they will be sharing this variable. The code is not thread safe.
Move your trafficCop instance variable - make it a local variable of the doGet method, and invoke the constructor inside the doGet method. This should solve your problem. Andy -----Original Message----- From: Chris Bick [mailto:[EMAIL PROTECTED]] Sent: 16 December 2002 17:36 To: Tomcat Users List Subject: RE: Simultaneous request from same IP No offense taken. I still can't believe that this problem may exist. If you can find a problem with my code, that would be much easy then getting a fix into tomcat. Thanks, -cb import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; import java.net.*; /** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: </p> * @author not attributable * @version 1.0 */ public class TrafficCopServlet extends HttpServlet { private static final String CONTENT_TYPE_XML = "text/xml"; private static final String CONTENT_TYPE_HTML = "text/html"; /**@todo set DTD*/ private static final String DOC_TYPE = null; //Initialize global variables private TrafficCop trafficCop; public void init() throws ServletException { trafficCop = new TrafficCop(false); } //Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); try { if (request.getRequestURI().endsWith("/insert")) { response.setContentType(CONTENT_TYPE_XML); out.println("<?xml version=\"1.0\"?>"); String pcpVersion = request.getHeader("PCP-Client-Version"); String clientId = request.getHeader("PCP-Client-ID"); String listenIP = request.getHeader("Listen-IP"); String behindFirewall = request.getHeader("Behind-Firewall"); String urn = request.getQueryString(); synchronized(System.out) { System.out.println("URN:" + request.getQueryString()); System.out.println(request.getHeader("Listen-IP")); } //System.out.println("Listen-IP:" + listenIP); if (pcpVersion == null || clientId == null || listenIP == null || behindFirewall == null || urn == null) { String error = "<error>Bad Headers</error>"; out.println(error); return; } String xml = trafficCop.add(urn,new URL(null,"pcp://"+listenIP,new Handler()), new Boolean(behindFirewall).booleanValue(), 0); System.out.println(xml); out.println(xml); } else if (request.getRequestURI().endsWith("/delete")) { response.setContentType(CONTENT_TYPE_XML); out.println("<?xml version=\"1.0\"?>"); String clientId = request.getHeader("PCP-Client-ID"); String sessionId = request.getHeader("My-Session-ID"); String deleteSessionId = request.getHeader("Delete-Session-ID"); String listenIP = request.getHeader("Listen-IP"); String behindFirewall = request.getHeader("Behind-Firewall"); String completed = request.getHeader("Completed"); String elapsedTime = request.getHeader("Elapsed-Time"); String avgDownstream = request.getHeader("Average-Downstream"); String urn = request.getQueryString(); if (clientId == null || sessionId == null || deleteSessionId == null || listenIP == null || behindFirewall == null) { String error = "<error>Bad Headers</error>"; out.println(error); return; } String xml = trafficCop.remove(urn, deleteSessionId, sessionId,new URL(null,"pcp://"+listenIP, new Handler()), new Boolean(behindFirewall).booleanValue(),0,0); System.out.println(xml); out.println(xml); } else if (request.getRequestURI().endsWith("/update")) { response.setContentType(CONTENT_TYPE_XML); out.println("<?xml version=\"1.0\"?>"); String clientId = request.getHeader("PCP-Client-ID"); String sessionId = request.getHeader("My-Session-ID"); String listenIP = request.getHeader("Listen-IP"); String behindFirewall = request.getHeader("Behind-Firewall"); String urn = request.getQueryString(); if (clientId == null || sessionId == null || listenIP == null || behindFirewall == null) { String error = "<error>Bad Headers</error>"; out.println(error); return; } String xml = trafficCop.connectionUpdate(urn, sessionId,new URL(null,"pcp://"+listenIP,new Handler()), new Boolean(behindFirewall).booleanValue(),0,0); System.out.println(xml); out.println(xml); } } catch (Exception e) { out.println("<error>"+e.getMessage()+"</error>"); e.printStackTrace(); } } } -----Original Message----- From: Tim Funk [mailto:[EMAIL PROTECTED]] Sent: Monday, December 16, 2002 12:21 PM To: Tomcat Users List Subject: Re: Simultaneous request from same IP Can you post an example servlet (or the real code) that can reproduce this? (No offense but ...) I really think there ios something with your code. -Tim Chris Bick wrote: > I've reproduced this problem with tomcat 3.2 and every version of 4.1 up > to 4.1.12 > > I haven't gone any further than all headers being identical and the > query string. I thought maybe tomcat was just passing in the same > reference, but the toString() value of the HttpServletRequest object are > different. > > Let me know if anyone can reproduce this?(If you have the time...) > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>