@Schedule 注解的方法未被调度

Method annotated with @Schedule is not scheduled

我正在尝试使用 ejb3.1 创建一个简单的计时器作业来进行一些清理工作。我的豆子看起来像这样:

@Singleton
@Startup
public class ExpirationSchedulerBean {

    private final Logger logger = Logger.getLogger(ExpirationSchedulerBean.class);

    @Schedule(second = "*/5", minute = "*", hour = "*", persistent = false)
    public void cleanup() {
        logger.warn("Schedule Timer fired - " + new Date());
    }

    @PostConstruct
    public void startup() {
        logger.warn("I AM IN STARTUP()");
    }
}

我的日志文件显示记录器没有任何问题,因为 "I AM IN STARTUP()" 打印正常。但是,预定的方法永远不会 运行.

我尝试创建一个 Timer,使用:

@Resource
private TimerService timerService;

@PostConstruct
public void startup() {
    logger.warn("I AM IN STARTUP()");
    timerService.createIntervalTimer(0, 5000, new TimerConfig());
}

@Timeout
public void sayHello() {
    logger.warn("Timeout from timer "+new Date());
}

但服务器似乎也不喜欢这样,我得到 JBAS014239:定时器服务已被禁用。请在服务器配置的 ejb 部分添加一个条目以启用它。 如何每五秒将标记为 @Schedule 的方法获取到 运行?

编辑:我使用 JBoss 6.4

正如@spa 提到的那样,问题是我的配置缺少必要的依赖项。 @Schedule-注释使用 timer-service,因此我需要将以下内容添加到我的 standalone.xml:

<timer-service thread-pool-name="default">
    <data-store path="timer-service-data" relative-to="jboss.server.data.dir"/>
</timer-service>

没有依赖项,它会默默地失败,使问题很难找到。