From: Tony Tkacik Date: Mon, 28 Jul 2014 15:05:01 +0000 (+0000) Subject: Merge "Wiring rest-connector with config subsytem." X-Git-Tag: release/helium~418 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=98194e992296b9f8d9871126726a3e11db165b1f;hp=64781d7e080c4278e05a113a7d5f508b25605138 Merge "Wiring rest-connector with config subsytem." --- diff --git a/opendaylight/commons/opendaylight/pom.xml b/opendaylight/commons/opendaylight/pom.xml index 163c64ed52..d6c65a4272 100644 --- a/opendaylight/commons/opendaylight/pom.xml +++ b/opendaylight/commons/opendaylight/pom.xml @@ -1235,6 +1235,11 @@ sal-rest-connector ${mdsal.version} + + org.opendaylight.controller + sal-rest-connector-config + ${mdsal.version} + org.opendaylight.controller sal-rest-docgen diff --git a/opendaylight/distribution/opendaylight/pom.xml b/opendaylight/distribution/opendaylight/pom.xml index d238ee75cc..3131bd5edd 100644 --- a/opendaylight/distribution/opendaylight/pom.xml +++ b/opendaylight/distribution/opendaylight/pom.xml @@ -732,6 +732,27 @@ + + org.apache.maven.plugins + maven-dependency-plugin + 2.8 + + + unpack-provided-configs + + unpack-dependencies + + generate-resources + + ${project.build.directory}/configuration + sal-rest-connector-config + **\/*.xml + true + false + + + + maven-assembly-plugin 2.3 @@ -1009,6 +1030,10 @@ org.opendaylight.controller sal-rest-connector + + org.opendaylight.controller + sal-rest-connector-config + org.opendaylight.controller sal-rest-docgen @@ -1285,6 +1310,20 @@ package + + unpack-provided-configs + + unpack-dependencies + + generate-resources + + ${project.build.directory}/generated-resources/opendaylight/configuration + sal-rest-connector-config + **\/*.xml + true + false + + diff --git a/opendaylight/distribution/opendaylight/src/assemble/bin.xml b/opendaylight/distribution/opendaylight/src/assemble/bin.xml index 0ff4c9a83c..e5fc98a863 100644 --- a/opendaylight/distribution/opendaylight/src/assemble/bin.xml +++ b/opendaylight/distribution/opendaylight/src/assemble/bin.xml @@ -75,6 +75,13 @@ opendaylight/ + + ${project.build.directory}/configuration/initial + /opendaylight/configuration/initial + + **/META-INF/** + + diff --git a/opendaylight/md-sal/pom.xml b/opendaylight/md-sal/pom.xml index 1cfd5a6639..2cddbbf354 100644 --- a/opendaylight/md-sal/pom.xml +++ b/opendaylight/md-sal/pom.xml @@ -43,6 +43,7 @@ sal-connector-api sal-rest-connector + sal-rest-connector-config sal-netconf-connector inventory-manager diff --git a/opendaylight/md-sal/sal-rest-connector-config/pom.xml b/opendaylight/md-sal/sal-rest-connector-config/pom.xml new file mode 100644 index 0000000000..6d050cf425 --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector-config/pom.xml @@ -0,0 +1,20 @@ + + + + + 4.0.0 + + org.opendaylight.controller + sal-parent + 1.1-SNAPSHOT + + sal-rest-connector-config + Configuration files for sal-rest-connector + jar + diff --git a/opendaylight/md-sal/sal-rest-connector-config/src/main/resources/initial/10-rest-connector.xml b/opendaylight/md-sal/sal-rest-connector-config/src/main/resources/initial/10-rest-connector.xml new file mode 100644 index 0000000000..2fdc8c7d1e --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector-config/src/main/resources/initial/10-rest-connector.xml @@ -0,0 +1,38 @@ + + + + + + + + + rest:rest-connector-impl + rest-connector-default-impl + 8181 + + dom:dom-broker-osgi-registry + dom-broker + + + + + + + rest:rest-connector + + rest-connector-default + + /modules/module[type='rest-connector-impl'][name='rest-connector-default-impl'] + + + + + + + diff --git a/opendaylight/md-sal/sal-rest-connector/pom.xml b/opendaylight/md-sal/sal-rest-connector/pom.xml index b760263967..09fb5b3677 100644 --- a/opendaylight/md-sal/sal-rest-connector/pom.xml +++ b/opendaylight/md-sal/sal-rest-connector/pom.xml @@ -18,6 +18,14 @@ ${project.groupId} sal-core-api + + ${project.groupId} + sal-binding-config + + + ${project.groupId} + config-api + com.google.code.gson gson @@ -58,6 +66,10 @@ org.opendaylight.yangtools.model ietf-yang-types-20130715 + + org.opendaylight.yangtools.model + ietf-inet-types + org.slf4j slf4j-api @@ -89,6 +101,10 @@ mockito-all test + + org.opendaylight.controller + sal-core-spi + @@ -102,14 +118,43 @@ MD SAL Restconf Connector org.opendaylight.controller.sal.rest.*, org.opendaylight.controller.sal.restconf.rpc.*, - org.opendaylight.controller.sal.restconf.impl, + org.opendaylight.controller.sal.restconf.impl, + org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.rest.connector.rev140724.*, + *, com.sun.jersey.spi.container.servlet - org.opendaylight.controller.sal.rest.impl.RestconfProvider /restconf + + org.opendaylight.yangtools + yang-maven-plugin + + + config + + generate-sources + + + + + org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator + ${jmxGeneratorPath} + + urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang + + + + org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl + ${salGeneratorPath} + + + true + + + + diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/config/yang/md/sal/rest/connector/RestConnectorModule.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/config/yang/md/sal/rest/connector/RestConnectorModule.java new file mode 100644 index 0000000000..582c657868 --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/config/yang/md/sal/rest/connector/RestConnectorModule.java @@ -0,0 +1,30 @@ +package org.opendaylight.controller.config.yang.md.sal.rest.connector; + +import org.opendaylight.controller.sal.rest.impl.RestconfProviderImpl; + +public class RestConnectorModule extends org.opendaylight.controller.config.yang.md.sal.rest.connector.AbstractRestConnectorModule { + + public RestConnectorModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { + super(identifier, dependencyResolver); + } + + public RestConnectorModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.md.sal.rest.connector.RestConnectorModule 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() { + // Create an instance of our provider + RestconfProviderImpl instance = new RestconfProviderImpl(); + // Set its port + instance.setWebsocketPort(getWebsocketPort()); + // Register it with the Broker + getDomBrokerDependency().registerProvider(instance); + return instance; + } +} diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/config/yang/md/sal/rest/connector/RestConnectorModuleFactory.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/config/yang/md/sal/rest/connector/RestConnectorModuleFactory.java new file mode 100644 index 0000000000..957b08f6ae --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/config/yang/md/sal/rest/connector/RestConnectorModuleFactory.java @@ -0,0 +1,15 @@ +/* +* Generated file +* +* Generated from: yang module name: opendaylight-rest-connector yang module local name: rest-connector-impl +* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator +* Generated at: Fri Jul 25 04:33:31 CDT 2014 +* +* Do not modify this file unless it is present under src/main directory +*/ +package org.opendaylight.controller.config.yang.md.sal.rest.connector; + + +public class RestConnectorModuleFactory extends org.opendaylight.controller.config.yang.md.sal.rest.connector.AbstractRestConnectorModuleFactory { + +} diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/api/RestConnector.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/api/RestConnector.java new file mode 100644 index 0000000000..fe45a0202d --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/api/RestConnector.java @@ -0,0 +1,9 @@ +package org.opendaylight.controller.sal.rest.api; + +/* + * This is a simple dummy interface to allow us to create instances of RestconfProvider + * via the config subsystem. + */ +public interface RestConnector { + +} diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/RestconfProvider.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/RestconfProviderImpl.java similarity index 54% rename from opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/RestconfProvider.java rename to opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/RestconfProviderImpl.java index 1f1d0eb831..adb176a65d 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/RestconfProvider.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/RestconfProviderImpl.java @@ -9,30 +9,30 @@ package org.opendaylight.controller.sal.rest.impl; import java.util.Collection; import java.util.Collections; -import org.opendaylight.controller.sal.core.api.Broker; + import org.opendaylight.controller.sal.core.api.Broker.ProviderSession; import org.opendaylight.controller.sal.core.api.Provider; import org.opendaylight.controller.sal.core.api.data.DataBrokerService; import org.opendaylight.controller.sal.core.api.model.SchemaService; import org.opendaylight.controller.sal.core.api.mount.MountService; +import org.opendaylight.controller.sal.rest.api.RestConnector; import org.opendaylight.controller.sal.restconf.impl.BrokerFacade; import org.opendaylight.controller.sal.restconf.impl.ControllerContext; import org.opendaylight.controller.sal.streams.websockets.WebSocketServer; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.model.api.SchemaServiceListener; -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import org.osgi.util.tracker.ServiceTracker; -import org.osgi.util.tracker.ServiceTrackerCustomizer; -public class RestconfProvider implements BundleActivator, Provider, ServiceTrackerCustomizer { +public class RestconfProviderImpl implements Provider, AutoCloseable, RestConnector { public final static String NOT_INITALIZED_MSG = "Restconf is not initialized yet. Please try again later"; private ListenerRegistration listenerRegistration; - private ServiceTracker brokerServiceTrancker; - private BundleContext bundleContext; + private PortNumber port; + public void setWebsocketPort(PortNumber port) { + this.port = port; + } + private Thread webSocketServerThread; @Override @@ -46,32 +46,10 @@ public class RestconfProvider implements BundleActivator, Provider, ServiceTrack listenerRegistration = schemaService.registerSchemaServiceListener(ControllerContext.getInstance()); ControllerContext.getInstance().setSchemas(schemaService.getGlobalContext()); ControllerContext.getInstance().setMountService(session.getService(MountService.class)); - } - @Override - public void start(BundleContext context) throws Exception { - String websocketPortStr = context.getProperty(WebSocketServer.WEBSOCKET_SERVER_CONFIG_PROPERTY); - int websocketPort = (websocketPortStr != null && !"".equals(websocketPortStr)) ? Integer - .parseInt(websocketPortStr) : WebSocketServer.DEFAULT_PORT; - bundleContext = context; - webSocketServerThread = new Thread(WebSocketServer.createInstance(websocketPort)); - webSocketServerThread.setName("Web socket server"); + webSocketServerThread = new Thread(WebSocketServer.createInstance(port.getValue().intValue())); + webSocketServerThread.setName("Web socket server on port " + port); webSocketServerThread.start(); - brokerServiceTrancker = new ServiceTracker<>(context, Broker.class, this); - brokerServiceTrancker.open(); - } - - @Override - public void stop(BundleContext context) { - if (listenerRegistration != null) { - try { - listenerRegistration.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } - webSocketServerThread.interrupt(); - brokerServiceTrancker.close(); } @Override @@ -80,22 +58,10 @@ public class RestconfProvider implements BundleActivator, Provider, ServiceTrack } @Override - public Broker addingService(ServiceReference reference) { - Broker broker = bundleContext.getService(reference); - broker.registerProvider(this, bundleContext); - return broker; - } - - @Override - public void modifiedService(ServiceReference reference, Broker service) { - // NOOP - } - - @Override - public void removedService(ServiceReference reference, Broker service) { - bundleContext.ungetService(reference); - BrokerFacade.getInstance().setContext(null); - BrokerFacade.getInstance().setDataService(null); - ControllerContext.getInstance().setSchemas(null); + public void close() { + if (listenerRegistration != null) { + listenerRegistration.close(); + } + webSocketServerThread.interrupt(); } } diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/yang/opendaylight-rest-connector.yang b/opendaylight/md-sal/sal-rest-connector/src/main/yang/opendaylight-rest-connector.yang new file mode 100644 index 0000000000..a8fc8ff4d5 --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector/src/main/yang/opendaylight-rest-connector.yang @@ -0,0 +1,47 @@ +module opendaylight-rest-connector { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:controller:md:sal:rest:connector"; + prefix "md-sal-rest-connector"; + + import config { prefix config; revision-date 2013-04-05; } + import opendaylight-md-sal-dom {prefix dom; revision-date 2013-10-28;} + import opendaylight-md-sal-binding {prefix sal; revision-date 2013-10-28;} + import ietf-inet-types {prefix inet; revision-date 2010-09-24;} + + description + "Service definition for Rest Connector"; + + revision "2014-07-24" { + description + "Initial revision"; + } + + identity rest-connector { + base "config:service-type"; + config:java-class "org.opendaylight.controller.sal.rest.api.RestConnector"; + } + + identity rest-connector-impl { + base config:module-type; + config:provided-service rest-connector; + config:java-name-prefix RestConnector; + } + + augment "/config:modules/config:module/config:configuration" { + case rest-connector-impl { + when "/config:modules/config:module/config:type = 'rest-connector-impl'"; + leaf websocket-port { + mandatory true; + type inet:port-number; + } + container dom-broker { + uses config:service-ref { + refine type { + mandatory true; + config:required-identity dom:dom-broker-osgi-registry; + } + } + } + } + } +} \ No newline at end of file