我有一个带有两个@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
答案 0 :(得分:1)
解决方案是从WAR模块中删除EJB类。我在EAR中的两个独立模块(EJB和WAR)中使用了相同的类,因此Schedules
被注册了两次。包装过程中的一个愚蠢的错误导致了双重执行。