Roy Golan has uploaded a new change for review.

Change subject: core: SchedulingManager as CDI Singleton
......................................................................

core: SchedulingManager as CDI Singleton

- Singleton bean
- care for proper init during Backend load
- inject dependencies
- replace all getInstnace in commands with injection

Change-Id: I8adc52a3084f9bb539d808e0d8a066ef6fd6b92a
Signed-off-by: Roy Golan <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MaintenanceVdsCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/BasicMigrationHandler.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/SchedulingManager.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/AddClusterPolicyCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/EditClusterPolicyCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveClusterPolicyCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveExternalPolicyUnitCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerDiscoveryThread.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAllPolicyUnitsQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAttachedClustersByClusterPolicyIdQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPoliciesQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPolicyByIdQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetPolicyUnitByIdQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommandTest.java
21 files changed, 200 insertions(+), 129 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/60/40560/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java
index 0ee566e..e97a90f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java
@@ -1,31 +1,26 @@
 package org.ovirt.engine.core.bll;
 
-import java.util.ArrayList;
 import java.util.List;
 
 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.hostdev.HostDeviceManager;
-import org.ovirt.engine.core.bll.job.ExecutionHandler;
 import org.ovirt.engine.core.bll.network.macpoolmanager.MacPoolPerDcSingleton;
 import org.ovirt.engine.core.bll.pm.PmHealthCheckManager;
-import org.ovirt.engine.core.bll.scheduling.MigrationHandler;
 import org.ovirt.engine.core.bll.scheduling.SchedulingManager;
 import org.ovirt.engine.core.bll.storage.StoragePoolStatusHandler;
 import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil;
-import org.ovirt.engine.core.common.action.MigrateVmParameters;
-import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.utils.customprop.VmPropertiesUtils;
 import org.ovirt.engine.core.common.utils.exceptions.InitializationException;
-import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.di.Injector;
 import org.ovirt.engine.core.utils.customprop.DevicePropertiesUtils;
@@ -54,6 +49,9 @@
     @Inject
     private HostDeviceManager hostDeviceManager;
 
+    @Inject
+    Instance<SchedulingManager> schedulingManagerProvider;
+
     /**
      * This method is called upon the bean creation as part
      * of the management Service bean life cycle.
@@ -74,18 +72,6 @@
             CommandCoordinatorUtil.initAsyncTaskManager();
             Injector.get(ResourceManager.class);
             OvfDataUpdater.getInstance().initOvfDataUpdater();
-            SchedulingManager.getInstance().setMigrationHandler(new 
MigrationHandler() {
-
-                @Override
-                public void migrateVM(List<Guid> initialHosts, Guid 
vmToMigrate) {
-                    MigrateVmParameters parameters = new 
MigrateVmParameters(false, vmToMigrate);
-                    parameters.setInitialHosts(new 
ArrayList<Guid>(initialHosts));
-                    
Backend.getInstance().runInternalAction(VdcActionType.MigrateVm,
-                            parameters,
-                            ExecutionHandler.createInternalJobContext());
-                }
-            });
-
             ThreadPoolUtil.execute(new Runnable() {
                 @Override
                 public void run() {
@@ -110,7 +96,7 @@
                 log.error("Initialization of device custom properties 
failed.", e);
             }
 
-            SchedulingManager.getInstance().init();
+            schedulingManagerProvider.get();
 
             
SessionDataContainer.getInstance().cleanupEngineSessionsOnStartup();
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MaintenanceVdsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MaintenanceVdsCommand.java
index 3f57e6d..1f75b74 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MaintenanceVdsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MaintenanceVdsCommand.java
@@ -32,12 +32,16 @@
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.job.ExecutionMessageDirector;
 
+import javax.inject.Inject;
+
 @NonTransactiveCommandAttribute
 public class MaintenanceVdsCommand<T extends MaintenanceVdsParameters> extends 
VdsCommand<T> {
 
     private final boolean _isInternal;
     private List<VM> vms;
     private boolean haMaintenanceFailed;
+    @Inject
+    SchedulingManager schedulingManager;
 
     public MaintenanceVdsCommand(T parameters) {
         this(parameters, null);
@@ -108,14 +112,14 @@
         if (getVdsId() != null) {
             blacklist.add(getVdsId());
         }
-        return SchedulingManager.getInstance().canSchedule(
-                        getVdsGroup(),
-                        vm,
-                        blacklist, //blacklist only contains the host we're 
putting to maintenance
-                        Collections.<Guid> emptyList(), //no whitelist
-                        vm.getDedicatedVmForVds(),
-                        new ArrayList<String>()
-                        );
+        return schedulingManager.canSchedule(
+                getVdsGroup(),
+                vm,
+                blacklist, //blacklist only contains the host we're putting to 
maintenance
+                Collections.<Guid>emptyList(), //no whitelist
+                vm.getDedicatedVmForVds(),
+                new ArrayList<String>()
+        );
     }
     /**
      * Note: you must call {@link #orderListOfRunningVmsOnVds(Guid)} before 
calling this method
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java
index c7348c6..d286e1f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java
@@ -42,6 +42,8 @@
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.utils.NetworkUtils;
 
+import javax.inject.Inject;
+
 @NonTransactiveCommandAttribute
 public class MigrateVmCommand<T extends MigrateVmParameters> extends 
RunVmCommandBase<T> {
 
@@ -50,6 +52,9 @@
 
     /** Used to log the migration error. */
     private VdcBllErrors migrationErrorCode;
+
+    @Inject
+    SchedulingManager schedulingManager;
 
     public MigrateVmCommand(T parameters) {
         this(parameters, null);
@@ -110,7 +115,7 @@
     protected boolean initVdss() {
         setVdsIdRef(getVm().getRunOnVds());
         Guid vdsToRunOn =
-                SchedulingManager.getInstance().schedule(getVdsGroup(),
+                schedulingManager.schedule(getVdsGroup(),
                         getVm(),
                         getVdsBlackList(),
                         getVdsWhiteList(),
@@ -418,7 +423,7 @@
                 // This check was added to prevent migration of VM while its 
disks are being migrated
                 // TODO: replace it with a better solution
                 && validate(new 
DiskImagesValidator(ImagesHandler.getPluggedActiveImagesForVm(vm.getId())).diskImagesNotLocked())
-                && SchedulingManager.getInstance().canSchedule(getVdsGroup(),
+                && schedulingManager.canSchedule(getVdsGroup(),
                         getVm(),
                         getVdsBlackList(),
                         getParameters().getInitialHosts(),
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
index dc44c8e..ddb7199 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
@@ -115,6 +115,8 @@
 
     @Inject
     private HostDeviceManager hostDeviceManager;
+    @Inject
+    private SchedulingManager schedulingManager;
 
     protected RunVmCommand(Guid commandId) {
         super(commandId);
@@ -786,7 +788,7 @@
 
     protected boolean getVdsToRunOn() {
         Guid vdsToRunOn =
-                SchedulingManager.getInstance().schedule(getVdsGroup(),
+                schedulingManager.schedule(getVdsGroup(),
                         getVm(),
                         getRunVdssList(),
                         getVdsWhiteList(),
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java
index c894476..a9fc63f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java
@@ -84,10 +84,12 @@
 
     @Inject
     Instance<ResourceManager> resourceManagerProvider;
+    @Inject
+    private SchedulingManager schedulingManager;
+    @Inject
+    private AuditLogDirector auditLogDirector;
 
     private static final Logger log = 
LoggerFactory.getLogger(VdsEventListener.class);
-
-    private final AuditLogDirector auditLogDirector = new AuditLogDirector();
 
     @Override
     public void vdsMovedToMaintenance(VDS vds) {
@@ -449,7 +451,7 @@
 
     @Override
     public void updateSchedulingStats(VDS vds) {
-        SchedulingManager.getInstance().updateHostSchedulingStats(vds);
+        schedulingManager.updateHostSchedulingStats(vds);
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java
index 3228143..cd67cac 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java
@@ -25,8 +25,13 @@
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
 import org.ovirt.engine.core.dao.VdsGroupDAO;
 
+import javax.inject.Inject;
+
 public abstract class VdsGroupOperationCommandBase<T extends 
VdsGroupOperationParameters> extends
         VdsGroupCommandBase<T> {
+
+    @Inject
+    SchedulingManager schedulingManager;
 
     // If the CPU thresholds are set to -1 then we should get the value from 
the configuration
     public static final int GET_CPU_THRESHOLDS_FROM_CONFIGURATION = -1;
@@ -93,17 +98,17 @@
         ClusterPolicy clusterPolicy = null;
         if (getVdsGroup().getClusterPolicyId() != null) {
             clusterPolicy =
-                
SchedulingManager.getInstance().getClusterPolicy(getVdsGroup().getClusterPolicyId());
+                
schedulingManager.getClusterPolicy(getVdsGroup().getClusterPolicyId());
         }
         if (clusterPolicy == null) {
-            clusterPolicy = 
SchedulingManager.getInstance().getClusterPolicy(getVdsGroup().getClusterPolicyName());
+            clusterPolicy = 
schedulingManager.getClusterPolicy(getVdsGroup().getClusterPolicyName());
             if (clusterPolicy == null) {
                 return false;
             }
             getVdsGroup().setClusterPolicyId(clusterPolicy.getId());
         }
-        Map<String, String> customPropertiesRegexMap = 
SchedulingManager.getInstance()
-                .getCustomPropertiesRegexMap(clusterPolicy);
+        Map<String, String> customPropertiesRegexMap =
+                schedulingManager.getCustomPropertiesRegexMap(clusterPolicy);
         updateClusterPolicyProperties(getVdsGroup(), clusterPolicy, 
customPropertiesRegexMap);
         List<ValidationError> validationErrors =
                 
SimpleCustomPropertiesUtil.getInstance().validateProperties(customPropertiesRegexMap,
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/BasicMigrationHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/BasicMigrationHandler.java
new file mode 100644
index 0000000..eb26739
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/BasicMigrationHandler.java
@@ -0,0 +1,23 @@
+package org.ovirt.engine.core.bll.scheduling;
+
+import org.ovirt.engine.core.bll.Backend;
+import org.ovirt.engine.core.bll.job.ExecutionHandler;
+import org.ovirt.engine.core.common.action.MigrateVmParameters;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.compat.Guid;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BasicMigrationHandler implements MigrationHandler {
+
+    @Override
+    public void migrateVM(List<Guid> initialHosts, Guid vmToMigrate) {
+        MigrateVmParameters parameters = new MigrateVmParameters(false, 
vmToMigrate);
+        parameters.setInitialHosts(new ArrayList<Guid>(initialHosts));
+        Backend.getInstance().runInternalAction(VdcActionType.MigrateVm,
+                parameters,
+                ExecutionHandler.createInternalJobContext());
+    }
+
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/SchedulingManager.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/SchedulingManager.java
index d789241..2141e53 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/SchedulingManager.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/SchedulingManager.java
@@ -51,26 +51,19 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class SchedulingManager {
-    private static final Logger log = 
LoggerFactory.getLogger(SchedulingManager.class);
-    private AuditLogDirector auditLogDirector = new AuditLogDirector();
-    /**
-     * singleton
-     */
-    private static volatile SchedulingManager instance = null;
+import javax.annotation.PostConstruct;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+import javax.inject.Singleton;
 
-    public static SchedulingManager getInstance() {
-        if (instance == null) {
-            synchronized (SchedulingManager.class) {
-                if (instance == null) {
-                    instance = new SchedulingManager();
-                    enableLoadBalancer();
-                    enableHaReservationCheck();
-                }
-            }
-        }
-        return instance;
-    }
+@Singleton
+public class SchedulingManager {
+
+    private AuditLogDirector auditLogDirector;
+    @Inject
+    private Instance<ExternalSchedulerDiscoveryThread> 
exSchedulerDiscoveryProvider;
+
+    private static final Logger log = 
LoggerFactory.getLogger(SchedulingManager.class);
 
     private static final String HIGH_UTILIZATION = "HighUtilization";
     private static final String LOW_UTILIZATION = "LowUtilization";
@@ -93,23 +86,29 @@
 
     private final Map<Guid, Boolean> clusterId2isHaReservationSafe = new 
HashMap<>();
 
-    private SchedulingManager() {
+    @Inject
+    private SchedulingManager(AuditLogDirector auditLogDirector, 
MigrationHandler migrationHandler) {
+        this.auditLogDirector = auditLogDirector;
+        this.migrationHandler = migrationHandler;
         policyMap = new ConcurrentHashMap<Guid, ClusterPolicy>();
         policyUnits = new ConcurrentHashMap<Guid, PolicyUnitImpl>();
     }
 
+    @PostConstruct
     public void init() {
         log.info("Initializing Scheduling manager");
         loadPolicyUnits();
         loadClusterPolicies();
-        ExternalSchedulerDiscoveryThread discoveryThread = new 
ExternalSchedulerDiscoveryThread();
-        if(Config.<Boolean> getValue(ConfigValues.ExternalSchedulerEnabled)) {
-            log.info("Starting external scheduler dicovery thread");
+        ExternalSchedulerDiscoveryThread discoveryThread = 
exSchedulerDiscoveryProvider.get();
+        if (Config.<Boolean>getValue(ConfigValues.ExternalSchedulerEnabled)) {
+            log.info("Starting external scheduler discovery thread");
             discoveryThread.start();
         } else {
             discoveryThread.markAllExternalPoliciesAsDisabled();
             log.info("External scheduler disabled, discovery skipped");
         }
+        enableLoadBalancer();
+        enableHaReservationCheck();
         log.info("Initialized Scheduling manager");
     }
 
@@ -149,10 +148,6 @@
         return null;
     }
 
-    public List<VDSGroup> getClustersByClusterPolicyId(Guid clusterPolicyId) {
-        return getVdsGroupDao().getClustersByClusterPolicyId(clusterPolicyId);
-    }
-
     public Map<Guid, PolicyUnitImpl> getPolicyUnitsMap() {
         synchronized (policyUnitsLock) {
             return policyUnits;
@@ -164,13 +159,6 @@
         for (ClusterPolicy clusterPolicy : allClusterPolicies) {
             policyMap.put(clusterPolicy.getId(), clusterPolicy);
         }
-    }
-
-    public void setMigrationHandler(MigrationHandler migrationHandler) {
-        if (this.migrationHandler != null) {
-            throw new RuntimeException("Load balance migration handler should 
be set only once");
-        }
-        this.migrationHandler = migrationHandler;
     }
 
     protected void loadPolicyUnits() {
@@ -217,7 +205,7 @@
         public Collection<String> getReasonMessages() {
             List<String> lines = new ArrayList<>();
 
-            for (Entry<Guid, Pair<VdcBllMessages, String>> line: 
filteredOutReasons.entrySet()) {
+            for (Entry<Guid, Pair<VdcBllMessages, String>> line : 
filteredOutReasons.entrySet()) {
                 lines.add(line.getValue().getFirst().name());
                 lines.add(String.format("$%1$s %2$s", "hostName", 
hostNames.get(line.getKey())));
                 lines.add(String.format("$%1$s %2$s", "filterName", 
line.getValue().getSecond()));
@@ -225,8 +213,7 @@
                 final List<String> detailMessages = 
details.getMessages(line.getKey());
                 if (detailMessages == null || detailMessages.isEmpty()) {
                     
lines.add(VdcBllMessages.SCHEDULING_HOST_FILTERED_REASON.name());
-                }
-                else {
+                } else {
                     lines.addAll(detailMessages);
                     
lines.add(VdcBllMessages.SCHEDULING_HOST_FILTERED_REASON_WITH_DETAIL.name());
                 }
@@ -309,7 +296,7 @@
 
     /**
      * @param destHostId - used for RunAt preselection, overrides the ordering 
in vdsList
-     * @param vdsList - presorted list of hosts (better hosts first) that are 
available
+     * @param vdsList    - presorted list of hosts (better hosts first) that 
are available
      */
     private Guid selectBestHost(VDSGroup cluster,
             VM vm,
@@ -350,14 +337,14 @@
      */
     protected void checkAllowOverbooking(VDSGroup cluster) {
         if (OptimizationType.ALLOW_OVERBOOKING == cluster.getOptimizationType()
-                && Config.<Boolean> 
getValue(ConfigValues.SchedulerAllowOverBooking)
+                && 
Config.<Boolean>getValue(ConfigValues.SchedulerAllowOverBooking)
                 && clusterLockMap.get(cluster.getId()).getQueueLength() >=
-                Config.<Integer> 
getValue(ConfigValues.SchedulerOverBookingThreshold)) {
+                
Config.<Integer>getValue(ConfigValues.SchedulerOverBookingThreshold)) {
             log.info("Scheduler: cluster '{}' lock is skipped (cluster is 
allowed to overbook)",
                     cluster.getName());
             // release pending threads (requests) and current one (+1)
             clusterLockMap.get(cluster.getId())
-                    .release(Config.<Integer> 
getValue(ConfigValues.SchedulerOverBookingThreshold) + 1);
+                    
.release(Config.<Integer>getValue(ConfigValues.SchedulerOverBookingThreshold) + 
1);
         }
     }
 
@@ -372,14 +359,15 @@
      * @return
      */
     protected boolean shouldWeighClusterHosts(VDSGroup cluster, List<VDS> 
vdsList) {
-        Integer threshold = Config.<Integer> 
getValue(ConfigValues.SpeedOptimizationSchedulingThreshold);
+        Integer threshold = 
Config.<Integer>getValue(ConfigValues.SpeedOptimizationSchedulingThreshold);
         // threshold is crossed only when cluster is configured for optimized 
for speed
         boolean crossedThreshold =
                 OptimizationType.OPTIMIZE_FOR_SPEED == 
cluster.getOptimizationType()
                         && 
clusterLockMap.get(cluster.getId()).getQueueLength() >
                         threshold;
         if (crossedThreshold) {
-            log.info("Scheduler: skipping whinging hosts in cluster '{}', 
since there are more than '{}' parallel requests",
+            log.info(
+                    "Scheduler: skipping whinging hosts in cluster '{}', since 
there are more than '{}' parallel requests",
                     cluster.getName(),
                     threshold);
         }
@@ -481,7 +469,7 @@
                         memoryChecker, correlationId, result);
 
         if (shouldRunExternalFilters
-                && Config.<Boolean> 
getValue(ConfigValues.ExternalSchedulerEnabled)
+                && 
Config.<Boolean>getValue(ConfigValues.ExternalSchedulerEnabled)
                 && !externalFilters.isEmpty()
                 && hostList != null
                 && !hostList.isEmpty()) {
@@ -496,12 +484,12 @@
     }
 
     private List<VDS> runInternalFilters(ArrayList<PolicyUnitImpl> filters,
-                                         List<VDS> hostList,
-                                         VM vm,
-                                         Map<String, String> parameters,
-                                         Map<Guid, Integer> filterPositionMap,
-                                         VdsFreeMemoryChecker memoryChecker,
-                                         String correlationId, 
SchedulingResult result) {
+            List<VDS> hostList,
+            VM vm,
+            Map<String, String> parameters,
+            Map<Guid, Integer> filterPositionMap,
+            VdsFreeMemoryChecker memoryChecker,
+            String correlationId, SchedulingResult result) {
         if (filters != null) {
             for (PolicyUnitImpl filterPolicyUnit : filters) {
                 if (hostList == null || hostList.isEmpty()) {
@@ -532,12 +520,12 @@
     }
 
     private void logFilterActions(List<VDS> oldList,
-                                  Set<Guid> newSet,
-                                  VdcBllMessages actionName,
-                                  String filterName,
-                                  SchedulingResult result,
-                                  String correlationId) {
-        for (VDS host: oldList) {
+            Set<Guid> newSet,
+            VdcBllMessages actionName,
+            String filterName,
+            SchedulingResult result,
+            String correlationId) {
+        for (VDS host : oldList) {
             if (!newSet.contains(host.getId())) {
                 result.addReason(host.getId(), host.getName(), actionName, 
filterName);
                 log.info("Candidate host '{}' ('{}') was filtered out by '{}' 
filter '{}' (correlation id: {})",
@@ -636,7 +624,7 @@
 
         Map<Guid, Integer> hostCostTable = 
runInternalFunctions(internalScoreFunctions, hostList, vm, parameters);
 
-        if (Config.<Boolean> getValue(ConfigValues.ExternalSchedulerEnabled) 
&& !externalScoreFunctions.isEmpty()) {
+        if (Config.<Boolean>getValue(ConfigValues.ExternalSchedulerEnabled) && 
!externalScoreFunctions.isEmpty()) {
             runExternalFunctions(externalScoreFunctions, hostList, vm, 
parameters, hostCostTable);
         }
         Entry<Guid, Integer> bestHostEntry = null;
@@ -767,26 +755,28 @@
         return DbFacade.getInstance().getClusterPolicyDao();
     }
 
-    public static void enableLoadBalancer() {
-        if (Config.<Boolean> getValue(ConfigValues.EnableVdsLoadBalancing)) {
+    public void enableLoadBalancer() {
+        if (Config.<Boolean>getValue(ConfigValues.EnableVdsLoadBalancing)) {
             log.info("Start scheduling to enable vds load balancer");
-            
SchedulerUtilQuartzImpl.getInstance().scheduleAFixedDelayJob(instance,
+            SchedulerUtilQuartzImpl.getInstance().scheduleAFixedDelayJob(
+                    this,
                     "performLoadBalancing",
                     new Class[] {},
                     new Object[] {},
-                    Config.<Integer> 
getValue(ConfigValues.VdsLoadBalancingIntervalInMinutes),
-                    Config.<Integer> 
getValue(ConfigValues.VdsLoadBalancingIntervalInMinutes),
+                    
Config.<Integer>getValue(ConfigValues.VdsLoadBalancingIntervalInMinutes),
+                    
Config.<Integer>getValue(ConfigValues.VdsLoadBalancingIntervalInMinutes),
                     TimeUnit.MINUTES);
             log.info("Finished scheduling to enable vds load balancer");
         }
     }
 
-    public static void enableHaReservationCheck() {
+    public void enableHaReservationCheck() {
 
-        if (Config.<Boolean> getValue(ConfigValues.EnableVdsLoadBalancing)) {
+        if (Config.<Boolean>getValue(ConfigValues.EnableVdsLoadBalancing)) {
             log.info("Start HA Reservation check");
-            Integer interval = Config.<Integer> 
getValue(ConfigValues.VdsHaReservationIntervalInMinutes);
-            
SchedulerUtilQuartzImpl.getInstance().scheduleAFixedDelayJob(instance,
+            Integer interval = 
Config.<Integer>getValue(ConfigValues.VdsHaReservationIntervalInMinutes);
+            SchedulerUtilQuartzImpl.getInstance().scheduleAFixedDelayJob(
+                    this,
                     "performHaResevationCheck",
                     new Class[] {},
                     new Object[] {},
@@ -842,7 +832,6 @@
         }
         log.debug("HA Reservation check timer finished.");
     }
-
 
     @OnTimerMethodAnnotation("performLoadBalancing")
     public void performLoadBalancing() {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/AddClusterPolicyCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/AddClusterPolicyCommand.java
index 1d8db2f..fc6dbec 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/AddClusterPolicyCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/AddClusterPolicyCommand.java
@@ -1,6 +1,5 @@
 package org.ovirt.engine.core.bll.scheduling.commands;
 
-import org.ovirt.engine.core.bll.scheduling.SchedulingManager;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import 
org.ovirt.engine.core.common.scheduling.parameters.ClusterPolicyCRUDParameters;
@@ -20,7 +19,7 @@
     @Override
     protected void executeCommand() {
         getClusterPolicy().setId(Guid.newGuid());
-        SchedulingManager.getInstance().addClusterPolicy(getClusterPolicy());
+        schedulingManager.addClusterPolicy(getClusterPolicy());
         getReturnValue().setActionReturnValue(getClusterPolicy().getId());
         setSucceeded(true);
     }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommand.java
index 1df5bcc..76a66ab 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommand.java
@@ -20,8 +20,13 @@
 import org.ovirt.engine.core.common.utils.customprop.ValidationError;
 import org.ovirt.engine.core.compat.Guid;
 
+import javax.inject.Inject;
+
 public abstract class ClusterPolicyCRUDCommand extends 
CommandBase<ClusterPolicyCRUDParameters> {
     private ClusterPolicy clusterPolicy;
+
+    @Inject
+    SchedulingManager schedulingManager;
 
     public ClusterPolicyCRUDCommand(ClusterPolicyCRUDParameters parameters) {
         super(parameters);
@@ -31,7 +36,7 @@
     }
 
     protected boolean checkAddEditValidations() {
-        List<ClusterPolicy> clusterPolicies = 
SchedulingManager.getInstance().getClusterPolicies();
+        List<ClusterPolicy> clusterPolicies = 
schedulingManager.getClusterPolicies();
         if (getClusterPolicy() == null) {
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_POLICY_PARAMETERS_INVALID);
         }
@@ -41,7 +46,7 @@
                 return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_POLICY_NAME_INUSE);
             }
         }
-        Map<Guid, PolicyUnitImpl> map = 
SchedulingManager.getInstance().getPolicyUnitsMap();
+        Map<Guid, PolicyUnitImpl> map = schedulingManager.getPolicyUnitsMap();
         Set<Guid> existingPolicyUnits = new HashSet<>();
         // check filter policy units
         if (getClusterPolicy().getFilters() != null) {
@@ -108,7 +113,7 @@
         }
 
         List<ValidationError> validationErrors =
-                
SimpleCustomPropertiesUtil.getInstance().validateProperties(SchedulingManager.getInstance()
+                
SimpleCustomPropertiesUtil.getInstance().validateProperties(schedulingManager
                 .getCustomPropertiesRegexMap(getClusterPolicy()),
                 getClusterPolicy().getParameterMap());
         if (!validationErrors.isEmpty()) {
@@ -128,7 +133,7 @@
         if (clusterPolicyId == null) {
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_POLICY_PARAMETERS_INVALID);
         }
-        ClusterPolicy clusterPolicy = 
SchedulingManager.getInstance().getClusterPolicy(clusterPolicyId);
+        ClusterPolicy clusterPolicy = 
schedulingManager.getClusterPolicy(clusterPolicyId);
         if (clusterPolicy == null) {
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_POLICY_PARAMETERS_INVALID);
         }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/EditClusterPolicyCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/EditClusterPolicyCommand.java
index 65462ad..9711bbf 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/EditClusterPolicyCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/EditClusterPolicyCommand.java
@@ -1,6 +1,5 @@
 package org.ovirt.engine.core.bll.scheduling.commands;
 
-import org.ovirt.engine.core.bll.scheduling.SchedulingManager;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import 
org.ovirt.engine.core.common.scheduling.parameters.ClusterPolicyCRUDParameters;
@@ -18,7 +17,7 @@
 
     @Override
     protected void executeCommand() {
-        SchedulingManager.getInstance().editClusterPolicy(getClusterPolicy());
+        schedulingManager.editClusterPolicy(getClusterPolicy());
         setSucceeded(true);
     }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveClusterPolicyCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveClusterPolicyCommand.java
index 2051544..a0feb24 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveClusterPolicyCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveClusterPolicyCommand.java
@@ -1,6 +1,5 @@
 package org.ovirt.engine.core.bll.scheduling.commands;
 
-import org.ovirt.engine.core.bll.scheduling.SchedulingManager;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import 
org.ovirt.engine.core.common.scheduling.parameters.ClusterPolicyCRUDParameters;
@@ -16,7 +15,7 @@
         if (!checkRemoveEditValidations()) {
             return false;
         }
-        if 
(SchedulingManager.getInstance().getClustersByClusterPolicyId(getParameters().getClusterPolicyId()).size()
 > 0) {
+        if 
(getVdsGroupDAO().getClustersByClusterPolicyId(getParameters().getClusterPolicyId()).size()
 > 0) {
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_POLICY_PARAMETERS_INVALID);
         }
         return true;
@@ -24,7 +23,7 @@
 
     @Override
     protected void executeCommand() {
-        
SchedulingManager.getInstance().removeClusterPolicy(getParameters().getClusterPolicyId());
+        
schedulingManager.removeClusterPolicy(getParameters().getClusterPolicyId());
         setSucceeded(true);
     }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveExternalPolicyUnitCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveExternalPolicyUnitCommand.java
index ec720b8..f43120f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveExternalPolicyUnitCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveExternalPolicyUnitCommand.java
@@ -12,19 +12,24 @@
 import 
org.ovirt.engine.core.common.scheduling.parameters.RemoveExternalPolicyUnitParameters;
 import org.ovirt.engine.core.compat.Guid;
 
+import javax.inject.Inject;
+
 public class RemoveExternalPolicyUnitCommand extends 
CommandBase<RemoveExternalPolicyUnitParameters> {
 
     public RemoveExternalPolicyUnitCommand(RemoveExternalPolicyUnitParameters 
parameters) {
         super(parameters);
     }
 
+    @Inject
+    private SchedulingManager schedulingManager;
+
     @Override
     protected boolean canDoAction() {
-        
if(!SchedulingManager.getInstance().getPolicyUnitsMap().containsKey(getPolicyUnitId())){
+        
if(!schedulingManager.getPolicyUnitsMap().containsKey(getPolicyUnitId())){
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_POLICY_UNKNOWN_POLICY_UNIT);
         }
         List<String> clusterPoliciesNames =
-                
SchedulingManager.getInstance().getClusterPoliciesNamesByPolicyUnitId(getPolicyUnitId());
+                
schedulingManager.getClusterPoliciesNamesByPolicyUnitId(getPolicyUnitId());
         if (clusterPoliciesNames != null && clusterPoliciesNames.size() > 0) {
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CANNOT_REMOVE_POLICY_UNIT_ATTACHED_TO_CLUSTER_POLICY,
                     String.format("$cpNames %1$s", 
StringUtils.join(clusterPoliciesNames, ',')));
@@ -34,7 +39,7 @@
 
     @Override
     protected void executeCommand() {
-        
SchedulingManager.getInstance().removeExternalPolicyUnit(getPolicyUnitId());
+        schedulingManager.removeExternalPolicyUnit(getPolicyUnitId());
         setSucceeded(true);
     }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerDiscoveryThread.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerDiscoveryThread.java
index 2c93f13..314ef1f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerDiscoveryThread.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerDiscoveryThread.java
@@ -19,9 +19,16 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.inject.Inject;
+
 public class ExternalSchedulerDiscoveryThread extends Thread {
 
+    @Inject
+    private SchedulingManager schedulingManager;
+
     private final static Logger log = 
LoggerFactory.getLogger(ExternalSchedulerDiscoveryThread.class);
+
+    private ExternalSchedulerDiscoveryThread() {}
 
     @Override
     public void run() {
@@ -63,7 +70,7 @@
         // found in the db but not found in discovery, mark as such
         markExternalPoliciesAsDisabled(allPolicyUnits);
 
-        SchedulingManager.getInstance().reloadPolicyUnits();
+        schedulingManager.reloadPolicyUnits();
     }
 
     private void markExternalPoliciesAsDisabled(List<PolicyUnit> units) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAllPolicyUnitsQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAllPolicyUnitsQuery.java
index c3c4225..c7ce0de 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAllPolicyUnitsQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAllPolicyUnitsQuery.java
@@ -11,14 +11,19 @@
 import org.ovirt.engine.core.common.scheduling.PolicyUnit;
 import org.ovirt.engine.core.compat.Guid;
 
+import javax.inject.Inject;
+
 public class GetAllPolicyUnitsQuery extends 
QueriesCommandBase<VdcQueryParametersBase> {
     public GetAllPolicyUnitsQuery(VdcQueryParametersBase parameters) {
         super(parameters);
     }
 
+    @Inject
+    SchedulingManager schedulingManager;
+
     @Override
     protected void executeQueryCommand() {
-        Map<Guid, PolicyUnitImpl> map = 
SchedulingManager.getInstance().getPolicyUnitsMap();
+        Map<Guid, PolicyUnitImpl> map = schedulingManager.getPolicyUnitsMap();
         List<PolicyUnit> retList = new ArrayList<PolicyUnit>();
         for (PolicyUnitImpl policyUnitImpl : map.values()) {
             retList.add(policyUnitImpl.getPolicyUnit());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAttachedClustersByClusterPolicyIdQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAttachedClustersByClusterPolicyIdQuery.java
index 050597c..841cb24 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAttachedClustersByClusterPolicyIdQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAttachedClustersByClusterPolicyIdQuery.java
@@ -1,17 +1,22 @@
 package org.ovirt.engine.core.bll.scheduling.queries;
 
 import org.ovirt.engine.core.bll.QueriesCommandBase;
-import org.ovirt.engine.core.bll.scheduling.SchedulingManager;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.dao.VdsGroupDAO;
+
+import javax.inject.Inject;
 
 public class GetAttachedClustersByClusterPolicyIdQuery extends 
QueriesCommandBase<IdQueryParameters> {
     public GetAttachedClustersByClusterPolicyIdQuery(IdQueryParameters 
parameters) {
         super(parameters);
     }
 
+    @Inject
+    VdsGroupDAO vdsGroupDAO;
+
     @Override
     protected void executeQueryCommand() {
-        getQueryReturnValue().setReturnValue(SchedulingManager.getInstance()
-                .getClustersByClusterPolicyId(getParameters().getId()));
+        getQueryReturnValue().setReturnValue(
+                
vdsGroupDAO.getClustersByClusterPolicyId(getParameters().getId()));
     }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPoliciesQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPoliciesQuery.java
index b0a0128..6bf827f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPoliciesQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPoliciesQuery.java
@@ -4,13 +4,18 @@
 import org.ovirt.engine.core.bll.scheduling.SchedulingManager;
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 
+import javax.inject.Inject;
+
 public class GetClusterPoliciesQuery extends 
QueriesCommandBase<VdcQueryParametersBase> {
     public GetClusterPoliciesQuery(VdcQueryParametersBase parameters) {
         super(parameters);
     }
 
+    @Inject
+    private SchedulingManager schedulingManager;
+
     @Override
     protected void executeQueryCommand() {
-        
getQueryReturnValue().setReturnValue(SchedulingManager.getInstance().getClusterPolicies());
+        
getQueryReturnValue().setReturnValue(schedulingManager.getClusterPolicies());
     }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPolicyByIdQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPolicyByIdQuery.java
index 6d6b933..a5c463a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPolicyByIdQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPolicyByIdQuery.java
@@ -4,13 +4,18 @@
 import org.ovirt.engine.core.bll.scheduling.SchedulingManager;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 
+import javax.inject.Inject;
+
 public class GetClusterPolicyByIdQuery extends 
QueriesCommandBase<IdQueryParameters> {
     public GetClusterPolicyByIdQuery(IdQueryParameters parameters) {
         super(parameters);
     }
 
+    @Inject
+    private SchedulingManager schedulingManager;
+
     @Override
     protected void executeQueryCommand() {
-        
getQueryReturnValue().setReturnValue(SchedulingManager.getInstance().getClusterPolicy(getParameters().getId()));
+        
getQueryReturnValue().setReturnValue(schedulingManager.getClusterPolicy(getParameters().getId()));
     }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetPolicyUnitByIdQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetPolicyUnitByIdQuery.java
index cb5faa8..02cd6f1 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetPolicyUnitByIdQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetPolicyUnitByIdQuery.java
@@ -5,14 +5,19 @@
 import org.ovirt.engine.core.bll.scheduling.SchedulingManager;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 
+import javax.inject.Inject;
+
 public class GetPolicyUnitByIdQuery extends 
QueriesCommandBase<IdQueryParameters> {
     public GetPolicyUnitByIdQuery(IdQueryParameters parameters) {
         super(parameters);
     }
 
+    @Inject
+    private SchedulingManager schedulingManager;
+
     @Override
     protected void executeQueryCommand() {
-        PolicyUnitImpl value = SchedulingManager.getInstance()
+        PolicyUnitImpl value = schedulingManager
                 .getPolicyUnitsMap()
                 .get(getParameters().getId());
         if (value != null) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java
index 4ac9578..c21cb16 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java
@@ -55,6 +55,7 @@
 import org.ovirt.engine.core.dao.VdsDynamicDAO;
 import org.ovirt.engine.core.dao.network.NetworkDao;
 import org.ovirt.engine.core.dao.network.VmNicDao;
+import org.ovirt.engine.core.di.Injector;
 import org.ovirt.engine.core.utils.NetworkUtils;
 
 public class RunVmValidator {
@@ -113,8 +114,8 @@
                    validate(vmDuringInitialization(vm), messages) &&
                    validate(validateStorageDomains(vm, isInternalExecution, 
getVmImageDisks()), messages) &&
                    validate(validateImagesForRunVm(vm, getVmImageDisks()), 
messages) &&
-                   SchedulingManager.getInstance().canSchedule(
-                            vdsGroup, vm, vdsBlackList, vdsWhiteList, destVds, 
messages);
+                   getSchedulingManager().canSchedule(
+                           vdsGroup, vm, vdsBlackList, vdsWhiteList, destVds, 
messages);
         }
 
         return
@@ -132,10 +133,14 @@
                 validate(validateStorageDomains(vm, isInternalExecution, 
getVmImageDisks()), messages) &&
                 validate(validateImagesForRunVm(vm, getVmImageDisks()), 
messages) &&
                 validate(validateMemorySize(vm), messages) &&
-                SchedulingManager.getInstance().canSchedule(
+                getSchedulingManager().canSchedule(
                         vdsGroup, vm, vdsBlackList, vdsWhiteList, destVds, 
messages);
     }
 
+    private SchedulingManager getSchedulingManager() {
+        return Injector.get(SchedulingManager.class);
+    }
+
     protected ValidationResult validateMemorySize(VM vm) {
         int maxSize;
         if (getOsRepository().get64bitOss().contains(vm.getOs())) {
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommandTest.java
index 6da77e0..7055120 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommandTest.java
@@ -1,10 +1,13 @@
 package org.ovirt.engine.core.bll.scheduling.commands;
 
+import java.util.Collections;
 import java.util.HashMap;
 
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
+import org.mockito.Mockito;
+import org.ovirt.engine.core.bll.scheduling.SchedulingManager;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.scheduling.ClusterPolicy;
 import 
org.ovirt.engine.core.common.scheduling.parameters.ClusterPolicyCRUDParameters;
@@ -31,6 +34,7 @@
                     protected void executeCommand() {
                     }
                 };
+        command.schedulingManager = mockScheduler();
         Assert.assertTrue(command.checkAddEditValidations());
     }
 
@@ -50,7 +54,14 @@
                     protected void executeCommand() {
                     }
                 };
+        command.schedulingManager = mockScheduler();
         Assert.assertFalse(command.checkAddEditValidations());
     }
 
+    private SchedulingManager mockScheduler() {
+        SchedulingManager mock = Mockito.mock(SchedulingManager.class);
+        
Mockito.when(mock.getClusterPolicies()).thenReturn(Collections.<ClusterPolicy>emptyList());
+        return mock;
+    }
+
 }


-- 
To view, visit https://gerrit.ovirt.org/40560
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8adc52a3084f9bb539d808e0d8a066ef6fd6b92a
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Roy Golan <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to