On Jan 13, 2014, at 7:48 PM, Ja kub <jjaku...@gmail.com> wrote:

> I modified conf/context.xml <Context unloadDelay="60000">
> I hoped tomcat would wait 60 seconds for request to end.

No, it doesn't do this.  It does not have an option for "graceful" restart / 
shutdown like Apache HTTPD.  If you want that behavior, you could setup a proxy 
in front of Tomcat and use that to either temporarily handle the requests (like 
send them to a maintenance page) or direct them to a different Tomcat node 
(like with a cluster setup).  In this way you can slowly drain the requests 
from your Tomcat server and then safely restart / shut it down.

> But there are some problems with spring app, I get
> 
> HTTP Status 503 - Servlet jsp is currently unavailable:
> 
> I use tomcat 7.42 64 bit on windows 7
> 
> steps to reproduce:

As mentioned above, Tomcat doesn't really have a graceful shutdown option, at 
least not like HTTPD has graceful restart / shutdown options.  

Tomcat has two shutdown options.  The first is a controlled shutdown (kill -15 
or the shutdown port) and this nicely gives applications deployed to Tomcat the 
chance to clean up.  This is normally what happens when you use the shutdown 
script.  The second is a kill -9, which just ends the process immediately.

Dan

> 
> use app from https://github.com/spring-projects/spring-petclinic
> 
> git clone https://github.com/SpringSource/spring-petclinic.git
> 
> to VetController class add:
> 
>    @RequestMapping("/vets/{delay}")
>    public String showVetListDelayed(@PathVariable int delay, Map<String,
> Object> model) {
>        // Here we are returning an object of type 'Vets' rather than a
> collection of Vet objects
>        // so it is simpler for Object-Xml mapping
>        Vets vets = new Vets();
>        vets.getVetList().addAll(this.clinicService.findVets());
>        model.put("vets", vets);
>        try {
> Thread.sleep(1000*delay);
> } catch (InterruptedException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> } catch (Exception e) {
> e.printStackTrace();
> }
>        System.err.println("woken up ---------------------------");
>        return "vets/vetList";
>    }
> mvn clean install
> 
> // copy from target to webapps
> 
> go to
> http://localhost:8080/petclinic/vets/5
> hit ctrl C
> 
> app sleeps,  wait until
> System.err.println("woken up ---------------------------"); executes !!!!
> but browser gets error.
> 
> below is console log:
> 
> Hibernate: select distinct vet0_.id as id1_5_0_, specialty2_.id as
> id1_2_1_, vet0_.first_
> specialty2_.name as name2_2_1_, specialtie1_.vet_id as vet1_5_0__,
> specialtie1_.specialt
> join vet_specialties specialtie1_ on vet0_.id=specialtie1_.vet_id left
> outer join special
> alty2_.id order by vet0_.last_name, vet0_.first_name
> Jan 14, 2014 1:20:15 AM org.apache.catalina.core.StandardServer await
> INFO: A valid shutdown command was received via the shutdown port. Stopping
> the Server in
> Jan 14, 2014 1:20:15 AM org.apache.coyote.AbstractProtocol pause
> INFO: Pausing ProtocolHandler ["http-apr-8080"]
> Jan 14, 2014 1:20:15 AM org.apache.coyote.AbstractProtocol pause
> INFO: Pausing ProtocolHandler ["ajp-apr-8009"]
> Jan 14, 2014 1:20:15 AM org.apache.catalina.core.StandardService
> stopInternal
> INFO: Stopping service Catalina
> Jan 14, 2014 1:20:16 AM org.apache.catalina.core.StandardWrapper unload
> INFO: Waiting for 1 instance(s) to be deallocated for Servlet [petclinic]
> woken up ---------------------------
> INFO  XmlWebApplicationContext - Closing WebApplicationContext for
> namespace 'petclinic-s
> ]; parent: Root WebApplicationContext
> INFO  XmlWebApplicationContext - Closing Root WebApplicationContext:
> startup date [Tue Ja
> INFO  AnnotationMBeanExporter - Unregistering JMX-exposed beans on shutdown
> INFO  EhCacheManagerFactoryBean - Shutting down EhCache CacheManager
> INFO  LocalContainerEntityManagerFactoryBean - Closing JPA
> EntityManagerFactory for persi
> Jan 14, 2014 1:20:22 AM org.apache.catalina.loader.WebappClassLoader
> clearReferencesJdbc
> SEVERE: The web application [/petclinic] registered the JDBC driver
> [org.hsqldb.jdbc.JDBC
> plication was stopped. To prevent a memory leak, the JDBC Driver has been
> forcibly unregi
> Jan 14, 2014 1:20:22 AM org.apache.catalina.loader.WebappClassLoader
> clearReferencesThrea
> SEVERE: The web application [/petclinic] appears to have started a thread
> named [PoolClea
> p it. This is very likely to create a memory leak.
> Jan 14, 2014 1:20:22 AM org.apache.coyote.AbstractProtocol stop
> INFO: Stopping ProtocolHandler ["http-apr-8080"]
> Jan 14, 2014 1:20:22 AM org.apache.coyote.AbstractProtocol stop
> INFO: Stopping ProtocolHandler ["ajp-apr-8009"]
> Jan 14, 2014 1:20:22 AM org.apache.coyote.AbstractProtocol destroy
> INFO: Destroying ProtocolHandler ["http-apr-8080"]
> Jan 14, 2014 1:20:22 AM org.apache.coyote.AbstractProtocol destroy
> INFO: Destroying ProtocolHandler ["ajp-apr-8009"]
> 
> 
> Regards
> Jakub


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to