diff --git a/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java b/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java index 90a9d56e0c..3b89c09367 100644 --- a/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java +++ b/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java @@ -57,6 +57,7 @@ import org.thingsboard.server.service.script.RuleNodeJsScriptEngine; import scala.concurrent.duration.Duration; import java.util.Collections; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @@ -102,6 +103,12 @@ class DefaultTbContext implements TbContext { scheduleMsgWithDelay(new RuleNodeToSelfMsg(msg), delayMs, nodeCtx.getSelfActor()); } + @Override + public boolean isLocalEntity(EntityId entityId) { + Optional address = mainCtx.getRoutingService().resolveById(entityId); + return !address.isPresent(); + } + private void scheduleMsgWithDelay(Object msg, long delayInMs, ActorRef target) { mainCtx.getScheduler().scheduleOnce(Duration.create(delayInMs, TimeUnit.MILLISECONDS), target, msg, mainCtx.getActorSystem().dispatcher(), nodeCtx.getSelfActor()); } diff --git a/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeActorMessageProcessor.java b/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeActorMessageProcessor.java index 98f07f8383..fc8ff3dc0a 100644 --- a/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeActorMessageProcessor.java +++ b/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeActorMessageProcessor.java @@ -83,7 +83,9 @@ public class RuleNodeActorMessageProcessor extends ComponentMsgProcessor { - ctx.tellNext(m, SUCCESS); - scheduleTickMsg(ctx); + if (initialized) { + ctx.tellNext(m, SUCCESS); + scheduleTickMsg(ctx); + } }, t -> { - ctx.tellFailure(msg, t); - scheduleTickMsg(ctx); + if (initialized) { + ctx.tellFailure(msg, t); + scheduleTickMsg(ctx); + } }); } } @@ -102,8 +125,10 @@ public class TbMsgGeneratorNode implements TbNode { if (prevMsg == null) { prevMsg = ctx.newMsg("", originatorId, new TbMsgMetaData(), "{}"); } - TbMsg generated = jsEngine.executeGenerate(prevMsg); - prevMsg = ctx.newMsg(generated.getType(), originatorId, generated.getMetaData(), generated.getData()); + if (initialized) { + TbMsg generated = jsEngine.executeGenerate(prevMsg); + prevMsg = ctx.newMsg(generated.getType(), originatorId, generated.getMetaData(), generated.getData()); + } return prevMsg; }); } @@ -113,6 +138,7 @@ public class TbMsgGeneratorNode implements TbNode { prevMsg = null; if (jsEngine != null) { jsEngine.destroy(); + jsEngine = null; } } }