如何创建一个每6秒运行一次的作业,并在执行应用程序部署时自动开始工作?
目前,我有一个使用计时器的类,但在启动部署时,进程不会自动启动。
所有这些都与JBoss4.3中的EJB 3.0和没有WAR的EAR有关,只有EJB
@Stateless
public class MyJobBean implements MyJob {
private static final long EJECUTION_INTERVAL=6000;
@Resource
private TimerService ts;
@PostConstruct // This not work in deploy, only when somebody calls the EJB
public void init() {
System.out.println("Post Constructor Method init() Invoked");
ts.createTimer(EJECUTION_INTERVAL, null);
}
@Timeout // Fired by the timer
public void myJOBProcess(Timer timer) {
System.out.println("the job was invoked");
ts.createTimer(EJECUTION_INTERVAL, null); //create another future ejecution
}
@PreDestroy
public void tidyUp() {
System.out.println("Canceling scheduled Timers");
for (Object obj : ts.getTimers()) {
Timer timer = (Timer)obj;
timer.cancel();
System.out.println("Timer Canceled");
}
}
}
提前感谢
在JBoss中,您可以使用MBean,MBean是通过用@Service
注释服务来定义的。如果存在public void start()
方法,则在启动应用程序时将调用该方法。
Servlet侦听器或启动时加载Servlet是唯一一种javaee可移植的方式,可以在部署到EJB3.1时使用@Schedule注释自动运行一些代码。