<type>xml</type>
<classifier>features</classifier>
</dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>odl-config-api</artifactId>
- <version>0.9.0-SNAPSHOT</version>
- <type>xml</type>
- <classifier>features</classifier>
- </dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>sal-common-api</artifactId>
<type>xml</type>
<classifier>features</classifier>
</dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>odl-config-startup</artifactId>
- <version>0.9.0-SNAPSHOT</version>
- <type>xml</type>
- <classifier>features</classifier>
- </dependency>
<dependency>
<groupId>org.opendaylight.controller</groupId>
<artifactId>odl-config-netty</artifactId>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.opendaylight.controller</groupId>
- <artifactId>config-plugin-parent</artifactId>
+ <artifactId>config-subsystem</artifactId>
<version>0.9.0-SNAPSHOT</version>
- <relativePath>../config-plugin-parent</relativePath>
+ <relativePath>../</relativePath>
</parent>
<artifactId>netty-config-api</artifactId>
<packaging>bundle</packaging>
<name>${project.artifactId}</name>
<dependencies>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-transport</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>config-api</artifactId>
- </dependency>
</dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <configuration>
- <instructions>
- <Export-Package>org.opendaylight.controller.config.yang.netty,
- org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.netty.rev131119.*,</Export-Package>
- </instructions>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
</project>
+++ /dev/null
-// vi: set smarttab et sw=4 tabstop=4:
-module netty {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:controller:netty";
- prefix "netty";
-
- import config { prefix config; revision-date 2013-04-05; }
-
- organization "Cisco Systems, Inc.";
-
- contact "Milos Fabian <milfabia@cisco.com>";
-
- description
- "This module contains the base YANG definitions for
- netty services.
-
- Copyright (c)2013 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 "2013-11-19" {
- description
- "Initial revision.";
- }
-
- identity netty-threadgroup {
- status deprecated;
- description
- "Configuration wrapper around netty's threadgroup";
-
- base "config:service-type";
- config:java-class "io.netty.channel.EventLoopGroup";
- config:disable-osgi-service-registration;
- }
-
- identity netty-event-executor {
- status deprecated;
- description
- "Configuration wrapper around netty's event executor";
-
- base "config:service-type";
- config:java-class "io.netty.util.concurrent.EventExecutor";
- config:disable-osgi-service-registration;
- }
-
- identity netty-timer {
- status deprecated;
- description
- "Configuration wrapper around netty's timer";
-
- base "config:service-type";
- config:java-class "io.netty.util.Timer";
- config:disable-osgi-service-registration;
- }
-
- identity channel-factory {
- status deprecated;
- description
- "Configuration wrapper around netty's channel factory";
-
- base "config:service-type";
- config:java-class "io.netty.bootstrap.ChannelFactory";
- config:disable-osgi-service-registration;
- }
-}
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.opendaylight.controller</groupId>
- <artifactId>config-plugin-parent</artifactId>
+ <artifactId>config-subsystem</artifactId>
<version>0.9.0-SNAPSHOT</version>
- <relativePath>../config-plugin-parent</relativePath>
+ <relativePath>../</relativePath>
</parent>
<artifactId>netty-event-executor-config</artifactId>
<packaging>bundle</packaging>
<dependencies>
<dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>config-api</artifactId>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>org.opendaylight.controller</groupId>
<artifactId>netty-config-api</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>mockito-configuration</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </dependency>
-
- <!--test dependencies -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>config-manager</artifactId>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>config-manager</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>config-util</artifactId>
- <scope>test</scope>
- </dependency>
-
</dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Bundle-Name>${project.groupId}.${project.artifactId}</Bundle-Name>
- <Export-Package>org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.netty.eventexecutor.rev131112.*,</Export-Package>
- </instructions>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
</project>
+++ /dev/null
-/*
- * 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
- */
-
-/**
- * Generated file
-
- * Generated from: yang module name: netty-event-executor yang module local name: netty-global-event-executor
- * Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
- * Generated at: Tue Nov 12 10:44:21 CET 2013
- *
- * Do not modify this file unless it is present under src/main directory
- */
-package org.opendaylight.controller.config.yang.netty.eventexecutor;
-
-import io.netty.util.concurrent.EventExecutor;
-import org.opendaylight.controller.config.api.osgi.WaitingServiceTracker;
-import org.opendaylight.controller.config.yang.netty.eventexecutor.AutoCloseableEventExecutor.CloseableEventExecutorMixin;
-import org.osgi.framework.BundleContext;
-
-/**
- * @deprecated Replaced by blueprint wiring
- */
-@Deprecated
-public final class GlobalEventExecutorModule extends
- org.opendaylight.controller.config.yang.netty.eventexecutor.AbstractGlobalEventExecutorModule {
- private BundleContext bundleContext;
-
- public GlobalEventExecutorModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
- final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
- super(identifier, dependencyResolver);
- }
-
- public GlobalEventExecutorModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
- final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
- final GlobalEventExecutorModule oldModule, final java.lang.AutoCloseable oldInstance) {
- super(identifier, dependencyResolver, oldModule, oldInstance);
- }
-
- @Override
- public void validate() {
- super.validate();
- }
-
- @Override
- public AutoCloseable createInstance() {
- // The service is provided via blueprint so wait for and return it here for backwards compatibility.
- final WaitingServiceTracker<EventExecutor> tracker = WaitingServiceTracker.create(
- EventExecutor.class, bundleContext, "(type=global-event-executor)");
- EventExecutor eventExecutor = tracker.waitForService(WaitingServiceTracker.FIVE_MINUTES);
- return CloseableEventExecutorMixin.forwardingEventExecutor(eventExecutor, tracker);
- }
-
- public void setBundleContext(final BundleContext bundleContext) {
- this.bundleContext = bundleContext;
- }
-}
+++ /dev/null
-/*
- * 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
- */
-
-/**
- * Generated file
-
- * Generated from: yang module name: netty-event-executor yang module local name: netty-global-event-executor
- * Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
- * Generated at: Tue Nov 12 10:44:21 CET 2013
- *
- * Do not modify this file unless it is present under src/main directory
- */
-package org.opendaylight.controller.config.yang.netty.eventexecutor;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import org.opendaylight.controller.config.api.DependencyResolver;
-import org.osgi.framework.BundleContext;
-
-/**
- * @deprecated Replaced by blueprint wiring
- */
-@Deprecated
-public class GlobalEventExecutorModuleFactory extends org.opendaylight.controller.config.yang.netty.eventexecutor.AbstractGlobalEventExecutorModuleFactory {
- public static final String SINGLETON_NAME = "singleton";
-
-
- @Override
- public GlobalEventExecutorModule instantiateModule(final String instanceName, final DependencyResolver dependencyResolver, final GlobalEventExecutorModule oldModule, final AutoCloseable oldInstance, final BundleContext bundleContext) {
- checkArgument(SINGLETON_NAME.equals(instanceName),"Illegal instance name '" + instanceName + "', only allowed name is " + SINGLETON_NAME);
- GlobalEventExecutorModule module = super.instantiateModule(instanceName, dependencyResolver, oldModule,
- oldInstance, bundleContext);
- module.setBundleContext(bundleContext);
- return module;
- }
-
- @Override
- public GlobalEventExecutorModule instantiateModule(final String instanceName, final DependencyResolver dependencyResolver, final BundleContext bundleContext) {
- checkArgument(SINGLETON_NAME.equals(instanceName),"Illegal instance name '" + instanceName + "', only allowed name is " + SINGLETON_NAME);
- GlobalEventExecutorModule module = super.instantiateModule(instanceName, dependencyResolver, bundleContext);
- module.setBundleContext(bundleContext);
- return module;
- }
-}
+++ /dev/null
-/*
- * 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.netty.eventexecutor;
-
-import org.opendaylight.controller.config.yang.netty.eventexecutor.AutoCloseableEventExecutor.CloseableEventExecutorMixin;
-
-/**
- * @deprecated Replaced by blueprint wiring
- */
-@Deprecated
-public final class ImmediateEventExecutorModule extends org.opendaylight.controller.config.yang.netty.eventexecutor.AbstractImmediateEventExecutorModule {
-
- public ImmediateEventExecutorModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
- super(identifier, dependencyResolver);
- }
-
- public ImmediateEventExecutorModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
- final ImmediateEventExecutorModule oldModule, final java.lang.AutoCloseable oldInstance) {
-
- super(identifier, dependencyResolver, oldModule, oldInstance);
- }
-
- @Override
- protected void customValidation() {
- // Add custom validation for module attributes here.
- }
-
- @Override
- public java.lang.AutoCloseable createInstance() {
- return CloseableEventExecutorMixin.immediateEventExecutor();
- }
-}
+++ /dev/null
-/*
- * 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.netty.eventexecutor;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import org.opendaylight.controller.config.api.DependencyResolver;
-import org.osgi.framework.BundleContext;
-
-/**
- * @deprecated Replaced by blueprint wiring
- */
-@Deprecated
-public class ImmediateEventExecutorModuleFactory extends org.opendaylight.controller.config.yang.netty.eventexecutor.AbstractImmediateEventExecutorModuleFactory {
- public static final String SINGLETON_NAME = "singleton";
-
- @Override
- public ImmediateEventExecutorModule instantiateModule(final String instanceName, final DependencyResolver dependencyResolver, final ImmediateEventExecutorModule oldModule, final AutoCloseable oldInstance, final BundleContext bundleContext) {
- checkArgument(SINGLETON_NAME.equals(instanceName), "Illegal instance name '" + instanceName + "', only allowed name is " + SINGLETON_NAME);
- return super.instantiateModule(instanceName, dependencyResolver, oldModule, oldInstance, bundleContext);
- }
-
- @Override
- public ImmediateEventExecutorModule instantiateModule(final String instanceName, final DependencyResolver dependencyResolver, final BundleContext bundleContext) {
- checkArgument(SINGLETON_NAME.equals(instanceName), "Illegal instance name '" + instanceName + "', only allowed name is " + SINGLETON_NAME);
- return super.instantiateModule(instanceName, dependencyResolver, bundleContext);
- }
-}
+++ /dev/null
-// vi: set smarttab et sw=4 tabstop=4:
-module netty-event-executor {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:controller:netty:eventexecutor";
- prefix "netty-ee";
-
- import config { prefix config; revision-date 2013-04-05; }
- import netty { prefix netty; revision-date 2013-11-19; }
-
- organization "Cisco Systems, Inc.";
-
- contact "Milos Fabian <milfabia@cisco.com>";
-
- description
- "This module contains the base YANG definitions for
- netty event executor implementation.
-
- Copyright (c)2013 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 "2013-11-12" {
- description
- "Initial revision";
- }
-
- identity netty-global-event-executor {
- status deprecated;
- base config:module-type;
- config:provided-service netty:netty-event-executor;
- config:java-name-prefix GlobalEventExecutor;
- }
-
- augment "/config:modules/config:module/config:configuration" {
- case netty-global-event-executor {
- when "/config:modules/config:module/config:type = 'netty-global-event-executor'";
- }
- }
-
- identity netty-immediate-event-executor {
- status deprecated;
- base config:module-type;
- config:provided-service netty:netty-event-executor;
- config:java-name-prefix ImmediateEventExecutor;
- }
-
- augment "/config:modules/config:module/config:configuration" {
- case netty-immediate-event-executor {
- when "/config:modules/config:module/config:type = 'netty-immediate-event-executor'";
- }
- }
-}
+++ /dev/null
-/*
- * 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.netty.eventexecutor;
-
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import io.netty.util.concurrent.EventExecutor;
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.ObjectName;
-import org.junit.Before;
-import org.junit.Test;
-import org.opendaylight.controller.config.api.ConflictingVersionException;
-import org.opendaylight.controller.config.api.ValidationException;
-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.osgi.framework.Filter;
-import org.osgi.framework.ServiceListener;
-import org.osgi.framework.ServiceReference;
-
-public class GlobalEventExecutorModuleTest extends AbstractConfigTest {
-
- private GlobalEventExecutorModuleFactory factory;
- private final String instanceName = GlobalEventExecutorModuleFactory.SINGLETON_NAME;
-
- @SuppressWarnings({ "rawtypes", "unchecked" })
- @Before
- public void setUp() throws Exception {
- factory = new GlobalEventExecutorModuleFactory();
- super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory));
-
- Filter mockFilter = mock(Filter.class);
- doReturn("mock").when(mockFilter).toString();
- doReturn(mockFilter).when(mockedContext).createFilter(anyString());
- doNothing().when(mockedContext).addServiceListener(any(ServiceListener.class), anyString());
- ServiceReference mockServiceRef = mock(ServiceReference.class);
- doReturn(new ServiceReference[]{mockServiceRef}).when(mockedContext).
- getServiceReferences(anyString(), anyString());
- doReturn(mock(EventExecutor.class)).when(mockedContext).getService(mockServiceRef);
- }
-
- @Test
- public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,
- ConflictingVersionException {
- ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
-
- createInstance(transaction, instanceName);
-
- transaction.validateConfig();
- CommitStatus status = transaction.commit();
-
- assertBeanCount(1, factory.getImplementationName());
- assertStatus(status, 1, 0, 0);
- }
-
- @Test
- public void testConflictingName() throws Exception {
- ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
- try {
- createInstance(transaction, instanceName + "x");
- fail();
- }catch(final IllegalArgumentException e){
- assertTrue(e.getMessage() + " failure", e.getMessage().contains("only allowed name is singleton"));
- }
- }
-
- @Test
- public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,
- ValidationException {
-
- ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
- createInstance(transaction, instanceName);
-
- transaction.commit();
-
- transaction = configRegistryClient.createTransaction();
- assertBeanCount(1, factory.getImplementationName());
- CommitStatus status = transaction.commit();
-
- assertBeanCount(1, factory.getImplementationName());
- assertStatus(status, 0, 0, 1);
- }
-
- private ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String instanceName)
- throws InstanceAlreadyExistsException {
- ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);
- transaction.newMXBeanProxy(nameCreated, GlobalEventExecutorModuleMXBean.class);
- return nameCreated;
- }
-
-}
+++ /dev/null
-/*
- * 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.netty.eventexecutor;
-
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.ObjectName;
-import org.junit.Before;
-import org.junit.Test;
-import org.opendaylight.controller.config.api.ConflictingVersionException;
-import org.opendaylight.controller.config.api.ValidationException;
-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 ImmediateEventExecutorModuleTest extends AbstractConfigTest {
-
- private ImmediateEventExecutorModuleFactory factory;
- private final String instanceName = ImmediateEventExecutorModuleFactory.SINGLETON_NAME;
-
- @Before
- public void setUp() {
- factory = new ImmediateEventExecutorModuleFactory();
- super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory));
- }
-
- @Test
- public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,
- ConflictingVersionException {
- ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
-
- createInstance(transaction, instanceName);
-
- transaction.validateConfig();
- CommitStatus status = transaction.commit();
-
- assertBeanCount(1, factory.getImplementationName());
- assertStatus(status, 1, 0, 0);
- }
-
- @Test
- public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,
- ValidationException {
-
- ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
- createInstance(transaction, instanceName);
-
- transaction.commit();
-
- transaction = configRegistryClient.createTransaction();
- assertBeanCount(1, factory.getImplementationName());
- CommitStatus status = transaction.commit();
-
- assertBeanCount(1, factory.getImplementationName());
- assertStatus(status, 0, 0, 1);
- }
-
- private ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String instanceName)
- throws InstanceAlreadyExistsException {
- ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);
- transaction.newMXBeanProxy(nameCreated, ImmediateEventExecutorModuleMXBean.class);
- return nameCreated;
- }
-
-}
<parent>
<groupId>org.opendaylight.controller</groupId>
- <artifactId>config-plugin-parent</artifactId>
+ <artifactId>config-subsystem</artifactId>
<version>0.9.0-SNAPSHOT</version>
- <relativePath>../config-plugin-parent</relativePath>
+ <relativePath>../</relativePath>
</parent>
<artifactId>netty-threadgroup-config</artifactId>
<packaging>bundle</packaging>
<description>Configuration Wrapper around netty's event group</description>
<dependencies>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>config-api</artifactId>
- </dependency>
<dependency>
<groupId>org.opendaylight.controller</groupId>
<artifactId>netty-config-api</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>mockito-configuration</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </dependency>
-
- <!--test dependencies -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>config-manager</artifactId>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>config-manager</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>config-util</artifactId>
- <scope>test</scope>
- </dependency>
-
</dependencies>
<build>
<extensions>true</extensions>
<configuration>
<instructions>
- <Bundle-Name>${project.groupId}.${project.artifactId}</Bundle-Name>
- <Export-Package>org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.netty.threadgroup.rev131107.*,</Export-Package>
+ <Import-Package>*,io.netty.channel</Import-Package>
</instructions>
</configuration>
</plugin>
-
- <plugin>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-maven-plugin</artifactId>
- </plugin>
</plugins>
</build>
-
</project>
+++ /dev/null
-/*
- * 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
- */
-
-/**
-* Generated file
-
-* Generated from: yang module name: nsos-threadpool yang module local name: netty-threadgroup-fixed
-* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
-* Generated at: Fri Nov 08 08:31:45 CET 2013
-*
-* Do not modify this file unless it is present under src/main directory
-*/
-package org.opendaylight.controller.config.yang.netty.threadgroup;
-
-import com.google.common.reflect.AbstractInvocationHandler;
-import com.google.common.reflect.Reflection;
-import io.netty.channel.EventLoopGroup;
-import java.lang.reflect.Method;
-import org.opendaylight.controller.config.api.JmxAttributeValidationException;
-import org.opendaylight.controller.config.api.osgi.WaitingServiceTracker;
-import org.osgi.framework.BundleContext;
-
-/**
- * @deprecated Replaced by blueprint wiring
- */
-@Deprecated
-public final class NettyThreadgroupModule extends org.opendaylight.controller.config.yang.netty.threadgroup.AbstractNettyThreadgroupModule
-{
- private BundleContext bundleContext;
-
- public NettyThreadgroupModule(final org.opendaylight.controller.config.api.ModuleIdentifier name, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
- super(name, dependencyResolver);
- }
-
- public NettyThreadgroupModule(final org.opendaylight.controller.config.api.ModuleIdentifier name, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, final NettyThreadgroupModule oldModule, final java.lang.AutoCloseable oldInstance) {
- super(name, dependencyResolver, oldModule, oldInstance);
- }
-
- @Override
- public void validate(){
- if(getThreadCount()!=null) {
- JmxAttributeValidationException.checkCondition(getThreadCount() > 0, "value must be greater than 0",
- threadCountJmxAttribute);
- }
- }
-
- @Override
- public AutoCloseable createInstance() {
- // The service is provided via blueprint so wait for and return it here for backwards compatibility.
- String typeFilter = String.format("(type=%s)", getIdentifier().getInstanceName());
- final WaitingServiceTracker<EventLoopGroup> tracker = WaitingServiceTracker.create(
- EventLoopGroup.class, bundleContext, typeFilter);
- final EventLoopGroup group = tracker.waitForService(WaitingServiceTracker.FIVE_MINUTES);
-
- return Reflection.newProxy(AutoCloseableEventLoopGroupInterface.class, new AbstractInvocationHandler() {
- @Override
- protected Object handleInvocation(final Object proxy, final Method method, final Object[] args) throws Throwable {
- if (method.getName().equals("close")) {
- tracker.close();
- return null;
- } else {
- return method.invoke(group, args);
- }
- }
- });
- }
-
- public void setBundleContext(final BundleContext bundleContext) {
- this.bundleContext = bundleContext;
- }
-
- private interface AutoCloseableEventLoopGroupInterface extends EventLoopGroup, AutoCloseable {
- }
-}
+++ /dev/null
-/*
- * 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
- */
-
-/**
-* Generated file
-
-* Generated from: yang module name: nsos-threadpool yang module local name: netty-threadgroup-fixed
-* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
-* Generated at: Fri Nov 08 08:31:45 CET 2013
-*
-* Do not modify this file unless it is present under src/main directory
-*/
-package org.opendaylight.controller.config.yang.netty.threadgroup;
-
-import org.opendaylight.controller.config.api.DependencyResolver;
-import org.osgi.framework.BundleContext;
-
-/**
- * @deprecated Replaced by blueprint wiring
- */
-@Deprecated
-public class NettyThreadgroupModuleFactory extends AbstractNettyThreadgroupModuleFactory {
- @Override
- public NettyThreadgroupModule instantiateModule(final String instanceName, final DependencyResolver dependencyResolver,
- final NettyThreadgroupModule oldModule, final AutoCloseable oldInstance, final BundleContext bundleContext) {
- NettyThreadgroupModule module = super.instantiateModule(instanceName, dependencyResolver, oldModule, oldInstance, bundleContext);
- module.setBundleContext(bundleContext);
- return module;
- }
-
- @Override
- public NettyThreadgroupModule instantiateModule(final String instanceName, final DependencyResolver dependencyResolver,
- final BundleContext bundleContext) {
- NettyThreadgroupModule module = super.instantiateModule(instanceName, dependencyResolver, bundleContext);
- module.setBundleContext(bundleContext);
- return module;
- }
-}
+++ /dev/null
-// vi: set smarttab et sw=4 tabstop=4:
-module threadgroup {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:controller:netty:threadgroup";
- prefix "netty-th";
-
- import config { prefix config; revision-date 2013-04-05; }
- import netty { prefix netty; revision-date 2013-11-19; }
-
- organization "Cisco Systems, Inc.";
-
- contact "Robert Varga <rovarga@cisco.com>";
-
- description
- "This module contains the base YANG definitions for
- netty threadgroup implementation.
-
- Copyright (c)2013 Cisco Systems, Inc. All rights reserved.";
-
- revision "2013-11-07" {
- description
- "Initial revision";
- }
-
- identity netty-threadgroup-fixed {
- status deprecated;
- base config:module-type;
- config:provided-service netty:netty-threadgroup;
- config:java-name-prefix NettyThreadgroup;
- }
-
- augment "/config:modules/config:module/config:configuration" {
- case netty-threadgroup-fixed {
- when "/config:modules/config:module/config:type = 'netty-threadgroup-fixed'";
-
- leaf thread-count {
- status deprecated;
- type uint16;
-
- description "Number of threads to be used by NioEventLoopGroup. This attribute is optional and default value will be 2* Number of CPUs";
- }
-
- // TODO add optional thread factory dependency
-
- }
- }
-}
+++ /dev/null
-/*
- * 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.netty.threadgroup;
-
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import io.netty.channel.EventLoopGroup;
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.InstanceNotFoundException;
-import javax.management.ObjectName;
-import org.junit.Before;
-import org.junit.Test;
-import org.opendaylight.controller.config.api.ConflictingVersionException;
-import org.opendaylight.controller.config.api.ValidationException;
-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.osgi.framework.Filter;
-import org.osgi.framework.ServiceListener;
-import org.osgi.framework.ServiceReference;
-
-public class NettyThreadgroupModuleTest extends AbstractConfigTest {
-
- private NettyThreadgroupModuleFactory factory;
- private final String instanceName = "netty1";
-
- @SuppressWarnings({ "rawtypes", "unchecked" })
- @Before
- public void setUp() throws Exception {
- factory = new NettyThreadgroupModuleFactory();
- super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory));
-
- Filter mockFilter = mock(Filter.class);
- doReturn("mock").when(mockFilter).toString();
- doReturn(mockFilter).when(mockedContext).createFilter(anyString());
- doNothing().when(mockedContext).addServiceListener(any(ServiceListener.class), anyString());
- ServiceReference mockServiceRef = mock(ServiceReference.class);
- doReturn(new ServiceReference[]{mockServiceRef}).when(mockedContext).
- getServiceReferences(anyString(), anyString());
- doReturn(mock(EventLoopGroup.class)).when(mockedContext).getService(mockServiceRef);
- }
-
- @Test
- public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException, ConflictingVersionException {
- ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
-
- createInstance(transaction, instanceName, 2);
- createInstance(transaction, instanceName + 2, null);
- transaction.validateConfig();
- CommitStatus status = transaction.commit();
-
- assertBeanCount(2, factory.getImplementationName());
- assertStatus(status, 2, 0, 0);
- }
-
- @Test
- public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException, ValidationException {
-
- ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
- createInstance(transaction, instanceName, null);
-
- transaction.commit();
-
- transaction = configRegistryClient.createTransaction();
- assertBeanCount(1, factory.getImplementationName());
- CommitStatus status = transaction.commit();
-
- assertBeanCount(1, factory.getImplementationName());
- assertStatus(status, 0, 0, 1);
- }
-
- @Test
- public void testReconfigure() throws InstanceAlreadyExistsException, ConflictingVersionException,
- ValidationException, InstanceNotFoundException {
-
- ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
- createInstance(transaction, instanceName, null);
-
- transaction.commit();
-
- transaction = configRegistryClient.createTransaction();
- assertBeanCount(1, factory.getImplementationName());
- NettyThreadgroupModuleMXBean mxBean = transaction.newMBeanProxy(
- transaction.lookupConfigBean(AbstractNettyThreadgroupModuleFactory.NAME, instanceName),
- NettyThreadgroupModuleMXBean.class);
- mxBean.setThreadCount(1);
- CommitStatus status = transaction.commit();
-
- assertBeanCount(1, factory.getImplementationName());
- assertStatus(status, 0, 1, 0);
- }
-
- private ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String instanceName, final Integer threads)
- throws InstanceAlreadyExistsException {
- ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);
- NettyThreadgroupModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated, NettyThreadgroupModuleMXBean.class);
- mxBean.setThreadCount(threads);
- return nameCreated;
- }
-}
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.opendaylight.controller</groupId>
- <artifactId>config-plugin-parent</artifactId>
+ <artifactId>config-subsystem</artifactId>
<version>0.9.0-SNAPSHOT</version>
- <relativePath>../config-plugin-parent</relativePath>
+ <relativePath>../</relativePath>
</parent>
<artifactId>netty-timer-config</artifactId>
<packaging>bundle</packaging>
<description>Configuration Wrapper around netty's timer</description>
<dependencies>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>config-api</artifactId>
- </dependency>
<dependency>
<groupId>org.opendaylight.controller</groupId>
<artifactId>netty-config-api</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>threadpool-config-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>mockito-configuration</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </dependency>
-
- <!--test dependencies -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>config-manager</artifactId>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>config-manager</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>config-util</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>threadpool-config-impl</artifactId>
- <scope>test</scope>
- </dependency>
-
</dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Bundle-Name>${project.groupId}.${project.artifactId}</Bundle-Name>
- <Export-Package>org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.netty.timer.rev131119.*,</Export-Package>
- </instructions>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
</project>
+++ /dev/null
-/*
- * 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
- */
-
-/**
- * Generated file
-
- * Generated from: yang module name: netty-event-executor yang module local name: netty-hashed-wheel-timer
- * Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
- * Generated at: Tue Nov 19 12:49:59 CET 2013
- *
- * Do not modify this file unless it is present under src/main directory
- */
-package org.opendaylight.controller.config.yang.netty.timer;
-
-import com.google.common.reflect.AbstractInvocationHandler;
-import com.google.common.reflect.Reflection;
-import io.netty.util.Timer;
-import java.lang.reflect.Method;
-import org.opendaylight.controller.config.api.JmxAttributeValidationException;
-import org.opendaylight.controller.config.api.osgi.WaitingServiceTracker;
-import org.osgi.framework.BundleContext;
-
-/**
- * @deprecated Replaced by blueprint wiring
- */
-@Deprecated
-public final class HashedWheelTimerModule extends
- org.opendaylight.controller.config.yang.netty.timer.AbstractHashedWheelTimerModule {
- private BundleContext bundleContext;
-
- public HashedWheelTimerModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
- final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
- super(identifier, dependencyResolver);
- }
-
- public HashedWheelTimerModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
- final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
- final HashedWheelTimerModule oldModule, final java.lang.AutoCloseable oldInstance) {
- super(identifier, dependencyResolver, oldModule, oldInstance);
- }
-
- @Override
- public void validate() {
- super.validate();
- if (getTickDuration() != null) {
- JmxAttributeValidationException.checkCondition(getTickDuration() > 0, "value must be greater than 0",
- tickDurationJmxAttribute);
- }
- if (getTicksPerWheel() != null) {
- JmxAttributeValidationException.checkCondition(getTicksPerWheel() > 0, "value must be greater than 0",
- ticksPerWheelJmxAttribute);
- }
- }
-
- @Override
- public AutoCloseable createInstance() {
- // The service is provided via blueprint so wait for and return it here for backwards compatibility.
- final WaitingServiceTracker<Timer> tracker = WaitingServiceTracker.create(
- Timer.class, bundleContext, "(type=global-timer)");
- final Timer timer = tracker.waitForService(WaitingServiceTracker.FIVE_MINUTES);
-
- return Reflection.newProxy(AutoCloseableTimerInterface.class, new AbstractInvocationHandler() {
- @Override
- protected Object handleInvocation(final Object proxy, final Method method, final Object[] args) throws Throwable {
- if (method.getName().equals("close")) {
- tracker.close();
- return null;
- } else {
- return method.invoke(timer, args);
- }
- }
- });
- }
-
- public void setBundleContext(final BundleContext bundleContext) {
- this.bundleContext = bundleContext;
- }
-
- private interface AutoCloseableTimerInterface extends Timer, AutoCloseable {
- }
-}
+++ /dev/null
-/*
- * 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
- */
-
-/**
- * Generated file
-
- * Generated from: yang module name: netty-event-executor yang module local name: netty-hashed-wheel-timer
- * Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
- * Generated at: Tue Nov 19 12:49:59 CET 2013
- *
- * Do not modify this file unless it is present under src/main directory
- */
-package org.opendaylight.controller.config.yang.netty.timer;
-
-import org.opendaylight.controller.config.api.DependencyResolver;
-import org.osgi.framework.BundleContext;
-
-/**
- * @deprecated Replaced by blueprint wiring
- */
-@Deprecated
-public class HashedWheelTimerModuleFactory extends AbstractHashedWheelTimerModuleFactory {
- @Override
- public HashedWheelTimerModule instantiateModule(final String instanceName, final DependencyResolver dependencyResolver,
- final HashedWheelTimerModule oldModule, final AutoCloseable oldInstance, final BundleContext bundleContext) {
- HashedWheelTimerModule module = super.instantiateModule(instanceName, dependencyResolver, oldModule,
- oldInstance, bundleContext);
- module.setBundleContext(bundleContext);
- return module;
- }
-
- @Override
- public HashedWheelTimerModule instantiateModule(final String instanceName, final DependencyResolver dependencyResolver,
- final BundleContext bundleContext) {
- HashedWheelTimerModule module = super.instantiateModule(instanceName, dependencyResolver, bundleContext);
- module.setBundleContext(bundleContext);
- return module;
- }
-}
<argument value="${ticks-per-wheel}"/>
</bean>
- <service ref="timer" interface="io.netty.util.Timer" odl:type="global-timer">
- <service-properties>
- <entry key="config-module-namespace" value="urn:opendaylight:params:xml:ns:yang:controller:netty:timer"/>
- <entry key="config-module-name" value="netty-hashed-wheel-timer"/>
- <entry key="config-instance-name" value="global-timer"/>
- </service-properties>
- </service>
+ <service ref="timer" interface="io.netty.util.Timer" odl:type="global-timer"/>
</blueprint>
+++ /dev/null
-// vi: set smarttab et sw=4 tabstop=4:
-module netty-timer {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:controller:netty:timer";
- prefix "netty-timer";
-
- import config { prefix config; revision-date 2013-04-05; }
- import netty { prefix netty; revision-date 2013-11-19; }
-
- organization "Cisco Systems, Inc.";
-
- contact "Milos Fabian <milfabia@cisco.com>";
-
- description
- "This module contains the base YANG definitions for
- netty timer implementation.
-
- Copyright (c)2013 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 "2013-11-19" {
- description
- "Initial revision";
- }
-
- identity netty-hashed-wheel-timer {
- status deprecated;
- base config:module-type;
- config:provided-service netty:netty-timer;
- config:java-name-prefix HashedWheelTimer;
- }
-
- augment "/config:modules/config:module/config:configuration" {
- case netty-hashed-wheel-timer {
- when "/config:modules/config:module/config:type = 'netty-hashed-wheel-timer'";
-
- leaf tick-duration {
- status deprecated;
- type uint32;
- }
-
- leaf ticks-per-wheel {
- status deprecated;
- type uint16;
- }
- }
- }
-}
<artifactId>threadpool-config-api</artifactId>
<packaging>bundle</packaging>
<name>${project.artifactId}</name>
-
- <dependencies>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <configuration>
- <instructions>
- <Export-Package>org.opendaylight.controller.config.threadpool,
- org.opendaylight.controller.config.yang.threadpool,
- org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.threadpool.rev130409.*,</Export-Package>
- </instructions>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
</project>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>mockito-configuration</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </dependency>
</dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <configuration>
- <instructions>
- <Private-Package>org.opendaylight.controller.config.threadpool.util,
- org.opendaylight.controller.config.yang.threadpool.impl*,</Private-Package>
- <Export-Package>org.opendaylight.controller.config.threadpool.util,
- org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.threadpool.impl.*,</Export-Package>
- </instructions>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- </plugin>
-
- <plugin>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
</project>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>config-api</artifactId>
- <version>0.9.0-SNAPSHOT</version>
- </dependency>
</dependencies>
<build>