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=3c8fc042a37c5ebe048b8b1e47a1016674b6402c;hpb=531621aac4cff9d39cbd8668a53bdeba8a0e6d81;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 3c8fc042a3..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,14 +7,11 @@ */ package org.opendaylight.controller.config.manager.impl.osgi; -import static java.lang.String.format; - import com.google.common.annotations.VisibleForTesting; -import java.io.InputStream; +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; @@ -23,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 @@ -33,42 +29,46 @@ 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(); + } } @VisibleForTesting @@ -79,7 +79,7 @@ public class ModuleFactoryBundleTracker implements BundleTrackerCustomizer 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(), @@ -111,8 +111,8 @@ public class ModuleFactoryBundleTracker implements BundleTrackerCustomizer