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

3
如果我定义了一个重复运行的EJB Timer(确切地说是EJB 3.0),并且单个调用时间长于时间间隔,容器会
  • 同时运行超时方法和第一次调用
  • 还是等待调用结束
  • 或者第二次调用将被丢弃
  • 还是会发生其他事情?
这是否在EJB规范或应用服务器中指定?我特别关注JBoss 5.1的行为。
最好的问候,
Przemek

@BonanzaOne,那么为什么在JEE 5教程中会描述它呢?http://docs.oracle.com/javaee/5/tutorial/doc/bnboy.html - Przemysław Różycki
你说得对,我不知道为什么会发布那个。 - Evandro Pomatti
1个回答

3
简短的回答是我认为这并没有被规定。
长的回答是,我之前确信这已经被规定了,但是在查看EJB 3.2规范和javax.ejb API文档后,我没有找到任何明确说明。规范清楚地指出,如果单个超时失败,则必须至少重试一次(这会创建一个“旧”的超时在“新”的超时成功后重新尝试的奇怪情况),并且如果容器/应用程序在计时器应该触发时关闭,则需要触发至少一个“补偿”,但我找不到任何关于重叠超时方法的内容。
我不知道JBoss是做什么的,但对于其他人发现这个答案的人来说,我知道WebSphere应用服务器以“串行”方式为单个计时器实现超时回调。也就是说,对于单个计时器,只能有一个未完成的超时处于活动状态,如果先前的超时回调仍在执行或重试,则不会发生后续的超时回调。在延迟/重试的超时完成后,服务器将立即触发“赶上”超时。这种行为可以更明确地说明,但是InfoCenter中使用EJB计时器服务创建企业Bean的计时器主题在讨论重试时暗示了这种行为:

这正是我担心的。我也无法在规范中找到它,但WebSphere的行为对我来说似乎是合理的。我会在空闲时间手动检查JBoss,但我想知道应用服务器提供商是否将其视为规则或实现是否不同。 - Przemysław Różycki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接