Win a copy of The Little Book of Impediments (e-book only) this week in the Agile and Other Processes forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

when destory() gets called ??

 
Raj Paul
Ranch Hand
Posts: 77
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi,
When container will call destroy(), suppose if the servlet is servicing & container want to remove what it will remove, will it give time to the servlet to service or it wont wait for that ?
If container gives time, & servlet receives more requests what container will do.
Thanks & Regards
Raj Paul
 
Peter den Haan
author
Ranch Hand
Posts: 3252
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The container must not call service() after calling destroy(). I'm not sure if it is in the specification, but it would make a lot of sense for a container to ensure that there are no calls to service() underway when it calls destroy().
In any case, destroy() is called in two cases: first, when it wants to free up some memory, presumably because the servlet hasn't been invoked for a while, which means you don't have any calls to service() to worry about; second, when the container is shutting down, in which case it has probably stopped accepting client requests anyway.
- Peter
 
k space
Ranch Hand
Posts: 104
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Yes, it is in the Servlet spec (2.3) - see below
SRV.2.3.4 End of Service
The servlet container is not required to keep a servlet loaded for any particular period of time. A servlet instance may be kept active in a servlet container for a period of milliseconds, for the lifetime of the servlet container (which could be a number of days, months, or years), or any amount of time in between.
When the servlet container determines that a servlet should be removed from service, it calls the destroy method of the Servlet interface to allow the servlet to release any resources it is using and save any persistent state. For example, the container may do this when it wants to conserve memory resources, or when it itself is being shut down.
Before the servlet container calls the destroy method, it must allow any threads that are currently running in the service method of the servlet to complete execution, or exceed a server defined time limit.
Once the destroy method is called on a servlet instance, the container may not route other requests to that instance of the servlet. If the container needs to enable the servlet again, it must do so with a new instance of the servlet´┐Żs class.
After the destroy method completes, the servlet container must release the servlet instance so that it is eligible for garbage collection.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic