[ONOS-5833] (vCore) Refactor vnet services
to enable event delivery mechanism

Changes
1. Abstact Vnet Listener Manager is added
2. Refactor Vnet services to use it

Change-Id: I178342bfc882c0739f216960358a281903e1385a
diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/VirtualNetworkIntentCompilerTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/VirtualNetworkIntentCompilerTest.java
index 8ac8a92..3acc2cf 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/VirtualNetworkIntentCompilerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/VirtualNetworkIntentCompilerTest.java
@@ -21,7 +21,6 @@
 import org.junit.Test;
 import org.onlab.osgi.ServiceDirectory;
 import org.onlab.osgi.TestServiceDirectory;
-import org.onlab.rest.BaseResource;
 import org.onosproject.TestApplicationId;
 import org.onosproject.common.event.impl.TestEventDispatcher;
 import org.onosproject.core.ApplicationId;
@@ -101,8 +100,7 @@
         Intent.unbindIdGenerator(idGenerator);
         Intent.bindIdGenerator(idGenerator);
 
-        virtualNetworkManagerStore.setCoreService(coreService);
-        setField(coreService, "coreService", new TestCoreService());
+        setField(virtualNetworkManagerStore, "coreService", coreService);
         setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
         virtualNetworkManagerStore.activate();
 
@@ -119,7 +117,7 @@
                 .add(VirtualNetworkService.class, manager)
                 .add(VirtualNetworkStore.class, virtualNetworkManagerStore)
                 .add(IntentService.class, intentService);
-        BaseResource.setServiceDirectory(testDirectory);
+        setField(manager, "serviceDirectory", testDirectory);
 
         compiler = new VirtualNetworkIntentCompiler();
         compiler.manager = manager;
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/AbstractVnetService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/AbstractVnetService.java
new file mode 100644
index 0000000..2eac0af
--- /dev/null
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/AbstractVnetService.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.incubator.net.virtual;
+
+import org.onlab.osgi.DefaultServiceDirectory;
+import org.onlab.osgi.ServiceDirectory;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Basis for virtual network service.
+ */
+public abstract class AbstractVnetService
+        implements VnetService {
+
+    private static final String NETWORK_NULL = "Network ID cannot be null";
+
+    protected NetworkId networkId;
+    protected VirtualNetworkService manager;
+    protected ServiceDirectory serviceDirectory;
+
+    public AbstractVnetService(VirtualNetworkService manager,
+                               NetworkId networkId) {
+        checkNotNull(networkId, NETWORK_NULL);
+        this.manager = manager;
+        this.networkId = networkId;
+        this.serviceDirectory = new DefaultServiceDirectory();
+    }
+
+    @Override
+    public NetworkId networkId() {
+        return this.networkId;
+    }
+}
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkAdminService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkAdminService.java
index a7fbe13..fd318ce 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkAdminService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkAdminService.java
@@ -55,7 +55,6 @@
      */
     Set<TenantId> getTenantIds();
 
-
     /**
      * Creates a new virtual network for the specified tenant.
      *
@@ -71,7 +70,6 @@
      */
     void removeVirtualNetwork(NetworkId networkId);
 
-
     /**
      * Creates a new virtual device within the specified network. The device id
      * must be unique within the bounds of the network.
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkService.java
index 530c67a..2e852e8 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkService.java
@@ -16,6 +16,7 @@
 package org.onosproject.incubator.net.virtual;
 
 import com.google.common.annotations.Beta;
+import org.onlab.osgi.ServiceDirectory;
 import org.onosproject.net.DeviceId;
 
 import java.util.Set;
@@ -105,4 +106,10 @@
      */
     <T> T get(NetworkId networkId, Class<T> serviceClass);
 
+    /**
+     * Returns service directory.
+     *
+     * @return a service directory
+     */
+    ServiceDirectory getServiceDirectory();
 }
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VnetService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VnetService.java
index f4b1bd8..3da437d 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VnetService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VnetService.java
@@ -20,5 +20,5 @@
  * Virtual network service interface.
  */
 public interface VnetService {
-    VirtualNetwork network();
+    NetworkId networkId();
 }
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/event/AbstractVirtualListenerManager.java b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/event/AbstractVirtualListenerManager.java
index fe6b2f9..e87876c 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/event/AbstractVirtualListenerManager.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/event/AbstractVirtualListenerManager.java
@@ -15,28 +15,41 @@
  */
 package org.onosproject.incubator.net.virtual.event;
 
+import org.onlab.osgi.ServiceDirectory;
 import org.onosproject.event.Event;
 import org.onosproject.event.EventDeliveryService;
 import org.onosproject.event.EventListener;
 import org.onosproject.event.ListenerService;
 import org.onosproject.incubator.net.virtual.NetworkId;
+import org.onosproject.incubator.net.virtual.VirtualNetworkService;
+import org.onosproject.incubator.net.virtual.VnetService;
 
 /**
  * Basis for virtual event components which need to export listener mechanism.
  */
 public abstract class AbstractVirtualListenerManager
         <E extends Event, L extends EventListener<E>>
-    implements ListenerService<E, L> {
+    implements ListenerService<E, L>, VnetService {
+
+    private static final String NETWORK_NULL = "Network ID cannot be null";
 
     protected final NetworkId networkId;
+    protected final VirtualNetworkService manager;
+    protected final ServiceDirectory serviceDirectory;
 
     protected EventDeliveryService eventDispatcher;
 
     VirtualListenerRegistryManager listenerManager =
             VirtualListenerRegistryManager.getInstance();
 
-    public AbstractVirtualListenerManager(NetworkId networkId) {
+    public AbstractVirtualListenerManager(VirtualNetworkService manager,
+                                          NetworkId networkId) {
+        this.manager = manager;
         this.networkId = networkId;
+        this.serviceDirectory = manager.getServiceDirectory();
+
+        //Set default event delivery service by default
+        this.eventDispatcher = serviceDirectory.get(EventDeliveryService.class);
     }
 
     @Override
@@ -66,13 +79,18 @@
         }
     }
 
+    @Override
+    public NetworkId networkId() {
+        return this.networkId;
+    }
+
     /**
      * Returns the class type of parameter type.
      * More specifically, it returns the class type of event class.
      *
      * @return the class type of provider service of the service
      */
-    private Class getEventClass() {
+    public Class getEventClass() {
         String className = this.getClass().getGenericSuperclass().toString();
         String pramType = className.split("<")[1].split(",")[0];
 
@@ -84,5 +102,4 @@
 
         return null;
     }
-
 }
diff --git a/incubator/api/src/test/java/org/onosproject/incubator/net/virtual/event/AbstractVirtualListenerManagerTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/virtual/event/AbstractVirtualListenerManagerTest.java
index 87b3fc0..33fce56 100644
--- a/incubator/api/src/test/java/org/onosproject/incubator/net/virtual/event/AbstractVirtualListenerManagerTest.java
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/virtual/event/AbstractVirtualListenerManagerTest.java
@@ -16,15 +16,26 @@
 
 package org.onosproject.incubator.net.virtual.event;
 
+import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.MutableClassToInstanceMap;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.onlab.osgi.ServiceDirectory;
 import org.onosproject.event.AbstractEvent;
 import org.onosproject.event.Event;
 import org.onosproject.event.EventDeliveryService;
 import org.onosproject.event.EventListener;
 import org.onosproject.event.EventSink;
 import org.onosproject.incubator.net.virtual.NetworkId;
+import org.onosproject.incubator.net.virtual.TenantId;
+import org.onosproject.incubator.net.virtual.VirtualDevice;
+import org.onosproject.incubator.net.virtual.VirtualHost;
+import org.onosproject.incubator.net.virtual.VirtualLink;
+import org.onosproject.incubator.net.virtual.VirtualNetwork;
+import org.onosproject.incubator.net.virtual.VirtualNetworkService;
+import org.onosproject.incubator.net.virtual.VirtualPort;
+import org.onosproject.net.DeviceId;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -39,6 +50,8 @@
  */
 public class AbstractVirtualListenerManagerTest {
 
+    private VirtualNetworkService manager;
+
     TestEventDispatcher dispatcher = new TestEventDispatcher();
     VirtualListenerRegistryManager listenerRegistryManager =
             VirtualListenerRegistryManager.getInstance();
@@ -54,21 +67,20 @@
 
     @Before
     public void setUp() {
+        manager = new TestVirtualNetworkManager();
+
         dispatcher.addSink(VirtualEvent.class, listenerRegistryManager);
 
         prickleListener = new PrickleListener();
-        prickleManager = new PrickleManager(NetworkId.networkId(1));
-        prickleManager.eventDispatcher = dispatcher;
+        prickleManager = new PrickleManager(manager, NetworkId.networkId(1));
         prickleManager.addListener(prickleListener);
 
         gooListener = new GooListener();
-        gooManager = new GooManager(NetworkId.networkId(1));
-        gooManager.eventDispatcher = dispatcher;
+        gooManager = new GooManager(manager, NetworkId.networkId(1));
         gooManager.addListener(gooListener);
 
         barListener = new BarListener();
-        barManager = new BarManager(NetworkId.networkId(2));
-        barManager.eventDispatcher = dispatcher;
+        barManager = new BarManager(manager, NetworkId.networkId(2));
         barManager.addListener(barListener);
     }
 
@@ -168,7 +180,6 @@
 
         @Override
         public void event(E event) {
-            System.out.println(this.getClass().toString());
             events.add(event);
             latch.countDown();
         }
@@ -184,20 +195,20 @@
     }
 
     private class PrickleManager extends AbstractVirtualListenerManager<Prickle, PrickleListener> {
-        public PrickleManager(NetworkId networkId) {
-            super(networkId);
+        public PrickleManager(VirtualNetworkService service, NetworkId networkId) {
+            super(service, networkId);
         }
     }
 
     private class GooManager extends AbstractVirtualListenerManager<Goo, GooListener> {
-        public GooManager(NetworkId networkId) {
-            super(networkId);
+        public GooManager(VirtualNetworkService service, NetworkId networkId) {
+            super(service, networkId);
         }
     }
 
     private class BarManager extends AbstractVirtualListenerManager<Bar, BarListener> {
-        public BarManager(NetworkId networkId) {
-            super(networkId);
+        public BarManager(VirtualNetworkService service, NetworkId networkId) {
+            super(service, networkId);
         }
     }
 
@@ -242,4 +253,70 @@
             }
         }
     }
+
+    private class TestVirtualNetworkManager implements VirtualNetworkService {
+        TestServiceDirectory serviceDirectory = new TestServiceDirectory();
+
+        public TestVirtualNetworkManager() {
+            serviceDirectory.add(EventDeliveryService.class, dispatcher);
+        }
+
+        @Override
+        public Set<VirtualNetwork> getVirtualNetworks(TenantId tenantId) {
+            return null;
+        }
+
+        @Override
+        public Set<VirtualDevice> getVirtualDevices(NetworkId networkId) {
+            return null;
+        }
+
+        @Override
+        public Set<VirtualHost> getVirtualHosts(NetworkId networkId) {
+            return null;
+        }
+
+        @Override
+        public Set<VirtualLink> getVirtualLinks(NetworkId networkId) {
+            return null;
+        }
+
+        @Override
+        public Set<VirtualPort> getVirtualPorts(NetworkId networkId, DeviceId deviceId) {
+            return null;
+        }
+
+        @Override
+        public <T> T get(NetworkId networkId, Class<T> serviceClass) {
+            return null;
+        }
+
+        @Override
+        public ServiceDirectory getServiceDirectory() {
+            return serviceDirectory;
+        }
+    }
+
+    private  class TestServiceDirectory implements ServiceDirectory {
+
+        private ClassToInstanceMap<Object> services = MutableClassToInstanceMap.create();
+
+        @Override
+        public <T> T get(Class<T> serviceClass) {
+            return services.getInstance(serviceClass);
+        }
+
+        /**
+         * Adds a new service to the directory.
+         *
+         * @param serviceClass service class
+         * @param service service instance
+         * @return self
+         */
+        public TestServiceDirectory add(Class serviceClass, Object service) {
+            services.putInstance(serviceClass, service);
+            return this;
+        }
+
+    }
 }
\ No newline at end of file
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkDeviceManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkDeviceManager.java
index 4b9221e..5f8f433 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkDeviceManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkDeviceManager.java
@@ -17,12 +17,11 @@
 package org.onosproject.incubator.net.virtual.impl;
 
 import com.google.common.collect.ImmutableList;
-import org.onosproject.event.AbstractListenerManager;
+import org.onosproject.incubator.net.virtual.NetworkId;
 import org.onosproject.incubator.net.virtual.VirtualDevice;
-import org.onosproject.incubator.net.virtual.VirtualNetwork;
 import org.onosproject.incubator.net.virtual.VirtualNetworkService;
 import org.onosproject.incubator.net.virtual.VirtualPort;
-import org.onosproject.incubator.net.virtual.VnetService;
+import org.onosproject.incubator.net.virtual.event.AbstractVirtualListenerManager;
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.MastershipRole;
@@ -43,45 +42,39 @@
  * Device service implementation built on the virtual network service.
  */
 public class VirtualNetworkDeviceManager
-        extends AbstractListenerManager<DeviceEvent, DeviceListener>
-        implements DeviceService, VnetService {
+        extends AbstractVirtualListenerManager<DeviceEvent, DeviceListener>
+        implements DeviceService {
 
-    private static final String NETWORK_NULL = "Network ID cannot be null";
     private static final String TYPE_NULL = "Type cannot be null";
     private static final String DEVICE_NULL = "Device cannot be null";
     private static final String PORT_NUMBER_NULL = "PortNumber cannot be null";
 
-    private final VirtualNetwork network;
-    private final VirtualNetworkService manager;
-
     /**
      * Creates a new VirtualNetworkDeviceService object.
      *
      * @param virtualNetworkManager virtual network manager service
-     * @param network               virtual network
+     * @param networkId a virtual network identifier
      */
     public VirtualNetworkDeviceManager(VirtualNetworkService virtualNetworkManager,
-                                       VirtualNetwork network) {
-        checkNotNull(network, NETWORK_NULL);
-        this.network = network;
-        this.manager = virtualNetworkManager;
+                                       NetworkId networkId) {
+        super(virtualNetworkManager, networkId);
     }
 
     @Override
     public int getDeviceCount() {
-        return manager.getVirtualDevices(this.network.id()).size();
+        return manager.getVirtualDevices(this.networkId).size();
     }
 
     @Override
     public Iterable<Device> getDevices() {
         return manager.getVirtualDevices(
-                this.network.id()).stream().collect(Collectors.toSet());
+                this.networkId).stream().collect(Collectors.toSet());
     }
 
     @Override
     public Iterable<Device> getDevices(Device.Type type) {
         checkNotNull(type, TYPE_NULL);
-        return manager.getVirtualDevices(this.network.id())
+        return manager.getVirtualDevices(this.networkId)
                 .stream()
                 .filter(device -> type.equals(device.type()))
                 .collect(Collectors.toSet());
@@ -101,7 +94,7 @@
     public Device getDevice(DeviceId deviceId) {
         checkNotNull(deviceId, DEVICE_NULL);
         Optional<VirtualDevice> foundDevice =
-                manager.getVirtualDevices(this.network.id())
+                manager.getVirtualDevices(this.networkId)
                 .stream()
                 .filter(device -> deviceId.equals(device.id()))
                 .findFirst();
@@ -121,7 +114,7 @@
     @Override
     public List<Port> getPorts(DeviceId deviceId) {
         checkNotNull(deviceId, DEVICE_NULL);
-        return manager.getVirtualPorts(this.network.id(), deviceId)
+        return manager.getVirtualPorts(this.networkId, deviceId)
                 .stream()
                 .collect(Collectors.toList());
     }
@@ -163,7 +156,7 @@
         checkNotNull(deviceId, DEVICE_NULL);
 
         Optional<VirtualPort> foundPort =
-                manager.getVirtualPorts(this.network.id(), deviceId)
+                manager.getVirtualPorts(this.networkId, deviceId)
                 .stream()
                 .filter(port -> port.number().equals(portNumber))
                 .findFirst();
@@ -179,11 +172,6 @@
     }
 
     @Override
-    public VirtualNetwork network() {
-        return network;
-    }
-
-    @Override
     public String localStatus(DeviceId deviceId) {
         // TODO not supported at this time
         return null;
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowRuleManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowRuleManager.java
index b7dd1cb..0ac256e 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowRuleManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowRuleManager.java
@@ -22,15 +22,13 @@
 import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Sets;
-import org.onlab.osgi.ServiceDirectory;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.core.IdGenerator;
-import org.onosproject.event.AbstractListenerManager;
-import org.onosproject.incubator.net.virtual.VirtualNetwork;
-import org.onosproject.incubator.net.virtual.VirtualNetworkAdminService;
+import org.onosproject.incubator.net.virtual.NetworkId;
 import org.onosproject.incubator.net.virtual.VirtualNetworkFlowRuleStore;
-import org.onosproject.incubator.net.virtual.VnetService;
+import org.onosproject.incubator.net.virtual.VirtualNetworkService;
+import org.onosproject.incubator.net.virtual.event.AbstractVirtualListenerManager;
 import org.onosproject.incubator.net.virtual.provider.AbstractVirtualProviderService;
 import org.onosproject.incubator.net.virtual.provider.VirtualFlowRuleProvider;
 import org.onosproject.incubator.net.virtual.provider.VirtualFlowRuleProviderService;
@@ -71,10 +69,9 @@
  * Flow rule service implementation built on the virtual network service.
  */
 public class VirtualNetworkFlowRuleManager
-        extends AbstractListenerManager<FlowRuleEvent, FlowRuleListener>
-        implements FlowRuleService, VnetService {
+        extends AbstractVirtualListenerManager<FlowRuleEvent, FlowRuleListener>
+        implements FlowRuleService {
 
-    private static final String NETWORK_NULL = "Network ID cannot be null";
     private static final String VIRTUAL_FLOW_OP_TOPIC = "virtual-flow-ops-ids";
     private static final String THREAD_GROUP_NAME = "onos/virtual-flowservice";
     private static final String DEVICE_INSTALLER_PATTERN = "device-installer-%d";
@@ -83,8 +80,6 @@
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private final VirtualNetwork network;
-    private final VirtualNetworkAdminService manager;
     private final VirtualNetworkFlowRuleStore store;
     private final DeviceService deviceService;
 
@@ -103,42 +98,35 @@
     private VirtualProviderRegistryService providerRegistryService = null;
     private InternalFlowRuleProviderService innerProviderService = null;
 
-
-
     /**
      * Creates a new VirtualNetworkFlowRuleService object.
      *
      * @param virtualNetworkManager virtual network manager service
-     * @param network               virtual network
-     * @param serviceDirectory      service directory
+     * @param networkId a virtual network identifier
      */
-    public VirtualNetworkFlowRuleManager(VirtualNetworkAdminService virtualNetworkManager,
-                                         VirtualNetwork network,
-                                         ServiceDirectory serviceDirectory) {
-        checkNotNull(network, NETWORK_NULL);
-        this.network = network;
+    public VirtualNetworkFlowRuleManager(VirtualNetworkService virtualNetworkManager,
+                                         NetworkId networkId) {
+        super(virtualNetworkManager, networkId);
 
-        manager = virtualNetworkManager;
         store = serviceDirectory.get(VirtualNetworkFlowRuleStore.class);
         idGenerator = serviceDirectory.get(CoreService.class)
-                .getIdGenerator(VIRTUAL_FLOW_OP_TOPIC + network.id().toString());
-
+                .getIdGenerator(VIRTUAL_FLOW_OP_TOPIC + networkId().toString());
         providerRegistryService =
                 serviceDirectory.get(VirtualProviderRegistryService.class);
         innerProviderService = new InternalFlowRuleProviderService();
-        providerRegistryService.registerProviderService(network.id(), innerProviderService);
+        providerRegistryService.registerProviderService(networkId(), innerProviderService);
 
-        this.deviceService = manager.get(network.id(), DeviceService.class);
+        this.deviceService = manager.get(networkId(), DeviceService.class);
     }
 
     @Override
     public int getFlowRuleCount() {
-        return store.getFlowRuleCount(network.id());
+        return store.getFlowRuleCount(networkId());
     }
 
     @Override
     public Iterable<FlowEntry> getFlowEntries(DeviceId deviceId) {
-        return store.getFlowEntries(network.id(), deviceId);
+        return store.getFlowEntries(networkId(), deviceId);
     }
 
     @Override
@@ -152,7 +140,7 @@
 
     @Override
     public void purgeFlowRules(DeviceId deviceId) {
-        store.purgeFlowRule(network.id(), deviceId);
+        store.purgeFlowRule(networkId(), deviceId);
     }
 
     @Override
@@ -171,11 +159,11 @@
 
     @Override
     public Iterable<FlowRule> getFlowRulesById(ApplicationId id) {
-        DeviceService deviceService = manager.get(network.id(), DeviceService.class);
+        DeviceService deviceService = manager.get(networkId(), DeviceService.class);
 
         Set<FlowRule> flowEntries = Sets.newHashSet();
         for (Device d : deviceService.getDevices()) {
-            for (FlowEntry flowEntry : store.getFlowEntries(network.id(), d.id())) {
+            for (FlowEntry flowEntry : store.getFlowEntries(networkId(), d.id())) {
                 if (flowEntry.appId() == id.id()) {
                     flowEntries.add(flowEntry);
                 }
@@ -186,11 +174,11 @@
 
     @Override
     public Iterable<FlowEntry> getFlowEntriesById(ApplicationId id) {
-        DeviceService deviceService = manager.get(network.id(), DeviceService.class);
+        DeviceService deviceService = manager.get(networkId(), DeviceService.class);
 
         Set<FlowEntry> flowEntries = Sets.newHashSet();
         for (Device d : deviceService.getDevices()) {
-            for (FlowEntry flowEntry : store.getFlowEntries(network.id(), d.id())) {
+            for (FlowEntry flowEntry : store.getFlowEntries(networkId(), d.id())) {
                 if (flowEntry.appId() == id.id()) {
                     flowEntries.add(flowEntry);
                 }
@@ -201,12 +189,12 @@
 
     @Override
     public Iterable<FlowRule> getFlowRulesByGroupId(ApplicationId appId, short groupId) {
-        DeviceService deviceService = manager.get(network.id(), DeviceService.class);
+        DeviceService deviceService = manager.get(networkId(), DeviceService.class);
 
         Set<FlowRule> matches = Sets.newHashSet();
         long toLookUp = ((long) appId.id() << 16) | groupId;
         for (Device d : deviceService.getDevices()) {
-            for (FlowEntry flowEntry : store.getFlowEntries(network.id(), d.id())) {
+            for (FlowEntry flowEntry : store.getFlowEntries(networkId(), d.id())) {
                 if ((flowEntry.id().value() >>> 32) == toLookUp) {
                     matches.add(flowEntry);
                 }
@@ -222,7 +210,7 @@
 
     @Override
     public Iterable<TableStatisticsEntry> getFlowTableStatistics(DeviceId deviceId) {
-        return store.getTableStatistics(network.id(), deviceId);
+        return store.getTableStatistics(networkId(), deviceId);
     }
 
     private static FlowRuleBatchEntry.FlowRuleOperation mapOperationType(FlowRuleOperation.Type input) {
@@ -238,11 +226,6 @@
         }
     }
 
-    @Override
-    public VirtualNetwork network() {
-        return this.network;
-    }
-
     private class FlowOperationsProcessor implements Runnable {
         // Immutable
         private final FlowRuleOperations fops;
@@ -280,7 +263,7 @@
                 final FlowRuleBatchOperation b = new FlowRuleBatchOperation(perDeviceBatches.get(deviceId),
                                                                             deviceId, id);
                 pendingFlowOperations.put(id, this);
-                deviceInstallers.execute(() -> store.storeBatch(network.id(), b));
+                deviceInstallers.execute(() -> store.storeBatch(networkId(), b));
             }
         }
 
@@ -319,7 +302,7 @@
 
             lastSeen.remove(flowEntry);
             firstSeen.remove(flowEntry);
-            FlowEntry stored = store.getFlowEntry(network.id(), flowEntry);
+            FlowEntry stored = store.getFlowEntry(networkId(), flowEntry);
             if (stored == null) {
                 log.debug("Rule already evicted from store: {}", flowEntry);
                 return;
@@ -334,11 +317,11 @@
             switch (stored.state()) {
                 case ADDED:
                 case PENDING_ADD:
-                    provider().applyFlowRule(network.id(), stored);
+                    provider().applyFlowRule(networkId(), stored);
                     break;
                 case PENDING_REMOVE:
                 case REMOVED:
-                    event = store.removeFlowRule(network.id(), stored);
+                    event = store.removeFlowRule(networkId(), stored);
                     break;
                 default:
                     break;
@@ -359,13 +342,13 @@
             switch (flowRule.state()) {
                 case PENDING_REMOVE:
                 case REMOVED:
-                    event = store.removeFlowRule(network.id(), flowRule);
+                    event = store.removeFlowRule(networkId(), flowRule);
                     break;
                 case ADDED:
                 case PENDING_ADD:
-                    event = store.pendingFlowRule(network.id(), flowRule);
+                    event = store.pendingFlowRule(networkId(), flowRule);
                     try {
-                        provider().applyFlowRule(network.id(), flowRule);
+                        provider().applyFlowRule(networkId(), flowRule);
                     } catch (UnsupportedOperationException e) {
                         log.warn(e.getMessage());
                         if (flowRule instanceof DefaultFlowEntry) {
@@ -388,15 +371,15 @@
             checkNotNull(flowRule, FLOW_RULE_NULL);
             checkValidity();
 
-            provider().removeFlowRule(network.id(), flowRule);
+            provider().removeFlowRule(networkId(), flowRule);
             log.debug("Flow {} is on switch but not in store.", flowRule);
         }
 
         private void flowAdded(FlowEntry flowEntry) {
             checkNotNull(flowEntry, FLOW_RULE_NULL);
 
-            if (checkRuleLiveness(flowEntry, store.getFlowEntry(network.id(), flowEntry))) {
-                FlowRuleEvent event = store.addOrUpdateFlowRule(network.id(), flowEntry);
+            if (checkRuleLiveness(flowEntry, store.getFlowEntry(networkId(), flowEntry))) {
+                FlowRuleEvent event = store.addOrUpdateFlowRule(networkId(), flowEntry);
                 if (event == null) {
                     log.debug("No flow store event generated.");
                 } else {
@@ -463,7 +446,7 @@
         private void pushFlowMetricsInternal(DeviceId deviceId, Iterable<FlowEntry> flowEntries,
                                              boolean useMissingFlow) {
             Map<FlowEntry, FlowEntry> storedRules = Maps.newHashMap();
-            store.getFlowEntries(network.id(), deviceId).forEach(f -> storedRules.put(f, f));
+            store.getFlowEntries(networkId(), deviceId).forEach(f -> storedRules.put(f, f));
 
             for (FlowEntry rule : flowEntries) {
                 try {
@@ -499,7 +482,7 @@
         }
 
         public void batchOperationCompleted(long batchId, CompletedBatchOperation operation) {
-            store.batchOperationComplete(network.id(), FlowRuleBatchEvent.completed(
+            store.batchOperationComplete(networkId(), FlowRuleBatchEvent.completed(
                     new FlowRuleBatchRequest(batchId, Collections.emptySet()),
                     operation
             ));
@@ -508,7 +491,7 @@
         @Override
         public void pushTableStatistics(DeviceId deviceId,
                                         List<TableStatisticsEntry> tableStats) {
-            store.updateTableStatistics(network.id(), deviceId, tableStats);
+            store.updateTableStatistics(networkId(), deviceId, tableStats);
         }
     }
 }
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkHostManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkHostManager.java
index 92c165f7..216a76b 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkHostManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkHostManager.java
@@ -19,11 +19,10 @@
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.VlanId;
-import org.onosproject.event.AbstractListenerManager;
+import org.onosproject.incubator.net.virtual.NetworkId;
 import org.onosproject.incubator.net.virtual.VirtualHost;
-import org.onosproject.incubator.net.virtual.VirtualNetwork;
 import org.onosproject.incubator.net.virtual.VirtualNetworkService;
-import org.onosproject.incubator.net.virtual.VnetService;
+import org.onosproject.incubator.net.virtual.event.AbstractVirtualListenerManager;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Host;
@@ -45,32 +44,26 @@
  * Host service implementation built on the virtual network service.
  */
 public class VirtualNetworkHostManager
-        extends AbstractListenerManager<HostEvent, HostListener>
-        implements HostService, VnetService {
+        extends AbstractVirtualListenerManager<HostEvent, HostListener>
+        implements HostService {
 
-    private static final String NETWORK_NULL = "Network ID cannot be null";
     private static final String HOST_NULL = "Host ID cannot be null";
 
-    private final VirtualNetwork network;
-    private final VirtualNetworkService manager;
-
     /**
      * Creates a new virtual network host service object.
      *
      * @param virtualNetworkManager virtual network manager service
-     * @param network               virtual network
+     * @param networkId a virtual network identifier
      */
     public VirtualNetworkHostManager(VirtualNetworkService virtualNetworkManager,
-                                     VirtualNetwork network) {
-        checkNotNull(network, NETWORK_NULL);
-        this.network = network;
-        this.manager = virtualNetworkManager;
+                                     NetworkId networkId) {
+        super(virtualNetworkManager, networkId);
     }
 
 
     @Override
     public int getHostCount() {
-        return manager.getVirtualHosts(this.network.id()).size();
+        return manager.getVirtualHosts(this.networkId()).size();
     }
 
     @Override
@@ -82,7 +75,7 @@
     public Host getHost(HostId hostId) {
         checkNotNull(hostId, HOST_NULL);
         Optional<VirtualHost> foundHost =
-                manager.getVirtualHosts(this.network.id())
+                manager.getVirtualHosts(this.networkId())
                 .stream()
                 .filter(host -> hostId.equals(host.id()))
                 .findFirst();
@@ -98,7 +91,7 @@
      * @return collection of virtual hosts.
      */
     private Collection<Host> getHostsColl() {
-        return manager.getVirtualHosts(this.network.id())
+        return manager.getVirtualHosts(this.networkId())
                 .stream().collect(Collectors.toSet());
     }
 
@@ -157,9 +150,4 @@
     public void requestMac(IpAddress ip) {
         //TODO check what needs to be done here
     }
-
-    @Override
-    public VirtualNetwork network() {
-        return network;
-    }
 }
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkIntentManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkIntentManager.java
index 7b00e1d..4026cb5 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkIntentManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkIntentManager.java
@@ -17,14 +17,13 @@
 package org.onosproject.incubator.net.virtual.impl;
 
 import com.google.common.collect.Iterators;
-import org.onlab.osgi.ServiceDirectory;
-import org.onosproject.event.AbstractListenerManager;
-import org.onosproject.incubator.net.virtual.VirtualNetwork;
+import org.onosproject.incubator.net.virtual.NetworkId;
 import org.onosproject.incubator.net.virtual.VirtualNetworkIntent;
 import org.onosproject.incubator.net.virtual.VirtualNetworkService;
 import org.onosproject.incubator.net.virtual.VirtualNetworkStore;
 import org.onosproject.incubator.net.virtual.VirtualPort;
 import org.onosproject.incubator.net.virtual.VnetService;
+import org.onosproject.incubator.net.virtual.event.AbstractVirtualListenerManager;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Port;
@@ -50,12 +49,11 @@
  * Intent service implementation built on the virtual network service.
  */
 public class VirtualNetworkIntentManager
-        extends AbstractListenerManager<IntentEvent, IntentListener>
+        extends AbstractVirtualListenerManager<IntentEvent, IntentListener>
         implements IntentService, VnetService {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private static final String NETWORK_NULL = "Network cannot be null";
     private static final String NETWORK_ID_NULL = "Network ID cannot be null";
     private static final String DEVICE_NULL = "Device cannot be null";
     private static final String INTENT_NULL = "Intent cannot be null";
@@ -68,22 +66,17 @@
     protected VirtualNetworkStore store;
     protected WorkPartitionService partitionService;
 
-    private final VirtualNetwork network;
-    private final VirtualNetworkService manager;
-
     /**
      * Creates a new VirtualNetworkIntentService object.
      *
      * @param virtualNetworkManager virtual network manager service
-     * @param network               virtual network
-     * @param serviceDirectory      service directory
+     * @param networkId a virtual network identifier
      */
     public VirtualNetworkIntentManager(VirtualNetworkService virtualNetworkManager,
-                                       VirtualNetwork network,
-                                       ServiceDirectory serviceDirectory) {
-        checkNotNull(network, NETWORK_NULL);
-        this.network = network;
-        this.manager = virtualNetworkManager;
+                                       NetworkId networkId) {
+
+        super(virtualNetworkManager, networkId);
+
         this.store = serviceDirectory.get(VirtualNetworkStore.class);
         this.intentService = serviceDirectory.get(IntentService.class);
         this.partitionService = serviceDirectory.get(WorkPartitionService.class);
@@ -137,7 +130,7 @@
     private Port getPort(DeviceId deviceId, PortNumber portNumber) {
         checkNotNull(deviceId, DEVICE_NULL);
 
-        Optional<VirtualPort> foundPort = manager.getVirtualPorts(this.network.id(), deviceId)
+        Optional<VirtualPort> foundPort = manager.getVirtualPorts(this.networkId(), deviceId)
                 .stream()
                 .filter(port -> port.number().equals(portNumber))
                 .findFirst();
@@ -240,10 +233,4 @@
     public Iterable<Intent> getPending() {
         return null;
     }
-
-
-    @Override
-    public VirtualNetwork network() {
-        return network;
-    }
 }
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkLinkManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkLinkManager.java
index b89a06f..3a93e3c 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkLinkManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkLinkManager.java
@@ -16,11 +16,10 @@
 
 package org.onosproject.incubator.net.virtual.impl;
 
-import org.onosproject.event.AbstractListenerManager;
+import org.onosproject.incubator.net.virtual.NetworkId;
 import org.onosproject.incubator.net.virtual.VirtualLink;
-import org.onosproject.incubator.net.virtual.VirtualNetwork;
 import org.onosproject.incubator.net.virtual.VirtualNetworkService;
-import org.onosproject.incubator.net.virtual.VnetService;
+import org.onosproject.incubator.net.virtual.event.AbstractVirtualListenerManager;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Link;
@@ -38,49 +37,38 @@
  * Link service implementation built on the virtual network service.
  */
 public class VirtualNetworkLinkManager
-        extends AbstractListenerManager<LinkEvent, LinkListener>
-        implements LinkService, VnetService {
+        extends AbstractVirtualListenerManager<LinkEvent, LinkListener>
+        implements LinkService {
 
-    private static final String NETWORK_NULL = "Network ID cannot be null";
     private static final String DEVICE_NULL = "Device cannot be null";
     private static final String CONNECT_POINT_NULL = "Connect point cannot be null";
 
-    private final VirtualNetwork network;
-    private final VirtualNetworkService manager;
-
     /**
      * Creates a new VirtualNetworkLinkService object.
      *
      * @param virtualNetworkManager virtual network manager service
-     * @param network               virtual network
+     * @param networkId a virtual networkIdentifier
      */
     public VirtualNetworkLinkManager(VirtualNetworkService virtualNetworkManager,
-                                     VirtualNetwork network) {
-        checkNotNull(network, NETWORK_NULL);
-        this.network = network;
-        this.manager = virtualNetworkManager;
-    }
-
-    @Override
-    public VirtualNetwork network() {
-        return network;
+                                     NetworkId networkId) {
+        super(virtualNetworkManager, networkId);
     }
 
     @Override
     public int getLinkCount() {
-        return manager.getVirtualLinks(this.network.id()).size();
+        return manager.getVirtualLinks(this.networkId()).size();
     }
 
     @Override
     public Iterable<Link> getLinks() {
-        return manager.getVirtualLinks(this.network.id())
+        return manager.getVirtualLinks(this.networkId())
                 .stream().collect(Collectors.toSet());
     }
 
     @Override
     public Iterable<Link> getActiveLinks() {
 
-        return manager.getVirtualLinks(this.network.id())
+        return manager.getVirtualLinks(this.networkId())
                 .stream()
                 .filter(link -> (link.state().equals(Link.State.ACTIVE)))
                 .collect(Collectors.toSet());
@@ -89,7 +77,7 @@
     @Override
     public Set<Link> getDeviceLinks(DeviceId deviceId) {
         checkNotNull(deviceId, DEVICE_NULL);
-        return manager.getVirtualLinks(this.network.id())
+        return manager.getVirtualLinks(this.networkId())
                 .stream()
                 .filter(link -> (deviceId.equals(link.src().elementId()) ||
                         deviceId.equals(link.dst().elementId())))
@@ -99,7 +87,7 @@
     @Override
     public Set<Link> getDeviceEgressLinks(DeviceId deviceId) {
         checkNotNull(deviceId, DEVICE_NULL);
-        return manager.getVirtualLinks(this.network.id())
+        return manager.getVirtualLinks(this.networkId())
                 .stream()
                 .filter(link -> (deviceId.equals(link.dst().elementId())))
                 .collect(Collectors.toSet());
@@ -108,7 +96,7 @@
     @Override
     public Set<Link> getDeviceIngressLinks(DeviceId deviceId) {
         checkNotNull(deviceId, DEVICE_NULL);
-        return manager.getVirtualLinks(this.network.id())
+        return manager.getVirtualLinks(this.networkId())
                 .stream()
                 .filter(link -> (deviceId.equals(link.src().elementId())))
                 .collect(Collectors.toSet());
@@ -117,7 +105,7 @@
     @Override
     public Set<Link> getLinks(ConnectPoint connectPoint) {
         checkNotNull(connectPoint, CONNECT_POINT_NULL);
-        return manager.getVirtualLinks(this.network.id())
+        return manager.getVirtualLinks(this.networkId())
                 .stream()
                 .filter(link -> (connectPoint.equals(link.src()) ||
                         connectPoint.equals(link.dst())))
@@ -127,7 +115,7 @@
     @Override
     public Set<Link> getEgressLinks(ConnectPoint connectPoint) {
         checkNotNull(connectPoint, CONNECT_POINT_NULL);
-        return manager.getVirtualLinks(this.network.id())
+        return manager.getVirtualLinks(this.networkId())
                 .stream()
                 .filter(link -> (connectPoint.equals(link.dst())))
                 .collect(Collectors.toSet());
@@ -136,7 +124,7 @@
     @Override
     public Set<Link> getIngressLinks(ConnectPoint connectPoint) {
         checkNotNull(connectPoint, CONNECT_POINT_NULL);
-        return manager.getVirtualLinks(this.network.id())
+        return manager.getVirtualLinks(this.networkId())
                 .stream()
                 .filter(link -> (connectPoint.equals(link.src())))
                 .collect(Collectors.toSet());
@@ -146,7 +134,7 @@
     public Link getLink(ConnectPoint src, ConnectPoint dst) {
         checkNotNull(src, CONNECT_POINT_NULL);
         checkNotNull(dst, CONNECT_POINT_NULL);
-        Optional<VirtualLink> foundLink =  manager.getVirtualLinks(this.network.id())
+        Optional<VirtualLink> foundLink =  manager.getVirtualLinks(this.networkId())
                 .stream()
                 .filter(link -> (src.equals(link.src()) &&
                         dst.equals(link.dst())))
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManager.java
index f3c7281..2665641 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManager.java
@@ -23,6 +23,7 @@
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
 import org.onlab.osgi.DefaultServiceDirectory;
+import org.onlab.osgi.ServiceDirectory;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.VlanId;
@@ -101,6 +102,8 @@
 
     private VirtualNetworkStoreDelegate delegate = this::post;
 
+    private ServiceDirectory serviceDirectory = new DefaultServiceDirectory();
+
     // TODO: figure out how to coordinate "implementation" of a virtual network in a cluster
 
     /**
@@ -294,6 +297,11 @@
     }
 
     @Override
+    public ServiceDirectory getServiceDirectory() {
+        return serviceDirectory;
+    }
+
+    @Override
     public Set<VirtualNetwork> getVirtualNetworks(TenantId tenantId) {
         checkNotNull(tenantId, TENANT_NULL);
         return store.getNetworks(tenantId);
@@ -379,23 +387,22 @@
     private VnetService create(ServiceKey serviceKey) {
         VirtualNetwork network = getVirtualNetwork(serviceKey.networkId());
         checkNotNull(network, NETWORK_NULL);
+
         VnetService service;
         if (serviceKey.serviceClass.equals(DeviceService.class)) {
-            service = new VirtualNetworkDeviceManager(this, network);
+            service = new VirtualNetworkDeviceManager(this, network.id());
         } else if (serviceKey.serviceClass.equals(LinkService.class)) {
-            service = new VirtualNetworkLinkManager(this, network);
+            service = new VirtualNetworkLinkManager(this, network.id());
         } else if (serviceKey.serviceClass.equals(TopologyService.class)) {
-            service = new VirtualNetworkTopologyManager(this, network);
+            service = new VirtualNetworkTopologyManager(this, network.id());
         } else if (serviceKey.serviceClass.equals(IntentService.class)) {
-            service = new VirtualNetworkIntentManager(
-                    this, network, new DefaultServiceDirectory());
+            service = new VirtualNetworkIntentManager(this, network.id());
         } else if (serviceKey.serviceClass.equals(HostService.class)) {
-            service = new VirtualNetworkHostManager(this, network);
+            service = new VirtualNetworkHostManager(this, network.id());
         } else if (serviceKey.serviceClass.equals(PathService.class)) {
-            service = new VirtualNetworkPathManager(this, network);
+            service = new VirtualNetworkPathManager(this, network.id());
         } else if (serviceKey.serviceClass.equals(FlowRuleService.class)) {
-            service = new VirtualNetworkFlowRuleManager(this, network,
-                                                        new DefaultServiceDirectory());
+            service = new VirtualNetworkFlowRuleManager(this, network.id());
         } else {
             return null;
         }
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPathManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPathManager.java
index ad81141..7d6555a 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPathManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPathManager.java
@@ -15,7 +15,7 @@
  */
 package org.onosproject.incubator.net.virtual.impl;
 
-import org.onosproject.incubator.net.virtual.VirtualNetwork;
+import org.onosproject.incubator.net.virtual.NetworkId;
 import org.onosproject.incubator.net.virtual.VirtualNetworkService;
 import org.onosproject.incubator.net.virtual.VnetService;
 import org.onosproject.net.DisjointPath;
@@ -31,8 +31,6 @@
 import java.util.Map;
 import java.util.Set;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-
 /**
  * Path service implementation built on the virtual network service.
  */
@@ -40,23 +38,21 @@
         extends AbstractPathService
         implements PathService, VnetService {
 
-    private static final String NETWORK_NULL = "Network ID cannot be null";
-
-    private final VirtualNetwork network;
+    private final NetworkId networkId;
 
     /**
      * Creates a new virtual network path service object.
      *
      * @param virtualNetworkManager virtual network manager service
-     * @param network               virtual network
+     * @param networkId a virtual network identifier
      */
 
     public VirtualNetworkPathManager(VirtualNetworkService virtualNetworkManager,
-                                     VirtualNetwork network) {
-        checkNotNull(network, NETWORK_NULL);
-        this.network = network;
-        topologyService = virtualNetworkManager.get(network.id(), TopologyService.class);
-        hostService = virtualNetworkManager.get(network.id(), HostService.class);
+                                     NetworkId networkId) {
+        this.networkId = networkId;
+
+        topologyService = virtualNetworkManager.get(networkId(), TopologyService.class);
+        hostService = virtualNetworkManager.get(networkId(), HostService.class);
     }
 
     @Override
@@ -76,7 +72,7 @@
     }
 
     @Override
-    public VirtualNetwork network() {
-        return network;
+    public NetworkId networkId() {
+        return this.networkId;
     }
 }
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkTopologyManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkTopologyManager.java
index e49fa6f..e361a3b 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkTopologyManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkTopologyManager.java
@@ -17,10 +17,9 @@
 package org.onosproject.incubator.net.virtual.impl;
 
 import org.onosproject.common.DefaultTopology;
-import org.onosproject.event.AbstractListenerManager;
-import org.onosproject.incubator.net.virtual.VirtualNetwork;
+import org.onosproject.incubator.net.virtual.NetworkId;
 import org.onosproject.incubator.net.virtual.VirtualNetworkService;
-import org.onosproject.incubator.net.virtual.VnetService;
+import org.onosproject.incubator.net.virtual.event.AbstractVirtualListenerManager;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
@@ -49,10 +48,9 @@
  * Topology service implementation built on the virtual network service.
  */
 public class VirtualNetworkTopologyManager
-        extends AbstractListenerManager<TopologyEvent, TopologyListener>
-        implements TopologyService, VnetService {
+        extends AbstractVirtualListenerManager<TopologyEvent, TopologyListener>
+        implements TopologyService {
 
-    private static final String NETWORK_NULL = "Network ID cannot be null";
     private static final String TOPOLOGY_NULL = "Topology cannot be null";
     private static final String DEVICE_ID_NULL = "Device ID cannot be null";
     private static final String CLUSTER_ID_NULL = "Cluster ID cannot be null";
@@ -60,28 +58,23 @@
     private static final String CONNECTION_POINT_NULL = "Connection point cannot be null";
     private static final String LINK_WEIGHT_NULL = "Link weight cannot be null";
 
-    private final VirtualNetwork network;
-    private final VirtualNetworkService manager;
-
     /**
      * Creates a new VirtualNetworkTopologyService object.
      *
      * @param virtualNetworkManager virtual network manager service
-     * @param network               virtual network
+     * @param networkId a virtual network identifier
      */
     public VirtualNetworkTopologyManager(VirtualNetworkService virtualNetworkManager,
-                                         VirtualNetwork network) {
-        checkNotNull(network, NETWORK_NULL);
-        this.network = network;
-        this.manager = virtualNetworkManager;
+                                         NetworkId networkId) {
+        super(virtualNetworkManager, networkId);
     }
 
     @Override
     public Topology currentTopology() {
-        Iterable<Device> devices = manager.getVirtualDevices(network().id())
+        Iterable<Device> devices = manager.getVirtualDevices(networkId())
                 .stream()
                 .collect(Collectors.toSet());
-        Iterable<Link> links = manager.getVirtualLinks(network().id())
+        Iterable<Link> links = manager.getVirtualLinks(networkId())
                 .stream()
                 .collect(Collectors.toSet());
 
@@ -194,9 +187,4 @@
         checkNotNull(connectPoint, CONNECTION_POINT_NULL);
         return defaultTopology(topology).isBroadcastPoint(connectPoint);
     }
-
-    @Override
-    public VirtualNetwork network() {
-        return network;
-    }
 }
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkDeviceManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkDeviceManagerTest.java
index 41b3925..e319e30 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkDeviceManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkDeviceManagerTest.java
@@ -21,6 +21,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.onlab.junit.TestUtils;
+import org.onlab.osgi.TestServiceDirectory;
 import org.onosproject.common.event.impl.TestEventDispatcher;
 import org.onosproject.core.CoreService;
 import org.onosproject.core.CoreServiceAdapter;
@@ -56,14 +57,14 @@
     private DistributedVirtualNetworkStore virtualNetworkManagerStore;
     private CoreService coreService;
     private TestableIntentService intentService = new FakeIntentManager();
+    private TestServiceDirectory testDirectory;
 
     @Before
     public void setUp() throws Exception {
         virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
 
         coreService = new VirtualNetworkDeviceManagerTest.TestCoreService();
-        virtualNetworkManagerStore.setCoreService(coreService);
-        TestUtils.setField(coreService, "coreService", new VirtualNetworkDeviceManagerTest.TestCoreService());
+        TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService);
         TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
         virtualNetworkManagerStore.activate();
 
@@ -71,6 +72,10 @@
         manager.store = virtualNetworkManagerStore;
         manager.intentService = intentService;
         NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
+
+        testDirectory = new TestServiceDirectory();
+        TestUtils.setField(manager, "serviceDirectory", testDirectory);
+
         manager.activate();
     }
 
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowRuleManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowRuleManagerTest.java
index 086e9b8..593c6d6 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowRuleManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowRuleManagerTest.java
@@ -25,7 +25,6 @@
 import org.onlab.junit.TestUtils;
 import org.onlab.osgi.ServiceDirectory;
 import org.onlab.osgi.TestServiceDirectory;
-import org.onlab.rest.BaseResource;
 import org.onosproject.TestApplicationId;
 import org.onosproject.common.event.impl.TestEventDispatcher;
 import org.onosproject.core.ApplicationId;
@@ -108,13 +107,12 @@
 
     private ApplicationId appId;
 
-
     @Before
     public void setUp() throws Exception {
         virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
 
         CoreService coreService = new TestCoreService();
-        virtualNetworkManagerStore.setCoreService(coreService);
+        TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService);
         TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
         virtualNetworkManagerStore.activate();
 
@@ -128,24 +126,23 @@
         manager.intentService = intentService;
         TestUtils.setField(manager, "coreService", coreService);
         NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
-        manager.activate();
 
         appId = new TestApplicationId("FlowRuleManagerTest");
 
-
         testDirectory = new TestServiceDirectory()
                 .add(VirtualNetworkStore.class, virtualNetworkManagerStore)
                 .add(CoreService.class, coreService)
                 .add(VirtualProviderRegistryService.class, providerRegistryService)
                 .add(VirtualNetworkFlowRuleStore.class, flowRuleStore);
+        TestUtils.setField(manager, "serviceDirectory", testDirectory);
 
-        BaseResource.setServiceDirectory(testDirectory);
+        manager.activate();
 
         vnet1 = setupVirtualNetworkTopology(tid1);
         vnet2 = setupVirtualNetworkTopology(tid2);
 
-        vnetFlowRuleService1 = new VirtualNetworkFlowRuleManager(manager, vnet1, testDirectory);
-        vnetFlowRuleService2 = new VirtualNetworkFlowRuleManager(manager, vnet2, testDirectory);
+        vnetFlowRuleService1 = new VirtualNetworkFlowRuleManager(manager, vnet1.id());
+        vnetFlowRuleService2 = new VirtualNetworkFlowRuleManager(manager, vnet2.id());
         vnetFlowRuleService1.addListener(listener1);
 
         vnetFlowRuleService1.operationsService = MoreExecutors.newDirectExecutorService();
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkHostManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkHostManagerTest.java
index ca1a314..ed0f3c2 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkHostManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkHostManagerTest.java
@@ -21,6 +21,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.onlab.junit.TestUtils;
+import org.onlab.osgi.TestServiceDirectory;
 import org.onosproject.common.event.impl.TestEventDispatcher;
 import org.onosproject.core.CoreService;
 import org.onosproject.incubator.net.virtual.TenantId;
@@ -51,13 +52,14 @@
     private VirtualNetworkManager manager;
     private DistributedVirtualNetworkStore virtualNetworkManagerStore;
     private TestableIntentService intentService = new FakeIntentManager();
+    private TestServiceDirectory testDirectory;
 
     @Before
     public void setUp() throws Exception {
         virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
 
         CoreService coreService = new TestCoreService();
-        virtualNetworkManagerStore.setCoreService(coreService);
+        TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService);
         TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
         virtualNetworkManagerStore.activate();
 
@@ -65,6 +67,10 @@
         manager.store = virtualNetworkManagerStore;
         manager.intentService = intentService;
         NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
+
+        testDirectory = new TestServiceDirectory();
+        TestUtils.setField(manager, "serviceDirectory", testDirectory);
+
         manager.activate();
     }
 
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkIntentManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkIntentManagerTest.java
index f7434d4..55232d1 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkIntentManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkIntentManagerTest.java
@@ -124,8 +124,7 @@
         Intent.unbindIdGenerator(idGenerator);
         Intent.bindIdGenerator(idGenerator);
 
-        virtualNetworkManagerStore.setCoreService(coreService);
-        TestUtils.setField(coreService, "coreService", new VirtualNetworkIntentManagerTest.TestCoreService());
+        TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService);
         TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
         virtualNetworkManagerStore.activate();
 
@@ -133,7 +132,6 @@
         manager.store = virtualNetworkManagerStore;
         NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
         manager.intentService = intentService;
-        manager.activate();
         intentService.addListener(listener);
 
         // Register a compiler and an installer both setup for success.
@@ -150,6 +148,9 @@
                 .add(IntentService.class, intentService)
                 .add(WorkPartitionService.class, workPartitionService);
         BaseResource.setServiceDirectory(testDirectory);
+        TestUtils.setField(manager, "serviceDirectory", testDirectory);
+
+        manager.activate();
     }
 
     @After
@@ -214,7 +215,7 @@
         link4 = manager.createVirtualLink(virtualNetwork.id(), cp5, cp4);
         virtualNetworkManagerStore.updateLink(link4, link4.tunnelId(), Link.State.ACTIVE);
 
-        vnetIntentService = new VirtualNetworkIntentManager(manager, virtualNetwork, testDirectory);
+        vnetIntentService = new VirtualNetworkIntentManager(manager, virtualNetwork.id());
         vnetIntentService.intentService = intentService;
         vnetIntentService.store = virtualNetworkManagerStore;
         vnetIntentService.partitionService = workPartitionService;
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkLinkManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkLinkManagerTest.java
index 7615fe7..70f1c1b 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkLinkManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkLinkManagerTest.java
@@ -21,6 +21,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.onlab.junit.TestUtils;
+import org.onlab.osgi.TestServiceDirectory;
 import org.onosproject.common.event.impl.TestEventDispatcher;
 import org.onosproject.core.CoreService;
 import org.onosproject.core.CoreServiceAdapter;
@@ -57,14 +58,14 @@
     private DistributedVirtualNetworkStore virtualNetworkManagerStore;
     private CoreService coreService;
     private TestableIntentService intentService = new FakeIntentManager();
+    private TestServiceDirectory testDirectory;
 
     @Before
     public void setUp() throws Exception {
         virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
 
         coreService = new VirtualNetworkLinkManagerTest.TestCoreService();
-        virtualNetworkManagerStore.setCoreService(coreService);
-        TestUtils.setField(coreService, "coreService", new VirtualNetworkLinkManagerTest.TestCoreService());
+        TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService);
         TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
         virtualNetworkManagerStore.activate();
 
@@ -72,6 +73,10 @@
         manager.store = virtualNetworkManagerStore;
         manager.intentService = intentService;
         NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
+
+        testDirectory = new TestServiceDirectory();
+        TestUtils.setField(manager, "serviceDirectory", testDirectory);
+
         manager.activate();
     }
 
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java
index b9f259b..6bf9ed2 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java
@@ -22,6 +22,7 @@
 import org.junit.Test;
 import org.onlab.junit.TestTools;
 import org.onlab.junit.TestUtils;
+import org.onlab.osgi.TestServiceDirectory;
 import org.onosproject.common.event.impl.TestEventDispatcher;
 import org.onosproject.core.CoreService;
 import org.onosproject.core.CoreServiceAdapter;
@@ -86,14 +87,15 @@
     private ConnectPoint cp6;
     private ConnectPoint cp7;
 
+    private TestServiceDirectory testDirectory;
+
     @Before
     public void setUp() throws Exception {
         virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
         Intent.bindIdGenerator(idGenerator);
 
         coreService = new TestCoreService();
-        virtualNetworkManagerStore.setCoreService(coreService);
-        TestUtils.setField(coreService, "coreService", new TestCoreService());
+        TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService);
         TestUtils.setField(virtualNetworkManagerStore, "storageService",
                            new TestStorageService());
         virtualNetworkManagerStore.activate();
@@ -103,6 +105,10 @@
         manager.addListener(listener);
         manager.intentService = intentService;
         NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
+
+        testDirectory = new TestServiceDirectory();
+        TestUtils.setField(manager, "serviceDirectory", testDirectory);
+
         manager.activate();
     }
 
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPathManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPathManagerTest.java
index 0a8ecf6..768bc4d 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPathManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPathManagerTest.java
@@ -20,6 +20,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.onlab.junit.TestUtils;
+import org.onlab.osgi.TestServiceDirectory;
 import org.onosproject.common.event.impl.TestEventDispatcher;
 import org.onosproject.core.CoreService;
 import org.onosproject.incubator.net.virtual.TenantId;
@@ -56,12 +57,14 @@
     private DistributedVirtualNetworkStore virtualNetworkManagerStore;
     private final TestableIntentService intentService = new FakeIntentManager();
 
+    private TestServiceDirectory testDirectory;
+
     @Before
     public void setUp() throws Exception {
         virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
 
         CoreService coreService = new TestCoreService();
-        virtualNetworkManagerStore.setCoreService(coreService);
+        TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService);
         TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
         virtualNetworkManagerStore.activate();
 
@@ -69,6 +72,10 @@
         manager.store = virtualNetworkManagerStore;
         manager.intentService = intentService;
         NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
+
+        testDirectory = new TestServiceDirectory();
+        TestUtils.setField(manager, "serviceDirectory", testDirectory);
+
         manager.activate();
     }
 
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkTopologyManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkTopologyManagerTest.java
index 1072f2a..4e5a81c 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkTopologyManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkTopologyManagerTest.java
@@ -20,6 +20,8 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.onlab.junit.TestUtils;
+import org.onlab.osgi.TestServiceDirectory;
+import org.onlab.rest.BaseResource;
 import org.onosproject.common.event.impl.TestEventDispatcher;
 import org.onosproject.core.CoreService;
 import org.onosproject.core.CoreServiceAdapter;
@@ -65,21 +67,25 @@
     private DistributedVirtualNetworkStore virtualNetworkManagerStore;
     private CoreService coreService;
     private TestableIntentService intentService = new FakeIntentManager();
+    private TestServiceDirectory testDirectory;
 
     @Before
     public void setUp() throws Exception {
         virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
-
         coreService = new VirtualNetworkTopologyManagerTest.TestCoreService();
-        virtualNetworkManagerStore.setCoreService(coreService);
-        TestUtils.setField(coreService, "coreService", new VirtualNetworkTopologyManagerTest.TestCoreService());
+        TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService);
         TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
         virtualNetworkManagerStore.activate();
 
+        BaseResource.setServiceDirectory(testDirectory);
         manager = new VirtualNetworkManager();
         manager.store = virtualNetworkManagerStore;
         manager.intentService = intentService;
         NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
+
+        testDirectory = new TestServiceDirectory();
+        TestUtils.setField(manager, "serviceDirectory", testDirectory);
+
         manager.activate();
     }
 
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/provider/VirtualNetworkTopologyProviderTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/provider/VirtualNetworkTopologyProviderTest.java
index d23d132..1391506 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/provider/VirtualNetworkTopologyProviderTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/provider/VirtualNetworkTopologyProviderTest.java
@@ -20,6 +20,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.onlab.junit.TestUtils;
+import org.onlab.osgi.TestServiceDirectory;
 import org.onosproject.common.event.impl.TestEventDispatcher;
 import org.onosproject.core.CoreService;
 import org.onosproject.core.CoreServiceAdapter;
@@ -88,6 +89,7 @@
     private DefaultVirtualNetworkProvider topologyProvider;
     private TopologyService topologyService;
     private TestableIntentService intentService = new FakeIntentManager();
+    private TestServiceDirectory testDirectory;
     private final VirtualNetworkRegistryAdapter virtualNetworkRegistry = new VirtualNetworkRegistryAdapter();
 
     private static final int MAX_WAIT_TIME = 5;
@@ -112,6 +114,10 @@
         TestUtils.setField(manager, "store", virtualNetworkManagerStore);
         TestUtils.setField(manager, "intentService", intentService);
         NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
+
+        testDirectory = new TestServiceDirectory();
+        TestUtils.setField(manager, "serviceDirectory", testDirectory);
+
         manager.activate();
 
         manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
diff --git a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualNetworkStore.java b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualNetworkStore.java
index 17d8dcb..b4c1fee 100644
--- a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualNetworkStore.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualNetworkStore.java
@@ -290,16 +290,6 @@
         log.info("Stopped");
     }
 
-    /**
-     * This method is used for Junit tests to set the CoreService instance, which
-     * is required to set the IdGenerator instance.
-     *
-     * @param coreService core service instance
-     */
-    public void setCoreService(CoreService coreService) {
-        this.coreService = coreService;
-    }
-
     @Override
     public void addTenantId(TenantId tenantId) {
         tenantIdSet.add(tenantId);