EJBTimerService перестать работать

У меня есть вопрос о EJBTimerService.

EJBTimerService является центральным контроллером, который использует java.util.Timer.

java.util.Timer jdkTimer = ejbContainerUtil.getTimer();
jdkTimer.schedule(timerTask, timerExpiration);

Моя проблема в том, что java.util.Timer.mainLoop перестал работать, а новое задание не запланировано.

После анализа исходного кода GlassFish я сделал выводы. Проблема возникает, потому что мы получаем RejectedExecutionException от ejbContainerUtil.addWork(работа), когда EJBTimeout.

EJBTimerTask timerTask = new EJBTimerTask(timerExpiration, timerId, this);
timerService_.taskExpired(timerId_);

Внутри ejbContainerUtil.addWork у нас есть defaultThreadPoolExecutor.submit()

defaultThreadPoolExecutor = EjbThreadPoolExecutor extends ThreadPoolExecutor + AbortPolicy.

TaskExpiredWork work = new TaskExpiredWork(this, timerId);
ejbContainerUtil.addWork(work);

Таким образом, таймер java.util.Timer.mainLoop перестал работать, так как превышен опрос ядра, очередь заполнена, превышено максимальное ядро, а затем мы получили от ThreadPoolExecutor RejectedExecutionException.

Я прав? Или я не прав?

0 ответов

Другие вопросы по тегам