EJB定时器

版权声明:The beautiful thing about learning is nobody can take it away from you. https://blog.csdn.net/xiuye2015/article/details/50532861
package remote;

import javax.ejb.Remote;
import javax.ejb.Timer;

@Remote
public interface TimerEJB {

	void setTime(java.util.Date init,long interval);
	
	void check(Timer timer);
	
}
package stateless;

import java.util.Date;

import javax.annotation.Resource;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerService;

import remote.TimerEJB;

@Stateless(mappedName="timerEJBBean")
public class TimerEJBBean implements TimerEJB{

	@Resource
	private TimerService timerService;
	
	@Resource
	private SessionContext context;
	
	

	@Override
	public void setTime(Date init, long interval) {
		
		System.out.println(timerService);
		
		timerService.createTimer(init, interval,"新的定时器");
		//this.context.getTimerService().createTimer(init, interval,"新的定时器");
		
	}

	@Timeout
	@Override
	public void check(Timer timer) {
		
		
		System.out.println("定时器消息:"+timer.getInfo());
		
		System.out.println("模拟系统检查");
                timer.cancel();
	}

	
	
}
package ejb.client.test;

import java.util.Date;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;

import remote.TimerEJB;
import stateless.TimerEJBBean;

public class TimerejbClient {

	public static void main(String[] args) {
		
		
		try{
			
			Properties props = new Properties();
			
			props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
			
			InitialContext ctx = new InitialContext(props);
			
			TimerEJB timerejb = (TimerEJB) ctx.lookup("ejb:"
					+ "/timerejb/TimerEJBBean!remote.TimerEJB");
			
			//timerejb.setTime(new Date()	, 1000);
			timerejb.setTime(new Date(), 10000);
			
			ctx.close();
			
		}
		catch(Exception e){
			
			e.printStackTrace();
			
			
		}
		
		
	}
	
}






EJB定时器问题

03-29

我在EJB容器内创建一个定时器rn public void scheduleTimer(long milliseconds) rn rn /*rn * 调用ctx.getTimerService().createTimer(Date arg0, long arg1,rn * Serializable arg2)方法创建定时器,三个参数的含义如下:Date arg0 rn * 定时器启动时间,如果传入时间小于现在时间,定时器会立刻启动。long arg1rn * 间隔多长时间后再次触发定时事件。单位:毫秒Serializable arg2 你需要rn * 传给定时器的参数,该参数必须实现Serializable接口。rn */rn ctx.getTimerService().createTimer(new Date(new Date().getTime() + milliseconds),milliseconds, "");rn rn rn @Timeoutrn /**rn * 定时器方法rn * 定时器方法的声明很简单,只需在方法上面加入@Timeout 注释,另外定时器方法rn * 必须遵守如下格式:void XXX(Timer timer)在定时事件发生时,此方法将被执行.rn * @param timerrn * @return Voidrn */rn public void timeoutHandler(Timer timer) rnrn rnrn定时器回调timeoutHandler方法,假设定时器每隔5分钟去执行一次,去执行回调方法,假设定时器每隔5分钟去设备上面采集数据,但是第一次没有采集来,于是我设置一个时间间隔比如说5秒钟,再去设备上面采一次数据。连续采集三次,如果还是没有采集来数据,定时器销毁。rn就类似于线程,我让线程sleep()一下,然后再去执行,但是我不知道在EJB容器中应该怎么实现我这里的功能。rn请大侠帮忙!!!!

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试