• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

is this correct?

 
Ranch Hand
Posts: 1873
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
hi all
again i'm back w/ a question and i wish it doesnt get un-answered as my rescent posts on JR
okay,
i have a requirement that forces me to do some background processing in servlet. the problem is - if my servlet takes longer to respond then the browser proxy times out (u'd know if u saw my post earlier describing the issue on this forum which is still to b responded by somebody). I started with using Runtime.exec() but the problem is if i don't read back the output or error from the Process then the process sleeps and never gets awakened so my efforts failed.
then i tried w/ threads from the servlet and here is the thing i do. now, guide me if u find anything wrong in it or a serious possible problem in it,
(tho this is pseudocode)

it seems to be working okay but i just wanted to get some reviews from all because i dont have much experience in this kind of development..

regards
maulin
 
Rancher
Posts: 13459
Android Eclipse IDE Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
If you feel you're having trouble getting your questions answered, try this article: How To Ask Questions The Smart Way.
Please use a meaningful topic name, and avoid contractions (u, ur, w/, u'd etc)
Dave
 
David O'Meara
Rancher
Posts: 13459
Android Eclipse IDE Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
If I'm not mistaken, you're spawning a separate thread to do your processing, and you don't need the results of this thread for your Servlet.
Why is the code and management in the Servlet? I can't see why it's the Servlet's responsibility. There isn't any real difference between this and your description of your first solution. You are relying on the destroy method to make sure your hanging threads finish, but there is no guarantee of when this will be called and it won't force the Threads to finish if they haven't already.
Do you need the extra clean-up code? Can you just fire and forget?
 
Maulin Vasavada
Ranch Hand
Posts: 1873
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
hi David
thanks for your suggestion. i would try to read the link you provided and see how can i improve on things. yeah i agree, i'm a bad presenter i guess its time to cut off on these chatting arena short forms
anyways,
well, the thread code is in the separate file and i pass appropriate arguments to the thread when i create one so i guess its not in the servlet if thats what you meant.
the problem in the first approach where i use Runtime.exec() was that the process that was getting forked was going into sleep mode after sometime and never was getting awakened and my application was getting screwed up.
When we use Runtime.exec() then we have to read in the output from the process (or error stream) to make sure it was completed. Also we should call process.waitFor() may be. Now, if i have to do that then the problem of browser proxy timeout can't be solved as i would wait for response from the process forked by Runtime.exec() which takes time. So, i basically fork parallel thread and respond to the user that they are done. well, this is kind of cheating but it is better than getting headaches in production system as a result of browser proxy timeout.
Hope I am able to explain my position here.
About the cleanup code you asked me, I guess I need cleanup code because otherwise if the servlet gets unloaded by the webserver somehow then the threads will stray around and all you know. So, to avoid that I am putting all the forked thread in a list and then on destroy() I am making sure every thread on the list was completed. Well, this is what I remember from Oreilly book or something that cautioned me about using threads in servlet as the servlet is also managed by threads by the webserver.
Also, I am scared as usually people recommend not to spawn a thread in a servlet. Though I have not any substantial argument to support my fear.
Also, please forgive me for still lower case letters at many places instead of upper case but you know it will take couple of posts before I learn. I was there in some earlier thread discussing the weirdness with which people write posts and I guess this is my last post where you would find weiredness in writing.
Regards
Maulin.
 
David O'Meara
Rancher
Posts: 13459
Android Eclipse IDE Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
So the real problem is that the thread created to run Runtime.exec() is not completing?
Does the MyThread.run() method still call Runtime.exec(), or does it do the work itself? Either way, it's probably time to get this thread moved to the Threads forum.
Dave
 
Maulin Vasavada
Ranch Hand
Posts: 1873
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
hi David
No. In the thread I don't use Runtime.exec().
Also, I am sure about that Runtime.exec() issue as we have to read in back the output/error from the stream as otherwise it doesn't get completed sometimes but I just wanted to try and it really worked for small processing but for big it failed
Regards
Maulin
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
reply
    Bookmark Topic Watch Topic
  • New Topic