Имам следната конфигурация:
Сървър tomcat7, изпълняващ Spring MVC приложение, което използва Apache mina, за да се свърже с Java-Console приложение (или всеки друг тип приложение за този въпрос), за да извлече някои данни.
Сега очевидно, когато затворя сървъра си, все още има отворена сесия в отделна тема, която пречи на Tomcat7 да се изключи. така че това, което правя, е следното:
package at.dauzinger.tcpservice;
import javax.servlet.ServletContextEvent;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.*;
public class ServerContextListener implements javax.servlet.ServletContextListener
{
PriceDao priceDao;
public void contextDestroyed(ServletContextEvent event)
{
WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
priceDao = (PriceDao)context.getBean("priceDao");
priceDao.closeConnection();
}
public void contextInitialized(ServletContextEvent arg0) {
//Method Stub
}
}
И вътре в web.xml
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>at.dauzinger.tcpservice.ServerContextListener</listener-class>
</listener>
ContextListener работи и дори моето конзолно приложение (от страната на сървъра на моята сокет връзка) ми казва, че сесията е прекратена. Но когато се опитвам да спра tomcat чрез GUI на eclipse, той не успява да се изключи и eclipse ми казва, че не реагира, и ми предлага да прекратя принудително сървъра.
Последният вход от сървъра е:
19 декември 2012 г. 16:39:17 org.apache.coyote.AbstractProtocolHandler stop ИНФОРМАЦИЯ: Спиране на ProtocolHandler ["ajp-bio-8009"]
Моят код, работещ в tomcat-servlet:
connector = new NioSocketConnector();
connector.getSessionConfig().setUseReadOperation(true);
connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
session = connector.connect( new InetSocketAddress(PORT)).awaitUninterruptibly().getSession();
session.write(request);
String resp = (String) session.read().awaitUninterruptibly().getMessage();
Има ли друга нишка, която се стартира при отваряне на връзка? Какво пречи на екземпляра tomcat да се изключи правилно?