我使用EJB Timer
任务对database
执行定期服务查询,并在特定时间段内将更新发送给客户端。此期间由客户定义。
我将客户request
传递给ejb
timer
stateless
session bean
。 request
存储为instance variable
。
当我通过JNDI调用计时器任务时,我将客户端请求设置为此instance variable
,并在timerService.createTimer()
调用之前将其设置为可用。但是当@Timeout发生时,instance variable
为null
。
我需要此客户端请求来执行数据库查询以查找请求参数。
@Stateless
public class PeriodicService implements TimerRemote{
@Override
public void initializeTimer(Date firstDate, long timeout, String info) throws RemoteException {
try {
// below line show the request is not null.
System.out.println("request in initializeTimer "+this.request);
// create onetime service now.
timerService.createTimer(firstDate, info);
log.info("Timer created at " + firstDate + " with info: " + info);
} catch (Exception e) {
log.fatal("Exception after create timer : "+ e.toString());
e.printStackTrace();
}
}
@Timeout
public void ejbTimeout(Timer arg0) {
// below line show the requst as null
log.debug("Request in ejbTimeout "+this.request);
}
public void setRequest(IVEFRequest request) {
this.request = request;
}
private IVEFRequest request = null;
}
我是EJB
的新手。我这样做有些不对劲吗?或者我如何在cancel/stop
timer
答案 0 :(得分:1)
您可以尝试以下代码,无需创建单独的实例变量。
在创建计时器时提供您希望在超时方法中接收的对象。
timerService.createTimer(firstDate, request);
然后,在定时器创建时传递的timeout方法中获取对象。
(IVEFRequest)arg0.getInfo();