- 论坛徽章:
- 0
|
[JBPM] CommandExecutorThread的ThreadDeath问题
ERROR [CommandExecutorThread] org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: java.lang.ThreadDeath
jbpm 的 CommandExecutorThread线程在web应用重启部署后(不是服务器的重启),前一个应用的线程并没有停止,而变成了没有引用的"野"线程.线程继续运行的时候就会报ThreadDeath的异常.
解决方法:
1.修改org.jbpm.msg.command.CommandExecutorThread
添加控制线程执行的变量:
private boolean keepRunning = true;
/**
* @return Returns the keepRunning.
*/
public boolean isKeepRunning()
{
return keepRunning;
}
/**
* @param keepRunning The keepRunning to set.
*/
public void setKeepRunning(boolean keepRunning)
{
this.keepRunning = keepRunning;
}
修改run方法:
修改前
==========================================
public void run()
{
// while not interrupted...
try
{
while (true)
{
修改后
==========================================
public void run()
{
// while not interrupted...
try
{
while (keepRunning)
{
2.在servlet中启动线程时,或直接启动线程,应当应用undeploy的时候停止线程.[重启应用服务器就不用关心了:)]
如果在servlet中:
public void destroy()
{
schedulerThread.setKeepRunning(false);
commandExecutorThread.setKeepRunning(false);
super.destroy();
}
OK,everything is in order:)
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/13917/showart_77688.html |
|