javaweb项目中listener中启动ice server监听导致tomcat阻塞,无法启动成功
web.xml文件配置listener如下:
<listener>
<listener-class>com.core.listener.IceStartListener</listener-class>
</listener>
IceStartListener实现:
public class IceStartListener implements ServletContextListener {
private IceStartThread iceStartThread;
@Override
public void contextInitialized(ServletContextEvent arg0) {
application application = new application();
String iceID = application.getStr_ice_ID();
String iceNET = application.getStr_ice_NET();
System.out.println("iceID:"+iceID+",iceNET:"+iceNET);
if(null == iceStartThread)
{
//新建线程类
iceStartThread=new IceStartThread(iceID,iceNET);
//启动线程
iceStartThread.start();
}
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
if(null!=iceStartThread && !iceStartThread.isInterrupted())
{
iceStartThread.interrupt();
}
}
}
IceStartThread线程实现类核心代码:
```java
public void startICE(String strCfg_iceID,String strCfg_iceNet) {
int status = 0;
Ice.Communicator ic = null;
try {
ic = Ice.Util.initialize();
Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints(
strCfg_iceID, strCfg_iceNet);
Ice.Object object = new hsm30InterfaceI();
adapter.add(object,Ice.Util.stringToIdentity(strCfg_iceID));
adapter.activate();
log.info("ICE server:"+strCfg_iceID+" "+strCfg_iceNet+ " start OK!");
ic.waitForShutdown();
} catch (Ice.LocalException e) {
e.printStackTrace();
status = 1;
} catch (Exception e) {
System.err.println(e.getMessage());
status = 1;
} finally {
if (ic != null)
ic.destroy();
}
System.exit(status);
}
启动后阻塞在ic.waitForShutdown();语句中,tomcat就不能再启动。
已经重新启动一个线程来启动ice server,但是tomcat始终起不来。web页面无法正常访问