From 8e70fe6a3c78364c7738cec1678e730355ab633d Mon Sep 17 00:00:00 2001 From: Tomas Olvecky Date: Tue, 25 Feb 2014 14:44:26 +0100 Subject: [PATCH] Better exception handling when instantiating YangModelBindingProvider, fix confignetconfconnector activator. Do not just log exception if it occurs while calling getModuleInfo, but add it as nested exception. Fix confignetconfconnector activator: if activator fails to find ConfigRegistry, stop method should interrupt searching for it. Change-Id: I0b97e5a044be0fd2304b35d34f46a1c540aac248 Signed-off-by: Tomas Olvecky --- .../osgi/mapping/ModuleInfoBundleTracker.java | 30 ++++++--------- .../osgi/Activator.java | 37 +++++++++++++++---- 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/mapping/ModuleInfoBundleTracker.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/mapping/ModuleInfoBundleTracker.java index 8ba290f306..a8fdfda7d7 100644 --- a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/mapping/ModuleInfoBundleTracker.java +++ b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/mapping/ModuleInfoBundleTracker.java @@ -20,7 +20,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.InputStream; -import java.lang.reflect.InvocationTargetException; import java.net.URL; import java.util.Collection; import java.util.LinkedList; @@ -98,31 +97,26 @@ public final class ModuleInfoBundleTracker implements BundleTrackerCustomizer loadClass(String moduleInfoClass, Bundle bundle) { diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/Activator.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/Activator.java index 83029c44e6..5642cc7188 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/Activator.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/Activator.java @@ -25,7 +25,8 @@ public class Activator implements BundleActivator, YangStoreServiceTracker.YangS private static final Logger logger = LoggerFactory.getLogger(Activator.class); private BundleContext context; - ServiceRegistration osgiRegistration; + private ServiceRegistration osgiRegistration; + private ConfigRegistryLookupThread configRegistryLookup = null; @Override public void start(BundleContext context) throws Exception { @@ -36,20 +37,42 @@ public class Activator implements BundleActivator, YangStoreServiceTracker.YangS @Override public void stop(BundleContext context) throws Exception { + if (configRegistryLookup != null) { + configRegistryLookup.interrupt(); + } } @Override public synchronized void onYangStoreAdded(YangStoreService yangStoreService) { - checkState(osgiRegistration == null, "More than one onYangStoreAdded received"); - NetconfOperationServiceFactoryImpl factory = new NetconfOperationServiceFactoryImpl(yangStoreService); - logger.debug("Registering into OSGi"); - osgiRegistration = context.registerService(new String[]{NetconfOperationServiceFactory.class.getName()}, factory, - new Hashtable()); + checkState(configRegistryLookup == null, "More than one onYangStoreAdded received"); + configRegistryLookup = new ConfigRegistryLookupThread(yangStoreService); + configRegistryLookup.start(); } @Override public synchronized void onYangStoreRemoved() { - osgiRegistration.unregister(); + configRegistryLookup.interrupt(); + if (osgiRegistration != null) { + osgiRegistration.unregister(); + } osgiRegistration = null; + configRegistryLookup = null; + } + + private class ConfigRegistryLookupThread extends Thread { + private final YangStoreService yangStoreService; + + private ConfigRegistryLookupThread(YangStoreService yangStoreService) { + super("config-registry-lookup"); + this.yangStoreService = yangStoreService; + } + + @Override + public void run() { + NetconfOperationServiceFactoryImpl factory = new NetconfOperationServiceFactoryImpl(yangStoreService); + logger.debug("Registering into OSGi"); + osgiRegistration = context.registerService(new String[]{NetconfOperationServiceFactory.class.getName()}, factory, + new Hashtable()); + } } } -- 2.36.6