Drawing a parallel with the jms message listener container, the active flag is set to true/false based on the bean lifecycle for 'init-method' and 'destroy-method', not start/stop of the smartlifecycle, i suppose reason being one can start and stop the processing of messages but the bean is still 'active'.  The active flag as it is now is mirroring the state of 'isRunning', so maybe get rid of the active flag and change the condition to be if(isRunning()) ?