code: public Request releaseRequest(Thread thread) {
  		int threadId = thread.hashCode();
  
  		synchronized (requestsByThreadId) {
  			StandardRequest request = (StandardRequest) requestsByThreadId.get(threadId);
  			if (request != null) {
  				if (request.getTimesEntered() > 0) {
  					request.decreaseTimesEntered();
  				} else {
  					requestsByThreadId.remove(threadId);
  				}
  				return request;
  			}
  		}
  		return null;
  	}
docs: Removes a specific bound thread from the list so that it no longer points to a specific request.
  This method should be invoked at the point where a (stateless) request leaves the application
  If the thread was not released, a following request with an unbound thread would still be bound
  to this request.
  Some application (server)s constantly construct new threads, so cleaning up is necessary.
  <p/>
  Note: If a thread has been bound to a request multiple times,
  for instance when entry points are wrapped,
  a thread must be released as many times before it's released definitely.
  
  @return a request which has been found bound to the current thread