private void startApplication() throws Exception {
serviceCtx = new CCServiceContext(this, serverCtx, ccContext, ccConfig.getAppConfig());
serviceCtx.addJobLifecycleListener(resultDirectoryService);
application.init(serviceCtx);
executor = MaintainedThreadNameExecutorService.newCachedThreadPool(serviceCtx.getThreadFactory());
application.start(ccConfig.getAppArgsArray());
IJobCapacityController jobCapacityController = application.getJobCapacityController();
try {
Constructor<?> jobManagerConstructor =
this.getClass().getClassLoader().loadClass(ccConfig.getJobManagerClass()).getConstructor(
CCConfig.class, ClusterControllerService.class, IJobCapacityController.class);
jobManager = (IJobManager) jobManagerConstructor.newInstance(ccConfig, this, jobCapacityController);
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | NoSuchMethodException
| InvocationTargetException e) {
if (LOGGER.isWarnEnabled()) {
LOGGER.log(Level.WARN, "class " + ccConfig.getJobManagerClass() + " could not be used: ", e);
}
jobManager = new JobManager(ccConfig, this, jobCapacityController);
}
}