From: Tom Pantelis Date: Sun, 6 Mar 2016 07:17:33 +0000 (-0500) Subject: Add blueprint wiring to sal-binding-broker-impl X-Git-Tag: release/boron~221 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=c49614c73007a6b20b0903dd77a61f5102f82e0b Add blueprint wiring to sal-binding-broker-impl Change-Id: Ie333035f44904e20cc3c23052c2f98e9684c8033 Signed-off-by: Tom Pantelis --- diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/ConfigManagerActivator.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/ConfigManagerActivator.java index 38aeb9a792..ec27bc724f 100644 --- a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/ConfigManagerActivator.java +++ b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/ConfigManagerActivator.java @@ -25,7 +25,7 @@ import org.opendaylight.controller.config.manager.impl.osgi.mapping.RefreshingSC 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.api.ClassLoadingStrategy; import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleInfoBackedContext; import org.opendaylight.yangtools.yang.binding.YangModuleInfo; import org.osgi.framework.Bundle; @@ -96,7 +96,7 @@ public class ConfigManagerActivator implements BundleActivator, SynchronousBundl new JMXNotifierConfigRegistry(configRegistry, configMBeanServer); // register config registry to OSGi - AutoCloseable clsReg = registerService(context, moduleInfoBackedContext, GeneratedClassLoadingStrategy.class); + AutoCloseable clsReg = registerService(context, moduleInfoBackedContext, ClassLoadingStrategy.class); AutoCloseable configRegReg = registerService(context, notifyingConfigRegistry, ConfigRegistry.class); // register config registry to jmx diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java index ee60afbfd3..be6459b6fa 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java @@ -35,7 +35,7 @@ import org.opendaylight.yangtools.binding.data.codec.api.BindingCodecTreeNode; import org.opendaylight.yangtools.binding.data.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry; import org.opendaylight.yangtools.binding.data.codec.impl.MissingSchemaException; -import org.opendaylight.yangtools.sal.binding.generator.impl.GeneratedClassLoadingStrategy; +import org.opendaylight.yangtools.sal.binding.generator.api.ClassLoadingStrategy; import org.opendaylight.yangtools.sal.binding.generator.util.BindingRuntimeContext; import org.opendaylight.yangtools.yang.binding.BindingMapping; import org.opendaylight.yangtools.yang.binding.DataContainer; @@ -66,7 +66,7 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto private final BindingNormalizedNodeCodecRegistry codecRegistry; - private final GeneratedClassLoadingStrategy classLoadingStrategy; + private final ClassLoadingStrategy classLoadingStrategy; private final FutureSchema futureSchema; private final LoadingCache, YangInstanceIdentifier> iiCache = CacheBuilder.newBuilder() .softValues().build(new CacheLoader, YangInstanceIdentifier>() { @@ -80,13 +80,13 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto private DataNormalizer legacyToNormalized; - public BindingToNormalizedNodeCodec(final GeneratedClassLoadingStrategy classLoadingStrategy, + public BindingToNormalizedNodeCodec(final ClassLoadingStrategy classLoadingStrategy, final BindingNormalizedNodeCodecRegistry codecRegistry) { this(classLoadingStrategy,codecRegistry,false); } - public BindingToNormalizedNodeCodec(final GeneratedClassLoadingStrategy classLoadingStrategy, + public BindingToNormalizedNodeCodec(final ClassLoadingStrategy classLoadingStrategy, final BindingNormalizedNodeCodecRegistry codecRegistry,final boolean waitForSchema) { this.classLoadingStrategy = Preconditions.checkNotNull(classLoadingStrategy,"classLoadingStrategy"); this.codecRegistry = Preconditions.checkNotNull(codecRegistry,"codecRegistry"); diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodecFactory.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodecFactory.java new file mode 100644 index 0000000000..a68ace70c6 --- /dev/null +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodecFactory.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2015 Brocade Communications Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.md.sal.binding.impl; + +import java.util.concurrent.atomic.AtomicBoolean; +import org.opendaylight.controller.sal.binding.codegen.impl.SingletonHolder; +import org.opendaylight.controller.sal.core.api.model.SchemaService; +import org.opendaylight.yangtools.binding.data.codec.gen.impl.StreamWriterGenerator; +import org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry; +import org.opendaylight.yangtools.sal.binding.generator.api.ClassLoadingStrategy; + +/** + * Factory class for creating and initializing the global BindingToNormalizedNodeCodec instance. + * + * @author Thomas Pantelis + */ +public class BindingToNormalizedNodeCodecFactory { + private static final AtomicBoolean INSTANCE_CREATED = new AtomicBoolean(); + private static volatile BindingToNormalizedNodeCodec instance; + + /** + * Returns the global BindingToNormalizedNodeCodec instance, creating if necessary. The returned instance + * is registered with tthe SchemaService as a SchemaContextListener. + * + * @param classLoadingStrategy + * @param schemaService + * @return the BindingToNormalizedNodeCodec instance + */ + public static BindingToNormalizedNodeCodec getOrCreateInstance(ClassLoadingStrategy classLoadingStrategy, + SchemaService schemaService) { + if(!INSTANCE_CREATED.compareAndSet(false, true)) { + return instance; + } + + BindingNormalizedNodeCodecRegistry codecRegistry = new BindingNormalizedNodeCodecRegistry( + StreamWriterGenerator.create(SingletonHolder.JAVASSIST)); + instance = new BindingToNormalizedNodeCodec(classLoadingStrategy, codecRegistry, true); + + schemaService.registerSchemaContextListener(instance); + + return instance; + } + + public static BindingToNormalizedNodeCodec getInstance() { + return instance; + } +} diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/resources/org/opendaylight/blueprint/binding-broker.xml b/opendaylight/md-sal/sal-binding-broker/src/main/resources/org/opendaylight/blueprint/binding-broker.xml new file mode 100644 index 0000000000..db405e06a7 --- /dev/null +++ b/opendaylight/md-sal/sal-binding-broker/src/main/resources/org/opendaylight/blueprint/binding-broker.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + org.opendaylight.yangtools.binding.data.codec.api.BindingCodecTreeFactory + org.opendaylight.yangtools.binding.data.codec.api.BindingNormalizedNodeSerializer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.opendaylight.controller.sal.binding.api.NotificationProviderService + org.opendaylight.controller.sal.binding.api.NotificationService + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/opendaylight/md-sal/sal-binding-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/RuntimeMappingModule.java b/opendaylight/md-sal/sal-binding-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/RuntimeMappingModule.java index 87ce27d501..e2d942e9cd 100644 --- a/opendaylight/md-sal/sal-binding-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/RuntimeMappingModule.java +++ b/opendaylight/md-sal/sal-binding-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/RuntimeMappingModule.java @@ -13,7 +13,7 @@ import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCo import org.opendaylight.controller.sal.binding.codegen.impl.SingletonHolder; import org.opendaylight.yangtools.binding.data.codec.gen.impl.StreamWriterGenerator; import org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry; -import org.opendaylight.yangtools.sal.binding.generator.impl.GeneratedClassLoadingStrategy; +import org.opendaylight.yangtools.sal.binding.generator.api.ClassLoadingStrategy; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; @@ -50,15 +50,15 @@ public final class RuntimeMappingModule extends AbstractRuntimeMappingModule { @Override public java.lang.AutoCloseable createInstance() { - final GeneratedClassLoadingStrategy classLoading = getGlobalClassLoadingStrategy(); + final ClassLoadingStrategy classLoading = getGlobalClassLoadingStrategy(); final BindingNormalizedNodeCodecRegistry codecRegistry = new BindingNormalizedNodeCodecRegistry(StreamWriterGenerator.create(SingletonHolder.JAVASSIST)); final BindingToNormalizedNodeCodec instance = new BindingToNormalizedNodeCodec(classLoading, codecRegistry,getWaitForSchema()); bundleContext.registerService(SchemaContextListener.class, instance, new Hashtable()); return instance; } - private GeneratedClassLoadingStrategy getGlobalClassLoadingStrategy() { - final ServiceReference ref = bundleContext.getServiceReference(GeneratedClassLoadingStrategy.class); + private ClassLoadingStrategy getGlobalClassLoadingStrategy() { + final ServiceReference ref = bundleContext.getServiceReference(ClassLoadingStrategy.class); return bundleContext.getService(ref); }