From: Tony Tkacik Date: Wed, 30 Oct 2013 12:32:29 +0000 (+0100) Subject: Base integration of Binding Aware Broker with Config Subsystem X-Git-Tag: jenkins-controller-bulk-release-prepare-only-2-1~520 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=17796822dcc6f7a00adb60e4e507b40f342d39ec Base integration of Binding Aware Broker with Config Subsystem Binding Aware Broker is now initialized via config subsystem as default module, not bundle activator, this allows for configurable modules declare BindingAwareBroker and MD-SAL as one of their dependencies. MD-SAL is still also available via OSGI registry and provided Activators. Change-Id: I81315312b921fcc2317d93e5dcf001174d02b644 Signed-off-by: Tony Tkacik --- diff --git a/opendaylight/distribution/opendaylight/pom.xml b/opendaylight/distribution/opendaylight/pom.xml index 4c36e5634c..790b9b34c0 100644 --- a/opendaylight/distribution/opendaylight/pom.xml +++ b/opendaylight/distribution/opendaylight/pom.xml @@ -69,6 +69,11 @@ sal-binding-api ${mdsal.version} + + org.opendaylight.controller + sal-binding-config + ${mdsal.version} + org.opendaylight.controller sal-binding-broker-impl diff --git a/opendaylight/md-sal/model/pom.xml b/opendaylight/md-sal/model/pom.xml index a5554822cd..ca97232cfb 100644 --- a/opendaylight/md-sal/model/pom.xml +++ b/opendaylight/md-sal/model/pom.xml @@ -101,44 +101,6 @@ - - - - - org.eclipse.m2e - lifecycle-mapping - 1.0.0 - - - - - - - org.opendaylight.yangtools - - - yang-maven-plugin - - - [0.5,) - - - - generate-sources - - - - - - - - - - - - - diff --git a/opendaylight/md-sal/pom.xml b/opendaylight/md-sal/pom.xml index f6159cabe2..9646fc8c0a 100644 --- a/opendaylight/md-sal/pom.xml +++ b/opendaylight/md-sal/pom.xml @@ -25,6 +25,7 @@ sal-binding-api + sal-binding-config sal-binding-broker sal-binding-it @@ -303,6 +304,40 @@ jacoco-maven-plugin ${jacoco.version} + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + + org.opendaylight.yangtools + + + yang-maven-plugin + + + [0.5,) + + + + generate-sources + + + + + + + + + + + diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/BindingAwareBroker.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/BindingAwareBroker.java index 19ca06a265..db20a13991 100644 --- a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/BindingAwareBroker.java +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/BindingAwareBroker.java @@ -168,12 +168,7 @@ public interface BindingAwareBroker { public interface RpcRegistration extends Registration { - /** - * - * @return instance for which registration does exists. - */ - @Deprecated - T getService(); + Class getServiceType(); } public interface RoutedRpcRegistration extends RpcRegistration, @@ -191,6 +186,15 @@ public interface BindingAwareBroker { @Deprecated void registerInstance(Class context, InstanceIdentifier instance); + /** + * Unregister particular instance identifier to be processed by this + * RpcService + * + * Deprecated in favor of {@link RoutedRegistration#unregisterPath(Object, Object)}. + * + * @param context + * @param instance + */ @Deprecated void unregisterInstance(Class context, InstanceIdentifier instance); } diff --git a/opendaylight/md-sal/sal-binding-broker/pom.xml b/opendaylight/md-sal/sal-binding-broker/pom.xml index 54b1eb6c66..b8b37af58e 100644 --- a/opendaylight/md-sal/sal-binding-broker/pom.xml +++ b/opendaylight/md-sal/sal-binding-broker/pom.xml @@ -16,6 +16,60 @@ + + org.opendaylight.yangtools + yang-maven-plugin + 0.5.9-SNAPSHOT + + + + generate-sources + + + + + + org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator + + ${project.build.directory}/generated-sources/config + + + urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang + + + + + true + + + + + + org.opendaylight.controller + yang-jmx-generator-plugin + 0.2.2-SNAPSHOT + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.8 + + + add-source + generate-sources + + add-source + + + + ${project.build.directory}/generated-sources/config + + + + + org.apache.felix maven-bundle-plugin @@ -23,8 +77,10 @@ ${project.groupId}.${project.artifactId} - org.opendaylight.controller.sal.binding.impl.BrokerActivator + org.opendaylight.controller.config.yang.md.sal.binding.impl, + org.opendaylight.controller.sal.binding.spi, + org.opendaylight.controller.sal.binding.spi.*, org.opendaylight.controller.sal.binding.impl, org.opendaylight.controller.sal.binding.impl.*, org.opendaylight.controller.sal.binding.codegen.*, @@ -40,27 +96,27 @@ maven-clean-plugin - org.jacoco - jacoco-maven-plugin - - org.opendaylight.controller.* - - - - pre-test - - prepare-agent - - - - post-test - test - - report - - - - + org.jacoco + jacoco-maven-plugin + + org.opendaylight.controller.* + + + + pre-test + + prepare-agent + + + + post-test + test + + report + + + + @@ -117,5 +173,10 @@ org.eclipse.xtend org.eclipse.xtend.lib + + org.opendaylight.controller + sal-binding-config + 1.0-SNAPSHOT + diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingBrokerImplSingletonModule.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingBrokerImplSingletonModule.java new file mode 100644 index 0000000000..cf561b3a15 --- /dev/null +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingBrokerImplSingletonModule.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2013 Cisco 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.config.yang.md.sal.binding.impl; + +import org.opendaylight.controller.sal.binding.impl.BindingAwareBrokerImpl; +import org.osgi.framework.BundleContext; + +import com.google.common.base.Preconditions; + +/** +* +*/ +public final class BindingBrokerImplSingletonModule extends org.opendaylight.controller.config.yang.md.sal.binding.impl.AbstractBindingBrokerImplSingletonModule +{ + + private BundleContext bundleContext; + + public BindingBrokerImplSingletonModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { + super(identifier, dependencyResolver); + } + + public BindingBrokerImplSingletonModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, BindingBrokerImplSingletonModule oldModule, java.lang.AutoCloseable oldInstance) { + super(identifier, dependencyResolver, oldModule, oldInstance); + } + + @Override + public void validate() { + super.validate(); + Preconditions.checkNotNull(getBundleContext()); + } + + + + + + public java.lang.AutoCloseable createInstance() { + BindingAwareBrokerImpl broker = new BindingAwareBrokerImpl(getBundleContext()); + broker.start(); + return broker; + } + + public BundleContext getBundleContext() { + return bundleContext; + } + + public void setBundleContext(BundleContext bundleContext) { + this.bundleContext = bundleContext; + } +} diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingBrokerImplSingletonModuleFactory.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingBrokerImplSingletonModuleFactory.java new file mode 100644 index 0000000000..e597b7fdee --- /dev/null +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingBrokerImplSingletonModuleFactory.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2013 Cisco 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.config.yang.md.sal.binding.impl; + +import java.util.Collections; +import java.util.Set; + +import org.opendaylight.controller.config.api.DependencyResolver; +import org.opendaylight.controller.config.api.DependencyResolverFactory; +import org.opendaylight.controller.config.api.DynamicMBeanWithInstance; +import org.opendaylight.controller.config.api.ModuleIdentifier; +import org.opendaylight.controller.config.spi.Module; +import org.osgi.framework.BundleContext; + +/** +* +*/ +public class BindingBrokerImplSingletonModuleFactory extends + org.opendaylight.controller.config.yang.md.sal.binding.impl.AbstractBindingBrokerImplSingletonModuleFactory { + + private static final String SINGLETON_NAME = "binding-broker-singleton"; + public static BindingBrokerImplSingletonModule SINGLETON; + public static ModuleIdentifier SINGLETON_IDENTIFIER = new ModuleIdentifier(NAME, SINGLETON_NAME); + + @Override + public Module createModule(String instanceName, DependencyResolver dependencyResolver, BundleContext bundleContext) { + throw new UnsupportedOperationException("Only default instance supported."); + } + + @Override + public Module createModule(String instanceName, DependencyResolver dependencyResolver, + DynamicMBeanWithInstance old, BundleContext bundleContext) throws Exception { + throw new UnsupportedOperationException("Only default instance supported."); + } + + @Override + public Set getDefaultModules(DependencyResolverFactory dependencyResolverFactory, + BundleContext bundleContext) { + if (SINGLETON == null) { + + DependencyResolver dependencyResolver = dependencyResolverFactory + .createDependencyResolver(SINGLETON_IDENTIFIER); + SINGLETON = new BindingBrokerImplSingletonModule(SINGLETON_IDENTIFIER, dependencyResolver); + SINGLETON.setBundleContext(bundleContext); + } + + return Collections.singleton(SINGLETON); + } + +} diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/BindingAwareBrokerImpl.xtend b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/BindingAwareBrokerImpl.xtend index 1dc2a88bde..75655419b0 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/BindingAwareBrokerImpl.xtend +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/BindingAwareBrokerImpl.xtend @@ -42,10 +42,15 @@ import com.google.common.collect.Multimap import com.google.common.collect.HashMultimap import static org.opendaylight.controller.sal.binding.impl.osgi.ClassLoaderUtils.* import java.util.concurrent.Executors +import java.util.Collections +import org.opendaylight.yangtools.yang.binding.DataObject -class BindingAwareBrokerImpl implements BindingAwareBroker { +class BindingAwareBrokerImpl implements BindingAwareBroker, AutoCloseable { private static val log = LoggerFactory.getLogger(BindingAwareBrokerImpl) + + private InstanceIdentifier root = InstanceIdentifier.builder().toInstance(); + private val clsPool = ClassPool.getDefault() private var RuntimeCodeGenerator generator; @@ -70,29 +75,52 @@ class BindingAwareBrokerImpl implements BindingAwareBroker { @Property private var DataBrokerImpl dataBroker - private var ServiceRegistration notifyBrokerRegistration - @Property var BundleContext brokerBundleContext + + ServiceRegistration notifyProviderRegistration + + ServiceRegistration notifyConsumerRegistration + + ServiceRegistration dataProviderRegistration + + ServiceRegistration dataConsumerRegistration + + private HashMapDataStore store = new HashMapDataStore(); + + public new(BundleContext bundleContext) { + _brokerBundleContext = bundleContext; + } def start() { + log.info("Starting MD-SAL: Binding Aware Broker"); initGenerator(); val executor = Executors.newCachedThreadPool; // Initialization of notificationBroker + log.info("Starting MD-SAL: Binding Aware Notification Broker"); notifyBroker = new NotificationBrokerImpl(executor); notifyBroker.invokerFactory = generator.invokerFactory; + + log.info("Starting MD-SAL: Binding Aware Data Broker"); dataBroker = new DataBrokerImpl(); dataBroker.executor = executor; + val brokerProperties = newProperties(); - notifyBrokerRegistration = brokerBundleContext.registerService(NotificationProviderService, notifyBroker, + + + log.info("Starting MD-SAL: Binding Aware Data Broker"); + notifyProviderRegistration = brokerBundleContext.registerService(NotificationProviderService, notifyBroker, brokerProperties) - brokerBundleContext.registerService(NotificationService, notifyBroker, brokerProperties) - brokerBundleContext.registerService(DataProviderService, dataBroker, brokerProperties) - brokerBundleContext.registerService(DataBrokerService, dataBroker, brokerProperties) + notifyConsumerRegistration = brokerBundleContext.registerService(NotificationService, notifyBroker, brokerProperties) + dataProviderRegistration = brokerBundleContext.registerService(DataProviderService, dataBroker, brokerProperties) + dataConsumerRegistration = brokerBundleContext.registerService(DataBrokerService, dataBroker, brokerProperties) - + getDataBroker().registerDataReader(root, store); + getDataBroker().registerCommitHandler(root, store) + + log.info("MD-SAL: Binding Aware Broker Started"); } def initGenerator() { @@ -162,12 +190,7 @@ class BindingAwareBrokerImpl implements BindingAwareBroker { val osgiReg = context.bundleContext.registerService(type, service, properties); proxy.delegate = service; - return new RpcServiceRegistrationImpl(type, service, osgiReg); - } - - def RpcRegistration registerMountedRpcImplementation(Class type, T service, - InstanceIdentifier identifier, OsgiProviderContext context) { - throw new UnsupportedOperationException("TODO: auto-generated method stub") + return new RpcServiceRegistrationImpl(type, service, osgiReg,this); } def RoutedRpcRegistration registerRoutedRpcImplementation(Class type, T service, @@ -238,7 +261,16 @@ class BindingAwareBrokerImpl implements BindingAwareBroker { val routingTable = router.getRoutingTable(context) val path = ctxMap.value routingTable.removeRoute(path) + } + } + + protected def void unregisterRpcService(RpcServiceRegistrationImpl registration) { + val type = registration.serviceType; + + val proxy = managedProxies.get(type); + if(proxy.proxy.delegate === registration.instance) { + proxy.proxy.delegate = null; } } @@ -246,6 +278,17 @@ class BindingAwareBrokerImpl implements BindingAwareBroker { getManagedDirectProxy(type); } + def getRpcRouters() { + return Collections.unmodifiableMap(rpcRouters); + } + + override close() { + dataConsumerRegistration.unregister() + dataProviderRegistration.unregister() + notifyConsumerRegistration.unregister() + notifyProviderRegistration.unregister() + } + } class RoutedRpcRegistrationImpl extends AbstractObjectRegistration implements RoutedRpcRegistration { @@ -280,10 +323,6 @@ class RoutedRpcRegistrationImpl extends AbstractObjectRegi unregisterPath(context, instance); } - override getService() { - return instance; - } - override registerPath(Class context, InstanceIdentifier path) { checkClosed() broker.registerPath(this, context, path); @@ -293,6 +332,10 @@ class RoutedRpcRegistrationImpl extends AbstractObjectRegi checkClosed() broker.unregisterPath(this, context, path); } + + override getServiceType() { + return router.serviceType; + } private def checkClosed() { if (closed) @@ -300,3 +343,24 @@ class RoutedRpcRegistrationImpl extends AbstractObjectRegi } } +class RpcServiceRegistrationImpl extends AbstractObjectRegistration implements RpcRegistration { + + val ServiceRegistration osgiRegistration; + private var BindingAwareBrokerImpl broker; + + @Property + val Class serviceType; + + public new(Class type, T service, ServiceRegistration osgiReg,BindingAwareBrokerImpl broker) { + super(service); + this._serviceType = type; + this.osgiRegistration = osgiReg; + this.broker= broker; + } + + override protected removeRegistration() { + broker.unregisterRpcService(this); + broker = null; + } + +} diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/BrokerActivator.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/BrokerActivator.java deleted file mode 100644 index fd6e0f0421..0000000000 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/BrokerActivator.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2013 Cisco 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.sal.binding.impl; - -import java.util.Hashtable; - -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class BrokerActivator implements BundleActivator { - - private static final Logger log = LoggerFactory.getLogger(BrokerActivator.class); - private BindingAwareBrokerImpl baSal; - private ServiceRegistration baSalRegistration; - private HashMapDataStore store = new HashMapDataStore(); - private InstanceIdentifier root = InstanceIdentifier.builder().toInstance(); - - @Override - public void start(BundleContext context) throws Exception { - log.info("Binding Aware Broker initialized"); - baSal = new BindingAwareBrokerImpl(); - baSal.setBrokerBundleContext(context); - baSal.start(); - baSal.getDataBroker().registerDataReader(root, store); - baSal.getDataBroker().registerCommitHandler(root, store); - - BindingAwareBroker baSalService = baSal; - Hashtable properties = new Hashtable<>(); - this.baSalRegistration = context.registerService(BindingAwareBroker.class, baSalService, properties); - - } - - @Override - public void stop(BundleContext context) throws Exception { - log.info("Binding Aware Broker stopped"); - baSalRegistration.unregister(); - } - -} diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcServiceRegistrationImpl.xtend b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcServiceRegistrationImpl.xtend deleted file mode 100644 index 31694719bb..0000000000 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcServiceRegistrationImpl.xtend +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2013 Cisco 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.sal.binding.impl - -import org.osgi.framework.ServiceRegistration -import org.opendaylight.yangtools.yang.binding.RpcService -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration - -class RpcServiceRegistrationImpl implements RpcRegistration { - - val ServiceRegistration osgiRegistration; - private val T service; - val Class cls; - - public new(Class type, T service, ServiceRegistration osgiReg) { - this.cls = type; - this.osgiRegistration = osgiReg; - this.service = service; - } - - override getService() { - this.service - } - - override getInstance() { - this.service - } - - override close() { - throw new UnsupportedOperationException("TODO: auto-generated method stub") - } -} diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/test/org/opendaylight/controller/sal/binding/test/GenerationTest.java b/opendaylight/md-sal/sal-binding-broker/src/main/test/org/opendaylight/controller/sal/binding/test/GenerationTest.java deleted file mode 100644 index 9bbb5013c0..0000000000 --- a/opendaylight/md-sal/sal-binding-broker/src/main/test/org/opendaylight/controller/sal/binding/test/GenerationTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.opendaylight.controller.sal.binding.test; -import static org.junit.Assert.*; - -import java.util.concurrent.Future; - -import org.junit.Test; -import org.opendaylight.controller.sal.binding.impl.ProxyFactoryGenerator; -import org.opendaylight.controller.sal.binding.impl.RpcServiceProxy; -import org.opendaylight.yangtools.yang.binding.RpcService; -import org.opendaylight.yangtools.yang.common.RpcResult; - - -public class GenerationTest { - - public interface MockService extends RpcService { - - Future> cancelToast(); - - Future> makeToast(String input); - } - - @Test - public void test() { - ProxyFactoryGenerator generator = new ProxyFactoryGenerator(); - Class> ret = generator.generate(MockService.class); - - assertTrue(RpcServiceProxy.class.isAssignableFrom(ret)); - assertTrue(MockService.class.isAssignableFrom(ret)); - } - -} diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/yang/opendaylight-binding-broker-impl.yang b/opendaylight/md-sal/sal-binding-broker/src/main/yang/opendaylight-binding-broker-impl.yang new file mode 100644 index 0000000000..72bae68d4c --- /dev/null +++ b/opendaylight/md-sal/sal-binding-broker/src/main/yang/opendaylight-binding-broker-impl.yang @@ -0,0 +1,52 @@ +module opendaylight-sal-binding-broker-impl { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl"; + prefix "binding-impl"; + + import config { prefix config; revision-date 2013-04-05; } + import opendaylight-md-sal-binding {prefix sal;} + + description + "Service definition for Binding Aware MD-SAL."; + + revision "2013-10-28" { + description + "Initial revision"; + } + + identity binding-broker-impl-singleton { + base config:module-type; + config:provided-service sal:binding-broker-osgi-registry; + config:java-name-prefix BindingBrokerImplSingleton; + } + + grouping rpc-routing-table { + + + } + + + grouping rpc-router { + leaf module { + type string; + } + container routing-tables { + list routing-table { + uses rpc-routing-table; + } + } + } + + + augment "/config:modules/config:module/config:state" { + case binding-broker-impl-singleton { + when "/config:modules/config:module/config:type = 'binding-broker-impl-singleton'"; + + container rpc-routers { + list rpc-router { + uses rpc-router; + } + } + } + } +} \ No newline at end of file diff --git a/opendaylight/md-sal/sal-binding-config/pom.xml b/opendaylight/md-sal/sal-binding-config/pom.xml new file mode 100644 index 0000000000..6638050ae0 --- /dev/null +++ b/opendaylight/md-sal/sal-binding-config/pom.xml @@ -0,0 +1,93 @@ + + 4.0.0 + + org.opendaylight.controller + sal-parent + 1.0-SNAPSHOT + + sal-binding-config + bundle + + scm:git:ssh://git.opendaylight.org:29418/controller.git + scm:git:ssh://git.opendaylight.org:29418/controller.git + https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL + + + + + + org.apache.felix + maven-bundle-plugin + true + + + org.opendaylight.yangtools + yang-maven-plugin + 0.5.9-SNAPSHOT + + + + generate-sources + + + + + + org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator + + ${project.build.directory}/generated-sources/config + + + urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang + + + + + true + + + + + + org.opendaylight.controller + yang-jmx-generator-plugin + 0.2.2-SNAPSHOT + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.8 + + + add-source + generate-sources + + add-source + + + + ${project.build.directory}/generated-sources/config + + + + + + + + + + + org.opendaylight.controller + config-api + 0.2.2-SNAPSHOT + + + org.opendaylight.controller + sal-binding-api + 1.0-SNAPSHOT + + + diff --git a/opendaylight/md-sal/sal-binding-config/src/main/yang/opendaylight-md-sal-binding.yang b/opendaylight/md-sal/sal-binding-config/src/main/yang/opendaylight-md-sal-binding.yang new file mode 100644 index 0000000000..8fb6c897d5 --- /dev/null +++ b/opendaylight/md-sal/sal-binding-config/src/main/yang/opendaylight-md-sal-binding.yang @@ -0,0 +1,20 @@ +module opendaylight-md-sal-binding { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding"; + prefix "md-sal-binding"; + + import config { prefix config; revision-date 2013-04-05; } + + description + "Service definition for Binding Aware MD-SAL."; + + revision "2013-10-28" { + description + "Initial revision"; + } + + identity binding-broker-osgi-registry { + base "config:service-type"; + config:java-class "org.opendaylight.controller.sal.binding.api.BindingAwareBroker"; + } +} \ No newline at end of file diff --git a/opendaylight/md-sal/sal-binding-it/pom.xml b/opendaylight/md-sal/sal-binding-it/pom.xml index 5f98deb73b..2b632b4ab0 100644 --- a/opendaylight/md-sal/sal-binding-it/pom.xml +++ b/opendaylight/md-sal/sal-binding-it/pom.xml @@ -195,7 +195,12 @@ 1.0-SNAPSHOT provided - + + org.opendaylight.controller + config-manager + 0.2.2-SNAPSHOT + + org.opendaylight.controller.model model-flow-management 1.0-SNAPSHOT diff --git a/opendaylight/md-sal/sal-binding-it/src/main/java/org/opendaylight/controller/test/sal/binding/it/TestHelper.java b/opendaylight/md-sal/sal-binding-it/src/main/java/org/opendaylight/controller/test/sal/binding/it/TestHelper.java index a644619aa5..3e3ee3a874 100644 --- a/opendaylight/md-sal/sal-binding-it/src/main/java/org/opendaylight/controller/test/sal/binding/it/TestHelper.java +++ b/opendaylight/md-sal/sal-binding-it/src/main/java/org/opendaylight/controller/test/sal/binding/it/TestHelper.java @@ -24,14 +24,24 @@ public class TestHelper { mavenBundle(CONTROLLER, "sal-common").versionAsInProject(), // mavenBundle(CONTROLLER, "sal-common-api").versionAsInProject(), // mavenBundle(CONTROLLER, "sal-common-impl").versionAsInProject(), // + mavenBundle("com.google.guava", "guava").versionAsInProject(), // mavenBundle(YANGTOOLS + ".thirdparty", "xtend-lib-osgi").versionAsInProject() // ); } + public static Option configMinumumBundles() { + return new DefaultCompositeOption( + mavenBundle(CONTROLLER, "config-api").versionAsInProject(), // + mavenBundle(CONTROLLER, "config-manager").versionAsInProject(), // + mavenBundle("commons-io", "commons-io").versionAsInProject() + ); + } + public static Option bindingAwareSalBundles() { return new DefaultCompositeOption( // mavenBundle(CONTROLLER, "sal-binding-api").versionAsInProject(), // + mavenBundle(CONTROLLER, "sal-binding-config").versionAsInProject(), mavenBundle(CONTROLLER, "sal-binding-broker-impl").versionAsInProject(), // mavenBundle("org.javassist", "javassist").versionAsInProject(), // mavenBundle(CONTROLLER, "sal-common-util").versionAsInProject() // diff --git a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/AbstractTest.java b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/AbstractTest.java index 083741e0ec..4057d9d1bc 100644 --- a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/AbstractTest.java +++ b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/AbstractTest.java @@ -52,6 +52,8 @@ public abstract class AbstractTest { mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(), // mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(), // + configMinumumBundles(), + mdSalCoreBundles(), bindingAwareSalBundles(), diff --git a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceTest.java b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceTest.java index 3f610ba4f3..71d6430191 100644 --- a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceTest.java +++ b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceTest.java @@ -8,6 +8,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import java.math.BigInteger; +import java.util.concurrent.Future; import org.junit.Before; import org.junit.Test; @@ -17,7 +18,9 @@ import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcR import org.opendaylight.controller.sal.binding.api.*; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeContext; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef; @@ -25,6 +28,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.RpcResult; public class RoutedServiceTest extends AbstractTest { diff --git a/opendaylight/md-sal/samples/toaster-it/pom.xml b/opendaylight/md-sal/samples/toaster-it/pom.xml index f0e3c1a1ad..f66bfd4b74 100644 --- a/opendaylight/md-sal/samples/toaster-it/pom.xml +++ b/opendaylight/md-sal/samples/toaster-it/pom.xml @@ -34,32 +34,32 @@ - org.jacoco - jacoco-maven-plugin - - org.opendaylight.controller.* - - - - pre-test - - prepare-agent - - - - post-test - test - - report - - - - + org.jacoco + jacoco-maven-plugin + + org.opendaylight.controller.* + + + + pre-test + + prepare-agent + + + + post-test + test + + report + + + + - + org.eclipse.m2e lifecycle-mapping @@ -140,6 +140,12 @@ ${exam.version} test + + + org.opendaylight.controller + config-manager + 0.2.2-SNAPSHOT + equinoxSDK381 org.eclipse.osgi diff --git a/opendaylight/md-sal/samples/toaster-it/src/test/java/org/opendaylight/controller/sample/toaster/it/ToasterTest.java b/opendaylight/md-sal/samples/toaster-it/src/test/java/org/opendaylight/controller/sample/toaster/it/ToasterTest.java index 0bf589b781..ca4787a46e 100644 --- a/opendaylight/md-sal/samples/toaster-it/src/test/java/org/opendaylight/controller/sample/toaster/it/ToasterTest.java +++ b/opendaylight/md-sal/samples/toaster-it/src/test/java/org/opendaylight/controller/sample/toaster/it/ToasterTest.java @@ -60,11 +60,19 @@ public class ToasterTest { mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(), // mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(), // mavenBundle(ODL, "sal-binding-api").versionAsInProject(), // + mavenBundle(ODL, "sal-binding-config").versionAsInProject(), mavenBundle(ODL, "sal-binding-broker-impl").versionAsInProject(), // + mavenBundle(ODL, "sal-common").versionAsInProject(), // mavenBundle(ODL, "sal-common-api").versionAsInProject(),// mavenBundle(ODL, "sal-common-impl").versionAsInProject(), // mavenBundle(ODL, "sal-common-util").versionAsInProject(), // + + mavenBundle(ODL, "config-api").versionAsInProject(), // + mavenBundle(ODL, "config-manager").versionAsInProject(), // + mavenBundle("commons-io", "commons-io").versionAsInProject(), + + mavenBundle(SAMPLE, "sample-toaster").versionAsInProject(), // mavenBundle(SAMPLE, "sample-toaster-consumer").versionAsInProject(), // mavenBundle(SAMPLE, "sample-toaster-provider").versionAsInProject(), //