@Override public void run() { try { log.debug("run!"); this.root.setState(SubstepTestState.RUNNING); eventsConsumer.onEvent(new StateChangedEvent(this.root)); RootNode resultNode = getRootNodeFromBytes(jmxClient.runAsBytes()); // lets wait for any notifications try { countDownLatch.await(); } catch (InterruptedException e) { if (countDownLatch.getCount() > 0) { log.error("premature interupted ex waiting for complete notification"); } } if (resultNode.getResult().getResult() == com.technophobia.substeps.execution.ExecutionResult.PASSED) { this.root.setState(SubstepTestState.PASSED); } else if (resultNode.getResult().getResult() == com.technophobia.substeps.execution.ExecutionResult.FAILED) { this.root.setState(SubstepTestState.FAILED); } eventsConsumer.onEvent(new StateChangedEvent(this.root)); log.debug("done run, shutting down!"); } finally { jmxClient.shutdown(); log.debug("shut down done!"); } }