From 435b306cf954e46ae839456a0d0c65d2d3ad0df6 Mon Sep 17 00:00:00 2001 From: Janne Valkealahti Date: Fri, 7 Aug 2015 17:18:12 +0100 Subject: [PATCH] Fix DistributedStateMachine internal transition - For some reason ZookeeperStateMachineEnsemble may return null for very early when postTransition() is handled. Adding check not to ping back ensemble if its getState() returns null. It really feels a bit wrong right now, so need to follow this. --- .../statemachine/ensemble/DistributedStateMachine.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/spring-statemachine-core/src/main/java/org/springframework/statemachine/ensemble/DistributedStateMachine.java b/spring-statemachine-core/src/main/java/org/springframework/statemachine/ensemble/DistributedStateMachine.java index adc354f8..06272211 100644 --- a/spring-statemachine-core/src/main/java/org/springframework/statemachine/ensemble/DistributedStateMachine.java +++ b/spring-statemachine-core/src/main/java/org/springframework/statemachine/ensemble/DistributedStateMachine.java @@ -218,9 +218,13 @@ public class DistributedStateMachine extends LifecycleObjectSupport implem && ObjectUtils.nullSafeEquals(delegate.getId(), stateContext.getMessageHeader(StateMachineSystemConstants.STATEMACHINE_IDENTIFIER))) { StateMachineContext current = ensemble.getState(); - ensemble.setState(new DefaultStateMachineContext( - current.getState(), stateContext.getEvent(), stateContext - .getMessageHeaders(), stateContext.getStateMachine().getExtendedState())); + if (current != null) { + // TODO: it feels a bit wrong that this can be null so + // adding note here. feel this will come back to haunt us + ensemble.setState(new DefaultStateMachineContext( + current.getState(), stateContext.getEvent(), stateContext + .getMessageHeaders(), stateContext.getStateMachine().getExtendedState())); + } } return stateContext; }