org.osgi.framework.wiring.FrameworkWiring Java Examples

The following examples show how to use org.osgi.framework.wiring.FrameworkWiring. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: FrameworkCommandGroup.java    From knopflerfish.org with BSD 3-Clause "New" or "Revised" License 6 votes vote down vote up
public int cmdRefresh(Dictionary<String,?> opts, Reader in, PrintWriter out,
                      Session session) {
  final Bundle systemBundle = bc.getBundle(0);
  final FrameworkWiring frameworkWiring =
    systemBundle.adapt(FrameworkWiring.class);

  final List<Bundle> bundles = new ArrayList<Bundle>();
  final String[] bs = (String[]) opts.get("bundle");
  if (bs != null) {
    final Bundle[] b = getBundles(bs, true);
    for (final Bundle element : b) {
      if (element != null) {
        bundles.add(element);
      }
    }
    if (bundles.isEmpty()) {
      out.println("ERROR! No matching bundle");
      return 1;
    }
    frameworkWiring.refreshBundles(bundles);
  } else {
    frameworkWiring.refreshBundles(null);
  }
  return 0;
}
 
Example #2
Source File: DirDeployerImpl.java    From knopflerfish.org with BSD 3-Clause "New" or "Revised" License 6 votes vote down vote up
/**
 * Do a refresh bundles operation on all bundles that has been updated since
 * the last call.
 */
void refreshUpdatedBundles()
{
  if (!refreshRunning && DeployedBundle.updatedBundles.size() > 0) {
    synchronized (DeployedBundle.updatedBundles) {
      log("Bundles has been updated; refreshing "
          + DeployedBundle.updatedBundles);
      refreshRunning = true;

      final FrameworkWiring fw =
        Activator.bc.getBundle(0).adapt(FrameworkWiring.class);
      fw.refreshBundles(DeployedBundle.updatedBundles, this);
      // Refresh request sent, clear before releasing monitor.
      DeployedBundle.updatedBundles.clear();
    }
  }
}
 
Example #3
Source File: DirDeployerImpl.java    From knopflerfish.org with BSD 3-Clause "New" or "Revised" License 6 votes vote down vote up
/**
 * Do a refresh bundles operation on all bundles that has been updated since
 * the last call.
 */
void refreshUpdatedBundles()
{
  if (!refreshRunning && DeployedBundle.updatedBundles.size() > 0) {
    synchronized (DeployedBundle.updatedBundles) {
      log("Bundles has been updated; refreshing "
          + DeployedBundle.updatedBundles);
      refreshRunning = true;

      final FrameworkWiring fw =
        Activator.bc.getBundle(0).adapt(FrameworkWiring.class);
      fw.refreshBundles(DeployedBundle.updatedBundles, this);
      // Refresh request sent, clear before releasing monitor.
      DeployedBundle.updatedBundles.clear();
    }
  }
}
 
Example #4
Source File: SystemBundle.java    From knopflerfish.org with BSD 3-Clause "New" or "Revised" License 6 votes vote down vote up
@Override
@SuppressWarnings("unchecked")
public <A> A adapt(Class<A> type)
{
  secure.checkAdaptPerm(this, type);
  Object res = null;
  if (FrameworkWiring.class.equals(type)) {
    res = fwWiring;
  } else if (FrameworkStartLevel.class.equals(type)) {
    if (fwCtx.startLevelController != null) {
      res = fwCtx.startLevelController.frameworkStartLevel();
    }
  } else if (Framework.class.equals(type)) {
    res = this;
  } else if (FrameworkStartLevelDTO.class.equals(type)) {
    if (fwCtx.startLevelController != null) {
      res = fwCtx.startLevelController.frameworkStartLevel().getDTO();
    }
  } else if (FrameworkDTO.class.equals(type)) {
    res = getFrameworkDTO();
  } else {
    // TODO filter which adaptation we can do?!
    res = adaptSecure(type);
  }
  return (A) res;
}
 
Example #5
Source File: BundleWiringTestSuite.java    From knopflerfish.org with BSD 3-Clause "New" or "Revised" License 6 votes vote down vote up
public void runTest() throws Throwable {
  buB = Util.installBundle(bc, "bundleB_test-1.0.0.jar");
  assertNotNull(buB);
  FrameworkWiring fw = bc.getBundle(0).adapt(FrameworkWiring.class);
  assertNotNull(fw);
  fw.resolveBundles(Collections.singleton(buB));
  BundleWiring wiring = buB.adapt(BundleWiring.class);
  assertNotNull(wiring);
  Collection resources = wiring.listResources("/", "*.class", 0);
  assertEquals("Class files in top of bundleB_test", 0, resources.size());
  resources = wiring.listResources("/org/knopflerfish/bundle", "*.class",
      BundleWiring.FINDENTRIES_RECURSE);
  assertEquals("Class files in bundleB_test", 2, resources.size());
  resources = wiring.listResources("/", "*.class",
      BundleWiring.FINDENTRIES_RECURSE + BundleWiring.LISTRESOURCES_LOCAL);
  assertEquals("Class files in bundleB_test", 3, resources.size());
  resources = wiring.listResources("org/", null,
      BundleWiring.FINDENTRIES_RECURSE + BundleWiring.LISTRESOURCES_LOCAL);
  assertEquals("All entires in bundleB_test org", 8, resources.size());
  out.println("### framework test bundle :FRAME700A:PASS");
}
 
Example #6
Source File: FrameworkCommandGroup.java    From knopflerfish.org with BSD 3-Clause "New" or "Revised" License 6 votes vote down vote up
public int cmdResolve(Dictionary<String,?> opts, Reader in, PrintWriter out,
                      Session session) {
  final Bundle systemBundle = bc.getBundle(0);
  final FrameworkWiring frameworkWiring =
    systemBundle.adapt(FrameworkWiring.class);

  final List<Bundle> bundles = new ArrayList<Bundle>();
  final String[] bs = (String[]) opts.get("bundle");
  Bundle[] b = null;
  if (bs != null) {
    b = getBundles(bs, true);
    for (final Bundle element : b) {
      if (element != null) {
        bundles.add(element);
      }
    }
    if (b.length == 0) {
      out.println("ERROR! No matching bundle");
      return 1;
    }
    frameworkWiring.resolveBundles(bundles);
  } else {
    frameworkWiring.resolveBundles(null);
  }
  return 0;
}
 
Example #7
Source File: BundleUtils.java    From eclipse.jdt.ls with Eclipse Public License 2.0 6 votes vote down vote up
private static Bundle[] getBundles(String symbolicName, FrameworkWiring fwkWiring) {
	BundleContext context = fwkWiring.getBundle().getBundleContext();
	if (Constants.SYSTEM_BUNDLE_SYMBOLICNAME.equals(symbolicName)) {
		symbolicName = context.getBundle(Constants.SYSTEM_BUNDLE_LOCATION).getSymbolicName();
	}
	StringBuilder filter = new StringBuilder();
	filter.append('(')
		.append(IdentityNamespace.IDENTITY_NAMESPACE)
		.append('=')
		.append(symbolicName)
		.append(')');
	Map<String, String> directives = Collections.singletonMap(Namespace.REQUIREMENT_FILTER_DIRECTIVE, filter.toString());
	Collection<BundleCapability> matchingBundleCapabilities = fwkWiring.findProviders(ModuleContainer.createRequirement(IdentityNamespace.IDENTITY_NAMESPACE, directives, Collections.emptyMap()));
	if (matchingBundleCapabilities.isEmpty()) {
		return null;
	}
	Bundle[] results = matchingBundleCapabilities.stream().map(c -> c.getRevision().getBundle())
			// Remove all the bundles that are uninstalled
			.filter(bundle -> (bundle.getState() & (Bundle.UNINSTALLED)) == 0)
			.sorted((b1, b2) -> b2.getVersion().compareTo(b1.getVersion())) // highest version first
			.toArray(Bundle[]::new);
	return results.length > 0 ? results : null;
}
 
Example #8
Source File: FelixFramework.java    From vespa with Apache License 2.0 6 votes vote down vote up
/**
 * NOTE: This method is no longer used by the Jdisc container framework, but kept for completeness.
 */
@Override
public void refreshPackages() {
    FrameworkWiring wiring = felix.adapt(FrameworkWiring.class);
    final CountDownLatch latch = new CountDownLatch(1);
    wiring.refreshBundles(null,
                          event -> {
                              switch (event.getType()) {
                                  case FrameworkEvent.PACKAGES_REFRESHED:
                                      latch.countDown();
                                      break;
                                  case FrameworkEvent.ERROR:
                                      log.log(Level.SEVERE, "ERROR FrameworkEvent received.", event.getThrowable());
                                      break;
                              }
                          });
    try {
        long TIMEOUT_SECONDS = 60L;
        if (!latch.await(TIMEOUT_SECONDS, TimeUnit.SECONDS)) {
            log.warning("No PACKAGES_REFRESHED FrameworkEvent received within " + TIMEOUT_SECONDS +
                                " seconds of calling FrameworkWiring.refreshBundles()");
        }
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
}
 
Example #9
Source File: BundleUtils.java    From eclipse.jdt.ls with Eclipse Public License 2.0 6 votes vote down vote up
private static void refreshBundles(Set<Bundle> toRefresh, FrameworkWiring frameworkWiring) {
	if (!toRefresh.isEmpty()) {
		JavaLanguageServerPlugin.logInfo("Refresh the bundles");
		final CountDownLatch latch = new CountDownLatch(1);
		frameworkWiring.refreshBundles(toRefresh, new FrameworkListener() {
			@Override
			public void frameworkEvent(FrameworkEvent event) {
				if (event.getType() == FrameworkEvent.PACKAGES_REFRESHED) {
					latch.countDown();
				} else if (event.getType() == FrameworkEvent.ERROR) {
					JavaLanguageServerPlugin.logException("Error happens when refreshing the bundles", event.getThrowable());
					latch.countDown();
				}
			}
		});
		try {
			latch.await();
		} catch (InterruptedException e) {
			JavaLanguageServerPlugin.logException("InterruptedException happened when refreshing", e);
		}
		JavaLanguageServerPlugin.logInfo("Finished Refreshing bundles");
	}
}
 
Example #10
Source File: Desktop.java    From knopflerfish.org with BSD 3-Clause "New" or "Revised" License 5 votes vote down vote up
void refreshBundles(final Bundle[] b)
{
  final Bundle systemBundle = Activator.getTargetBC().getBundle(0);
  final FrameworkWiring fw = systemBundle.adapt(FrameworkWiring.class);

  if (fw != null) {
    final ArrayList<Bundle> bundles = new ArrayList<Bundle>();
    final boolean refreshAll = b == null || 0 == b.length;
    final StringBuffer sb = new StringBuffer("Desktop-RefreshPackages ");
    if (refreshAll) {
      sb.append("all packages pending removal");
    } else {
      sb.append("bundle packages for ");
      for (int i = 0; i < b.length; i++) {
        if (i > 0) {
          sb.append(", ");
        }
        sb.append(b[i].getBundleId());
        bundles.add(b[i]);
      }
    }

    final FrameworkListener refreshListener = new FrameworkListener() {

      @Override
      public void frameworkEvent(FrameworkEvent event)
      {
        Activator.log.info(sb.toString() + " DONE.");
      }
    };

    try {
      fw.refreshBundles(bundles, refreshListener);
    } catch (final Exception e) {
      showErr(sb.toString() + " failed to refresh bundles: " + e, e);
    }
  }
}
 
Example #11
Source File: CapabilityTestSuite.java    From knopflerfish.org with BSD 3-Clause "New" or "Revised" License 5 votes vote down vote up
public void runTest() throws Throwable {
  fw = bc.getBundle(0).adapt(FrameworkWiring.class);
  FrameworkListener fl = new FrameworkListener() {
    @Override
    public void frameworkEvent(FrameworkEvent event) {
      synchronized (this) {
        notifyAll();
      }
    }
  };
  try {
    synchronized (fl) {
      fw.refreshBundles(null, fl);
      fl.wait(3000);
    }
    buCUC1 = Util.installBundle(bc, "bundleCUC1_test-1.0.0.jar");
    assertNotNull(buCUC1);
    buCUC2 = Util.installBundle(bc, "bundleCUC2_test-2.0.0.jar");
    assertNotNull(buCUC2);
    buCUP1 = Util.installBundle(bc, "bundleCUP1_test-1.0.0.jar");
    assertNotNull(buCUP1);
    buCUP2 = Util.installBundle(bc, "bundleCUP2_test-2.0.0.jar");
    assertNotNull(buCUP2);
  } catch (Exception e) {
    fail("Failed to refresh packages: " + e);
  }
}
 
Example #12
Source File: AbstractConciergeTestCase.java    From concierge with Eclipse Public License 1.0 4 votes vote down vote up
/**
 * Enforce to call resolve bundle in Concierge framework for the specified
 * bundle.
 */
protected void enforceResolveBundle(final Bundle bundle) {
	// initiate resolver
	framework.adapt(FrameworkWiring.class)
			.resolveBundles(Collections.singleton(bundle));
}
 
Example #13
Source File: FrameworkCommandGroup.java    From knopflerfish.org with BSD 3-Clause "New" or "Revised" License 4 votes vote down vote up
public int cmdPending(Dictionary<String, ?> opts,
                      Reader in,
                      PrintWriter out,
                      Session session)
{
  final boolean doDetailed = opts.get("-l") != null;
  final Bundle systemBundle = bc.getBundle(0);
  final FrameworkWiring frameworkWiring =
      systemBundle.adapt(FrameworkWiring.class);

  Collection<Bundle> bundles = frameworkWiring.getRemovalPendingBundles();
  if (bundles.isEmpty()) {
    out.println("No removal pending.");
  } else {
    Bundle[] barr = bundles.toArray(new Bundle[bundles.size()]);
    if (opts.get("-i") != null) {
      Util.sortBundlesId(barr);
    }
    for (final Bundle element : barr) {
      out.println("Bundle: " + showBundle(element));
      if (doDetailed) {
        out.print("  Reason: ");
        final BundleRevisions brs = element.adapt(BundleRevisions.class);
        final List<BundleRevision> revs = brs.getRevisions();
        if (revs.isEmpty()) {
          out.println("Bundle became unused during command execution.");
        } else {
            switch (revs.get(0).getBundle().getState()) {
            case Bundle.INSTALLED:
              out.println("Bundle has been updated.");
              break;
            case Bundle.UNINSTALLED:
              out.println("Bundle has been uninstalled.");
              break;
            default:
              out.println("Bundle has been updated and resolved.");
          }
        }
      }
    }
  }
  return 0;
}
 
Example #14
Source File: ResolverStressTest.java    From concierge with Eclipse Public License 1.0 4 votes vote down vote up
public void run(final BundleContext context) throws BundleException,
		IOException {
	final Bundle[] bundles = new Bundle[NUM];

	long installationTime = 0;

	for (int i = 0; i < NUM; i++) {
		final BundleGenerator gen = new BundleGenerator("bundle" + i,
				new Version(1, 0, i));

		final int dirs = random.nextInt(MAX_IMPORTS_EXPORTS);

		final Set<String> imports = new HashSet<String>();
		final Set<String> exports = new HashSet<String>();

		for (int j = 0; j < dirs; j++) {
			if (random.nextBoolean()) {
				// IMPORT
				final int v1Major = MIN_VERSION_MAJOR
						+ random.nextInt(MAX_VERSION_MAJOR
								- MIN_VERSION_MAJOR + 1);
				final int v2Major = MIN_VERSION_MAJOR
						+ random.nextInt(MAX_VERSION_MAJOR
								- MIN_VERSION_MAJOR + 1);

				final Version v1 = new Version(v1Major, random.nextInt(10),
						random.nextInt(10));

				final Version v2 = new Version(v2Major, random.nextInt(10),
						random.nextInt(10));

				final Version lowerBound = v1.compareTo(v2) < 1 ? v1 : v2;
				final Version upperBound = v1.compareTo(v2) >= 1 ? v1 : v2;

				gen.addPackageImport(drawPackage(imports),
						new VersionRange('[', lowerBound, upperBound, ')'));
			} else {
				// EXPORT
				final Version version = new Version(
						random.nextInt(MAX_VERSION_MAJOR
								- MIN_VERSION_MAJOR + 1),
						random.nextInt(10), random.nextInt(10));

				gen.addPackageExport(drawPackage(exports), version);
			}
		}

		final long t = System.nanoTime();
		bundles[i] = gen.install(context);
		installationTime += (System.nanoTime() - t);
	}

	System.err.println("INSTALLATION TIME " + (installationTime / 1000000));

	final FrameworkWiring fw = context.getBundle(0).adapt(
			FrameworkWiring.class);

	System.err.println("RESOLVING");
	final long time = System.nanoTime();
	fw.resolveBundles(Arrays.asList(bundles));
	System.err.println("RESOLVE TIME " + (System.nanoTime() - time)
			/ 1000000);

}
 
Example #15
Source File: PackageAdminImpl.java    From concierge with Eclipse Public License 1.0 4 votes vote down vote up
/**
 * @see org.osgi.service.packageadmin.PackageAdmin#resolveBundles(org.osgi.framework.Bundle[])
 */
public boolean resolveBundles(final Bundle[] bundles) {
	final FrameworkWiring wiring = getFrameworkWiring();

	return wiring.resolveBundles(bundles == null ? null : Arrays.asList(bundles));
}
 
Example #16
Source File: Desktop.java    From knopflerfish.org with BSD 3-Clause "New" or "Revised" License 4 votes vote down vote up
void resolveBundles(final Bundle[] b)
{
  final Bundle systemBundle = Activator.getTargetBC().getBundle(0);
  final FrameworkWiring fw = systemBundle.adapt(FrameworkWiring.class);

  if (fw != null) {
    final ArrayList<Bundle> bundles = new ArrayList<Bundle>();
    final boolean resolveAll = b == null || 0 == b.length;
    // Must not call resolve() from the EDT, since that will block
    // the EDT.

    final StringBuffer sb = new StringBuffer("Desktop-ResolveBundles: ");
    if (resolveAll) {
      sb.append("all bundles needing to be resolved ");
    } else {
      sb.append("selected bundle(s) ");
      for (int i = 0; i < b.length; i++) {
        if (i > 0) {
          sb.append(", ");
        }
        sb.append(b[i].getBundleId());
        bundles.add(b[i]);
      }
    }

    new Thread(sb.toString()) {
      @Override
      public void run()
      {
        try {
          if (!fw.resolveBundles(bundles)) {
            showErr(sb.toString() + "; could not resolve all of them.", null);
          }
        } catch (final Exception e) {
          showErr(sb.toString() + " failed to resolve bundles: " + e, e);
        }
      }
    }.start();

  }
}
 
Example #17
Source File: PackageAdminImpl.java    From concierge with Eclipse Public License 1.0 4 votes vote down vote up
/**
 * @see org.osgi.service.packageadmin.PackageAdmin#refreshPackages(org.osgi.framework.Bundle[])
 */
public void refreshPackages(final Bundle[] bundles) {
	final FrameworkWiring wiring = getFrameworkWiring();

	wiring.refreshBundles(bundles == null ? null : Arrays.asList(bundles));
}
 
Example #18
Source File: PackageAdminImpl.java    From concierge with Eclipse Public License 1.0 4 votes vote down vote up
private FrameworkWiring getFrameworkWiring() {
	return context.getBundle(0).adapt(FrameworkWiring.class);
}