未安排使用@Schedule注释的方法

时间:2015-12-28 12:45:24

标签: java java-ee timer ejb-3.1

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

@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

1 个答案:

答案 0 :(得分:0)

正如@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>

如果没有依赖关系,它就会无声地使问题难以找到。