标签: ejb-timer

Timer正在创建多个计时器实例

这是一个真正简单的问题,我想但是我无法弄清楚为什么会发生这种情况.我有一个EJB计时器的实现,它使用@Singleton注释,即单例计时器.

我每隔5分钟就开始运行一次.代码看起来像这样:

@Singleton
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class Scheduler {
    private static final double timerVar = Math.random() * 33;

    static Logger logger = Logger.getLogger("Scheduler");

    @Schedule(second = "*", minute = "*/5", hour = "*", persistent = true)
    public void doWork() {
        logger.log(Level.INFO, "timer value for this session : " + timerVar);
    } 
}
Run Code Online (Sandbox Code Playgroud)

当进程运行时,它在1秒的间隙中同时执行10个调度程序实例

(EJB default - 1)
(EJB default - 2)
(EJB default - 3)
(EJB default - 4)
Run Code Online (Sandbox Code Playgroud)

等等.当我在代码中放置一个冗长的操作时,它(EJB default - 1)是不完整的,当(EJB default - 2)尝试执行它时会给我一个错误说:

JBAS014373:EJB 3.1 …

java jboss java-ee ejb-3.0 ejb-timer

7
推荐指数
1
解决办法
6224
查看次数

WFLYEJB0043:计时器[timer]的先前执行仍在进行中,在[time]处跳过了此重叠的计划执行

我在单例EJB中定义了一些持久性计时器,如下所示(使用WildFly 9.0.2 final)。

@Startup
@Singleton
@Lock(LockType.READ)
public class BackgroundJobManager implements BackgroundJobService {

    @Schedule(dayOfMonth = "1", month = "Jan", year = "*", hour = "0", minute = "0", second = "0", persistent = true)
    private void doYearlyJob() {
        //...
    }

    @Schedule(hour = "*", minute = "*/5", second = "0", persistent = true)
    private void updateTopSellers() {
        //...
    }

    @Schedule(hour = "*", minute = "*/1", second = "0", persistent = true)
    private void updateFeedback() {
        //...
    }

    //...
}
Run Code Online (Sandbox Code Playgroud)

在服务器启动时以及在重新部署应用程序时会发出一些警告,如下所示(仅是其中的一些)。

19:46:51,687 WARN …
Run Code Online (Sandbox Code Playgroud)

ejb timer java-ee wildfly ejb-timer

4
推荐指数
1
解决办法
7924
查看次数

标签 统计

ejb-timer ×2

java-ee ×2

ejb ×1

ejb-3.0 ×1

java ×1

jboss ×1

timer ×1

wildfly ×1