我们在应用程序中使用Websphere Work Manager
(CommonJ)来产生线程。我们正在使用默认的WorkManager
,并通过JNDI
在我们的应用程序中访问它。应用程序线程继续运行
try {
Context ctx = new InitialContext();
wm = (WorkManager) ctx.lookup("java:comp/env/wm/App_WORKMANAGER");
wm.schedule(this);
//threadScheduler = new Thread(this);
//threadScheduler.start();
} catch (Exception e) {
// catch the exception
}
我们继续运行侦听不同队列的线程来检查任何消息并对其进行处理。我们确实收到了如下所示的消息,并知道可以从管理控制台配置该消息以停止显示警告/错误或增加挂起检测时间。
[13年1月30日6:50:38:708 EST] 00000032 ThreadMonitorW¯¯WSVR0605W:线程 “WorkManager.DefaultWorkManager:2”(00000022)已活跃708969毫秒,并且可被挂起。总共有1个线程可以挂在服务器上。
现在,如果我们停止从管理控制台的应用程序,这些线程不会停止,我们不断收到洪消息。对于另一个部署,另一组线程合计为洪线程数。 我在某处读到,如果我们将线程声明为Daemon
,那么它们会停止()。那么,我们宣布线程为Daemon
如下,或者我们需要重写release()
方法吗?我们的release()
目前为空。
public boolean isDaemon() {
return true;
}
public void release() {
//TODO
}
我们究竟应该如何阻止应用程序线程停止运行?这是一个使用Struts 1.x
的旧应用程序。
我看了两种这里解释:
Thread keeps running even after application has been stopped in Websphere(因为我没有使用弹簧,刚刚宣布
Deamon
是很好,如果我们停止JVM本身这会工作,只是从控制台停止应用程序不会?帮助,对不对?)Does Websphere respect Daemon threads?(由Sarel博塔建议的方法是唯一的解决方案或我们从控制台一些设置来完成这项工作。)
谢谢。
您将不得不为应用程序创建一个启动/关闭侦听器,并停止线程 –
感谢Aviram,我将尝试使用servlet上下文侦听器。虽然它会有点繁琐,因为应用程序没有共同的服务创建theads ..将不得不挖掘到每个线程.. :) – pranav