import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
-import org.osgi.util.tracker.BundleTracker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public final class Activator implements BundleActivator {
+ private static final Logger LOG = LoggerFactory.getLogger(Activator.class);
+
private final List<ServiceRegistration<?>> registrations = new ArrayList<>(2);
- private BundleTracker<?> moduleInfoResolvedBundleTracker = null;
+ private ModuleInfoBundleTracker bundleTracker = null;
private SimpleBindingRuntimeContextService service = null;
@Override
public void start(final BundleContext context) {
+ LOG.info("Binding-DOM codec starting");
+
// XXX: this will use thread-context class loader, which is probably appropriate
final ModuleInfoBackedContext moduleInfoBackedContext = ModuleInfoBackedContext.create();
final OsgiModuleInfoRegistry registry = new OsgiModuleInfoRegistry(moduleInfoBackedContext,
moduleInfoBackedContext, service);
- moduleInfoResolvedBundleTracker = new ModuleInfoBundleTracker(context, registry);
- moduleInfoResolvedBundleTracker.open();
+ LOG.debug("Starting Binding-DOM codec bundle tracker");
+ bundleTracker = new ModuleInfoBundleTracker(context, registry);
+ bundleTracker.open();
+ LOG.debug("Starting Binding-DOM runtime context service");
service.open();
+
+ LOG.debug("Registering Binding-DOM codec services");
registrations.add(context.registerService(BindingRuntimeContextService.class, service, null));
registrations.add(context.registerService(ClassLoadingStrategy.class, moduleInfoBackedContext, null));
+
+ LOG.info("Binding-DOM codec started");
}
@Override
public void stop(final BundleContext context) {
- moduleInfoResolvedBundleTracker.close();
- service.close();
+ LOG.info("Binding-DOM codec stopping");
+
+ LOG.debug("Unregistering Binding-DOM codec services");
registrations.forEach(ServiceRegistration::unregister);
registrations.clear();
+
+ LOG.debug("Stopping Binding-DOM codec bundle tracker");
+ bundleTracker.close();
+
+ LOG.debug("Stoping Binding-DOM runtime context service");
+ service.close();
+
+ LOG.info("Binding-DOM codec stopped");
}
}
continue;
}
- registrations.add(moduleInfoRegistry.registerModuleInfo(moduleInfo));
+ registrations.add(moduleInfoRegistry.registerInfo(moduleInfo));
}
if (!deferUpdates) {
moduleInfoRegistry.updateService();
}
- LOG.trace("Bundle {} resultend in registrations {}", bundle, registrations);
+ LOG.trace("Bundle {} resulted in registrations {}", bundle, registrations);
return registrations;
}
return;
}
- for (ObjectRegistration<YangModuleInfo> reg : regs) {
- try {
- reg.close();
- } catch (Exception e) {
- LOG.warn("Unable to unregister YangModuleInfo {}", reg.getInstance(), e);
+ try {
+ regs.forEach(reg -> {
+ try {
+ reg.close();
+ } catch (Exception e) {
+ LOG.warn("Unable to unregister YangModuleInfo {}", reg.getInstance(), e);
+ }
+ });
+ } finally {
+ if (!deferUpdates) {
+ moduleInfoRegistry.updateService();
}
}
}
this.runtimeContext = requireNonNull(runtimeContext);
}
+ @Override
+ public ObjectRegistration<YangModuleInfo> registerModuleInfo(final YangModuleInfo yangModuleInfo) {
+ return new ObjectRegistrationWrapper(registerInfo(yangModuleInfo));
+ }
+
@SuppressWarnings("checkstyle:illegalCatch")
synchronized void updateService() {
final SchemaContext context;
}
}
- @Override
- public ObjectRegistration<YangModuleInfo> registerModuleInfo(final YangModuleInfo yangModuleInfo) {
- return new ObjectRegistrationWrapper(moduleInfoRegistry.registerModuleInfo(yangModuleInfo));
+ ObjectRegistration<YangModuleInfo> registerInfo(final YangModuleInfo yangModuleInfo) {
+ return moduleInfoRegistry.registerModuleInfo(yangModuleInfo);
}
private class ObjectRegistrationWrapper implements ObjectRegistration<YangModuleInfo> {