private void register(BundleRegistration reg) throws BundleException { String hostBundleId = getFragmentHost(reg); if (hostBundleId != null) { BundleRegistration host = bundles.get(hostBundleId); if (host == null) { reg.addUnresolvedDependency(hostBundleId); } } if (reg.hasUnresolvedDependencies()) { doPostpone(reg); } else { doRegister(reg); } }
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 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); } } }