计时器服务:Bean在EJB3.1中没有计时器

时间:2019-04-23 14:19:38

标签: java websphere ejb-3.1

实际上,我正在将应用程序从EJB2.1迁移到EJB3.1。更改应用程序后,调用getTimers()方法时遇到问题。

我正在使用Websphere服务器。

这是我的代码:

@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class TimedRequestBean implements TimedRequestLocal {    
    @Resource
    private SessionContext sessionContext;
    public void cancelTimers() {
            TimerService ts = this.sessionContext.getTimerService();
            Collection timers = ts.getTimers();
            Iterator it = timers.iterator();
            while (it.hasNext()) {
                Timer myTimer = (Timer)it.next();
                myTimer.cancel();
            }
       }
}

日志:

  

javax.ejb.EJBException:请参见嵌套异常;嵌套的异常是:   java.lang.IllegalStateException:计时器服务:Bean没有   计时器:   BeanId(LeadDeliverySystemEAR#timedrequest.jar#TimedRequestBean,null)   java.lang.IllegalStateException:计时器服务:Bean没有   计时器:   BeanId(LeadDeliverySystemEAR#timedrequest.jar#TimedRequestBean,null)     在com.ibm.ejs.container.BeanO.getTimers(BeanO.java:1733)处   com.ford.it.request.async.TimedRequestBean.cancelTimers(TimedRequestBean.java:460)

2 个答案:

答案 0 :(得分:0)

如果尚未声明Bean具有任何计时器,则

TimerService.getTimers()会引发IllegalStateException。为了避免这种情况,bean必须使用@Scheulde声明一个自动计时器,或者使用@Timeout声明编程计时器的超时回调方法(或任一注释的XML等效方法)。

基本上,TimerService对于不可能具有计时器的bean不可访问。由于没有@Timeout方法,因此无法在TimerService上调用任何create方法。同样,由于该bean没有计时器,因此也不允许调用getTimers()

答案 1 :(得分:0)

最后我找到了解决方案。我已经在我的bean中实现了TimedObject接口。这是我的代码。

@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class TimedRequestBean implements TimedRequestLocal, TimedObject {    
    @Resource
    private SessionContext sessionContext;
    public void cancelTimers() {
            TimerService ts = this.sessionContext.getTimerService();
            Collection timers = ts.getTimers();
            Iterator it = timers.iterator();
            while (it.hasNext()) {
                Timer myTimer = (Timer)it.next();
                myTimer.cancel();
            }
       }
}

资料来源:http://itdoc.hitachi.co.jp/manuals/3020/30203Y0610e/EY060069.HTM 我认为这对其他人会有用。