2013-04-24 49 views
0

在我正在处理的项目中,我需要显示与bean关联的定时器列表并显示关于它们的信息。需要的选项之一是激发与列表中特定定时器关联的事件。我还没有找到一种方法来获得一个计时器的回调,所以任何帮助将不胜感激。获取javax.ejb.Timer的回调

眼下计时器都被通过注释创建像这样:

@Schedule(second = "0", minute = "0", hour = "*") 
public void someMethod() 
{ 
    //Some code here 
} 

这让我所有的信息在计时器的方法是这样的:

public ArrayList<SchedulerInfoModel> getTimers() 
{ 
    ArrayList<SchedulerInfoModel> timerInfo = new ArrayList<SchedulerInfoModel>(); 

    Collection<Timer> timers = timerService.getTimers(); 
    for (Iterator<Timer> it = timers.iterator(); it.hasNext();) 
    { 
     Timer timer = it.next(); 
     timerInfo.add(new SchedulerInfoModel(timer.getInfo().toString(), timer.getNextTimeout().toString(), timer.getSchedule().toString())); 
    } 

    return timerInfo; 
} 

凡SchedulerInfoModel是一个简单的POJO:

public class SchedulerInfoModel 
{ 
    private String info; 
    private String timeout; 
    private String schedule; 

    //getter/setters omitted for brevity 
} 

所以问题是,有没有办法得到一个计时器的回调?或者,如果这是不可能的,是否有任何方式可以“强制”计时器被触发而不影响未来的超时?

回答

0

你是否试图获得与Timer相关的Method对象?不,没有标准的方法来做到这一点。我的建议是将一些信息嵌入到信息对象中。

也没有办法迫使计时器发射。最接近的是使超时回调方法也成为一种业务方法,然后直接调用该方法。

+1

感谢您的回答,这就是我在此期间所做的。我将该方法的名称包含在信息中,然后在需要时将其恢复,并使用反射来激发该方法。这感觉就像一个黑客,因此,这个问题。不管怎么说,还是要谢谢你! – Zeratul2k 2013-04-26 20:25:29

+0

是的,那正是我所建议的。很高兴它的工作。 – 2013-04-26 20:28:01