Hi, -> "How long does your thread take to run?"
the thread will internally invoke a WebAction passed as constructor-parameter, which will do things like a Struts-Action (if the processing of the WebAction takes a long time, the thread takes a long time too, but this will be very unusual). -> "If this is really necessary, then you also might look into using a thread pool." First I tried to use a ThreadPool mechanism, but I didn't find a way to restart a Thread after it has been finished, so a pool would be useless. -> "Perhaps you can describe what you are doing in this thread" The Thread is simply needed, so that the Globals class can return the current Request/Response-Object at any time and anywhere within the rest of my source, without passing them as parameter. What are your opinions about "complex threading issues" mentioned by David ? In the near future we want to port our PHP-driven framework/cms (which has been proven in development and production) to JAVA. So I am looking for the fastest possible way to do this, without developing anything new from the scratch. ----- Original Message ----- From: "Yee, Richard K,,DMDCWEST" <[EMAIL PROTECTED]> To: "'Struts Users Mailing List'" <[EMAIL PROTECTED]> Sent: Tuesday, August 19, 2003 5:41 PM Subject: RE: [OT] Question about Servlets & Threads > Jan, > How long does your thread take to run? Since you are waiting for the thread > to finish anyway in your servlet, I'm not sure it is very necessary to start > a new thread to process the request. It adds a bit of overhead to process > each request since an extra thread is created for every request that gets > processed. If this is really necessary, then you also might look into using > a thread pool. I don't see the need for the new thread. Perhaps you can > describe what you are doing in this thread. As I suggested in my previous > email, you could use a utility class as an interface between your servlet > and your business logic or just handle everything in methods in your > servlet. > > One more thing suggestion is to name your parameters with mor descriptive > names. ie. change this > protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) > throws ServletException, IOException{ > process(arg0, arg1); > } > > to > > protected void doGet(HttpServletRequest request, HttpServletResponse > response) throws ServletException, IOException{ > process(request, response); > } > > (you could also use req and resp instead of request and response) > > Regards, > > Richard > > -----Original Message----- > From: Jan Zimmek [mailto:[EMAIL PROTECTED] > Sent: Tuesday, August 19, 2003 1:17 AM > To: Struts Users Mailing List > Subject: Re: [OT] Question about Servlets & Threads > > > Hi, > > I think you're right, but let me ask a last question please ;-) > > here are some source snippets of my classes: > > MyServlet (which handles all incoming requests like ActionServlet in struts > and populates Request/Response and the action to execute to the new created > WebThread): > ------------------------------------------------- > protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) > throws ServletException, IOException{ > process(arg0, arg1); > } > > protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) > throws ServletException, IOException{ > process(arg0, arg1); > } > > protected void process(HttpServletRequest request, HttpServletResponse > response) throws ServletException, IOException{ > WebThread t = new WebThread(request, response, new WebAction()); > > t.start(); > > while(t.isAlive()); > > t.release(); > t = null; > } > > You see all processing is of the request will be done in the "run()" method > of the new created WebThread instance. > > And this is the point why I am not understand, that I can run into complex > threading issues. > > Snippet of a WebAction-Object (this is always thread-safe like a struts > action): > -------------------------------------------------------------------------- -- > --- > > public void execute(){ > HttpServletResponse response = Globals.response(); > > try{ > response.getWriter().write("<html>****</html>"); > }catch(IOException e){ > e.printStackTrace(); > } > } > > > And this is the Globals-Object source: > -------------------------------------- > > public class Globals{ > private static WebThread current(){ > return (WebThread)Thread.currentThread(); > } > > public static HttpServletRequest request(){ > return current().getRequest(); > } > > public static HttpServletResponse response(){ > return current().getResponse(); > } > } > > The Globals-class simply returns the Request/Response-Object of the current > WebThread (subclass of Thread) via "getter"-methods. I have tested MyServlet > by making multiple concurrent request by an application (running 10 thread > each making 1000 requests in a loop). Each request has been processed > correctly. > > Hope this message is not so long that you directly drop, because I am very > occupied with this subject. > > Any comments would be very appreciated. > > greets > Jan Zimmek > > > ----- Original Message ----- > From: "Craig R. McClanahan" <[EMAIL PROTECTED]> > To: "Struts Users Mailing List" <[EMAIL PROTECTED]> > Cc: <[EMAIL PROTECTED]> > Sent: Tuesday, August 19, 2003 4:38 AM > Subject: Re: [OT] Question about Servlets & Threads > > > > On Mon, 18 Aug 2003, Jan Zimmek wrote: > > > > > Date: Mon, 18 Aug 2003 23:47:49 +0200 > > > From: Jan Zimmek <[EMAIL PROTECTED]> > > > Reply-To: Struts Users Mailing List <[EMAIL PROTECTED]> > > > To: Struts Users Mailing List <[EMAIL PROTECTED]>, > > > [EMAIL PROTECTED] > > > Subject: Re: [OT] Question about Servlets & Threads > > > > > > Hi, > > > > > > I know, but I want to have a similar behavior like "global > > > variables" to access Request/Response-Object without to pass them as > > > parameter to each method I need to access them. > > > > > > > One option to consider is to store the current request and response > > objects into a static variable of type java.lang.ThreadLocal (perhaps > > in a Filter, if you're using Servlet 2.3, or a customized > > RequestProcessor implementation that does this in its process() method > > before executing the standard processing). > > > > It's fair to warn you, though, that object oriented purists will frown > > on anything like this, because static variables (similar to globals in > > PHP) are the root of all sorts of program bugs :-). Explicitly > > passing things around creates *much* safer code. > > > > > Does this mailing support attachments ? Else my problem could be a > > > bit confusing. > > > > > > greets > > > Jan Zimmek > > > > Craig > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]