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

标签 java jakarta-ee timer ejb ejb-3.0

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

  • 与第一次调用同时运行超时方法
  • 还是等到调用完成
  • 或者是否会放弃第二次调用
  • 还是会发生其他事情?

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

最好的问候,

普热梅克

最佳答案

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

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

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

A missed execution is a timeout that must have been attempted, but was not, because the server was unavailable or busy retrying a previously failed timeout.

关于java - 根据规范,EJB 计时器调用是否可以与指定计时器重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18740220/

相关文章:

validation - 验证 javax.ejb.ScheduleExpression

jakarta-ee - glassfish - 与 mysql 的连接崩溃

javascript - 在 JavaScript 中创建一个倒数计时器

c# - C# 计时器对象如何确定耗时量何时发生?

java - 在 JTextPane 中突出显示当前行

java - Java 扩展是否可以在 Play Framework 上运行?

java - 在 JMenu 中居中文本

java - 无状态 session bean 在缺少 EntityManager 的上下文中调用

php - jquery 一页上有多个 keith-wood 倒计时插件

java - 带有 DSA 私钥的 dnssec-keygen 输出文件