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

时间:2013-09-11 11:43:07

标签: java java-ee timer ejb ejb-3.0

如果我定义了一个EJB Timer(精确的EJB 3.0),它定期以间隔重复运行,并且单个调用时间比间隔长,那么容器

  • 与第一次调用同时运行超时方法
  • 或将等到调用完成
  • 或将删除第二次调用
  • 或其他任何事情都会发生?

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

致以最诚挚的问候,

Przemek

1 个答案:

答案 0 :(得分:2)

简短的回答是我不认为这是指定的。

很长的答案是我确定这是在我查看EJB 3.2规范和javax.ejb API文档之前指定的,而且我找不到任何明确说明的内容。规范很清楚,如果单个超时失败,它必须至少重试一次(这将创建一个奇怪的情况,“旧”超时在“新”超时成功后重试)并且如果容器/应用程序关闭当一个计时器应该已经解雇时,它需要至少触发一次“赶上”,但我找不到任何谈论重叠超时方法的事情。

我不知道JBoss会做什么,但对于其他找到这个答案的人,我知道WebSphere Application Server以“串行”方式为单个Timer实现超时回调。也就是说,单个Timer只能激活一个未完成的超时,如果前一个超时仍在执行或重试,则不会发生后续的超时回调。延迟/重试超时完成后,服务器将立即触发“赶上”超时。可以更明确地说明此行为,但在讨论重试时,信息中心中的Creating timers using the EJB timer service for enterprise beans主题会提到此行为:

  

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