From 8d214abc9868bed333a818b21857bf32f791788a Mon Sep 17 00:00:00 2001 From: Tom Pantelis Date: Mon, 13 Jun 2016 20:07:53 -0400 Subject: [PATCH] Convert rsvp bundles to blueprint Added blueprint XML file, rsvp-spi.xml, to the spi bundle that Utilizes the new blueprint extension, "specific-reference-list" (added by https://git.opendaylight.org/gerrit/#/c/40267/), to obtain the specific list of RSVPExtensionProviderActivator OSGi service instances. The specific expected services are announced via META-INF/services/org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderActivator resources in the provider bundles which the "specific-reference-list" extension scan so it knows which services to look for. Once all expected services are obtained, the RSVPExtensionProviderActivator instance List bean is created and injected into the SimpleRSVPExtensionProviderContextActivator bean instance which calls start on each. The only RSVPExtensionProviderActivator instance wired in 27-rsvp.xml is the RSVPActivator in rsvp-impl. This instance is now created via the blueprint XML, rsvp-impl.xml, and the config yang and associated Module class was removed. rsvp-impl also now correctly provides its META-INF/services/org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderActivator resource. The SimpleRSVPExtensionProviderContextModule was deprecated but still remains for now to provide the RSVPExtensionProviderContext instance created via blueprint to the config system so it can be injected into other users. Once the other user(s) are converted to blueprint then the config yang, Module classes, and 27-rsvp.xml can be removed. Change-Id: I5f031322e8a7d947c1ad7e74963cf9f986b992b1 Signed-off-by: Tom Pantelis --- .../bgp/linkstate/LinkstateModuleTest.java | 40 ++++++++++++- .../src/main/resources/initial/27-rsvp.xml | 16 ----- rsvp/impl/pom.xml | 4 -- .../yang/rsvp/impl/RSVPParserModule.java | 31 ---------- .../rsvp/impl/RSVPParserModuleFactory.java | 11 ---- ....parser.spi.RSVPExtensionProviderActivator | 0 .../org/opendaylight/blueprint/rsvp-impl.xml | 9 +++ .../main/yang/odl-rsvp-parser-impl-cfg.yang | 41 ------------- .../parser/impl/RSVPParserModuleTest.java | 52 ----------------- ...pleRSVPExtensionProviderContextModule.java | 41 +++++++++---- ...ExtensionProviderContextModuleFactory.java | 25 +++++++- ...RSVPExtensionProviderContextActivator.java | 50 ++++++++++++++++ .../org/opendaylight/blueprint/rsvp-spi.xml | 24 ++++++++ .../main/yang/odl-rsvp-parser-spi-cfg.yang | 17 ------ ...SVPExtensionProviderContextModuleTest.java | 58 ------------------- 15 files changed, 175 insertions(+), 244 deletions(-) delete mode 100644 rsvp/impl/src/main/java/org/opendaylight/controller/config/yang/rsvp/impl/RSVPParserModule.java delete mode 100644 rsvp/impl/src/main/java/org/opendaylight/controller/config/yang/rsvp/impl/RSVPParserModuleFactory.java rename rsvp/impl/src/main/resources/{META-INF.services => META-INF/services}/org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderActivator (100%) create mode 100644 rsvp/impl/src/main/resources/org/opendaylight/blueprint/rsvp-impl.xml delete mode 100644 rsvp/impl/src/main/yang/odl-rsvp-parser-impl-cfg.yang delete mode 100644 rsvp/impl/src/test/java/org/opendaylight/controller/config/yang/rsvp/parser/impl/RSVPParserModuleTest.java create mode 100644 rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/pojo/SimpleRSVPExtensionProviderContextActivator.java create mode 100644 rsvp/spi/src/main/resources/org/opendaylight/blueprint/rsvp-spi.xml delete mode 100644 rsvp/spi/src/test/java/org/opendaylight/controller/config/yang/rsvp/spi/SimpleRSVPExtensionProviderContextModuleTest.java diff --git a/bgp/linkstate/src/test/java/org/opendaylight/controller/config/yang/bgp/linkstate/LinkstateModuleTest.java b/bgp/linkstate/src/test/java/org/opendaylight/controller/config/yang/bgp/linkstate/LinkstateModuleTest.java index 5bed487b10..8274108e54 100644 --- a/bgp/linkstate/src/test/java/org/opendaylight/controller/config/yang/bgp/linkstate/LinkstateModuleTest.java +++ b/bgp/linkstate/src/test/java/org/opendaylight/controller/config/yang/bgp/linkstate/LinkstateModuleTest.java @@ -9,12 +9,21 @@ package org.opendaylight.controller.config.yang.bgp.linkstate; import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.contains; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import com.google.common.base.Optional; import com.google.common.collect.Lists; import javax.management.InstanceAlreadyExistsException; import javax.management.ObjectName; import org.junit.Before; import org.junit.Test; +import org.mockito.Mockito; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; import org.opendaylight.controller.config.api.jmx.CommitStatus; import org.opendaylight.controller.config.manager.impl.AbstractConfigTest; import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver; @@ -25,6 +34,11 @@ import org.opendaylight.controller.config.yang.bgp.rib.spi.RIBExtensionsImplModu import org.opendaylight.controller.config.yang.bgp.rib.spi.RIBExtensionsImplModuleTest; import org.opendaylight.controller.config.yang.rsvp.spi.SimpleRSVPExtensionProviderContextModuleFactory; import org.opendaylight.controller.config.yang.rsvp.spi.SimpleRSVPExtensionProviderContextModuleMXBean; +import org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderContext; +import org.opendaylight.protocol.rsvp.parser.spi.pojo.SimpleRSVPExtensionProviderContext; +import org.osgi.framework.Filter; +import org.osgi.framework.ServiceListener; +import org.osgi.framework.ServiceReference; public class LinkstateModuleTest extends AbstractConfigTest { @@ -34,10 +48,34 @@ public class LinkstateModuleTest extends AbstractConfigTest { private ObjectName rspvInstance; @Before - public void setUp() { + public void setUp() throws Exception { super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext, new LinkstateModuleFactory(), new SimpleBGPExtensionProviderContextModuleFactory(), new RIBExtensionsImplModuleFactory(), new SimpleRSVPExtensionProviderContextModuleFactory())); + + doAnswer(new Answer() { + @Override + public Filter answer(final InvocationOnMock invocation) { + final String str = invocation.getArgumentAt(0, String.class); + final Filter mockFilter = mock(Filter.class); + doReturn(str).when(mockFilter).toString(); + return mockFilter; + } + }).when(mockedContext).createFilter(anyString()); + + Mockito.doNothing().when(this.mockedContext).addServiceListener(any(ServiceListener.class), Mockito.anyString()); + Mockito.doNothing().when(this.mockedContext).removeServiceListener(any(ServiceListener.class)); + + setupMockService(RSVPExtensionProviderContext.class, new SimpleRSVPExtensionProviderContext()); + } + + private void setupMockService(final Class serviceInterface, final Object instance) throws Exception { + final ServiceReference mockServiceRef = mock(ServiceReference.class); + doReturn(new ServiceReference[]{mockServiceRef}).when(mockedContext). + getServiceReferences(anyString(), contains(serviceInterface.getName())); + doReturn(new ServiceReference[]{mockServiceRef}).when(mockedContext). + getServiceReferences(serviceInterface.getName(), null); + doReturn(instance).when(mockedContext).getService(mockServiceRef); } @Test diff --git a/rsvp/controller-config/src/main/resources/initial/27-rsvp.xml b/rsvp/controller-config/src/main/resources/initial/27-rsvp.xml index abbaf311c0..51b80f3620 100644 --- a/rsvp/controller-config/src/main/resources/initial/27-rsvp.xml +++ b/rsvp/controller-config/src/main/resources/initial/27-rsvp.xml @@ -10,7 +10,6 @@ urn:opendaylight:params:xml:ns:yang:controller:rsvp:spi?module=odl-rsvp-parser-spi-cfg&revision=2015-08-26 - urn:opendaylight:params:xml:ns:yang:controller:rsvp:impl?module=odl-rsvp-parser-impl-cfg&revision=2015-08-26 @@ -18,14 +17,6 @@ prefix:rsvp-extensions-impl global-rsvp-extensions - - rsvp-spi:rsvp-extension - rsvp-parser - - - - prefix:rsvp-parser - rsvp-parser @@ -36,13 +27,6 @@ /modules/module[type='rsvp-extensions-impl'][name='global-rsvp-extensions'] - - rsvp-spi:rsvp-extension - - rsvp-parser - /modules/module[type='rsvp-parser'][name='rsvp-parser'] - - diff --git a/rsvp/impl/pom.xml b/rsvp/impl/pom.xml index 5f2f66e9c6..b560fe6e40 100644 --- a/rsvp/impl/pom.xml +++ b/rsvp/impl/pom.xml @@ -68,10 +68,6 @@ - - org.opendaylight.yangtools - yang-maven-plugin - org.apache.felix maven-bundle-plugin diff --git a/rsvp/impl/src/main/java/org/opendaylight/controller/config/yang/rsvp/impl/RSVPParserModule.java b/rsvp/impl/src/main/java/org/opendaylight/controller/config/yang/rsvp/impl/RSVPParserModule.java deleted file mode 100644 index 84ef510f34..0000000000 --- a/rsvp/impl/src/main/java/org/opendaylight/controller/config/yang/rsvp/impl/RSVPParserModule.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2015 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.rsvp.impl; - -import org.opendaylight.protocol.rsvp.parser.impl.RSVPActivator; - -public class RSVPParserModule extends org.opendaylight.controller.config.yang.rsvp.impl.AbstractRSVPParserModule { - public RSVPParserModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { - super(identifier, dependencyResolver); - } - - public RSVPParserModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.rsvp.impl.RSVPParserModule oldModule, java.lang.AutoCloseable oldInstance) { - super(identifier, dependencyResolver, oldModule, oldInstance); - } - - @Override - public void customValidation() { - // add custom validation form module attributes here. - } - - @Override - public java.lang.AutoCloseable createInstance() { - return new RSVPActivator(); - } - -} diff --git a/rsvp/impl/src/main/java/org/opendaylight/controller/config/yang/rsvp/impl/RSVPParserModuleFactory.java b/rsvp/impl/src/main/java/org/opendaylight/controller/config/yang/rsvp/impl/RSVPParserModuleFactory.java deleted file mode 100644 index 4f1419cb41..0000000000 --- a/rsvp/impl/src/main/java/org/opendaylight/controller/config/yang/rsvp/impl/RSVPParserModuleFactory.java +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright (c) 2015 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.rsvp.impl; -public class RSVPParserModuleFactory extends org.opendaylight.controller.config.yang.rsvp.impl.AbstractRSVPParserModuleFactory { - -} diff --git a/rsvp/impl/src/main/resources/META-INF.services/org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderActivator b/rsvp/impl/src/main/resources/META-INF/services/org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderActivator similarity index 100% rename from rsvp/impl/src/main/resources/META-INF.services/org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderActivator rename to rsvp/impl/src/main/resources/META-INF/services/org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderActivator diff --git a/rsvp/impl/src/main/resources/org/opendaylight/blueprint/rsvp-impl.xml b/rsvp/impl/src/main/resources/org/opendaylight/blueprint/rsvp-impl.xml new file mode 100644 index 0000000000..16e1684f4b --- /dev/null +++ b/rsvp/impl/src/main/resources/org/opendaylight/blueprint/rsvp-impl.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/rsvp/impl/src/main/yang/odl-rsvp-parser-impl-cfg.yang b/rsvp/impl/src/main/yang/odl-rsvp-parser-impl-cfg.yang deleted file mode 100644 index 77e97ebde3..0000000000 --- a/rsvp/impl/src/main/yang/odl-rsvp-parser-impl-cfg.yang +++ /dev/null @@ -1,41 +0,0 @@ -// vi: set smarttab et sw=4 tabstop=4: -module odl-rsvp-parser-impl-cfg { - yang-version 1; - namespace "urn:opendaylight:params:xml:ns:yang:controller:rsvp:impl"; - prefix "rsvp-impl"; - - import config { prefix config; revision-date 2013-04-05; } - import odl-rsvp-parser-spi-cfg { prefix spi; revision-date 2015-08-26; } - - organization "Cisco Systems, Inc."; - - contact "Claudio D. Gasparini "; - - description - "This module contains the base YANG definitions for - RSPV listener service. - - Copyright (c)2015 Cisco Systems, Inc. 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"; - - revision "2015-08-26" { - description - "Initial revision"; - } - - identity rsvp-parser { - base config:module-type; - config:provided-service spi:rsvp-extension; - config:java-name-prefix RSVPParser; - } - - augment "/config:modules/config:module/config:configuration" { - case rsvp-parser { - when "/config:modules/config:module/config:type = 'rsvp-parser'"; - } - } -} \ No newline at end of file diff --git a/rsvp/impl/src/test/java/org/opendaylight/controller/config/yang/rsvp/parser/impl/RSVPParserModuleTest.java b/rsvp/impl/src/test/java/org/opendaylight/controller/config/yang/rsvp/parser/impl/RSVPParserModuleTest.java deleted file mode 100644 index 2351ccd5f1..0000000000 --- a/rsvp/impl/src/test/java/org/opendaylight/controller/config/yang/rsvp/parser/impl/RSVPParserModuleTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2015 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.rsvp.parser.impl; - -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.controller.config.api.jmx.CommitStatus; -import org.opendaylight.controller.config.manager.impl.AbstractConfigTest; -import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver; -import org.opendaylight.controller.config.util.ConfigTransactionJMXClient; -import org.opendaylight.controller.config.yang.rsvp.impl.RSVPParserModuleFactory; -import org.opendaylight.controller.config.yang.rsvp.spi.SimpleRSVPExtensionProviderContextModuleFactory; - -public class RSVPParserModuleTest extends AbstractConfigTest { - private static final String FACTORY_NAME = RSVPParserModuleFactory.NAME; - private static final String INSTANCE_NAME = "rsvp-parser-impl"; - - @Before - public void setUp() throws Exception { - super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.mockedContext, new - RSVPParserModuleFactory(), new SimpleRSVPExtensionProviderContextModuleFactory())); - } - - @Test - public void testCreateBean() throws Exception { - final CommitStatus status = createInstance(); - assertBeanCount(1, FACTORY_NAME); - assertStatus(status, 1, 0, 0); - } - - @Test - public void testReusingOldInstance() throws Exception { - createInstance(); - final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction(); - assertBeanCount(1, FACTORY_NAME); - final CommitStatus status = transaction.commit(); - assertBeanCount(1, FACTORY_NAME); - assertStatus(status, 0, 0, 1); - } - - private CommitStatus createInstance() throws Exception { - final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction(); - transaction.createModule(FACTORY_NAME, INSTANCE_NAME); - return transaction.commit(); - } -} \ No newline at end of file diff --git a/rsvp/spi/src/main/java/org/opendaylight/controller/config/yang/rsvp/spi/SimpleRSVPExtensionProviderContextModule.java b/rsvp/spi/src/main/java/org/opendaylight/controller/config/yang/rsvp/spi/SimpleRSVPExtensionProviderContextModule.java index 523e9cc594..e91b445813 100644 --- a/rsvp/spi/src/main/java/org/opendaylight/controller/config/yang/rsvp/spi/SimpleRSVPExtensionProviderContextModule.java +++ b/rsvp/spi/src/main/java/org/opendaylight/controller/config/yang/rsvp/spi/SimpleRSVPExtensionProviderContextModule.java @@ -7,10 +7,20 @@ */ package org.opendaylight.controller.config.yang.rsvp.spi; -import org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderActivator; -import org.opendaylight.protocol.rsvp.parser.spi.pojo.SimpleRSVPExtensionProviderContext; +import com.google.common.reflect.AbstractInvocationHandler; +import com.google.common.reflect.Reflection; +import java.lang.reflect.Method; +import org.opendaylight.controller.config.api.osgi.WaitingServiceTracker; +import org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderContext; +import org.osgi.framework.BundleContext; +/** + * @deprecated Replaced by blueprint wiring + */ +@Deprecated public class SimpleRSVPExtensionProviderContextModule extends org.opendaylight.controller.config.yang.rsvp.spi.AbstractSimpleRSVPExtensionProviderContextModule { + private BundleContext bundleContext; + public SimpleRSVPExtensionProviderContextModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { super(identifier, dependencyResolver); } @@ -26,20 +36,27 @@ public class SimpleRSVPExtensionProviderContextModule extends org.opendaylight.c @Override public java.lang.AutoCloseable createInstance() { - final class SimpleRSVPExtensionProviderContextAutoCloseable extends SimpleRSVPExtensionProviderContext implements AutoCloseable { + final WaitingServiceTracker tracker = + WaitingServiceTracker.create(RSVPExtensionProviderContext.class, bundleContext); + final RSVPExtensionProviderContext service = tracker.waitForService(WaitingServiceTracker.FIVE_MINUTES); + + return Reflection.newProxy(AutoCloseableRSVPExtensionProviderContext.class, new AbstractInvocationHandler() { @Override - public void close() { - for (final RSVPExtensionProviderActivator e : getRsvpExtensionDependency()) { - e.stop(); + protected Object handleInvocation(Object proxy, Method method, Object[] args) throws Throwable { + if (method.getName().equals("close")) { + tracker.close(); + return null; + } else { + return method.invoke(service, args); } } - } + }); + } - final SimpleRSVPExtensionProviderContextAutoCloseable ret = new SimpleRSVPExtensionProviderContextAutoCloseable(); - for (final RSVPExtensionProviderActivator e : getRsvpExtensionDependency()) { - e.start(ret); - } - return ret; + void setBundleContext(BundleContext bundleContext) { + this.bundleContext = bundleContext; } + private static interface AutoCloseableRSVPExtensionProviderContext extends RSVPExtensionProviderContext, AutoCloseable { + } } diff --git a/rsvp/spi/src/main/java/org/opendaylight/controller/config/yang/rsvp/spi/SimpleRSVPExtensionProviderContextModuleFactory.java b/rsvp/spi/src/main/java/org/opendaylight/controller/config/yang/rsvp/spi/SimpleRSVPExtensionProviderContextModuleFactory.java index 0fe85af5fe..ada0d7943e 100644 --- a/rsvp/spi/src/main/java/org/opendaylight/controller/config/yang/rsvp/spi/SimpleRSVPExtensionProviderContextModuleFactory.java +++ b/rsvp/spi/src/main/java/org/opendaylight/controller/config/yang/rsvp/spi/SimpleRSVPExtensionProviderContextModuleFactory.java @@ -6,6 +6,29 @@ * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.controller.config.yang.rsvp.spi; -public class SimpleRSVPExtensionProviderContextModuleFactory extends org.opendaylight.controller.config.yang.rsvp.spi.AbstractSimpleRSVPExtensionProviderContextModuleFactory { +import org.opendaylight.controller.config.api.DependencyResolver; +import org.osgi.framework.BundleContext; + +/** + * @deprecated Replaced by blueprint wiring + */ +@Deprecated +public class SimpleRSVPExtensionProviderContextModuleFactory extends AbstractSimpleRSVPExtensionProviderContextModuleFactory { + @Override + public SimpleRSVPExtensionProviderContextModule instantiateModule(String instanceName, DependencyResolver dependencyResolver, + SimpleRSVPExtensionProviderContextModule oldModule, AutoCloseable oldInstance, BundleContext bundleContext) { + SimpleRSVPExtensionProviderContextModule module = super.instantiateModule(instanceName, dependencyResolver, oldModule, + oldInstance, bundleContext); + module.setBundleContext(bundleContext); + return module; + } + + @Override + public SimpleRSVPExtensionProviderContextModule instantiateModule(String instanceName, DependencyResolver dependencyResolver, + BundleContext bundleContext) { + SimpleRSVPExtensionProviderContextModule module = super.instantiateModule(instanceName, dependencyResolver, bundleContext); + module.setBundleContext(bundleContext); + return module; + } } diff --git a/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/pojo/SimpleRSVPExtensionProviderContextActivator.java b/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/pojo/SimpleRSVPExtensionProviderContextActivator.java new file mode 100644 index 0000000000..f0fcc87b3c --- /dev/null +++ b/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/pojo/SimpleRSVPExtensionProviderContextActivator.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2016 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.protocol.rsvp.parser.spi.pojo; + +import com.google.common.base.Preconditions; +import java.util.List; +import org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderActivator; +import org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Starts and stops RSVPExtensionProviderActivator instances for a RSVPExtensionProviderContext. + * + * @author Thomas Pantelis + */ +public class SimpleRSVPExtensionProviderContextActivator implements AutoCloseable { + private static final Logger LOG = LoggerFactory.getLogger(SimpleRSVPExtensionProviderContextActivator.class); + + private final RSVPExtensionProviderContext providerContext; + private final List extensionActivators; + + public SimpleRSVPExtensionProviderContextActivator(final RSVPExtensionProviderContext providerContext, + final List extensionActivators) { + this.providerContext = Preconditions.checkNotNull(providerContext); + this.extensionActivators = Preconditions.checkNotNull(extensionActivators); + } + + public void start() { + LOG.debug("Starting {} RSVPExtensionProviderActivator instances", extensionActivators.size()); + + for(final RSVPExtensionProviderActivator e : extensionActivators) { + e.start(providerContext); + } + } + + @Override + public void close() { + LOG.debug("Stopping {} RSVPExtensionProviderActivator instances", extensionActivators.size()); + + for(final RSVPExtensionProviderActivator e : extensionActivators) { + e.stop(); + } + } +} diff --git a/rsvp/spi/src/main/resources/org/opendaylight/blueprint/rsvp-spi.xml b/rsvp/spi/src/main/resources/org/opendaylight/blueprint/rsvp-spi.xml new file mode 100644 index 0000000000..e4c91d7d16 --- /dev/null +++ b/rsvp/spi/src/main/resources/org/opendaylight/blueprint/rsvp-spi.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderContext + org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionConsumerContext + + + \ No newline at end of file diff --git a/rsvp/spi/src/main/yang/odl-rsvp-parser-spi-cfg.yang b/rsvp/spi/src/main/yang/odl-rsvp-parser-spi-cfg.yang index 5957360135..c7c30c7ba4 100644 --- a/rsvp/spi/src/main/yang/odl-rsvp-parser-spi-cfg.yang +++ b/rsvp/spi/src/main/yang/odl-rsvp-parser-spi-cfg.yang @@ -44,14 +44,6 @@ module odl-rsvp-parser-spi-cfg { config:java-class "org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderContext"; } - identity rsvp-extension { - description - "Service representing a RSVP parser extension."; - - base "config:service-type"; - config:java-class "org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderActivator"; - } - identity rsvp-extensions-impl { base config:module-type; config:provided-service rsvp-extensions; @@ -61,15 +53,6 @@ module odl-rsvp-parser-spi-cfg { augment "/config:modules/config:module/config:configuration" { case rsvp-extensions-impl { when "/config:modules/config:module/config:type = 'rsvp-extensions-impl'"; - - list rsvp-extension { - uses config:service-ref { - refine type { - mandatory true; - config:required-identity rsvp-extension; - } - } - } } } } \ No newline at end of file diff --git a/rsvp/spi/src/test/java/org/opendaylight/controller/config/yang/rsvp/spi/SimpleRSVPExtensionProviderContextModuleTest.java b/rsvp/spi/src/test/java/org/opendaylight/controller/config/yang/rsvp/spi/SimpleRSVPExtensionProviderContextModuleTest.java deleted file mode 100644 index 995dd7d8e7..0000000000 --- a/rsvp/spi/src/test/java/org/opendaylight/controller/config/yang/rsvp/spi/SimpleRSVPExtensionProviderContextModuleTest.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2015 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.rsvp.spi; - -import java.util.List; -import javax.management.ObjectName; -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.controller.config.api.jmx.CommitStatus; -import org.opendaylight.controller.config.manager.impl.AbstractConfigTest; -import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver; -import org.opendaylight.controller.config.util.ConfigTransactionJMXClient; - -public class SimpleRSVPExtensionProviderContextModuleTest extends AbstractConfigTest { - private static final String FACTORY_NAME = SimpleRSVPExtensionProviderContextModuleFactory.NAME; - private static final String INSTANCE_NAME = "bgp-rsvp-extensions-impl"; - - public static ObjectName SimpleRSVPExtensionProviderContextModuleInstance(final ConfigTransactionJMXClient transaction, final List extensions) throws Exception { - final ObjectName objectName = transaction.createModule(FACTORY_NAME, INSTANCE_NAME); - final SimpleRSVPExtensionProviderContextModuleMXBean mxBean = transaction.newMXBeanProxy(objectName, SimpleRSVPExtensionProviderContextModuleMXBean.class); - mxBean.setRsvpExtension(extensions); - return objectName; - } - - @Before - public void setUp() throws Exception { - super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.mockedContext, new SimpleRSVPExtensionProviderContextModuleFactory())); - } - - @Test - public void testCreateBean() throws Exception { - final CommitStatus status = createInstance(); - assertBeanCount(1, FACTORY_NAME); - assertStatus(status, 1, 0, 0); - } - - @Test - public void testReusingOldInstance() throws Exception { - createInstance(); - final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction(); - assertBeanCount(1, FACTORY_NAME); - final CommitStatus status = transaction.commit(); - assertBeanCount(1, FACTORY_NAME); - assertStatus(status, 0, 0, 1); - } - - private CommitStatus createInstance() throws Exception { - final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction(); - transaction.createModule(FACTORY_NAME, INSTANCE_NAME); - return transaction.commit(); - } -} \ No newline at end of file -- 2.36.6