code: public void run() {
  
  		final MobicentsSipApplicationSession sipApplicationSession = getApplicationSession();
  		SipContext sipContext = sipApplicationSession.getSipContext();
  		
  		if(logger.isDebugEnabled()) {
  			logger.debug("running Servlet Timer " + id + " for sip application session " + sipApplicationSession);
  		}
  		
  		boolean batchStarted = false;
  		ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
  		try {
  			sipContext.enterSipContext();	
  			sipContext.enterSipApp(sipApplicationSession, null, false, true);
  			batchStarted = sipContext.enterSipAppHa(true);
  			if(isCanceled==false){
  			    listener.timeout(this);
  	         }else{
  	            logger.debug("running Servlet Timer " + id + " for sip application session " + sipApplicationSession + " is cancelled, so we skip its timerListener's timeout() method call!");
  	         }
  		} catch(Throwable t) {
  			logger.error("An unexpected exception happened in the timer callback!",t);
  		} finally {		
  			try {
  				sipContext.exitSipContext(oldClassLoader);
  				if (isRepeatingTimer) {
  					estimateNextExecution();
  				} else {
  					// this non-repeating timer is now "ready"
  					// and should not be included in the list of active timers
  					// The application may already have canceled() the timer though
  					cancel(); // dont bother about return value....
  				}
  				if(logger.isDebugEnabled()) {
  					logger.debug("Servlet Timer " + id + " for sip application session " + sipApplicationSession + " ended");
  				}
  			} finally {
  				sipContext.exitSipAppHa(null, null, batchStarted);
  				sipContext.exitSipApp(sipApplicationSession, null);
  			}
  		}
  
  	}
docs: Method that actually