What's the right way to handle a long process without occupying a tomcat processor/thread?

2004-06-16 Thread Xiao F Chen


   Hello all, I have a scenario related to long process in handling a   
   servlet request. I am using tomcat 4.1 with apache 1.3.9. In one of our  
   applications, when a user logs in, we will determine if the account's
   email address has been verified or not. If not, the application will 
   ask the user submit an email address for verification using JavaMail.
   The process to verify the address is to send an email message to the 
   email address immediately. Most of times, the process is quick and we
   can get the real time info about whether or not the user account on the  
   mail server is valid or not. But sometimes when the user's email server  
   is down or slow, the process could take pretty long time to finish. In   
   the later case, Tomcat's max processors could be used up and 'no 
   processor available' error is thrown.

   I guess I can increase the maxProcessor number in server.xml (currently  
   it is set to 75), but it seems not the ideal way. I am wondering 
   whether or not I can spawn a new thread in the servlet and hand the  
   email verification to the new thread for processing, then the main   
   thread will return and be available for new request to reduce the 'no
   processor error'? One problem I can see is that even I can do what I 
   stated above, some document suggest that after the main thread returns   
   (for example, exit from the doGet method of a servlet), the  
   HttpServletResponse's outputstream is closed and I can't send response   
   to the user anymore. Is this right?  

   Any suggestions for my situation.

   Thanks for your help.










-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: What's the right way to handle a long process without occupying a tomcat processor/thread?

2004-06-16 Thread Tim Funk
Use a backgorund thread to do the processing.
Then spit a page back to the user which uses a meta refresh to check the 
status of the background thread. Place an animated gif on the meta refresh 
page and the user will be none the wiser.

-Tim
Xiao F Chen wrote:


   Hello all, I have a scenario related to long process in handling a   
   servlet request. I am using tomcat 4.1 with apache 1.3.9. In one of our  
   applications, when a user logs in, we will determine if the account's
   email address has been verified or not. If not, the application will 
   ask the user submit an email address for verification using JavaMail.
   The process to verify the address is to send an email message to the 
   email address immediately. Most of times, the process is quick and we
   can get the real time info about whether or not the user account on the  
   mail server is valid or not. But sometimes when the user's email server  
   is down or slow, the process could take pretty long time to finish. In   
   the later case, Tomcat's max processors could be used up and 'no 
   processor available' error is thrown.

   I guess I can increase the maxProcessor number in server.xml (currently  
   it is set to 75), but it seems not the ideal way. I am wondering 
   whether or not I can spawn a new thread in the servlet and hand the  
   email verification to the new thread for processing, then the main   
   thread will return and be available for new request to reduce the 'no
   processor error'? One problem I can see is that even I can do what I 
   stated above, some document suggest that after the main thread returns   
   (for example, exit from the doGet method of a servlet), the  
   HttpServletResponse's outputstream is closed and I can't send response   
   to the user anymore. Is this right?  

   Any suggestions for my situation.

   Thanks for your help.






-
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]


RE: What's the right way to handle a long process without occupying a tomcat processor/thread?

2004-06-16 Thread Michael Cardon
Tim,

Do you have a code example of this solution?  I would be very interested in
setting something like this up.

Thanks.

Michael

-Original Message-
From: Tim Funk [mailto:[EMAIL PROTECTED]
Sent: Wednesday, June 16, 2004 10:22 AM
To: Tomcat Users List
Subject: Re: What's the right way to handle a long process without
occupying a tomcat processor/thread?


Use a backgorund thread to do the processing.

Then spit a page back to the user which uses a meta refresh to check the
status of the background thread. Place an animated gif on the meta refresh
page and the user will be none the wiser.

-Tim

Xiao F Chen wrote:



Hello all, I have a scenario related to long process in handling a
servlet request. I am using tomcat 4.1 with apache 1.3.9. In one of our
applications, when a user logs in, we will determine if the account's
email address has been verified or not. If not, the application will
ask the user submit an email address for verification using JavaMail.
The process to verify the address is to send an email message to the
email address immediately. Most of times, the process is quick and we
can get the real time info about whether or not the user account on the
mail server is valid or not. But sometimes when the user's email server
is down or slow, the process could take pretty long time to finish. In
the later case, Tomcat's max processors could be used up and 'no
processor available' error is thrown.

I guess I can increase the maxProcessor number in server.xml (currently
it is set to 75), but it seems not the ideal way. I am wondering
whether or not I can spawn a new thread in the servlet and hand the
email verification to the new thread for processing, then the main
thread will return and be available for new request to reduce the 'no
processor error'? One problem I can see is that even I can do what I
stated above, some document suggest that after the main thread returns
(for example, exit from the doGet method of a servlet), the
HttpServletResponse's outputstream is closed and I can't send response
to the user anymore. Is this right?

Any suggestions for my situation.

Thanks for your help.










 -
 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]



Re: What's the right way to handle a long process without occupying a tomcat processor/thread?

2004-06-16 Thread Tim Funk
Here's some bad pseudo code ...
-- process.jsp --
/*
  Make ThreadyThing implements Runnable, its constructor will start itself
  as a background thread and do your processing. Expose a method
  isDone() to be  flag to let you know when its done.
*/
%
session.setAttribute(thread, new ThreadyThing(args));
response.sendRedirect(wait.jsp);
%
==
-- wait.jsp --
%
  ThreadyThing thing = (ThreadyThing)session.getAttribute(thread);
  if (thing.isDone()) {
 //cleanup
 return
  }
%
META HTTP-EQUIV=Refresh CONTENT=10;
img src='still_doningcrap.gif'/

-Tim
Michael Cardon wrote:
Tim,
Do you have a code example of this solution?  I would be very interested in
setting something like this up.
Thanks.
Michael
-Original Message-
From: Tim Funk [mailto:[EMAIL PROTECTED]
Sent: Wednesday, June 16, 2004 10:22 AM
To: Tomcat Users List
Subject: Re: What's the right way to handle a long process without
occupying a tomcat processor/thread?
Use a backgorund thread to do the processing.
Then spit a page back to the user which uses a meta refresh to check the
status of the background thread. Place an animated gif on the meta refresh
page and the user will be none the wiser.
-Tim
Xiao F Chen wrote:

  Hello all, I have a scenario related to long process in handling a
  servlet request. I am using tomcat 4.1 with apache 1.3.9. In one of our
  applications, when a user logs in, we will determine if the account's
  email address has been verified or not. If not, the application will
  ask the user submit an email address for verification using JavaMail.
  The process to verify the address is to send an email message to the
  email address immediately. Most of times, the process is quick and we
  can get the real time info about whether or not the user account on the
  mail server is valid or not. But sometimes when the user's email server
  is down or slow, the process could take pretty long time to finish. In
  the later case, Tomcat's max processors could be used up and 'no
  processor available' error is thrown.
  I guess I can increase the maxProcessor number in server.xml (currently
  it is set to 75), but it seems not the ideal way. I am wondering
  whether or not I can spawn a new thread in the servlet and hand the
  email verification to the new thread for processing, then the main
  thread will return and be available for new request to reduce the 'no
  processor error'? One problem I can see is that even I can do what I
  stated above, some document suggest that after the main thread returns
  (for example, exit from the doGet method of a servlet), the
  HttpServletResponse's outputstream is closed and I can't send response
  to the user anymore. Is this right?
  Any suggestions for my situation.
  Thanks for your help.
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]