From 0705f92d9b7a6f3f1e3ca7f09d42c70d9eaf0f25 Mon Sep 17 00:00:00 2001 From: Hilbrand Bouwkamp Date: Tue, 12 Jan 2021 22:10:01 +0100 Subject: [PATCH] Normalized thread names (#9581) Related to #8216 Signed-off-by: Hilbrand Bouwkamp --- .../internal/handler/ADBridgeHandler.java | 2 +- .../internal/net/SocketChannelSession.java | 16 +++++++++++++--- .../atlona/internal/pro3/AtlonaPro3Handler.java | 2 +- .../bluegiga/handler/BlueGigaBridgeHandler.java | 3 ++- .../bluegiga/internal/BlueGigaSerialHandler.java | 8 ++++---- .../caddx/internal/CaddxCommunicator.java | 5 +++-- .../internal/handler/CaddxBridgeHandler.java | 3 ++- .../handler/EnvisalinkBridgeHandler.java | 3 ++- .../internal/handler/TCPServerBridgeHandler.java | 3 ++- .../discovery/HarmonyHubDiscoveryService.java | 5 ++++- .../communicator/AbstractHomematicGateway.java | 2 +- .../communicator/server/BinRpcServer.java | 12 ++++++++---- .../internal/device/RequestQueueManager.java | 3 ++- .../binding/insteon/internal/driver/Poller.java | 3 ++- .../binding/insteon/internal/driver/Port.java | 2 +- .../insteon/internal/driver/hub/HubIOStream.java | 3 ++- .../keba/internal/KebaHandlerFactory.java | 5 ++++- .../keba/internal/handler/KeContactHandler.java | 13 +++++++------ .../internal/handler/KeContactTransceiver.java | 4 ++-- .../binding/linuxinput/internal/Utils.java | 7 ++----- .../lutron/internal/grxprg/PrgBridgeHandler.java | 2 +- .../lutron/internal/grxprg/SocketSession.java | 12 +++++++++--- 22 files changed, 75 insertions(+), 43 deletions(-) diff --git a/bundles/org.openhab.binding.alarmdecoder/src/main/java/org/openhab/binding/alarmdecoder/internal/handler/ADBridgeHandler.java b/bundles/org.openhab.binding.alarmdecoder/src/main/java/org/openhab/binding/alarmdecoder/internal/handler/ADBridgeHandler.java index 20701d340146a..b4201665b0567 100644 --- a/bundles/org.openhab.binding.alarmdecoder/src/main/java/org/openhab/binding/alarmdecoder/internal/handler/ADBridgeHandler.java +++ b/bundles/org.openhab.binding.alarmdecoder/src/main/java/org/openhab/binding/alarmdecoder/internal/handler/ADBridgeHandler.java @@ -130,7 +130,7 @@ protected void scheduleConnectRetry(long waitMinutes) { protected void startMsgReader() { synchronized (msgReaderThreadLock) { - Thread mrt = new Thread(this::readerThread, "AD Reader"); + Thread mrt = new Thread(this::readerThread, "OH-binding-" + getThing().getUID() + "-ADReader"); mrt.setDaemon(true); mrt.start(); msgReaderThread = mrt; diff --git a/bundles/org.openhab.binding.atlona/src/main/java/org/openhab/binding/atlona/internal/net/SocketChannelSession.java b/bundles/org.openhab.binding.atlona/src/main/java/org/openhab/binding/atlona/internal/net/SocketChannelSession.java index 0c7b8dbe2cc8b..6e35a3b6beb42 100644 --- a/bundles/org.openhab.binding.atlona/src/main/java/org/openhab/binding/atlona/internal/net/SocketChannelSession.java +++ b/bundles/org.openhab.binding.atlona/src/main/java/org/openhab/binding/atlona/internal/net/SocketChannelSession.java @@ -39,6 +39,10 @@ public class SocketChannelSession implements SocketSession { private final Logger logger = LoggerFactory.getLogger(SocketChannelSession.class); + /** + * The uid of the calling thing + */ + private final String uid; /** * The host/ip address to connect to */ @@ -77,10 +81,11 @@ public class SocketChannelSession implements SocketSession { /** * Creates the socket session from the given host and port * + * @param uid the thing uid of the calling thing * @param host a non-null, non-empty host/ip address * @param port the port number between 1 and 65535 */ - public SocketChannelSession(String host, int port) { + public SocketChannelSession(String uid, String host, int port) { if (host == null || host.trim().length() == 0) { throw new IllegalArgumentException("Host cannot be null or empty"); } @@ -88,6 +93,7 @@ public SocketChannelSession(String host, int port) { if (port < 1 || port > 65535) { throw new IllegalArgumentException("Port must be between 1 and 65535"); } + this.uid = uid; this.host = host; this.port = port; } @@ -129,8 +135,12 @@ public void connect() throws IOException { } socketChannel.set(channel); - new Thread(dispatcher).start(); - new Thread(responseReader).start(); + Thread dispatcherThread = new Thread(dispatcher, "OH-binding-" + uid + "-dispatcher"); + dispatcherThread.setDaemon(true); + dispatcherThread.start(); + Thread responseReaderThread = new Thread(responseReader, "OH-binding-" + uid + "-responseReader"); + responseReaderThread.setDaemon(true); + responseReaderThread.start(); } @Override diff --git a/bundles/org.openhab.binding.atlona/src/main/java/org/openhab/binding/atlona/internal/pro3/AtlonaPro3Handler.java b/bundles/org.openhab.binding.atlona/src/main/java/org/openhab/binding/atlona/internal/pro3/AtlonaPro3Handler.java index c49874d98e729..3de9a7049ca97 100644 --- a/bundles/org.openhab.binding.atlona/src/main/java/org/openhab/binding/atlona/internal/pro3/AtlonaPro3Handler.java +++ b/bundles/org.openhab.binding.atlona/src/main/java/org/openhab/binding/atlona/internal/pro3/AtlonaPro3Handler.java @@ -449,7 +449,7 @@ public void initialize() { return; } - session = new SocketChannelSession(config.getIpAddress(), 23); + session = new SocketChannelSession(getThing().getUID().getAsString(), config.getIpAddress(), 23); atlonaHandler = new AtlonaPro3PortocolHandler(session, config, getCapabilities(), new StatefulHandlerCallback(new AtlonaHandlerCallback() { @Override diff --git a/bundles/org.openhab.binding.bluetooth.bluegiga/src/main/java/org/openhab/binding/bluetooth/bluegiga/handler/BlueGigaBridgeHandler.java b/bundles/org.openhab.binding.bluetooth.bluegiga/src/main/java/org/openhab/binding/bluetooth/bluegiga/handler/BlueGigaBridgeHandler.java index 0150ba3954aaf..e57e3d56a5d40 100644 --- a/bundles/org.openhab.binding.bluetooth.bluegiga/src/main/java/org/openhab/binding/bluetooth/bluegiga/handler/BlueGigaBridgeHandler.java +++ b/bundles/org.openhab.binding.bluetooth.bluegiga/src/main/java/org/openhab/binding/bluetooth/bluegiga/handler/BlueGigaBridgeHandler.java @@ -234,7 +234,8 @@ public void initialize() { }, executor); serialHandler = serialPortFuture - .thenApply(sp -> new BlueGigaSerialHandler(inputStream.get(), outputStream.get())); + .thenApply(sp -> new BlueGigaSerialHandler(getThing().getUID().getAsString(), inputStream.get(), + outputStream.get())); transactionManager = serialHandler.thenApply(sh -> { BlueGigaTransactionManager th = new BlueGigaTransactionManager(sh, executor); sh.addHandlerListener(this); diff --git a/bundles/org.openhab.binding.bluetooth.bluegiga/src/main/java/org/openhab/binding/bluetooth/bluegiga/internal/BlueGigaSerialHandler.java b/bundles/org.openhab.binding.bluetooth.bluegiga/src/main/java/org/openhab/binding/bluetooth/bluegiga/internal/BlueGigaSerialHandler.java index b9c28629ba27b..c08d70ce3f7e2 100644 --- a/bundles/org.openhab.binding.bluetooth.bluegiga/src/main/java/org/openhab/binding/bluetooth/bluegiga/internal/BlueGigaSerialHandler.java +++ b/bundles/org.openhab.binding.bluetooth.bluegiga/src/main/java/org/openhab/binding/bluetooth/bluegiga/internal/BlueGigaSerialHandler.java @@ -59,12 +59,12 @@ public class BlueGigaSerialHandler { private final InputStream inputStream; private final Thread parserThread; - public BlueGigaSerialHandler(final InputStream inputStream, final OutputStream outputStream) { + public BlueGigaSerialHandler(final String uid, final InputStream inputStream, final OutputStream outputStream) { this.outputStream = outputStream; this.inputStream = inputStream; flush(); - parserThread = createBlueGigaBLEHandler(); + parserThread = createBlueGigaBLEHandler(uid); parserThread.setUncaughtExceptionHandler((t, th) -> { logger.warn("BluegigaSerialHandler terminating due to unhandled error", th); }); @@ -323,7 +323,7 @@ private void inboundMessageHandlerLoop() { logger.debug("BlueGiga BLE exited."); } - private Thread createBlueGigaBLEHandler() { - return new Thread(this::inboundMessageHandlerLoop, "BlueGigaBLEHandler"); + private Thread createBlueGigaBLEHandler(String uid) { + return new Thread(this::inboundMessageHandlerLoop, "OH-binding-" + uid + "-blueGigaBLEHandler"); } } diff --git a/bundles/org.openhab.binding.caddx/src/main/java/org/openhab/binding/caddx/internal/CaddxCommunicator.java b/bundles/org.openhab.binding.caddx/src/main/java/org/openhab/binding/caddx/internal/CaddxCommunicator.java index 4dea3886a5cd5..c06204c20f510 100644 --- a/bundles/org.openhab.binding.caddx/src/main/java/org/openhab/binding/caddx/internal/CaddxCommunicator.java +++ b/bundles/org.openhab.binding.caddx/src/main/java/org/openhab/binding/caddx/internal/CaddxCommunicator.java @@ -68,7 +68,8 @@ public class CaddxCommunicator implements SerialPortEventListener { private boolean unStuff = false; private int tempAsciiByte = 0; - public CaddxCommunicator(SerialPortManager portManager, CaddxProtocol protocol, String serialPortName, int baudRate) + public CaddxCommunicator(String uid, SerialPortManager portManager, CaddxProtocol protocol, String serialPortName, + int baudRate) throws UnsupportedCommOperationException, PortInUseException, IOException, TooManyListenersException { this.portManager = portManager; this.protocol = protocol; @@ -101,7 +102,7 @@ public CaddxCommunicator(SerialPortManager portManager, CaddxProtocol protocol, serialPort.notifyOnDataAvailable(true); serialPort.addEventListener(this); - communicator = new Thread(this::messageDispatchLoop, "Caddx Communicator"); + communicator = new Thread(this::messageDispatchLoop, "OH-binding-" + uid + "-caddxCommunicator"); communicator.setDaemon(true); communicator.start(); diff --git a/bundles/org.openhab.binding.caddx/src/main/java/org/openhab/binding/caddx/internal/handler/CaddxBridgeHandler.java b/bundles/org.openhab.binding.caddx/src/main/java/org/openhab/binding/caddx/internal/handler/CaddxBridgeHandler.java index d3f8c811dafce..33bc24e4cceb1 100644 --- a/bundles/org.openhab.binding.caddx/src/main/java/org/openhab/binding/caddx/internal/handler/CaddxBridgeHandler.java +++ b/bundles/org.openhab.binding.caddx/src/main/java/org/openhab/binding/caddx/internal/handler/CaddxBridgeHandler.java @@ -128,7 +128,8 @@ public void initialize() { protocol); try { - communicator = new CaddxCommunicator(portManager, protocol, serialPortName, baudRate); + communicator = new CaddxCommunicator(getThing().getUID().getAsString(), portManager, protocol, + serialPortName, baudRate); } catch (IOException | TooManyListenersException | UnsupportedCommOperationException | PortInUseException e) { updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, "Communication cannot be initialized. " + e.toString()); diff --git a/bundles/org.openhab.binding.dscalarm/src/main/java/org/openhab/binding/dscalarm/internal/handler/EnvisalinkBridgeHandler.java b/bundles/org.openhab.binding.dscalarm/src/main/java/org/openhab/binding/dscalarm/internal/handler/EnvisalinkBridgeHandler.java index 79b8f58ac6020..f7baf4c94ab09 100644 --- a/bundles/org.openhab.binding.dscalarm/src/main/java/org/openhab/binding/dscalarm/internal/handler/EnvisalinkBridgeHandler.java +++ b/bundles/org.openhab.binding.dscalarm/src/main/java/org/openhab/binding/dscalarm/internal/handler/EnvisalinkBridgeHandler.java @@ -98,7 +98,8 @@ public void openConnection() { tcpOutput = new OutputStreamWriter(tcpSocket.getOutputStream(), "US-ASCII"); tcpInput = new BufferedReader(new InputStreamReader(tcpSocket.getInputStream())); - Thread tcpListener = new Thread(new TCPListener()); + Thread tcpListener = new Thread(new TCPListener(), "OH-binding-" + getThing().getUID() + "-tcplistener"); + tcpListener.setDaemon(true); tcpListener.start(); setConnected(true); diff --git a/bundles/org.openhab.binding.dscalarm/src/main/java/org/openhab/binding/dscalarm/internal/handler/TCPServerBridgeHandler.java b/bundles/org.openhab.binding.dscalarm/src/main/java/org/openhab/binding/dscalarm/internal/handler/TCPServerBridgeHandler.java index 404d16c0c596a..5108ff9f5bab9 100644 --- a/bundles/org.openhab.binding.dscalarm/src/main/java/org/openhab/binding/dscalarm/internal/handler/TCPServerBridgeHandler.java +++ b/bundles/org.openhab.binding.dscalarm/src/main/java/org/openhab/binding/dscalarm/internal/handler/TCPServerBridgeHandler.java @@ -105,7 +105,8 @@ public void openConnection() { tcpOutput = new OutputStreamWriter(tcpSocket.getOutputStream(), "US-ASCII"); tcpInput = new BufferedReader(new InputStreamReader(tcpSocket.getInputStream())); - Thread tcpListener = new Thread(new TCPListener()); + Thread tcpListener = new Thread(new TCPListener(), "OH-binding-" + getThing().getUID() + "-tcplistener"); + tcpListener.setDaemon(true); tcpListener.start(); setConnected(true); diff --git a/bundles/org.openhab.binding.harmonyhub/src/main/java/org/openhab/binding/harmonyhub/internal/discovery/HarmonyHubDiscoveryService.java b/bundles/org.openhab.binding.harmonyhub/src/main/java/org/openhab/binding/harmonyhub/internal/discovery/HarmonyHubDiscoveryService.java index 471023bb4a431..4ca2663a4cf1d 100644 --- a/bundles/org.openhab.binding.harmonyhub/src/main/java/org/openhab/binding/harmonyhub/internal/discovery/HarmonyHubDiscoveryService.java +++ b/bundles/org.openhab.binding.harmonyhub/src/main/java/org/openhab/binding/harmonyhub/internal/discovery/HarmonyHubDiscoveryService.java @@ -37,6 +37,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; +import org.openhab.binding.harmonyhub.internal.HarmonyHubBindingConstants; import org.openhab.binding.harmonyhub.internal.handler.HarmonyHubHandler; import org.openhab.core.config.discovery.AbstractDiscoveryService; import org.openhab.core.config.discovery.DiscoveryResultBuilder; @@ -222,7 +223,9 @@ public int getPort() { public void start() { running = true; - Thread localThread = new Thread(this::run, "HarmonyDiscoveryServer(tcp/" + getPort() + ")"); + Thread localThread = new Thread(this::run, + "OH-binding-" + HarmonyHubBindingConstants.BINDING_ID + "discoveryServer"); + localThread.setDaemon(true); localThread.start(); } diff --git a/bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/AbstractHomematicGateway.java b/bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/AbstractHomematicGateway.java index 549f9efae3580..444f4300c4402 100644 --- a/bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/AbstractHomematicGateway.java +++ b/bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/AbstractHomematicGateway.java @@ -249,7 +249,7 @@ private synchronized void startServers() throws IOException { for (TransferMode mode : availableInterfaces.values()) { if (!rpcServers.containsKey(mode)) { RpcServer rpcServer = mode == TransferMode.XML_RPC ? new XmlRpcServer(this, config) - : new BinRpcServer(this, config); + : new BinRpcServer(this, config, id); rpcServers.put(mode, rpcServer); rpcServer.start(); } diff --git a/bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/server/BinRpcServer.java b/bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/server/BinRpcServer.java index 0f671110b5b09..97504836486a8 100644 --- a/bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/server/BinRpcServer.java +++ b/bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/server/BinRpcServer.java @@ -14,6 +14,7 @@ import java.io.IOException; +import org.openhab.binding.homematic.internal.HomematicBindingConstants; import org.openhab.binding.homematic.internal.common.HomematicConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -28,12 +29,14 @@ public class BinRpcServer implements RpcServer { private Thread networkServiceThread; private BinRpcNetworkService networkService; - private HomematicConfig config; - private RpcEventListener listener; + private final HomematicConfig config; + private final RpcEventListener listener; + private final String id; - public BinRpcServer(RpcEventListener listener, HomematicConfig config) { + public BinRpcServer(RpcEventListener listener, HomematicConfig config, String id) { this.listener = listener; this.config = config; + this.id = id; } @Override @@ -42,7 +45,8 @@ public void start() throws IOException { networkService = new BinRpcNetworkService(listener, config); networkServiceThread = new Thread(networkService); - networkServiceThread.setName("HomematicRpcServer"); + networkServiceThread + .setName("OH-binding-" + HomematicBindingConstants.THING_TYPE_BRIDGE + ":" + id + "-rpcServer"); networkServiceThread.start(); } diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/RequestQueueManager.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/RequestQueueManager.java index c5d2039f8a2b6..89affd1475341 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/RequestQueueManager.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/RequestQueueManager.java @@ -19,6 +19,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; +import org.openhab.binding.insteon.internal.InsteonBindingConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,7 +53,7 @@ private RequestQueueManager() { private void setParamsAndStart(@Nullable Thread thread) { if (thread != null) { - thread.setName("Insteon Request Queue Reader"); + thread.setName("OH-binding-" + InsteonBindingConstants.BINDING_ID + "-requestQueueReader"); thread.setDaemon(true); thread.start(); } diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/driver/Poller.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/driver/Poller.java index a17856ca893d3..b314919eff02c 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/driver/Poller.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/driver/Poller.java @@ -19,6 +19,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; +import org.openhab.binding.insteon.internal.InsteonBindingConstants; import org.openhab.binding.insteon.internal.device.InsteonDevice; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -112,7 +113,7 @@ public void start() { private void setParamsAndStart(@Nullable Thread thread) { if (thread != null) { - thread.setName("Insteon Poll Queue Reader"); + thread.setName("OH-binding-" + InsteonBindingConstants.BINDING_ID + "-pollQueueReader"); thread.setDaemon(true); thread.start(); } diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/driver/Port.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/driver/Port.java index e155402c34e86..581737536c908 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/driver/Port.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/driver/Port.java @@ -192,7 +192,7 @@ public void start() { private void setParamsAndStart(@Nullable Thread thread, String type) { if (thread != null) { - thread.setName("Insteon " + logName + " " + type); + thread.setName("OH-binding-Insteon " + logName + " " + type); thread.setDaemon(true); thread.start(); } diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/driver/hub/HubIOStream.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/driver/hub/HubIOStream.java index d40b178bf3650..fcbc60cccc0ba 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/driver/hub/HubIOStream.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/driver/hub/HubIOStream.java @@ -25,6 +25,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; +import org.openhab.binding.insteon.internal.InsteonBindingConstants; import org.openhab.binding.insteon.internal.driver.IOStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -102,7 +103,7 @@ public boolean open() { private void setParamsAndStart(@Nullable Thread thread) { if (thread != null) { - thread.setName("Insteon Hub Poller"); + thread.setName("OH-binding-" + InsteonBindingConstants.BINDING_ID + "-hubPoller"); thread.setDaemon(true); thread.start(); } diff --git a/bundles/org.openhab.binding.keba/src/main/java/org/openhab/binding/keba/internal/KebaHandlerFactory.java b/bundles/org.openhab.binding.keba/src/main/java/org/openhab/binding/keba/internal/KebaHandlerFactory.java index b3f7ece697eb5..37620398891bd 100644 --- a/bundles/org.openhab.binding.keba/src/main/java/org/openhab/binding/keba/internal/KebaHandlerFactory.java +++ b/bundles/org.openhab.binding.keba/src/main/java/org/openhab/binding/keba/internal/KebaHandlerFactory.java @@ -18,6 +18,7 @@ import java.util.Set; import org.openhab.binding.keba.internal.handler.KeContactHandler; +import org.openhab.binding.keba.internal.handler.KeContactTransceiver; import org.openhab.core.thing.Thing; import org.openhab.core.thing.ThingTypeUID; import org.openhab.core.thing.binding.BaseThingHandlerFactory; @@ -36,6 +37,8 @@ public class KebaHandlerFactory extends BaseThingHandlerFactory { private static final Set SUPPORTED_THING_TYPES_UIDS = Collections.singleton(THING_TYPE_KECONTACTP20); + private final KeContactTransceiver transceiver = new KeContactTransceiver(); + @Override public boolean supportsThingType(ThingTypeUID thingTypeUID) { return SUPPORTED_THING_TYPES_UIDS.contains(thingTypeUID); @@ -46,7 +49,7 @@ protected ThingHandler createHandler(Thing thing) { ThingTypeUID thingTypeUID = thing.getThingTypeUID(); if (thingTypeUID.equals(THING_TYPE_KECONTACTP20)) { - return new KeContactHandler(thing); + return new KeContactHandler(thing, transceiver); } return null; diff --git a/bundles/org.openhab.binding.keba/src/main/java/org/openhab/binding/keba/internal/handler/KeContactHandler.java b/bundles/org.openhab.binding.keba/src/main/java/org/openhab/binding/keba/internal/handler/KeContactHandler.java index 78994fc47d807..478c49bf9c24b 100644 --- a/bundles/org.openhab.binding.keba/src/main/java/org/openhab/binding/keba/internal/handler/KeContactHandler.java +++ b/bundles/org.openhab.binding.keba/src/main/java/org/openhab/binding/keba/internal/handler/KeContactHandler.java @@ -74,10 +74,10 @@ public class KeContactHandler extends BaseThingHandler { private final Logger logger = LoggerFactory.getLogger(KeContactHandler.class); - protected JsonParser parser = new JsonParser(); + protected final JsonParser parser = new JsonParser(); + private final KeContactTransceiver transceiver; private ScheduledFuture pollingJob; - private static KeContactTransceiver transceiver = new KeContactTransceiver(); private ExpiringCacheMap cache; private int maxPresetCurrent = 0; @@ -87,8 +87,9 @@ public class KeContactHandler extends BaseThingHandler { private int lastState = -1; // trigger a report100 at startup private boolean isReport100needed = true; - public KeContactHandler(Thing thing) { + public KeContactHandler(Thing thing, KeContactTransceiver transceiver) { super(thing); + this.transceiver = transceiver; } @Override @@ -106,7 +107,7 @@ public void initialize() { if (pollingJob == null || pollingJob.isCancelled()) { try { - pollingJob = scheduler.scheduleWithFixedDelay(pollingRunnable, 0, + pollingJob = scheduler.scheduleWithFixedDelay(this::pollingRunnable, 0, ((BigDecimal) getConfig().get(POLLING_REFRESH_INTERVAL)).intValue(), TimeUnit.SECONDS); } catch (Exception e) { updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.NONE, @@ -147,7 +148,7 @@ protected Configuration getConfig() { return super.getConfig(); } - private Runnable pollingRunnable = () -> { + private void pollingRunnable() { try { long stamp = System.currentTimeMillis(); if (!InetAddress.getByName(((String) getConfig().get(IP_ADDRESS))).isReachable(PING_TIME_OUT)) { @@ -194,7 +195,7 @@ protected Configuration getConfig() { } catch (InterruptedException e) { logger.debug("Polling job has been interrupted for handler of thing '{}'.", getThing().getUID()); } - }; + } protected void onData(ByteBuffer byteBuffer) { String response = new String(byteBuffer.array(), 0, byteBuffer.limit()); diff --git a/bundles/org.openhab.binding.keba/src/main/java/org/openhab/binding/keba/internal/handler/KeContactTransceiver.java b/bundles/org.openhab.binding.keba/src/main/java/org/openhab/binding/keba/internal/handler/KeContactTransceiver.java index 0f30fb2d1e81b..c123190843cb1 100644 --- a/bundles/org.openhab.binding.keba/src/main/java/org/openhab/binding/keba/internal/handler/KeContactTransceiver.java +++ b/bundles/org.openhab.binding.keba/src/main/java/org/openhab/binding/keba/internal/handler/KeContactTransceiver.java @@ -45,7 +45,7 @@ * @author Karel Goderis - Initial contribution */ -class KeContactTransceiver { +public class KeContactTransceiver { public static final int LISTENER_PORT_NUMBER = 7090; public static final int REMOTE_PORT_NUMBER = 7090; @@ -74,7 +74,7 @@ public void start() { selector = Selector.open(); if (transceiverThread == null) { - transceiverThread = new Thread(transceiverRunnable, "openHAB-Keba-Transceiver"); + transceiverThread = new Thread(transceiverRunnable, "OH-binding-Keba-Transceiver"); transceiverThread.start(); } diff --git a/bundles/org.openhab.binding.linuxinput/src/main/java/org/openhab/binding/linuxinput/internal/Utils.java b/bundles/org.openhab.binding.linuxinput/src/main/java/org/openhab/binding/linuxinput/internal/Utils.java index 2d9706ce43461..e05b6ed7dc0ba 100644 --- a/bundles/org.openhab.binding.linuxinput/src/main/java/org/openhab/binding/linuxinput/internal/Utils.java +++ b/bundles/org.openhab.binding.linuxinput/src/main/java/org/openhab/binding/linuxinput/internal/Utils.java @@ -27,11 +27,8 @@ private Utils() { } static Thread backgroundThread(Runnable r, String type, @Nullable Thing thing) { - String name = "OH-binding-" + LinuxInputBindingConstants.BINDING_ID + "-" + type; - if (thing != null) { - name += "-" + thing.getUID(); - } - Thread t = new Thread(r, name); + String id = thing == null ? LinuxInputBindingConstants.BINDING_ID : thing.getUID().getAsString(); + Thread t = new Thread(r, "OH-binding-" + id + "-" + type); t.setDaemon(true); return t; } diff --git a/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/grxprg/PrgBridgeHandler.java b/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/grxprg/PrgBridgeHandler.java index 9c4fb67dcd8ae..48ca1d79f0248 100644 --- a/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/grxprg/PrgBridgeHandler.java +++ b/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/grxprg/PrgBridgeHandler.java @@ -71,7 +71,7 @@ public PrgBridgeHandler(Bridge bridge) { } final PrgBridgeConfig config = getPrgBridgeConfig(); - session = new SocketSession(config.getIpAddress(), 23); + session = new SocketSession(getThing().getUID().getAsString(), config.getIpAddress(), 23); protocolHandler = new PrgProtocolHandler(session, new PrgHandlerCallback() { @Override diff --git a/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/grxprg/SocketSession.java b/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/grxprg/SocketSession.java index 4fd4e025a6d27..ed3adf432c180 100644 --- a/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/grxprg/SocketSession.java +++ b/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/grxprg/SocketSession.java @@ -39,6 +39,10 @@ public class SocketSession { private final Logger logger = LoggerFactory.getLogger(SocketSession.class); + /** + * The uid of the calling thing + */ + private final String uid; /** * The host/ip address to connect to */ @@ -87,10 +91,11 @@ public class SocketSession { /** * Creates the socket session from the given host and port * + * @param uid the thing uid of the calling thing * @param host a non-null, non-empty host/ip address * @param port the port number between 1 and 65535 */ - public SocketSession(String host, int port) { + public SocketSession(String uid, String host, int port) { if (host == null || host.trim().length() == 0) { throw new IllegalArgumentException("Host cannot be null or empty"); } @@ -98,6 +103,7 @@ public SocketSession(String host, int port) { if (port < 1 || port > 65535) { throw new IllegalArgumentException("Port must be between 1 and 65535"); } + this.uid = uid; this.host = host; this.port = port; } @@ -133,8 +139,8 @@ public void connect() throws IOException { writer = new PrintStream(client.getOutputStream()); reader = new BufferedReader(new InputStreamReader(client.getInputStream())); - new Thread(responseReader).start(); - new Thread(dispatcher).start(); + new Thread(responseReader, "OH-binding-" + uid + "-responseReader").start(); + new Thread(dispatcher, "OH-binding-" + uid + "-dispatcher").start(); } /**