java - 计划任务执行两次

标签 java jakarta-ee ejb ejb-3.1

我有一个带有两个@Schedules的无状态 session 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 默认 - 1)和(EJB 默认 - 2)):

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

最佳答案

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

关于java - 计划任务执行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20880145/

相关文章:

java - 如何使用 json 对象从上下文位于 mainactivity 的对话框的 editText 发送数据?

java - 确定 BMT 或 CMT

java - 尝试删除所有缓存时 Ehcache 中出现异常

java - 使用 SERIAL 和 BIGSERIAL w/EJB3 和 Postgres

java - 使用 jUnit 测试套件时 OpenEJB 备用描述符无法工作

java - 如何使用触发器事件(插入/更新)在sql server 2008中使用jdbc调用java方法?

java - 如何将模式与完整的字符串匹配?

Java:类 <?> 与类

java - Spring session bean : initialize with values

jakarta-ee - 使用 CDI 将 Logger 注入(inject) Ejb