Как игнорировать застрявшие темы в Weblogic Server - PullRequest
0 голосов
/ 12 октября 2011

У меня есть следующий код, работающий на сервере приложений Weblogic 10.3.2.Долгосрочная задача, выполняемая в timerExpired, занимает больше времени, чем общесерверный StuckThreadMaxTime, в 600 секунд.Я не хочу изменять это значение, а просто игнорирую время ожидания застрявшего потока для этого конкретного потока обработки.

Я вижу, как это можно сделать с помощью обычного WorkManager из этого: http://download.oracle.com/docs/cd/E11035_01/wls100/config_wls/self_tuned.html#wp1069945

И затем, добавив следующее в тег work-manager в файле weblogic.xml:

<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    
    }
}

Ответы [ 2 ]

1 голос
/ 13 октября 2011

Я выбрал простой выход (давление времени), выполнив обработку в работе, запланированной 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>
0 голосов
/ 12 октября 2011

Я не пробовал это, но добавление этой записи в weblogic.xml должно работать

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

name соответствует res-ref-name в web.xml

Мой сервер запущен стаймер хорошо, я не проверял ваш клиент, чтобы увидеть, игнорируются ли застрявшие сообщения потока

...