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]

Reply via email to