计划任务执行两次

时间:2014-01-02 09:48:05

标签: java java-ee ejb ejb-3.1

我有一个带有两个@Schedules的无状态会话bean:

@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@Stateless
@Lock(LockType.WRITE)
@AccessTimeout(value = 0)
public class ScheduledTask {
    @EJB
    private SomeClass sClass;

        @Schedules({
            @Schedule(hour = "*", minute = "*/10",
                      info = "Automatic timer to send")})
        public void send() {
            sClass.doWork(true);
        }

        @Schedules({
            @Schedule(hour = "*", minute = "*/35",
                      info = "Automatic timer to receive")})
        public void receive() {
            sClass.doWork(false);
        }
}

我的问题是任务执行了两次。我已阅读topic,但我找不到解决方案。

我在控制台中有相同的输出(如(EJB default - 1)和(EJB default - 2)):

INFO  [GENERAL_LOGGER] (EJB default - 2) resultForSend.size() = 500
INFO  [GENERAL_LOGGER] (EJB default - 1) resultForSend.size() = 500

1 个答案:

答案 0 :(得分:1)

解决方案是从WAR模块中删除EJB类。我在EAR中的两个独立模块(EJB和WAR)中使用了相同的类,因此Schedules被注册了两次。包装过程中的一个愚蠢的错误导致了双重执行。