Jboss TimerService定时器丢失而未被触发

时间:2012-02-19 00:05:11

标签: java java-ee jboss ejb-3.0 timer-jobs

我正在尝试使用JBOSS 4.3的计时器而不是使用Java Sun 1.6的RedHat Linux,计时器已创建但从未被解雇

Mi Class是

@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class MyTimerBean implements MyTimer,TimedObject {
private static final Logger logger = Logger.getLogger(MyTimer.class);

@Resource
private TimerService ts;

@Resource
private SessionContext ctx;
private TimerService ts2;

Timer y;

private String miString=null;
public void startTimer() throws NamingException { 
    logger.debug("DRFXML starting.."); 
    miString="Timers exists";
    Timer x = ts.createTimer( 6000L, null);
    logger.debug("DRFXML 1.Next Timeout "+x.getNextTimeout());
    x = ts.createTimer( 36000L, null);
    logger.debug("DRFXML 2.Next Timeout "+x.getNextTimeout());
    x = ts.createTimer( 1036000L, null);
    logger.debug("DRFXML 3.Next Timeout "+x.getNextTimeout());
    x= ts.createTimer(15000, null);
    logger.debug("DRFXML 4.Next Timeout "+x.getNextTimeout());

    ts2 = ctx.getTimerService();
    y = ts2.createTimer(30000, "Another");  
    logger.debug("DRFXML 5.Next Timeout "+y.getNextTimeout());
    this.showTimers();

}

public void showTimers(){
    if (ts.getTimers()==null){
        logger.error("DRFXML Error Timer is null");
    }
    else if (ts.getTimers().size()==0){
        logger.error("DRFXML Error 0 Timers ");
    }else
    {
        logger.debug("DRFXML Timers = "+ts.getTimers().size());
    }

    if (ts2.getTimers()==null){
        logger.error("DRFXML Error Timer2 is null");
    }
    else if (ts2.getTimers().size()==0){
        logger.error("DRFXML Error 0 Timers in TS2 ");
    }else
    {
        logger.debug("DRFXML Timers2 = "+ts2.getTimers().size());
    }

            logger.debug("DRFXML My String="+miString);

    if(y==null){
        logger.debug("DRFXML Error timer is null");
    }
    else{
                    //This line raise the exception
        logger.debug("DRFXML timer y NextTimeout"+y.getNextTimeout());
    }




}

@PreDestroy
public void tidyUp() {
    logger.debug("DRFXML Killing Timers....");
    for (Object obj : ts.getTimers()) {
        Timer timer = (Timer)obj;
        timer.cancel();
        logger.debug("DRFXML Timer Canceled");
    }   
}


@Timeout
public void ejbTimeout(Timer arg0) {
    logger.debug("DRFXML TimeOut!!");
    System.out.println("DRFXML EJBTimeOut!!");
}

}

界面

@Local
public interface MyTimer {
void startTimer() throws NamingException;
@PreDestroy
void tidyUp();
public void showTimers();
}

这是日志

2012-02-18 21:17:44 CLST  DEBUG  DRFXML starting..
2012-02-18 21:17:44 CLST  DEBUG  DRFXML 1.Next Timeout Sat Feb 18 21:17:50 CLST 2012
2012-02-18 21:17:44 CLST  DEBUG  DRFXML 2.Next Timeout Sat Feb 18 21:18:20 CLST 2012
2012-02-18 21:17:44 CLST  DEBUG  DRFXML 3.Next Timeout Sat Feb 18 21:35:00 CLST 2012
2012-02-18 21:17:44 CLST  DEBUG  DRFXML 4.Next Timeout Sat Feb 18 21:17:59 CLST 2012
2012-02-18 21:17:44 CLST  DEBUG  DRFXML 5.Next Timeout Sat Feb 18 21:18:14 CLST 2012
2012-02-18 21:17:44 CLST  DEBUG  DRFXML Timers = 5
2012-02-18 21:17:44 CLST  DEBUG  DRFXML Timers2 = 5
2012-02-18 21:17:44 CLST  DEBUG  DRFXML My String=Timers exists
2012-02-18 21:17:44 CLST  DEBUG  DRFXML timer y NextTimeoutSat Feb 18 21:18:14 CLST 2012

当再次调用showTimers方法时,在同一个EJB中,定时器不存在! :,(

2012-02-18 21:17:46 CLST  DEBUG  DRFXML Error 0 Timers 
2012-02-18 21:17:46 CLST  ERROR  DRFXML Error 0 Timers in TS2 
2012-02-18 21:17:46 CLST  DEBUG  DRFXML My String=Timers exists

Caused by: javax.ejb.NoSuchObjectLocalException: Timer was canceled
    at org.jboss.ejb.txtimer.TimerImpl.assertTimedOut(TimerImpl.java:402)
    at org.jboss.ejb.txtimer.TimerImpl.getNextTimeout(TimerImpl.java:257)
    at cl.walmart.presto.ti.servicios.solicitud.beans.RescataXmlFirmadoBean.showTimers(RescataXmlFirmadoBean.java:77)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

你可以看到“My String”存在,是同一个EJB !!

为什么我的“计时器被取消了?”

注意: 在我的电脑中的Jboss Local中,代码可以工作,但在Linux中使用redhat无法正常工作! >:OC

先谢谢

0 个答案:

没有答案