1

我在 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>  

测试定时器.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    
    }
}
4

2 回答 2

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>
于 2011-10-13T07:57:50.860 回答
0

我还没有尝试过,但是在 weblogic.xml 中添加这个条目应该可以

<work-manager>
       <name>timer/TestTimer</name>
       <ignore-stuck-threads>true</ignore-stuck-threads>
    </work-manager>

web.xml 中的name匹配项res-ref-name

我的服务器用定时器启动好了,我还没有测试你的客户端看看卡住的线程消息是否被忽略

于 2011-10-12T06:27:49.813 回答