[jboss-dev-forums] [EJB3 Development] - Exception thrown while @Timeout is invoked

Arnab Ghosh do-not-reply at jboss.com
Fri Jul 6 23:50:59 EDT 2012


Arnab Ghosh [https://community.jboss.org/people/arnosgh] created the discussion

"Exception thrown while @Timeout is invoked"

To view the discussion, visit: https://community.jboss.org/message/746747#746747

--------------------------------------------------------------
Hi All,

I have implemented a statlessBean with Timer service. The timer is getting created without any issue, but when the @Timeout method is getting invoked I am getting the below excetion:

 ERROR [org.jboss.ejb.txtimer.TimerImpl] (EJB-Timer-ee98a936-c65a-4bbb-b697-93f88ca37f1c[target=jboss.j2ee:ear=app.ear,jar=app.backend.jar,name=AssetCreationCompleteTimer,service=EJB3]) Error invoking ejbTimeout
java.lang.NullPointerException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)
        at org.jboss.ejb3.stateless.StatelessContainer.callTimeout(StatelessContainer.java:682)
        at org.jboss.ejb3.stateless.StatelessContainer.callTimeout(StatelessContainer.java:199)
        at org.jboss.as.ejb3.timerservice.TimedObjectInvokerBridge.callTimeout(TimedObjectInvokerBridge.java:44)
        at org.jboss.ejb.txtimer.TimerImpl$TimerTaskImpl.run(TimerImpl.java:664)
        at java.util.TimerThread.mainLoop(Timer.java:512)
        at java.util.TimerThread.run(Timer.java:462)

My looks like:

@Stateless
@LocalBinding(jndiBinding = "com.app.backend.maintenance.AssetCreationCompleteTimerLocal")
public class AssetCreationCompleteTimer implements AssetCreationCompleteTimerLocal {


  @PersistenceContext(unitName = "unitName")
  private EntityManager entityManager;


  @Resource(mappedName = "java:/JmsXA")
  private QueueConnectionFactory queueConnectionFactory;


  private final Logger log = LoggerFactory.getLogger(getClass());


  @Resource
  private SessionContext sessionContext;


  @Override
  public void scheduleNextExecution(Date dateToExecute, boolean isCancelExisting) {
    TimerService timerService = sessionContext.getTimerService();
    for (Object o : timerService.getTimers()) {
      if (o instanceof Timer) {
        Timer timer = (Timer) o;


        // if current Date is greater than or after the existing timers next run date, cancel inactive timer
        if (new Date().after(timer.getNextTimeout())) {
          timer.cancel();
          continue;
        }


        // if date to schedule next run is less than or before the existing timers next run date, cancel the current timer
        // only if isCancelExisting is set to true. This done to ensure that timers don't get re-scheduled on an earlier date unless specifically intended.
        if (dateToExecute.before(timer.getNextTimeout())) {
          log.info(String.format("%s job is already scheduled for %tc", getClass().getSimpleName(), timer.getNextTimeout()));
          if (isCancelExisting) {
            log.info(String.format("Cancelling the timer for %s which was scheduled to run at %tc ...", getClass().getSimpleName(), timer.getNextTimeout()));
            timer.cancel();
          }
        }
      }
    }


    if (timerService.getTimers().isEmpty()) {
      log.info("Creating Timer with Date {} : Class {}", dateToExecute, getClass().getSimpleName());
      timerService.createTimer(dateToExecute, null);
      log.info("Timer created for Class : {}", getClass().getSimpleName());
    }
  }


  @Timeout
  public void onTimeOut(Timer timer) {
    log.info("Timeout triggered ....");
    Calendar nextRun = Calendar.getInstance();
    nextRun.add(Calendar.MINUTE, 0);
    nextRun.add(Calendar.SECOND, getExecutionIntervalSeconds());
    //String message = String.format("Next execution scheduled for %tc", nextRun);
      log.info("Starting execution of {}", getClass().getSimpleName());
      execute(); // exceute logic
  }
}

My application is deployed in JBOSS 5.1.

Please help.

Regards
Arnab
--------------------------------------------------------------

Reply to this message by going to Community
[https://community.jboss.org/message/746747#746747]

Start a new discussion in EJB3 Development at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2030]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-dev-forums/attachments/20120706/b3e5da41/attachment.html 


More information about the jboss-dev-forums mailing list