public Optional<EngineContext> getEngineContext(String jobName) { try { // get job from api Job job = restJobsApiClient.getJob(jobName); if (job != null) { final ProcessingEngine engine = (ProcessingEngine) Class.forName(job.getEngine().getComponent()).newInstance(); final EngineContext engineContext = new StandardEngineContext(engine, job.getId().toString()); // instanciate each related processorChainContext job.getStreams().forEach(stream -> { Optional<StreamContext> processorChainContext = getStreamContext(stream); if (processorChainContext.isPresent()) engineContext.addStreamContext(processorChainContext.get()); }); job.getEngine().getConfig().forEach(e -> engineContext.setProperty(e.getKey(), e.getValue())); engineContext.setName(jobName); logger.info("created engine {}", job.getEngine()); return Optional.of(engineContext); } else return Optional.empty(); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | RestClientException e) { logger.error("unable to instanciate job {} : {}", jobName, e); } return Optional.empty(); }