我有以下配置:
运行 Spring MVC 应用程序的 tomcat7 服务器,它使用 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 工作,甚至我的控制台应用程序(我的套接字连接的服务器端)告诉我会话已终止。但是当我试图通过 eclipse GUI 停止 tomcat 时,它无法关闭,eclipse 告诉我它没有反应,并让我强制终止服务器。
服务器的最后一个登录表单是:
Dez 19, 2012 4:39:17 PM org.apache.coyote.AbstractProtocolHandler 停止信息:停止 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();
打开连接时是否有任何其他线程 mina 启动?是什么阻止了 tomcat 实例正确关闭?