我正在部署一个EJB,它应该设置一个计时器并由它每24小时触发一次.但是我应该在哪里设置计时器?@PostConstruct没有帮助 - 这是一个会话bean,因此在创建实际实例时将调用post-construct方法(这种情况永远不会发生,因为这个bean的唯一目的是跟踪计时器).
有没有其他方法来获取有关bean部署(而不是实例化)的通知,以便在那里设置计时器?
谢谢
EJB 3.1引入了Singleton bean.它将在EJB的deplyoment中创建.
@Singleton
@Startup
public class TimerSessionBean {
@Resource
TimerService timerService;
@PostConstruct
public void startTimer() {
Logger.getLogger(getClass().getName()).log(Level.INFO,
timerService.getTimers().size() + " timers running");
Logger.getLogger(getClass().getName()).log(Level.INFO, "create a timer");
timerService.createTimer(10000, 10000, "a timer");
}
@Timeout
void doSomething(Timer timer) {
System.out.println("something");
}
}
Run Code Online (Sandbox Code Playgroud)
EJB 3.1中可用于定期运行任务的另一个新功能是Schedule注释.
我发现的解决方案很丑陋,但与该问题的任何其他合法解决方案一样丑陋(例如来自@fvu的解决方案)。对 bean应用@WebService注释使得 JBoss 在部署后立即实例化它(因为它需要构造 bean 的 WSDL 的方法),因此@PostConstruct将调用 - 标记的方法。我可以从那里设置计时器。
| 归档时间: |
|
| 查看次数: |
1595 次 |
| 最近记录: |