我在Weblogic Application Server 10.3.2上有以下代码。在timerExpired上执行的长时间运行任务所需的时间比服务器范围的StuckThreadMaxTime长600秒。我不想修改这个值,只是为了忽略这个特定处理线程的卡住线程超时。
我可以看到如何使用commonj WorkManager完成此操作: http://download.oracle.com/docs/cd/E11035_01/wls100/config_wls/self_tuned.html#wp1069945
然后将以下内容添加到weblogic.xml文件中的work-manager标记:
<ignore-stuck-threads>true</ignore-stuck-threads>
但是我怎么对Timer / TimerManager做同样的事情呢?
的web.xml
<resource-ref>
<res-ref-name>tm/TestTimer</res-ref-name>
<res-type>commonj.timers.TimerManager</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Unshareable</res-sharing-scope>
</resource-ref>
TestTimer.java:
import commonj.timers.Timer;
import commonj.timers.TimerListener;
import commonj.timers.TimerManager;
public class TestTimer implements TimerListener {
public void init()
TimerManager timerManager =
(TimerManager)initContext.lookup("java:comp/env/tm/TestTimer");
timerManager.schedule(this, SCHEDULE_DELAY);
}
@Override
public void timerExpired(Timer timer) {
// perform long-running task
}
}
答案 0 :(得分:1)
当计时器到期时,我通过在WorkManager安排的工作中进行处理,从而轻松解决了(时间压力)。
public MyClass implements TimerListener, Work
@Override
public void timerExpired(Timer timer) throws Exception {
WorkManager workManager = initContext.lookup("wm/myworkmanager");
workManager.schedule(this);
}
@Override
public void run() {
doWork();
}
}
的web.xml
<resource-ref>
<res-ref-name>wm/myworkmanager</res-ref-name>
<res-type>commonj.work.WorkManager</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Unshareable</res-sharing-scope>
</resource-ref>
weblogic.xml中
<wls:work-manager>
<wls:name>wm/myworkmanager</wls:name>
<wls:ignore-stuck-threads>true</wls:ignore-stuck-threads>
</wls:work-manager>
答案 1 :(得分:0)
我没有尝试过,但在weblogic.xml中添加此条目应该可以正常工作
<work-manager>
<name>timer/TestTimer</name>
<ignore-stuck-threads>true</ignore-stuck-threads>
</work-manager>
name
匹配web.xml中的res-ref-name
我的服务器启动了Timer好了,我还没有测试过你的客户端,看看卡住的线程消息是否被忽略