public void shutdown() { BundleRegistration[] regs = bundles.values().toArray(new BundleRegistration[bundles.size()]); for (BundleRegistration reg : regs) { try { if (reg.bundle != null) { reg.bundle.shutdown(); } } catch (BundleException e) { log.error("Failed to stop bundle " + reg.bundle.getSymbolicName(), e); } catch (RuntimeException e) { log.error("Failed to stop bundle " + reg.bundle.getSymbolicName(), e); } } }
public synchronized void uninstall(BundleImpl bundle) throws BundleException { if (bundle.getState() != Bundle.UNINSTALLED) { BundleRegistration reg = bundles.get(bundle.getSymbolicName()); if (reg != null) { unregister(reg); } } }
protected void doPostpone(BundleRegistration reg) { String name = reg.bundle.getSymbolicName(); log.info("Registering unresolved bundle: " + name); bundles.put(name, reg); bundlesById.put(reg.bundle.getBundleId(), reg); for (String dep : reg.waitingFor) { Set<BundleRegistration> regs = pendings.get(dep); if (regs == null) { regs = new HashSet<BundleRegistration>(); pendings.put(dep, regs); } regs.add(reg); } reg.bundle.setInstalled(); }
public synchronized void deployBundle(File file) throws BundleException, IOException { if (!isStarted()) { throw new IllegalStateException("Framework not started"); } if (!file.getPath().endsWith(".jar")) { return; // not a valid bundle } BundleFile bf = file.isDirectory() ? new DirectoryBundleFile(file) : new JarBundleFile(file); try { BundleImpl bundle = new BundleImpl(osgi, bf, loader); if (bundle.getSymbolicName() != null) { osgi.install(bundle); } } catch (NullPointerException t) { // do nothing: may happen with non OSGi manifests // System.out.println("Ignore: "+file); } }
@Override public Bundle installBundle(String location) throws BundleException { File file = new File(location); try { BundleFile bf = file.isDirectory() ? new DirectoryBundleFile(file) : new JarBundleFile(file); BundleImpl b = new BundleImpl(bundle.osgi, bf, bundle.loader); if (b.getSymbolicName() != null) { bundle.osgi.install(b); } return b; } catch (IOException e) { throw new BundleException("Failed to install bundle at " + location, e); } }
public synchronized void install(BundleImpl bundle) throws BundleException { if (bundle.getState() == Bundle.UNINSTALLED) { BundleRegistration reg = bundles.get(bundle.getSymbolicName()); if (reg == null) { register(new BundleRegistration(bundle)); } else { register(reg); } } }
protected void unregister(BundleRegistration reg) throws BundleException { if (getFragmentHost(reg) == null) { reg.bundle.stop(); } reg.bundle.setUnResolved(); bundles.remove(reg.bundle.getSymbolicName()); bundlesById.remove(reg.bundle.getBundleId()); reg.bundle.setUninstalled(); for (String depOnMe : reg.dependsOnMe) { BundleRegistration depReg = bundles.get(depOnMe); if (depReg != null) { // set to unresolved depReg.bundle.setUnResolved(); } } }
protected void doRegister(BundleRegistration reg) throws BundleException { String name = reg.bundle.getSymbolicName(); log.info("Registering resolved bundle: " + name); bundles.put(name, reg); bundlesById.put(reg.bundle.getBundleId(), reg); reg.bundle.setInstalled(); reg.bundle.setResolved(); String hostBundleId = getFragmentHost(reg); if (hostBundleId != null) { BundleRegistration host = bundles.get(hostBundleId); host.addFragment(reg.bundle.getSymbolicName()); } else { // TODO how to lazy start the bundle? reg.bundle.start(); } // check if there are objects waiting for me Set<BundleRegistration> regs = pendings.remove(name); if (regs != null) { for (BundleRegistration pendingReg : regs) { pendingReg.removeUnresolvedDependency(name); if (!pendingReg.hasUnresolvedDependencies()) { doRegister(pendingReg); } } } }
public static String install(File f) throws IOException, BundleException { BundleFile bf; if (f.isDirectory()) { bf = new DirectoryBundleFile(f); } else { bf = new JarBundleFile(f); } BundleImpl bundle = new BundleImpl(osgi, bf, loader); if (bundle.getState() == 0) { // not a bundle (no Bundle-SymbolicName) return null; } osgi.install(bundle); return bundle.getSymbolicName(); }