用EJB3.0实现定时服务,并提供实现取消所有已启动的服务。
远程接口
package examples.timer.remote;
/**
*@Project:[SayHello]
*@Package:[examples.timer.remote]
*@Class:[TimerService.java]
*@author: lhc
*@time:2012-2-19 下午12:19:04
*@version: 1.0.0
*@Copy:2012 y_rich
*/
public interface TimerService
{
public void scheduleTimer(long milliseconds);
public boolean cancelTimer();
}
实现
package examples.timer.Intface;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import javax.annotation.Resource;
import javax.ejb.Remote;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import examples.timer.remote.TimerService;
/**
*@Project:[SayHello]
*@Package:[examples.timer.Inface]
*@Class:[TimerServiceBean.java]
*@author: lhc
*@time:2012-2-19 下午12:20:49
*@version: 1.0.0
*测试EJB中构造函数和调用次数的关系
*/
@Stateless
@Remote ({TimerService.class})
public class TimerServiceBean implements TimerService
{
private @Resource SessionContext ctx;
protected EntityManager em; //实体管理实例
protected Timer timer = null;
public TimerServiceBean()
{
}
public void scheduleTimer(long milliseconds)
{
//创建为间隔定时器
ctx.getTimerService().createTimer(new Date(new Date().getTime()),milliseconds, "Hello world... ...");
}
/**
* @param timer
* 定期处理离线设备
*/
@Timeout
public void timeoutHandler(Timer timer)
{
System.out.println("Hello world from Timer!");
}
@Override
public boolean cancelTimer()
{
int iterTimersSize = ctx.getTimerService().getTimers().size();
if (iterTimersSize > 0)
{
Iterator iterTimers = ctx.getTimerService().getTimers().iterator();
System.out.println("Timer number -> "+ iterTimersSize);
while(iterTimers.hasNext())
{
this.timer = (Timer) iterTimers.next();
this.timer.cancel();
}
return true;
}
else
{
return false;
}
}
}
测试程序
package examples.timer.Inface;
import java.util.Date;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import examples.timer.remote.TimerService;
public class TaskClient
{
public static void main(String[] args)
{
Hashtable evn = new Hashtable();
evn.put(Context.PROVIDER_URL, "127.0.0.1:1099");
evn.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
try
{
System.out.println(new Date().getTime());
InitialContext ctx=new InitialContext(evn);
TimerService timer = (TimerService) ctx.lookup("TimerServiceBean/remote");
// timer.scheduleTimer((long)1000*2);
System.out.println(timer.cancelTimer());
System.out.println("定时器已经启动");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
希望对大家有一点帮助,哈哈。