2014-05-12 17 views
5

Nie mogę znaleźć przyczyny, dla której mój destroy-method nie zostanie wywołany, gdy moja aplikacja zostanie zamknięta w przypadku zatrzymania tomcat.niszcząca metoda fasoli sprężystej nie jest wywoływana, gdy mój kocur wyłącza się.

Mam aplikacji internetowych i kontekst wiosna jest coraz załadowany przez ContextLoaderListener w web.xml jak poniżej:

web.xml

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:appContext.xml</param-value> 
</context-param> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

poniżej jest fasola Pracownik w mojej aplikacji:

Employee.class

public class Employee { 
    String eName; 
    long eSal; 
    public String getEName() { 
     return eName; 
    } 
    public void setEName(String name) { 
     eName = name; 
    } 
    public long getESal() { 
     return eSal; 
    } 
    public void setESal(long sal) { 
     eSal = sal; 
    } 

    public void init() { 
     System.out.println("Initiaizing..."); 
     System.out.println("eName: " + eName + " - eSal: " + eSal); 
    } 

    public void close() { 
     System.out.println("Destroying..."); 
    } 
} 

i fasola jest zdefiniowane w moim pliku kontekstowego aplikacji jak poniżej:

appContext.xml

<beans:beans xmlns="http://www.springframework.org/schema/integration" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.1.xsd"> 

    <beans:bean id="employee" class="com.test.Employee" init-method="init" destroy-method="close"> 
     <beans:property name="eName" value="sandip" /> 
     <beans:property name="eSal" value="80000" /> 
    </beans:bean>   
</beans:beans> 

Tomcat dzienniki konsoli:

May 12, 2014 11:28:46 AM org.apache.catalina.core.AprLifecycleListener init 
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre6\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files\Java\jre7\bin\client;C:\Program Files\Java\jre7\bin;C:\Program Files\Common Files\NetSarang;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Lenovo\Access Connections\;D:\Project\maven-2.0.7\bin;D:\Software Backup\apache-ant-1.7.0\bin;C:\Program Files\Java\jdk1.6.0_20\bin;D:\Project\OBD3\1.5;D:\Software Backup\CVS;D:\Project\UNIX\UnxUtils\usr\local\wbin;C:\Program Files\QuickTime\QTSystem\;D:\Personal\MongoDB\MongoDB_work\mongodb\bin;D:\Software Installed\MariaDB 5.5\bin;C:\Program Files\Git\bin 
May 12, 2014 11:28:46 AM org.apache.tomcat.util.digester.SetPropertiesRule begin 
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:testSpringBeanDestroy' did not find a matching property. 
May 12, 2014 11:28:46 AM org.apache.coyote.http11.Http11Protocol init 
INFO: Initializing Coyote HTTP/1.1 on http-8093 
May 12, 2014 11:28:46 AM org.apache.catalina.startup.Catalina load 
INFO: Initialization processed in 419 ms 
May 12, 2014 11:28:46 AM org.apache.catalina.core.StandardService start 
INFO: Starting service Catalina 
May 12, 2014 11:28:46 AM org.apache.catalina.core.StandardEngine start 
INFO: Starting Servlet Engine: Apache Tomcat/6.0.32 
May 12, 2014 11:28:46 AM org.apache.catalina.loader.WebappClassLoader validateJarFile 
INFO: validateJarFile(D:\Project\Workspace_new\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\testSpringBeanDestroy\WEB-INF\lib\servlet.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class 
May 12, 2014 11:28:46 AM org.apache.catalina.core.ApplicationContext log 
INFO: Initializing Spring root WebApplicationContext 
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader). 
log4j:WARN Please initialize the log4j system properly. 
Initiaizing... 
eName: sandip - eSal: 80000 
May 12, 2014 11:28:47 AM org.apache.coyote.http11.Http11Protocol start 
INFO: Starting Coyote HTTP/1.1 on http-8093 
May 12, 2014 11:28:47 AM org.apache.jk.common.ChannelSocket init 
INFO: JK: ajp13 listening on /0.0.0.0:8011 
May 12, 2014 11:28:47 AM org.apache.jk.server.JkMain start 
INFO: Jk running ID=0 time=0/20 config=null 
May 12, 2014 11:28:47 AM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 768 ms 

Kiedy zacznę Tomcat I widać, że moja metoda init jest wywoływana, ale niestety, gdy zatrzymuję kocur close(), to znaczy, że metoda destroy nie jest wywoływana.

Używam słoików dystrybucji wersji 3.1.2.

Co robię źle?

+0

Jak powstrzymać Tomcat? –

+0

po prostu zabić proces lub przy użyciu shutdown.sh – Sandy

+2

I masz takie samo zachowanie zarówno zabić i shutdown.sh? Pomyślałem, że tylko zabicie nie zadziała zgodnie z oczekiwaniami. –

Odpowiedz

0

Dzięki Andrei. +1 dla ciebie. Problem polegał na tym, że nie zostałem właściwie wyłączony. Teraz po przeczytaniu niektórych dokumentów stwierdziłem, że jeśli z wdziękiem zamknę mój tomcat albo z Menedżera Tomcat, albo używając skryptów zamykających takich jak (shutdwon.sh/shutdown.bat), zostanie wywołana metoda My destroy.

Komenda Kill -9 nie działa, a także jeśli próbuje zatrzymać się w wyniku zaćmienia, nie działa.

+0

Jestem w podobnej sytuacji. Chcę, aby moja metoda Servlet 'destroy()' była wyzwalana i może być uruchomiona do końca, gdy usługa Tomcat7 zostanie zatrzymana ('service tomcat7 stop'), ale nie mogę stwierdzić, czy jest to właściwe podejście. Gdzie można znaleźć skrypty zamykające? ("shutdown.sh/shutdown.bat")? Czy 'service tomcat7 stop' powinien być równoważny, czy też nie będzie to wywoływać' destroy() ' – mmcrae

+0

chciał zwrócić twoją uwagę konkretnie @Sandy – mmcrae

Powiązane problemy