code: public void releaseService(BeanContextChild child, Object requestor, Object service) {
  
          if (!contains(child)) {
              throw new IllegalArgumentException(child + "is not a child of this context!");
          }
  
          // todo: for multithreaded usage this block needs to be synchronized
          Class serviceClass = findServiceClass(service);
          ServiceProvider sp = _serviceProviders.get(serviceClass);
          sp.removeChildReference(requestor);
  
          // if this is a delegated service, delegate the release request
          // delegated services are removed from the _serviceProviders table
          // as soon as their reference count drops to zero
          if (sp.isDelegated()) {
              BeanContextServices bcs = (BeanContextServices) getBeanContext();
              bcs.releaseService(this, requestor, service);
              if (!sp.hasRequestors()) {
                  _serviceProviders.remove(serviceClass);
              }
          }
          else {
              sp.getBCServiceProvider().releaseService((BeanContextServices)getPeer(), requestor, service);
          }
          // end synchronized
      }
docs: Releases a <code>BeanContextChild</code>'s
  (or any arbitrary object associated with a BeanContextChild)
  reference to the specified service by calling releaseService()
  on the underlying <code>BeanContextServiceProvider</code>.
  
  @param child     the <code>BeanContextChild</code>
  @param requestor the requestor
  @param service   the service