public void handleRequest(R request) {
		boolean success = false;
		int numTries = 0;
		while(!success) {
			success = doHandle(request);
			if(!success) {
				// break chain if number of tries exceeds limit
				if(++numTries >= MAX_TRIES) {
					updateStatus(request, Status.COR_FAILED,"Handler.handleRequest: failure ("+numTries+")in " + this.getClass().getName()+" EXIT");
					return;
				} 
				// sleep some time before trying again
				else {
					updateStatus(request, Status.RUNNING,"Handler.handleRequest: failure ("+numTries+")in " + this.getClass().getName()+" RETRY");
					try{
						Thread.sleep(TIME_TO_WAIT);
					} catch(Exception e) { /* not a problem */ }
				}
			}
		}
		
		if(successor!=null) {
			successor.handleRequest(request);
		} else {
			updateStatus(request, Status.COR_FINISHED, "Chain finished");
		}
	}