enhancementJobManagerLog.info(">> enhance {} with chain {}", ci.getUri(), chain.getName());
boolean isDefaultChain = chain.equals(chainManager.getDefault());
EnhancementJob job = new EnhancementJob(ci, chain.getName(), chain.getExecutionPlan(),isDefaultChain);
//start the execution
//wait for the results
EnhancementJobObserver observer = jobHandler.register(job);
//now wait for the execution to finish for the configured maximum time
boolean completed = observer.waitForCompletion(maxEnhancementJobWaitTime);
if(!completed){ //throw timeout exception
StringBuilder sb = new StringBuilder("Status:\n");
ExecutionMetadata em = ExecutionMetadata.parseFrom(job.getExecutionMetadata(), ci.getUri());
for(Entry<String,Execution> ex : em.getEngineExecutions().entrySet()){
sb.append(" -").append(ex.getKey()).append(": ").append(ex.getValue().getStatus()).append('\n');