org.osgi.framework.ServiceListener#org.osgi.framework.BundleListener源码实例Demo

下面列出了org.osgi.framework.ServiceListener#org.osgi.framework.BundleListener 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

@Test
public void testSetOSGiModelField() throws Exception {
    ServiceReference ref1 = mock(ServiceReference.class);
    ServiceInterface service1 = mock(ServiceInterface.class);
    when(bundleContext.getService(ref1)).thenReturn(service1);
    ServiceReference ref2 = mock(ServiceReference.class);
    ServiceInterface service2 = mock(ServiceInterface.class);
    when(bundleContext.getService(ref2)).thenReturn(service2);

    when(bundleContext.getServiceReferences(ServiceInterface.class.getName(), null)).thenReturn(
            new ServiceReference[] { ref1, ref2 });

    Resource res = mock(Resource.class);

    SetOSGiModel model = factory.getAdapter(res, SetOSGiModel.class);
    assertNull(model);

    verify(bundleContext).registerService(eq(Runnable.class), eq(factory), any(Dictionary.class));
    verify(bundleContext).addBundleListener(any(BundleListener.class));
    verify(bundleContext).registerService(eq(Object.class), any(Object.class), any(Dictionary.class));
    verify(bundleContext).getBundles();
    verify(bundleContext).getBundle();
    verifyNoMoreInteractions(res, bundleContext);
}
 
源代码2 项目: concierge   文件: Concierge.java
/**
 * add a bundle listener.
 * 
 * @param listener
 *            a bundle listener.
 * @see org.osgi.framework.BundleContext#addBundleListener(org.osgi.framework.BundleListener)
 */
public void addBundleListener(final BundleListener listener) {
	checkValid();

	final List<BundleListener> registered = bundleListenerMap.get(this);

	if (registered == null || !registered.contains(listener)) {
		if (listener instanceof SynchronousBundleListener) {
			syncBundleListeners
					.add((SynchronousBundleListener) listener);
		} else {
			bundleListeners.add(listener);
		}
		bundleListenerMap.insert(this, listener);
	}
}
 
源代码3 项目: concierge   文件: BundleGetEntryTest.java
/**
 * This test will add a bundle listener to framework. Within bundle listener
 * it tries to read a resource from bundle when bundle event indicates
 * bundle has been INSTALLED. This is typically used in an extender pattern.
 */
@Test
//@Ignore("Does not work. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=467160")
public void testGetEntryFromBundleListenerInstalledEvent() throws Exception {
	SyntheticBundleBuilder builder = SyntheticBundleBuilder.newBuilder();
	builder.bundleSymbolicName("bundle");
	builder.addFile("plugin.properties", "# props");
	// register a bundle listener
	framework.getBundleContext().addBundleListener(new BundleListener() {
		public void bundleChanged(BundleEvent event) {
			if (event.getType() == BundleEvent.INSTALLED) {
				// get resources from bundle
				URL res1 = event.getBundle().getEntry("/plugin.properties");
				Assert.assertNotNull(res1);
				Assert.assertEquals("# props",
						TestUtils.getContentFromUrl(res1));

			}
		}
	});
	// now trigger install
	bundleUnderTest = installBundle(builder);
}
 
源代码4 项目: concierge   文件: BundleGetEntryTest.java
@Test
public void testGetEntryFromBundleListenerResolverEvent() throws Exception {
	SyntheticBundleBuilder builder = SyntheticBundleBuilder.newBuilder();
	builder.bundleSymbolicName("bundle");
	builder.addFile("plugin.properties", "# props");
	// register a bundle listener
	framework.getBundleContext().addBundleListener(new BundleListener() {
		public void bundleChanged(BundleEvent event) {
			if (event.getType() == BundleEvent.RESOLVED) {
				// get resources from bundle
				URL res1 = event.getBundle().getEntry("/plugin.properties");
				Assert.assertNotNull(res1);
				Assert.assertEquals("# props",
						TestUtils.getContentFromUrl(res1));

			}
		}
	});
	// now trigger install
	bundleUnderTest = installBundle(builder);
}
 
源代码5 项目: knopflerfish.org   文件: Test7.java
public boolean runTest() {
  BundleListener[] listeners = new BundleListener[NUM_LISTENERS];
  for (int i = 0; i < NUM_LISTENERS; i++) {
    listeners[i] = new MyBundleListener();
    bc.addBundleListener(listeners[i]);
  }
  try {
    bundle.stop();
    bundle.start();
  } catch (BundleException e) {
    return false;
  }
    
  for (int i = 0; i < NUM_LISTENERS; i++) {
    bc.removeBundleListener(listeners[i]);
  }
  
  return true;
}
 
源代码6 项目: ACDD   文件: Framework.java
static void notifyBundleListeners(int event, Bundle bundle) {

        if (!syncBundleListeners.isEmpty() || !bundleListeners.isEmpty()) {
            BundleEvent bundleEvent = new BundleEvent(event, bundle);
            BundleListener[] bundleListenerArr = syncBundleListeners.toArray(new BundleListener[syncBundleListeners.size()]);
            for (BundleListener bundleChanged : bundleListenerArr) {
                bundleChanged.bundleChanged(bundleEvent);
            }
            if (!bundleListeners.isEmpty()) {
                bundleListenerArr = bundleListeners.toArray(new BundleListener[bundleListeners.size()]);
                for (BundleListener bundleListener : bundleListenerArr) {
                    bundleListener.bundleChanged(bundleEvent);
                }

            }
        }
    }
 
源代码7 项目: AtlasForAndroid   文件: Framework.java
static void notifyBundleListeners(int i, Bundle bundle) {
    int i2 = 0;
    if (!syncBundleListeners.isEmpty() || !bundleListeners.isEmpty()) {
        BundleEvent bundleEvent = new BundleEvent(i, bundle);
        BundleListener[] bundleListenerArr = (BundleListener[]) syncBundleListeners.toArray(new BundleListener[syncBundleListeners.size()]);
        for (BundleListener bundleChanged : bundleListenerArr) {
            bundleChanged.bundleChanged(bundleEvent);
        }
        if (!bundleListeners.isEmpty()) {
            bundleListenerArr = (BundleListener[]) bundleListeners.toArray(new BundleListener[bundleListeners.size()]);
            while (i2 < bundleListenerArr.length) {
                bundleListenerArr[i2].bundleChanged(bundleEvent);
                i2++;
            }
        }
    }
}
 
源代码8 项目: e4macs   文件: EmacsPlusActivator.java
private void addBundlerListener(BundleContext context) {
	// Listen for our STARTED event
	// Alternatively, we can get the bundle from org.osgi.framework.FrameworkUtil
	context.addBundleListener(new BundleListener() {
		public void bundleChanged(BundleEvent event) {
			String name = event.getBundle().getSymbolicName();
			if (name != null && name.equals(PLUGIN_ID)) {
				switch (event.getType()) {
					case BundleEvent.STARTED:
						bundleStarted();
						break;
					case BundleEvent.UNINSTALLED:
						emacsIds = null;
						break;
					default:
						break;
				}
			}
		}
	});
}
 
源代码9 项目: M2Doc   文件: EclipseClassProvider.java
/**
 * Constructor.
 * 
 * @param context
 *            the {@link BundleContext}
 * @param classLoader
 *            the fall back {@link ClassLoader}
 */
public EclipseClassProvider(BundleContext context, ClassLoader classLoader) {
    super(classLoader);
    this.context = context;
    for (Bundle bundle : context.getBundles()) {
        bundles.put(bundle.getSymbolicName(), bundle);
    }
    listener = new BundleListener() {

        @Override
        public void bundleChanged(BundleEvent event) {
            switch (event.getType()) {
                case BundleEvent.INSTALLED:
                    bundles.put(event.getBundle().getSymbolicName(), event.getBundle());
                    break;

                case BundleEvent.UNINSTALLED:
                    bundles.remove(event.getBundle().getSymbolicName());
                    break;

                default:
                    // nothing to do here
                    break;
            }
        }
    };
    context.addBundleListener(listener);
}
 
源代码10 项目: concierge   文件: Concierge.java
/**
 * clear all traces of a bundle.
 * 
 * @param bundle
 *            the bundle.
 */
void clearBundleTrace(final AbstractBundle bundle) {
	// remove all registered listeners
	if (bundle.registeredFrameworkListeners != null) {
		frameworkListeners.removeAll(bundle.registeredFrameworkListeners);
		bundle.registeredFrameworkListeners = null;
	}
	if (bundle.registeredServiceListeners != null) {
		serviceListeners.removeAll(bundle.registeredServiceListeners);
		bundle.registeredServiceListeners = null;
	}
	final List<BundleListener> bundleListeners = bundleListenerMap
			.get(bundle.context);
	if (bundleListeners != null) {
		bundleListeners.removeAll(bundleListeners);
		syncBundleListeners.removeAll(bundleListeners);
		bundleListenerMap.remove(bundle.context);
	}

	// unregister registered services
	final ServiceReference<?>[] regs = bundle.getRegisteredServices();

	if (regs != null) {
		for (int i = 0; i < regs.length; i++) {
			unregisterService(regs[i]);
			((ServiceReferenceImpl<?>) regs[i]).invalidate();
		}
		bundle.registeredServices = null;
	}

	// unget all using services
	final ServiceReference<?>[] refs = bundle.getServicesInUse();
	if (refs != null) {
		for (int i = 0; i < refs.length; i++) {
			ServiceReferenceImpl<?> ref = ((ServiceReferenceImpl<?>) refs[i]); 
			ref.ungetAllServices(bundle);
		}
	}
}
 
源代码11 项目: concierge   文件: Concierge.java
/**
 * remove a bundle listener.
 * 
 * @param listener
 *            a bundle listener.
 * @see org.osgi.framework.BundleContext#removeBundleListener(org.osgi.framework.BundleListener)
 * 
 */
public void removeBundleListener(final BundleListener listener) {
	checkValid();

	if (bundle == Concierge.this) {
		return;
	}

	(listener instanceof SynchronousBundleListener ? syncBundleListeners
			: bundleListeners).remove(listener);
	bundleListenerMap.remove(this, listener);
}
 
源代码12 项目: knopflerfish.org   文件: Listeners.java
/**
 * Add a bundle listener to the current framework.
 *
 * @param bundle Who wants to add listener.
 * @param listener Object to add.
 */
void addBundleListener(BundleContextImpl bc, BundleListener listener) {
  final ListenerEntry le = new ListenerEntry(bc, listener);
  if (listener instanceof SynchronousBundleListener) {
    secure.checkListenerAdminPerm(bc.bundle);
    synchronized (syncBundleListeners) {
        syncBundleListeners.add(le);
    }
  }
  else {
    synchronized (bundleListeners) {
        bundleListeners.add(le);
    }
  }
}
 
源代码13 项目: knopflerfish.org   文件: Listeners.java
/**
 * Remove bundle listener from current framework. Silently ignore
 * if listener doesn't exist. If listener is registered more than
 * once remove one instances.
 *
 * @param bundle Who wants to remove listener.
 * @param listener Object to remove.
 */
void removeBundleListener(BundleContextImpl bc, BundleListener listener) {
  final ListenerEntry le = new ListenerEntry(bc, listener);
  if (listener instanceof SynchronousBundleListener) {
    synchronized (syncBundleListeners) {
      secure.checkListenerAdminPerm(bc.bundle);
      syncBundleListeners.remove(le);
    }
  } else {
    synchronized (bundleListeners) {
      bundleListeners.remove(le);
    }
  }
}
 
源代码14 项目: knopflerfish.org   文件: Listeners.java
/**
 *
 */
private void bundleChanged(final ListenerEntry le, final BundleEvent evt) {
  try {
    ((BundleListener)le.listener).bundleChanged(evt);
  } catch (final Throwable pe) {
    fwCtx.frameworkError(le.bc, pe);
  }
}
 
源代码15 项目: AtlasForAndroid   文件: BundleContextImpl.java
public void addBundleListener(BundleListener bundleListener) {
    checkValid();
    List list = bundleListener instanceof SynchronousBundleListener ? Framework.syncBundleListeners : Framework.bundleListeners;
    if (this.bundle.registeredBundleListeners == null) {
        this.bundle.registeredBundleListeners = new ArrayList();
    }
    if (!this.bundle.registeredBundleListeners.contains(bundleListener)) {
        list.add(bundleListener);
        this.bundle.registeredBundleListeners.add(bundleListener);
    }
}
 
源代码16 项目: AtlasForAndroid   文件: BundleContextImpl.java
public void removeBundleListener(BundleListener bundleListener) {
    checkValid();
    (bundleListener instanceof SynchronousBundleListener ? Framework.syncBundleListeners : Framework.bundleListeners).remove(bundleListener);
    this.bundle.registeredBundleListeners.remove(bundleListener);
    if (this.bundle.registeredBundleListeners.isEmpty()) {
        this.bundle.registeredBundleListeners = null;
    }
}
 
源代码17 项目: micro-integrator   文件: BundleCheckActivator.java
public void start(final BundleContext bundleContext) throws Exception {

		/*
         * Check for the services that should be deployed before this if there
		 * are any.
		 * if there are such services we wait for such bundles to deploy and
		 * gets the notification
		 * through a service listener.
		 */

        // first check whether there are such services and they have already
        // deployed.
        String pendingBundleName = null;
        final List<Bundle> pendingBundles = new ArrayList<Bundle>();
        for (Bundle bundle : bundleContext.getBundles()) {
            pendingBundleName = (String) bundle.getHeaders().get(DEPLOY_BEFORE);
            if ((pendingBundleName != null) && (pendingBundleName.equals(getName())) &&
                    (bundle.getState() != Bundle.ACTIVE)) {
                // i.e this bundle should be started before the user manager but
                // yet has not started
                pendingBundles.add(bundle);
            }
        }

        if (pendingBundles.isEmpty()) {
            startDeploy(bundleContext);
        } else {
            BundleListener bundleListener = new BundleListener() {
                public void bundleChanged(BundleEvent bundleEvent) {
                    synchronized (pendingBundles) {
                        if (bundleEvent.getType() == BundleEvent.STARTED) {

                            pendingBundles.remove(bundleEvent.getBundle());
                            if (pendingBundles.isEmpty()) {
                                // now start the user manager deployment
                                bundleContext.removeBundleListener(this);
                                try {
                                    startDeploy(bundleContext);
                                } catch (Exception e) {
                                    log.error("Can not start the bundle ", e);
                                }
                            }
                        }
                    }
                }
            };
            bundleContext.addBundleListener(bundleListener);
        }
    }
 
源代码18 项目: netbeans   文件: NetigsoSelfQueryTest.java
public void addBundleListener(BundleListener bl) {
}
 
源代码19 项目: netbeans   文件: NetigsoSelfQueryTest.java
public void removeBundleListener(BundleListener bl) {
}
 
源代码20 项目: netbeans   文件: Netbinox.java
public void removeBundleListener(BundleListener bl) {
    delegate.removeBundleListener(bl);
}
 
源代码21 项目: netbeans   文件: Netbinox.java
public void addBundleListener(BundleListener bl) {
    delegate.addBundleListener(bl);
}
 
源代码22 项目: vespa   文件: ClassLoaderOsgiFramework.java
@Override
public void addBundleListener(BundleListener listener) {
}
 
源代码23 项目: vespa   文件: ClassLoaderOsgiFramework.java
@Override
public void removeBundleListener(BundleListener listener) {
}
 
源代码24 项目: concierge   文件: Concierge.java
/**
 * notify all bundle listeners.
 * 
 * @param state
 *            the new state.
 * @param bundle
 *            the bundle.
 */
void notifyBundleListeners(final int state, final Bundle bundle,
		final Bundle origin) {
	if (syncBundleListeners.isEmpty() && bundleListeners.isEmpty()) {
		return;
	}

	final BundleEvent event = new BundleEvent(state, bundle, origin);

	final SynchronousBundleListener[] syncs;
	final BundleListener[] asyncs;

	// call the hooks, if any
	if (!bundleEventHooks.isEmpty()) {
		final ArrayList<SynchronousBundleListener> syncListeners = new ArrayList<SynchronousBundleListener>(
				syncBundleListeners);
		final ArrayList<BundleListener> asyncListeners = new ArrayList<BundleListener>(
				bundleListeners);

		final ConciergeCollections.DeltaTrackingRemoveOnlyList<BundleContext> contexts = new ConciergeCollections.DeltaTrackingRemoveOnlyList<BundleContext>(
				bundleListenerMap.keySet());

		for (final ServiceReferenceImpl<org.osgi.framework.hooks.bundle.EventHook> sref : bundleEventHooks) {
			final org.osgi.framework.hooks.bundle.EventHook eventHook = sref
					.getService(Concierge.this);
			if (eventHook != null) {
				try {
					eventHook.event(event, contexts);
				} catch (final Throwable t) {
					// TODO: to log?
				}
			}
			sref.ungetService(Concierge.this);
		}

		for (final BundleContext removed : contexts.getRemoved()) {
			if(removed != this.context){ // system bundle contexts listeners always gets events
				for (final BundleListener listener : bundleListenerMap
					.get(removed)) {
					syncListeners.remove(listener);
					asyncListeners.remove(listener);
				}
			}
		}

		syncs = syncListeners.toArray(
				new SynchronousBundleListener[syncListeners.size()]);
		asyncs = asyncListeners
				.toArray(new BundleListener[asyncListeners.size()]);
	} else {
		syncs = syncBundleListeners.toArray(
				new SynchronousBundleListener[syncBundleListeners.size()]);
		asyncs = bundleListeners
				.toArray(new BundleListener[bundleListeners.size()]);
	}

	for (int i = 0; i < syncs.length; i++) {
		syncs[i].bundleChanged(event);
	}

	// asynchronous listeners do not get these events
	final int type = event.getType();
	if (bundleListeners.isEmpty() || (type & (BundleEvent.STARTING
			| BundleEvent.STOPPING | BundleEvent.LAZY_ACTIVATION)) > 0) {
		return;
	}

	for (int i = 0; i < asyncs.length; i++) {
		asyncs[i].bundleChanged(event);
	}
}
 
源代码25 项目: ACDD   文件: OpenAtlas.java
public void addBundleListener(BundleListener bundleListener) {
    Framework.addBundleListener(bundleListener);
}
 
源代码26 项目: ACDD   文件: OpenAtlas.java
public void removeBundleListener(BundleListener bundleListener) {
    Framework.removeBundleListener(bundleListener);
}
 
源代码27 项目: ACDD   文件: Framework.java
static void addBundleListener(BundleListener bundleListener) {
    bundleListeners.add(bundleListener);
}
 
源代码28 项目: ACDD   文件: Framework.java
static void removeBundleListener(BundleListener bundleListener) {
    bundleListeners.remove(bundleListener);
}
 
源代码29 项目: AtlasForAndroid   文件: Atlas.java
public void addBundleListener(BundleListener bundleListener) {
    Framework.addBundleListener(bundleListener);
}
 
源代码30 项目: AtlasForAndroid   文件: Atlas.java
public void removeBundleListener(BundleListener bundleListener) {
    Framework.removeBundleListener(bundleListener);
}