Example #1
0
  void handleServiceListenerUnreg(Collection /* <ServiceListenerEntry> */ set) {
    if (!isOpen() || listenerHookTracker.size() == 0) {
      return;
    }
    ServiceReference[] srl = listenerHookTracker.getServiceReferences();

    for (int i = 0; srl != null && i < srl.length; i++) {
      ListenerHook lh = (ListenerHook) listenerHookTracker.getService(srl[i]);
      try {
        lh.removed(set);
      } catch (Exception e) {
        fwCtx.debug.printStackTrace(
            "Failed to call listener hook #" + srl[i].getProperty(Constants.SERVICE_ID), e);
      }
    }
  }
Example #2
0
  synchronized void open() {
    if (fwCtx.debug.hooks) {
      fwCtx.debug.println("opening hooks");
    }

    listenerHookTracker =
        new ServiceTracker(
            fwCtx.systemBundle.bundleContext,
            ListenerHook.class.getName(),
            new ServiceTrackerCustomizer() {
              public Object addingService(ServiceReference reference) {
                ListenerHook lh =
                    (ListenerHook) fwCtx.systemBundle.bundleContext.getService(reference);
                try {
                  lh.added(getServiceCollection());
                } catch (Exception e) {
                  fwCtx.debug.printStackTrace(
                      "Failed to call listener hook  #"
                          + reference.getProperty(Constants.SERVICE_ID),
                      e);
                }
                return lh;
              }

              public void modifiedService(ServiceReference reference, Object service) {
                // noop
              }

              public void removedService(ServiceReference reference, Object service) {
                fwCtx.systemBundle.bundleContext.ungetService(reference);
              }
            });

    listenerHookTracker.open();

    bOpen = true;
  }
Example #3
0
  synchronized void close() {
    listenerHookTracker.close();
    listenerHookTracker = null;

    bOpen = false;
  }