我正在尝试使用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
答案 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>
如果没有依赖关系,它就会无声地使问题难以找到。