docs: void update() {
          final BundleContext context = componentContext.getBundleContext();
          // determine the service filter to use for discovering the Library service this bell is for
          String libraryRef = library.id();
          // it is unclear if only looking at the id would work here.
          // other examples in classloading use both id and service.pid to look up so doing the same here.
          String libraryStatusFilter = String.format("(&(objectClass=%s)(|(id=%s)(service.pid=%s)))", Library.class.getName(), libraryRef, libraryRef);
          Filter filter;
          try {
              filter = context.createFilter(libraryStatusFilter);
          } catch (InvalidSyntaxException e) {
              // should not happen, but blow up if it does
              throw new RuntimeException(e);
          }
          final Set<String> serviceNames = getServiceNames((String[]) config.get(SERVICE_ATT));
          // create a tracker that will register the services once the library becomes available
          ServiceTracker<Library, List<ServiceRegistration<?>>> newTracker = null;
          newTracker = new ServiceTracker<Library, List<ServiceRegistration<?>>>(context, filter, new ServiceTrackerCustomizer<Library, List<ServiceRegistration<?>>>() {
              @Override
              public List<ServiceRegistration<?>> addingService(ServiceReference<Library> libraryRef) {
                  Library library = context.getService(libraryRef);
                  // Got the library now register the services.
                  // The list of registrations is returned so we don't have to store them ourselves.
                  return registerLibraryServices(library, serviceNames);
              }
  
              @Override
              public void modifiedService(ServiceReference<Library> libraryRef, List<ServiceRegistration<?>> metaInfServices) {
                  // don't care
              }
  
              @Override
              @FFDCIgnore(IllegalStateException.class)
              public void removedService(ServiceReference<Library> libraryRef, List<ServiceRegistration<?>> metaInfServices) {
                  // THe library is going away; need to unregister the services
                  for (ServiceRegistration<?> registration : metaInfServices) {
                      try {
                          registration.unregister();
                      } catch (IllegalStateException e) {
                          // ignore; already unregistered
                      }
                  }
                  context.ungetService(libraryRef);
              }
          });
  
          trackerLock.lock();
          try {
              if (tracker != null) {
                  // close the existing tracker so we unregister existing services
                  tracker.close();
              }
              // store and open the new tracker so we can register the configured services.
              tracker = newTracker;
              tracker.open();
          } finally {
              trackerLock.unlock();
          }
      }