import org.osgi.framework.BundleContext;
import org.osgi.framework.PackageAdmin;
import org.osgi.framework.ServiceReference;
public class ModuleManager {
private BundleContext bundleContext;
private PackageAdmin packageAdmin;
public void start() {
ServiceReference packageAdminRef = bundleContext.getServiceReference(PackageAdmin.class.getName());
packageAdmin = (PackageAdmin) bundleContext.getService(packageAdminRef);
packageAdmin.resolveBundles(null);
checkDependencies();
}
private void checkDependencies() {
Bundle[] bundles = bundleContext.getBundles();
for (Bundle bundle : bundles) {
RequiredBundle[] dependencies = packageAdmin.getRequiredBundles(bundle.getSymbolicName());
for (RequiredBundle dependency : dependencies) {
if (!dependency.isRemovalPending() && dependency.getBundle() == null) {
packageAdmin.resolveBundles(new Bundle[]{dependency.getBundle()});
}
}
}
}
public void stop() {
bundleContext.ungetService(bundleContext.getServiceReference(PackageAdmin.class.getName()));
}
}