X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fmanager%2Fimpl%2Fosgi%2FModuleFactoryBundleTracker.java;h=8ca5da282511b88ee4cf5e7ea2887ecfba634b4b;hb=refs%2Fchanges%2F73%2F46573%2F5;hp=05ca43c3e2d88e01ea9458fc15bc621a0cd9daa4;hpb=efa5be8f930f3eda7094c314e22347868b9db173;p=controller.git diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/ModuleFactoryBundleTracker.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/ModuleFactoryBundleTracker.java index 05ca43c3e2..8ca5da2825 100644 --- a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/ModuleFactoryBundleTracker.java +++ b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/ModuleFactoryBundleTracker.java @@ -7,13 +7,11 @@ */ package org.opendaylight.controller.config.manager.impl.osgi; -import static java.lang.String.format; - -import java.io.InputStream; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.io.Resources; +import java.io.IOException; import java.net.URL; -import java.util.List; - -import org.apache.commons.io.IOUtils; +import java.nio.charset.StandardCharsets; import org.opendaylight.controller.config.spi.ModuleFactory; import org.osgi.framework.Bundle; import org.osgi.framework.BundleEvent; @@ -22,7 +20,6 @@ import org.osgi.util.tracker.BundleTrackerCustomizer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - /** * OSGi extender that listens for bundle activation events. Reads file * META-INF/services/org.opendaylight.controller.config.spi.ModuleFactory, each @@ -32,52 +29,57 @@ import org.slf4j.LoggerFactory; * the services are unregistered automatically. * Code based on http://www.toedter.com/blog/?p=236 */ -public class ModuleFactoryBundleTracker implements BundleTrackerCustomizer { +public class ModuleFactoryBundleTracker implements BundleTrackerCustomizer { private final BlankTransactionServiceTracker blankTransactionServiceTracker; - private static final Logger logger = LoggerFactory.getLogger(ModuleFactoryBundleTracker.class); + private static final Logger LOG = LoggerFactory.getLogger(ModuleFactoryBundleTracker.class); public ModuleFactoryBundleTracker(BlankTransactionServiceTracker blankTransactionServiceTracker) { this.blankTransactionServiceTracker = blankTransactionServiceTracker; } @Override - public Object addingBundle(Bundle bundle, BundleEvent event) { + public Boolean addingBundle(Bundle bundle, BundleEvent event) { URL resource = bundle.getEntry("META-INF/services/" + ModuleFactory.class.getName()); - logger.trace("Got addingBundle event of bundle {}, resource {}, event {}", + LOG.trace("Got addingBundle event of bundle {}, resource {}, event {}", bundle, resource, event); if (resource != null) { - try (InputStream inputStream = resource.openStream()) { - List lines = IOUtils.readLines(inputStream); - for (String factoryClassName : lines) { + try { + for (String factoryClassName : Resources.readLines(resource, StandardCharsets.UTF_8)) { registerFactory(factoryClassName, bundle); } - } catch (Exception e) { - logger.error("Error while reading {}", resource, e); + + return Boolean.TRUE; + } catch (IOException e) { + LOG.error("Error while reading {}", resource, e); throw new RuntimeException(e); } } - return bundle; + + return Boolean.FALSE; } @Override - public void modifiedBundle(Bundle bundle, BundleEvent event, Object object) { + public void modifiedBundle(Bundle bundle, BundleEvent event, Boolean hasFactory) { // NOOP } @Override - public void removedBundle(Bundle bundle, BundleEvent event, Object object) { - // workaround for service tracker not getting removed service event - blankTransactionServiceTracker.blankTransaction(); + public void removedBundle(Bundle bundle, BundleEvent event, Boolean hasFactory) { + if(hasFactory) { + // workaround for service tracker not getting removed service event + blankTransactionServiceTracker.blankTransactionSync(); + } } - // TODO:test - private static ServiceRegistration registerFactory(String factoryClassName, Bundle bundle) { + @VisibleForTesting + protected static ServiceRegistration registerFactory(String factoryClassName, Bundle bundle) { String errorMessage; + Exception ex = null; try { Class clazz = bundle.loadClass(factoryClassName); if (ModuleFactory.class.isAssignableFrom(clazz)) { try { - logger.debug("Registering {} in bundle {}", + LOG.debug("Registering {} in bundle {}", clazz.getName(), bundle); return bundle.getBundleContext().registerService( ModuleFactory.class.getName(), clazz.newInstance(), @@ -86,10 +88,12 @@ public class ModuleFactoryBundleTracker implements BundleTrackerCustomizer