EJBTimerService停止工作

时间:2018-08-17 12:24:01

标签: ejb-timer

我对EJBTimerService有疑问。

EJBTimerService是中央控制器,它使用java.util.Timer。

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

我的问题是java.util.Timer.mainLoop停止工作,并且未安排新任务。

在对GlassFish源代码进行分析之后,我得出了结论。 发生问题是因为当EJBTimeout时,我们从ejbContainerUtil.addWork(work)接收到RejectedExecutionException。

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。

我是Corret吗?还是我错了?

0 个答案:

没有答案