import static org.opendaylight.controller.config.manager.impl.util.OsgiRegistrationUtil.wrap;
import java.lang.management.ManagementFactory;
import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanServer;
import org.opendaylight.controller.config.manager.impl.osgi.mapping.RefreshingSCPModuleInfoRegistry;
import org.opendaylight.controller.config.manager.impl.util.OsgiRegistrationUtil;
import org.opendaylight.controller.config.spi.ModuleFactory;
+import org.opendaylight.yangtools.concepts.ObjectRegistration;
import org.opendaylight.yangtools.sal.binding.generator.impl.GeneratedClassLoadingStrategy;
import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleInfoBackedContext;
+import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
+import org.osgi.framework.Bundle;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
+import org.osgi.util.tracker.BundleTracker;
import org.osgi.util.tracker.ServiceTracker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
ModuleFactoryBundleTracker moduleFactoryTracker = new ModuleFactoryBundleTracker(
blankTransactionServiceTracker);
+ boolean scanResolvedBundlesForModuleInfo = false;
+ BundleTracker<Collection<ObjectRegistration<YangModuleInfo>>> moduleInfoResolvedBundleTracker = null;
+ ExtensibleBundleTracker<?> moduleFactoryBundleTracker;
+ if(scanResolvedBundlesForModuleInfo) {
+ moduleInfoResolvedBundleTracker = new BundleTracker<>(context, Bundle.RESOLVED | Bundle.STARTING |
+ Bundle.STOPPING | Bundle.ACTIVE, moduleInfoBundleTracker);
+ moduleFactoryBundleTracker = new ExtensibleBundleTracker<>(context, moduleFactoryTracker);
+ } else {
+ moduleFactoryBundleTracker = new ExtensibleBundleTracker<>(context,
+ moduleFactoryTracker, moduleInfoBundleTracker);
+ }
+
+ moduleInfoBundleTracker.open(moduleInfoResolvedBundleTracker);
+
// start extensible tracker
- ExtensibleBundleTracker<?> moduleFactoryBundleTracker = new ExtensibleBundleTracker<>(context,
- moduleFactoryTracker);
moduleFactoryBundleTracker.open();
- moduleInfoBundleTracker.open();
-
// Wrap config registry with JMX notification publishing adapter
final JMXNotifierConfigRegistry notifyingConfigRegistry =
new JMXNotifierConfigRegistry(configRegistry, configMBeanServer);
private final RefreshingSCPModuleInfoRegistry moduleInfoRegistry;
- private final BundleTracker<Collection<ObjectRegistration<YangModuleInfo>>> bundleTracker;
+ private BundleTracker<Collection<ObjectRegistration<YangModuleInfo>>> bundleTracker;
private boolean starting;
public ModuleInfoBundleTracker(BundleContext context, RefreshingSCPModuleInfoRegistry moduleInfoRegistry) {
this.moduleInfoRegistry = moduleInfoRegistry;
- bundleTracker = new BundleTracker<>(context, Bundle.RESOLVED | Bundle.STARTING |
- Bundle.STOPPING | Bundle.ACTIVE, this);
}
- public void open() {
- LOG.debug("ModuleInfoBundleTracker open starting");
+ public void open(BundleTracker<Collection<ObjectRegistration<YangModuleInfo>>> bundleTracker) {
+ LOG.debug("ModuleInfoBundleTracker open starting with bundleTracker {}", bundleTracker);
- starting = true;
- bundleTracker.open();
+ if(bundleTracker != null) {
+ this.bundleTracker = bundleTracker;
+ starting = true;
+ bundleTracker.open();
- starting = false;
- moduleInfoRegistry.updateService();
+ starting = false;
+ moduleInfoRegistry.updateService();
+ } else {
+ starting = false;
+ }
LOG.debug("ModuleInfoBundleTracker open complete");
}
@Override
public void close() {
- bundleTracker.close();
+ if(bundleTracker != null) {
+ bundleTracker.close();
+ }
}
@Override