docs: public void revokeService(Class serviceClass, BeanContextServiceProvider serviceProvider, boolean revokeCurrentServicesNow)
  	{
  		if (serviceClass == null || serviceProvider == null)
  		{
  			throw new NullPointerException();
  		}
  
  		synchronized (globalHierarchyLock)
  		{
  			synchronized (services)
  			{
  				BCSSServiceProvider bcssProvider = (BCSSServiceProvider) services.get(serviceClass);
  				if (bcssProvider == null)
  				{ // non-exist service
  					return;
  				}
  				if (bcssProvider.getServiceProvider() != serviceProvider)
  				{
  					throw new IllegalArgumentException(Messages.getString("beans.66"));
  				}
  
  				services.remove(serviceClass);
  
  				if (serviceProvider instanceof Serializable)
  				{
  					serializable--;
  				}
  			}
  		}
  
  		// notify listeners
  		fireServiceRevoked(serviceClass, revokeCurrentServicesNow);
  
  		// notify service users
  		notifyServiceRevokedToServiceUsers(serviceClass, serviceProvider, revokeCurrentServicesNow);
  	}