use of org.apache.aries.application.management.spi.framework.BundleFramework in project aries by apache.
the class BundleFrameworkManagerImpl method uninstallBundle.
public void uninstallBundle(Bundle b) throws BundleException {
synchronized (BundleFrameworkManager.SHARED_FRAMEWORK_LOCK) {
BundleFramework framework = getBundleFramework(b);
if (framework != null) {
for (Bundle bundle : new ArrayList<Bundle>(framework.getBundles())) {
framework.uninstall(bundle);
}
BundleContext ctx = framework.getIsolatedBundleContext();
ServiceReference ref = ctx.getServiceReference(PackageAdmin.class.getName());
if (ref != null) {
try {
PackageAdmin pa = (PackageAdmin) ctx.getService(ref);
if (pa != null) {
final Semaphore sem = new Semaphore(0);
FrameworkListener listener = new FrameworkListener() {
public void frameworkEvent(FrameworkEvent event) {
if (event.getType() == FrameworkEvent.PACKAGES_REFRESHED) {
sem.release();
}
}
};
ctx.addFrameworkListener(listener);
pa.refreshPackages(null);
try {
sem.tryAcquire(60, TimeUnit.SECONDS);
} catch (InterruptedException ie) {
}
ctx.removeFrameworkListener(listener);
}
} finally {
ctx.ungetService(ref);
}
}
framework.close();
// clean up our maps so we don't leak memory
_frameworks.remove(b);
Iterator<BundleFramework> it = _frameworksByAppScope.values().iterator();
while (it.hasNext()) {
if (it.next().equals(framework))
it.remove();
}
}
}
}
use of org.apache.aries.application.management.spi.framework.BundleFramework in project aries by apache.
the class BundleFrameworkFactoryImpl method createBundleFramework.
public BundleFramework createBundleFramework(BundleContext bc, BundleFrameworkConfiguration config) throws BundleException {
BundleFramework framework = null;
ServiceReference sr = bc.getServiceReference(CompositeBundleFactory.class.getName());
if (sr != null) {
CompositeBundleFactory cbf = (CompositeBundleFactory) bc.getService(sr);
CompositeBundle compositeBundle = cbf.installCompositeBundle(config.getFrameworkProperties(), config.getFrameworkID(), config.getFrameworkManifest());
framework = new BundleFrameworkImpl(compositeBundle);
} else
throw new BundleException("Failed to obtain framework factory service");
return framework;
}
Aggregations