package org.ovirt.engine.core.bll;
import javax.annotation.PostConstruct;
import javax.ejb.DependsOn;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.aaa.SessionDataContainer;
import org.ovirt.engine.core.bll.dwh.DwhHeartBeat;
import org.ovirt.engine.core.bll.gluster.GlusterJobsManager;
import org.ovirt.engine.core.bll.hostdeploy.HostUpdatesCheckerService;
import org.ovirt.engine.core.bll.hostdev.HostDeviceManager;
import org.ovirt.engine.core.bll.pm.PmHealthCheckManager;
import org.ovirt.engine.core.bll.scheduling.AffinityRulesEnforcementManager;
import org.ovirt.engine.core.bll.scheduling.SchedulingManager;
import org.ovirt.engine.core.bll.storage.ovfstore.OvfDataUpdater;
import org.ovirt.engine.core.bll.storage.pool.StoragePoolStatusHandler;
import org.ovirt.engine.core.bll.tasks.CommandCallbacksPoller;
import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.ovirt.engine.core.common.utils.customprop.VmPropertiesUtils;
import org.ovirt.engine.core.common.utils.exceptions.InitializationException;
import org.ovirt.engine.core.utils.customprop.DevicePropertiesUtils;
import org.ovirt.engine.core.vdsbroker.ResourceManager;
import org.ovirt.engine.core.vdsbroker.irsbroker.IrsProxyManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* The following bean is created in order to initialize and start all related vdsms schedulers
* in the system after all beans finished initialization
*/
@Singleton
@Startup
@DependsOn("Backend")
public class InitBackendServicesOnStartupBean implements InitBackendServicesOnStartup {
private static final Logger log = LoggerFactory.getLogger(InitBackendServicesOnStartupBean.class);
@Inject
private Instance<SchedulingManager> schedulingManagerProvider;
@Inject
private SessionDataContainer sessionDataContainer;
@Inject
private ServiceLoader serviceLoader;
/**
* This method is called upon the bean creation as part
* of the management Service bean life cycle.
*/
@Override
@PostConstruct
public void create() {
try {
// This must be done before starting to sample the hosts status from VDSM since the sampling will turn such host from Reboot to NonResponsive
serviceLoader.load(PmHealthCheckManager.class);
serviceLoader.load(EngineBackupAwarenessManager.class);
CommandCoordinatorUtil.initAsyncTaskManager();
serviceLoader.load(CommandCallbacksPoller.class);
serviceLoader.load(DataCenterCompatibilityChecker.class);
serviceLoader.load(ResourceManager.class);
serviceLoader.load(IrsProxyManager.class);
serviceLoader.load(OvfDataUpdater.class);
StoragePoolStatusHandler.init();
serviceLoader.load(GlusterJobsManager.class);
try {
log.info("Init VM custom properties utilities");
VmPropertiesUtils.getInstance().init();
} catch (InitializationException e) {
log.error("Initialization of vm custom properties failed.", e);
}
try {
log.info("Init device custom properties utilities");
DevicePropertiesUtils.getInstance().init();
} catch (InitializationException e) {
log.error("Initialization of device custom properties failed.", e);
}
serviceLoader.load(SchedulingManager.class);
sessionDataContainer.cleanupEngineSessionsOnStartup();
serviceLoader.load(HostDeviceManager.class);
serviceLoader.load(DwhHeartBeat.class);
if(Config.<Boolean> getValue(ConfigValues.AffinityRulesEnforcementManagerEnabled)) {
serviceLoader.load(AffinityRulesEnforcementManager.class);
}
serviceLoader.load(CertificationValidityChecker.class);
serviceLoader.load(HostUpdatesCheckerService.class);
} catch (Exception ex) {
log.error("Failed to initialize backend", ex);
throw ex;
}
}
}