private void removeRepository(String instanceName) throws IOException, InterruptedException, InvalidSyntaxException {
Configuration[] configs = listConfigurations("(factory.instance.pid=" + instanceName + ")");
if ((configs != null) && (configs.length > 0)) {
final Semaphore sem = new Semaphore(0);
ServiceTracker<Object, Object> tracker = new ServiceTracker<Object, Object>(m_bundleContext, m_bundleContext.createFilter("(factory.instance.pid=" + instanceName + ")"), null) {
@Override
public void removedService(ServiceReference<Object> reference, Object service) {
super.removedService(reference, service);
sem.release();
}
};
tracker.open();
try {
configs[0].delete();
if (!sem.tryAcquire(1, TimeUnit.SECONDS)) {
throw new IOException("Instance did not get removed in time.");
}
}
finally {
tracker.close();
}
}
}
|