根据规范,对于指定的计时器,EJB 计时器调用是否可以重叠



如果我定义了一个以间隔重复运行的 EJB 计时器(准确地说是 EJB 3.0),并且单个调用时间比间隔长,容器会不会

  • 第一次调用的同时运行超时方法
  • 还是会等到调用完成
  • 还是会删除第二次调用
  • 还是会发生其他事情?

它是在 EJB 规范中指定的还是依赖于应用程序服务器?我对 JBoss 5.1 的行为特别感兴趣。

此致敬意

普热梅克

简短的回答是,我认为这没有指定。

长答案是,在我浏览 EJB 3.2 规范和 javax.ejb API 文档之前,我确信这是指定的,我找不到任何明确的说法。 规范很清楚,如果单个超时失败,则必须至少重试一次(这将创建一个奇怪的场景,即"新"超时成功后重试"旧"超时),并且如果容器/应用程序在计时器应该触发时关闭,它需要触发至少一个"追赶", 但我找不到任何关于重叠超时方法的内容。

我不知道 JBoss 是做什么的,但对于找到这个答案的其他人,我知道 WebSphere Application Server 以"串行"方式实现了单个计时器的超时回调。 也就是说,单个计时器只能有一个未完成的超时处于活动状态,如果前一个超时仍在执行或重试,则不会发生后续超时回调。 延迟/重试超时完成后,服务器将立即触发"追赶"超时。 可以更明确地说明此行为,但是在讨论重试时,信息中心中的使用企业 Bean 的 EJB 定时服务创建计时器主题暗示了此行为:

错过执行是必须尝试的超时,但 不是,因为服务器不可用或忙于重试以前的 超时失败。

最新更新