定時服務用作在一段特定的時間後執行某段程序
使用容器對象SessionContext創建定時器,並使用@Timeout 註釋聲明定時器方法
通過依賴注入@Resource SessionContext ctx,獲得SessionContext對象,調用ctx.getTimerService().createTimer(Date arg0, long arg1, Serializable arg2)方法創建定時器,
當定時器創建完成後,還需聲明定時器方法。定時器方法的聲明很簡單,只需在方法上面加入@Timeout 註釋
package ejb;
public interface TimerTest {
public void schedule(long m);
}
package ejb;
import javax.ejb.Stateless;
import javax.ejb.Remote;
import javax.ejb.SessionContext;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.annotation.Resource;
import Java.util.Date;
import ejb.TimerTest;
@Remote(TimerTest.class)
public @Stateless class TimerTestBean implements TimerTest {
private @Resource SessionContext ctx;
private int count = 0;
public void schedule(long m){
ctx.getTimerService().createTimer((new Date(new Date().getTime() + m)),m,"我是一棵蔥!");
}
@Timeout
public void timeoutHandle(Timer timer){
System.out.println(timer.getNextTimeout() + " " + count + " " + timer.getInfo());
count ++;
if(count > 5){
System.out.println("Timer canceled!");
timer.cancel();
System.out.println("Timer canceled!");
}
}
}
客戶端調用EJB服務時激活EJB的timer.
不過,感覺EJB的timer用處不大,還是最好在客戶端啓動定時器,然後定時調用ejb的服務比較好!
歡迎訪問肖海鵬老師的課程中心:http://edu.51cto.com/lecturer/user_id-10053053.html
歡迎加入肖海鵬老師技術交流羣:2641394058(QQ)