Fix: resolve exception during vtap and telemetry app deactivation

Change-Id: I7b0f00467759bec1f6344e75d0c0ef40b13e5dd7
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/StatsFlowRuleManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/StatsFlowRuleManager.java
index a7ead8e..3a92bdf 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/StatsFlowRuleManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/StatsFlowRuleManager.java
@@ -28,7 +28,6 @@
 import org.onlab.packet.IpPrefix;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.VlanId;
-import org.onlab.util.SharedScheduledExecutorService;
 import org.onlab.util.SharedScheduledExecutors;
 import org.onosproject.cfg.ComponentConfigService;
 import org.onosproject.core.ApplicationId;
@@ -180,7 +179,6 @@
 
     private ApplicationId appId;
     private TelemetryCollector collector;
-    private SharedScheduledExecutorService executor;
     private ScheduledFuture result;
 
     private final Set<FlowInfo> gFlowInfoSet = Sets.newHashSet();
@@ -196,21 +194,17 @@
     @Activate
     protected void activate() {
         appId = coreService.registerApplication(OPENSTACK_TELEMETRY_APP_ID);
-
         componentConfigService.registerProperties(getClass());
-        executor = SharedScheduledExecutors.getSingleThreadExecutor();
-
-        this.start();
+        start();
 
         log.info("Started");
     }
 
     @Deactivate
     protected void deactivate() {
-
         componentConfigService.unregisterProperties(getClass(), false);
-
         flowRuleService.removeFlowRulesById(appId);
+        stop();
 
         log.info("Stopped");
     }
@@ -227,7 +221,8 @@
         log.info("Start publishing thread");
         collector = new TelemetryCollector();
 
-        result = executor.scheduleAtFixedRate(collector, INITIAL_DELAY,
+        result = SharedScheduledExecutors.getSingleThreadExecutor()
+                    .scheduleAtFixedRate(collector, INITIAL_DELAY,
                         REFRESH_INTERVAL, TIME_UNIT_SECOND, RECOVER_FROM_FAILURE);
     }
 
diff --git a/apps/openstackvtap/app/src/main/java/org/onosproject/openstackvtap/impl/OpenstackVtapManager.java b/apps/openstackvtap/app/src/main/java/org/onosproject/openstackvtap/impl/OpenstackVtapManager.java
index 1e9d7c9..02a6579 100644
--- a/apps/openstackvtap/app/src/main/java/org/onosproject/openstackvtap/impl/OpenstackVtapManager.java
+++ b/apps/openstackvtap/app/src/main/java/org/onosproject/openstackvtap/impl/OpenstackVtapManager.java
@@ -505,7 +505,7 @@
             }
         }
 
-        flowRuleService.removeFlowRules((FlowRule[]) purgedRules.toArray());
+        flowRuleService.removeFlowRules(purgedRules.toArray(new FlowRule[0]));
 
         groupService.getGroups(deviceId, appId).forEach(group -> {
             groupService.removeGroup(deviceId, group.appCookie(), appId);