Creating a registry for gRPC services, early version restarts on each modification of the set of services.

Change-Id: I4ee69873508127ad5362563bc7f0e1c7ac4996aa
diff --git a/incubator/protobuf/services/nb/BUCK b/incubator/protobuf/services/nb/BUCK
index 6f582e0..1ce40c2 100644
--- a/incubator/protobuf/services/nb/BUCK
+++ b/incubator/protobuf/services/nb/BUCK
@@ -7,7 +7,8 @@
     '//lib:protobuf-java-3.2.0',
     '//lib:GRPC_1.3',
     '//incubator/grpc-dependencies:grpc-core-repkg-1.3.0',
-    '//lib:grpc-protobuf-lite-1.3.0'
+    '//lib:grpc-protobuf-lite-1.3.0',
+    '//incubator/protobuf/api:onos-grpc-api'
 ]
 
 GRPC_DEPS = [
@@ -15,7 +16,7 @@
     '//incubator/grpc-dependencies:grpc-core-repkg-1.3.0',
     '//incubator/protobuf/models:onos-incubator-protobuf-models-proto',
     '//lib:protobuf-java-3.2.0',
-    '//lib:guava'
+    '//lib:guava',
 ]
 
 BUNDLES = [
diff --git a/incubator/protobuf/services/nb/pom.xml b/incubator/protobuf/services/nb/pom.xml
index 43be7ce..5316c89 100644
--- a/incubator/protobuf/services/nb/pom.xml
+++ b/incubator/protobuf/services/nb/pom.xml
@@ -41,6 +41,11 @@
             <artifactId>onos-incubator-protobuf-models</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-incubator-protobuf</artifactId>
+            <version>${project.version}</version>
+        </dependency>
 
     </dependencies>
 
diff --git a/incubator/protobuf/services/nb/src/main/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbDeviceService.java b/incubator/protobuf/services/nb/src/main/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbDeviceService.java
index df85f18..0ba9e48 100644
--- a/incubator/protobuf/services/nb/src/main/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbDeviceService.java
+++ b/incubator/protobuf/services/nb/src/main/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbDeviceService.java
@@ -28,6 +28,7 @@
 import org.onosproject.grpc.nb.net.device.DeviceServiceGrpc.DeviceServiceImplBase;
 import org.onosproject.grpc.net.models.PortProtoOuterClass.PortProto;
 import org.onosproject.grpc.net.device.models.DeviceEnumsProto;
+import org.onosproject.protobuf.api.GrpcServiceRegistry;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.MastershipRole;
@@ -47,26 +48,39 @@
 @Component(immediate = true)
 public class GrpcNbDeviceService {
 
+    private static DeviceServiceNbServerInternal instance = null;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected GrpcServiceRegistry registry;
+
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected DeviceService deviceService;
 
     @Activate
     public void activate() {
         //TODO this should contact the registry service and register an instance
-        // of this service.
+        // of this service
+        registry.register(getInnerInstance());
     }
 
     @Deactivate
     public void deactivate() {
+        registry.unregister(getInnerInstance());
     }
 
-    private class DeviceServiceNbServerInternal extends DeviceServiceImplBase {
+    public DeviceServiceNbServerInternal getInnerInstance() {
+        if (instance == null) {
+            instance = new DeviceServiceNbServerInternal();
+        }
+        return instance;
+    }
 
-        public DeviceServiceNbServerInternal() {
+    private final class DeviceServiceNbServerInternal extends DeviceServiceImplBase {
+
+        private DeviceServiceNbServerInternal() {
             super();
         }
 
-
         @Override
         public void getDeviceCount(
                 getDeviceCountRequest request,