如何获取有关EJB部署的通知(设置计时器)?

Ser*_*nov 9 java ejb ejb-3.0

我正在部署一个EJB,它应该设置一个计时器并由它每24小时触发一次.但是我应该在哪里设置计时器?@PostConstruct没有帮助 - 这是一个会话bean,因此在创建实际实例时将调用post-construct方法(这种情况永远不会发生,因为这个bean的唯一目的是跟踪计时器).

有没有其他方法来获取有关bean部署(而不是实例化)的通知,以便在那里设置计时器?

谢谢

mjn*_*mjn 5

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注释.


Ser*_*nov 1

我发现的解决方案很丑陋,但与该问题的任何其他合法解决方案一样丑陋(例如来自@fvu的解决方案)。对 bean应用@WebService注释使得 JBoss 在部署后立即实例化它(因为它需要构造 bean 的 WSDL 的方法),因此@PostConstruct将调用 - 标记的方法。我可以从那里设置计时器。