【问题标题】:EJB Timer: The same EJB with different ScheduleExpressionEJB Timer:同一个 EJB 有不同的 ScheduleExpression
【发布时间】:2014-06-05 12:23:03
【问题描述】:

目前我的应用程序正在使用多个 EJB 计时器。但是,客户有一个新要求,每个时间表必须有“n”个不同的 ScheduleExpression。例如,它必须针对不同的时区运行,但运行完全相同的代码。我试图将同一个无状态 EJB 与另一个 ScheduleExpression 相关联,但只有第一个表达式运行。我猜这是因为它是 @Stateless EJB 的同一个实例。

如何复制这些 EJB? 提示

我的启动计划的代码:

Calendar cal = Calendar.getInstance();
            String hour = ("*".equals(calendarSchedule.getHour()) ? "0"
                    : calendarSchedule.getHour());
            cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hour));
            String minute = ("*".equals(calendarSchedule.getMinute()) ? "0"
                    : calendarSchedule.getMinute());
            cal.set(Calendar.MINUTE, Integer.parseInt(minute));
            String dayOfWeek = ("*".equals(calendarSchedule.getDayOfWeek()) ? "0"
                    : calendarSchedule.getDayOfWeek());
            cal.set(Calendar.DAY_OF_WEEK, Integer.parseInt(dayOfWeek));

            SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm");
            LOGGER.debug("schedule " + name + " for: "
                    + sdf.format(cal.getTime()));
        }
        TimerConfig timerConfig = new TimerConfig();
        timerConfig.setInfo(name);
        timerConfig.setPersistent(false);
        timerService
                .createCalendarTimer(this.calendarSchedule, timerConfig);
        setStarted(true);
        LOGGER.info("Schedule " + this.name + " was started.");

应用程序在 WebSphere 8.5 上运行。计划不固定。我使用@Singleton@Startup EJB 来读取带有ScheduleExpression 的表。现在表格可以有两个条目用于同一个时间表。

【问题讨论】:

    标签: jakarta-ee timer ejb-3.1


    【解决方案1】:

    首先,不要复制 EJB - 你说的是运行相同的逻辑只需要不同的调度。

    其次,对我来说不明显的是 - 你是在固定时间运行还是每次计算不同?

    如果已修复: 使用注释进行调度。 在 Java 7 之前,您只能将一个 @Schedule 表达式与每种类型关联,在 Java 8 中(如果可能的话),您可以重复相同的注释。 总之,你可以使用下面的注解来指定多个调度:

    @Schedules ({
        @Schedule(dayOfMonth="Last"),
        @Schedule(dayOfWeek="Fri", hour="23")
    })
    

    如果是个人: 您可能希望为最小的公共间隔设置一个固定调度(假设您需要在 10:00、10:30、14:00、16:30 运行,那么从整点开始每 30 分钟到达all) 并检查满足哪个特定条件并为其执行调度程序。

    【讨论】:

    • 谢谢。我用更多细节更新了这个问题。每次系统启动时都可以更改。
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    相关资源
    最近更新 更多