]> git.basschouten.com Git - openhab-addons.git/commitdiff
[miio] fix bundle restart error (#10190)
authorMarcel <marcel@verpaalen.com>
Thu, 25 Feb 2021 23:53:19 +0000 (00:53 +0100)
committerGitHub <noreply@github.com>
Thu, 25 Feb 2021 23:53:19 +0000 (15:53 -0800)
Signed-off-by: Marcel Verpaalen <marcel@verpaalen.com>
bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoHandlerFactory.java

index 129ce0a6b82778843f1abf794cadb24739bf9b0a..08fa2c001702f683752c6c77dad0991d76bb1391 100644 (file)
@@ -15,6 +15,8 @@ package org.openhab.binding.miio.internal;
 import static org.openhab.binding.miio.internal.MiIoBindingConstants.*;
 
 import java.util.Map;
+import java.util.concurrent.Future;
+import java.util.concurrent.RejectedExecutionException;
 import java.util.concurrent.ScheduledExecutorService;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -35,7 +37,10 @@ import org.openhab.core.thing.binding.ThingHandlerFactory;
 import org.openhab.core.thing.type.ChannelTypeRegistry;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
 import org.osgi.service.component.annotations.Reference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * The {@link MiIoHandlerFactory} is responsible for creating things and thing
@@ -49,17 +54,20 @@ public class MiIoHandlerFactory extends BaseThingHandlerFactory {
     private static final String THING_HANDLER_THREADPOOL_NAME = "thingHandler";
     protected final ScheduledExecutorService scheduler = ThreadPoolManager
             .getScheduledPool(THING_HANDLER_THREADPOOL_NAME);
-
     private MiIoDatabaseWatchService miIoDatabaseWatchService;
     private CloudConnector cloudConnector;
     private ChannelTypeRegistry channelTypeRegistry;
     private BasicChannelTypeProvider basicChannelTypeProvider;
+    private @Nullable Future<Boolean> scheduledTask;
+    private final Logger logger = LoggerFactory.getLogger(MiIoHandlerFactory.class);
 
     @Activate
     public MiIoHandlerFactory(@Reference ChannelTypeRegistry channelTypeRegistry,
             @Reference MiIoDatabaseWatchService miIoDatabaseWatchService, @Reference CloudConnector cloudConnector,
             @Reference BasicChannelTypeProvider basicChannelTypeProvider, Map<String, Object> properties) {
         this.miIoDatabaseWatchService = miIoDatabaseWatchService;
+        this.channelTypeRegistry = channelTypeRegistry;
+        this.basicChannelTypeProvider = basicChannelTypeProvider;
         this.cloudConnector = cloudConnector;
         @Nullable
         String username = (String) properties.get("username");
@@ -68,9 +76,23 @@ public class MiIoHandlerFactory extends BaseThingHandlerFactory {
         @Nullable
         String country = (String) properties.get("country");
         cloudConnector.setCredentials(username, password, country);
-        scheduler.submit(() -> cloudConnector.isConnected());
-        this.channelTypeRegistry = channelTypeRegistry;
-        this.basicChannelTypeProvider = basicChannelTypeProvider;
+        try {
+            if (!scheduler.isShutdown()) {
+                scheduledTask = scheduler.submit(() -> cloudConnector.isConnected());
+            } else {
+                logger.debug("Unexpected: ScheduledExecutorService is shutdown.");
+            }
+        } catch (RejectedExecutionException e) {
+            logger.debug("Unexpected: ScheduledExecutorService task rejected.", e);
+        }
+    }
+
+    @Deactivate
+    private void dispose() {
+        final Future<Boolean> scheduledTask = this.scheduledTask;
+        if (scheduledTask != null && !scheduledTask.isDone()) {
+            scheduledTask.cancel(true);
+        }
     }
 
     @Override