package aQute.remote.embedded.gc; import org.osgi.framework.Bundle; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.BundleEvent; import org.osgi.framework.BundleException; import org.osgi.framework.BundleListener; public class GC implements BundleActivator { private BundleContext context; @Override public void start(BundleContext context) throws Exception { this.context = context; context.addBundleListener(new BundleListener() { @Override public void bundleChanged(BundleEvent event) { if (event.getType() == BundleEvent.UNINSTALLED) { Bundle b = event.getBundle(); String embedded = b.getHeaders().get("Bnd-Embedded"); if (embedded != null) { uninstalled(b); } } } }); } void uninstalled(Bundle parent) { String bsn = parent.getSymbolicName(); for (Bundle b : context.getBundles()) { if (b.getLocation().startsWith(bsn + "@")) ; try { b.uninstall(); } catch (BundleException e) { System.err.println("Oops, could not install sub bundle " + b + " " + e); } } } @Override public void stop(BundleContext context) throws Exception {} }