Yevgeny Zaspitsky has uploaded a new change for review.

Change subject: engine: make ResourceManger a CDI singleton bean
......................................................................

engine: make ResourceManger a CDI singleton bean

Make ResourceManger a CDI singleton bean. 
The change is needed in order to make  HostNetworkTopologyPersisterImpl
a CDI singleton.

Change-Id: I5984b8fea6a6f3c76581f4f07eb0aa5abf83cfa0
Signed-off-by: Yevgeny Zaspitsky <yzasp...@redhat.com>
---
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/RefreshHostCapabilitiesCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SshSoftFencingCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VDSBrokerFrontendImpl.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/lsm/VmReplicateDiskStartTaskHandler.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConntectVDSToPoolAndDomains.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/transport/ProtocolDetector.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/BllCDIAdapter.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/AddVdsVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/DestroyVmVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/GlusterMonitoringStrategy.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/IsVmDuringInitiatingVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/MigrateVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/RemoveVdsVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResumeVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/SetVdsStatusVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/SetVmStatusVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsIdVDSCommandBase.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VirtMonitoringStrategy.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetIsoListVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/HttpImageTaskVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsProxyData.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ResetIrsVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMClearTaskVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksInfoVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksStatusesVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMRevertTaskVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMStopTaskVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SpmStopOnIrsVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/storage/StoragePoolDomainHelper.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CancelMigrateVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HostNetworkInterfacesPersisterImpl.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HostNetworkTopologyPersisterImpl.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStartVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStopVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerCommand.java
M 
backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
46 files changed, 425 insertions(+), 211 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/87/34187/14

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 54dcd02..1e9b669 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
@@ -28,7 +28,6 @@
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.utils.customprop.DevicePropertiesUtils;
 import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil;
-import org.ovirt.engine.core.vdsbroker.ResourceManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -39,11 +38,11 @@
 @Singleton
 @Startup
 @DependsOn({ "Backend"})
-public class InitBackendServicesOnStartupBean implements 
InitBackendServicesOnStartup{
+public class InitBackendServicesOnStartupBean implements 
InitBackendServicesOnStartup {
 
     private static final Logger log = 
LoggerFactory.getLogger(InitBackendServicesOnStartupBean.class);
 
-     /**
+    /**
      * This method is called upon the bean creation as part
      * of the management Service bean life cycle.
      */
@@ -63,7 +62,6 @@
             // TODO: remove this later, and rely only on the custom and built 
in extensions directories configuration
             DbUserCacheManager.getInstance().init();
             CommandCoordinatorUtil.initAsyncTaskManager();
-            ResourceManager.getInstance().init();
             OvfDataUpdater.getInstance().initOvfDataUpdater();
             SchedulingManager.getInstance().setMigrationHandler(new 
MigrationHandler() {
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RefreshHostCapabilitiesCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RefreshHostCapabilitiesCommand.java
index 1af8ce1..a4f5478 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RefreshHostCapabilitiesCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RefreshHostCapabilitiesCommand.java
@@ -3,6 +3,8 @@
 import java.util.Collections;
 import java.util.Map;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.action.LockProperties;
 import org.ovirt.engine.core.common.action.LockProperties.Scope;
@@ -17,6 +19,9 @@
 @NonTransactiveCommandAttribute
 public class RefreshHostCapabilitiesCommand<T extends VdsActionParameters> 
extends VdsCommand<T> {
 
+    @Inject
+    private ResourceManager resourceManager;
+
     public RefreshHostCapabilitiesCommand(T parameters) {
         super(parameters);
     }
@@ -29,7 +34,7 @@
     @Override
     protected void executeCommand() {
         try (EngineLock monitoringLock = acquireMonitorLock()) {
-            
ResourceManager.getInstance().GetVdsManager(getVdsId()).refreshHost(getVds());
+            resourceManager.GetVdsManager(getVdsId()).refreshHost(getVds());
             setSucceeded(true);
         }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java
index 67b584d..9e3c811 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java
@@ -9,6 +9,8 @@
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.TimeUnit;
 
+import javax.inject.Inject;
+
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.bll.context.CommandContext;
 import org.ovirt.engine.core.bll.job.ExecutionContext;
@@ -60,6 +62,9 @@
     private SnapshotsValidator snapshotsValidator=new SnapshotsValidator();
     private final List<Guid> runVdsList = new ArrayList<Guid>();
     private Guid lastDecreasedVds;
+
+    @Inject
+    private ResourceManager resourceManager;
 
     protected RunVmCommandBase(Guid commandId) {
         super(commandId);
@@ -328,7 +333,7 @@
             // time out waiting for an update is the highest between the 
refresh rate and the last update elapsed time
             // but still no higher than a configurable max to prevent very 
long updates to stall command.
             long t = Math.max(
-                    
ResourceManager.getInstance().GetVdsManager(vdsId).getLastUpdateElapsed(),
+                    
resourceManager.GetVdsManager(vdsId).getLastUpdateElapsed(),
                     TimeUnit.SECONDS.toMillis(Config.<Integer> 
getValue(VdsRefreshRate)));
             t = Math.max(Config.<Integer> 
getValue(ConfigValues.ThrottlerMaxWaitForVdsUpdateInMillis), t);
 
@@ -350,7 +355,7 @@
      * @return {@link org.ovirt.engine.core.vdsbroker.VdsMonitor} for 
signaling on thread actions
      */
     private VdsMonitor getMonitor(Guid vdsId) {
-        return 
ResourceManager.getInstance().GetVdsManager(vdsId).getVdsMonitor();
+        return resourceManager.GetVdsManager(vdsId).getVdsMonitor();
     }
 
     /**
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SshSoftFencingCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SshSoftFencingCommand.java
index f40c490..5be59d7 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SshSoftFencingCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SshSoftFencingCommand.java
@@ -3,6 +3,8 @@
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.bll.context.CommandContext;
 import org.ovirt.engine.core.bll.utils.EngineSSHClient;
 import org.ovirt.engine.core.common.action.VdsActionParameters;
@@ -15,6 +17,10 @@
  */
 @NonTransactiveCommandAttribute
 public class SshSoftFencingCommand<T extends VdsActionParameters> extends 
VdsCommand<T> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     /**
      * Creates an instance with specified parameters
      *
@@ -53,7 +59,7 @@
                 boolean result = 
executeSshSoftFencingCommand(getVds().getVdsGroupCompatibilityVersion().toString());
                 if (result) {
                     // SSH Soft Fencing executed without errors, tell 
VdsManager about it
-                    
ResourceManager.getInstance().GetVdsManager(getVds().getId()).finishSshSoftFencingExecution(getVds());
+                    
resourceManager.GetVdsManager(getVds().getId()).finishSshSoftFencingExecution(getVds());
                 }
                 getReturnValue().setSucceeded(result);
             } else {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsCommand.java
index 44eec7d..523bd97 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsCommand.java
@@ -4,6 +4,8 @@
 import java.util.Arrays;
 import java.util.List;
 
+import javax.inject.Inject;
+
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.bll.network.cluster.NetworkClusterHelper;
 import org.ovirt.engine.core.common.AuditLogType;
@@ -41,6 +43,9 @@
     private VDS _oldVds;
     private static final List<String> UPDATE_FIELDS_VDS_BROKER = 
Arrays.asList("host_name", "ip", "vds_unique_id", "port", "vds_group_id");
     private VdcActionType actionType;
+
+    @Inject
+    private ResourceManager resourceManager;
 
     public UpdateVdsCommand(T parameters) {
         this(parameters, VdcActionType.InstallVdsInternal);
@@ -200,7 +205,7 @@
         }
 
         if (_oldVds.getProtocol() != 
getParameters().getVdsStaticData().getProtocol()) {
-            
ResourceManager.getInstance().reestablishConnection(_oldVds.getId());
+            resourceManager.reestablishConnection(_oldVds.getId());
         }
 
         // set clusters network to be operational (if needed)
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VDSBrokerFrontendImpl.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VDSBrokerFrontendImpl.java
index aef680c..67ca388 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VDSBrokerFrontendImpl.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VDSBrokerFrontendImpl.java
@@ -14,6 +14,7 @@
 import org.ovirt.engine.core.common.vdscommands.VdsAndVmIDVDSParametersBase;
 import org.ovirt.engine.core.common.vdscommands.VdsIdVDSCommandParametersBase;
 import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.di.Injector;
 import org.ovirt.engine.core.vdsbroker.ResourceManager;
 
 public class VDSBrokerFrontendImpl implements VDSBrokerFrontend {
@@ -92,6 +93,6 @@
     }
 
     private ResourceManager getResourceManager() {
-        return ResourceManager.getInstance();
+        return Injector.get(ResourceManager.class);
     }
 }
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 678c19a..6389903 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
@@ -67,6 +67,7 @@
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
+import org.ovirt.engine.core.di.Injector;
 import org.ovirt.engine.core.utils.ejb.BeanProxyType;
 import org.ovirt.engine.core.utils.ejb.BeanType;
 import org.ovirt.engine.core.utils.ejb.EjbUtils;
@@ -485,10 +486,12 @@
         ThreadPoolUtil.execute(new Runnable() {
             @Override
             public void run() {
+                final ResourceManager resourceManager = getResourceManager();
+
                 for (Guid vmId : vmIds) {
                     CpuQos qos = 
DbFacade.getInstance().getCpuQosDao().getCpuQosByVmId(vmId);
                     if (qos != null && qos.getCpuLimit() != null) {
-                        
ResourceManager.getInstance().runVdsCommand(VDSCommandType.UpdateVmPolicy,
+                        
resourceManager.runVdsCommand(VDSCommandType.UpdateVmPolicy,
                                 new UpdateVmPolicyVDSParams(vdsId, vmId, 
qos.getCpuLimit().intValue()));
                     }
                 }
@@ -496,6 +499,10 @@
         });
     }
 
+    private ResourceManager getResourceManager() {
+        return Injector.get(ResourceManager.class);
+    }
+
     private static final Log log = LogFactory.getLog(VdsEventListener.class);
 
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskStartTaskHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskStartTaskHandler.java
index bc2d3fc..1349d94 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskStartTaskHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskStartTaskHandler.java
@@ -13,6 +13,7 @@
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 import org.ovirt.engine.core.common.vdscommands.VmReplicateDiskParameters;
 import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.di.Injector;
 import org.ovirt.engine.core.vdsbroker.ResourceManager;
 
 public class VmReplicateDiskStartTaskHandler extends 
AbstractSPMAsyncTaskHandler<TaskHandlerCommand<? extends 
LiveMigrateDiskParameters>> {
@@ -38,8 +39,9 @@
                         
getEnclosingCommand().getParameters().getImageGroupID(),
                         
getEnclosingCommand().getParameters().getDestinationImageId()
                 );
-        VDSReturnValue ret =
-                
ResourceManager.getInstance().runVdsCommand(VDSCommandType.VmReplicateDiskStart,
 migrationStartParams);
+        final ResourceManager resourceManager = getResourceManager();
+        VDSReturnValue ret = 
resourceManager.runVdsCommand(VDSCommandType.VmReplicateDiskStart,
+                migrationStartParams);
 
         if (!ret.getSucceeded()) {
             log.errorFormat("Failed VmReplicateDiskStart (Disk {0} , VM {1})",
@@ -47,6 +49,10 @@
                     getEnclosingCommand().getParameters().getVmId());
             throw new VdcBLLException(ret.getVdsError().getCode(), 
ret.getVdsError().getMessage());
         }
+    }
+
+    private ResourceManager getResourceManager() {
+        return Injector.get(ResourceManager.class);
     }
 
     @Override
@@ -89,8 +95,8 @@
                 );
 
         try {
-            VDSReturnValue ret = ResourceManager.getInstance().runVdsCommand(
-                    VDSCommandType.VmReplicateDiskFinish, 
migrationStartParams);
+            VDSReturnValue ret =
+                    
getResourceManager().runVdsCommand(VDSCommandType.VmReplicateDiskFinish, 
migrationStartParams);
             if (!ret.getSucceeded()) {
                 getEnclosingCommand().preventRollback();
             }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConntectVDSToPoolAndDomains.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConntectVDSToPoolAndDomains.java
index f6d71f3..f4b1881 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConntectVDSToPoolAndDomains.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConntectVDSToPoolAndDomains.java
@@ -3,14 +3,15 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap;
-import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
+import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap;
+import org.ovirt.engine.core.common.businessentities.VDS;
 import 
org.ovirt.engine.core.common.vdscommands.ConnectStoragePoolVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 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.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 import org.ovirt.engine.core.vdsbroker.ResourceManager;
@@ -39,10 +40,12 @@
                     
StorageHelperDirector.getInstance().getItem(getStorageDomain().getStorageType())
                             .connectStorageToDomainByVdsId(getStorageDomain(), 
vds.getId());
             if (isConnectSucceeded) {
-                ResourceManager.getInstance().runVdsCommand(
+                Injector.get(ResourceManager.class).runVdsCommand(
                         VDSCommandType.ConnectStoragePool,
-                        new ConnectStoragePoolVDSCommandParameters(
-                                vds, getStoragePool(), masterStorageDomainId, 
storagePoolIsoMap));
+                        new ConnectStoragePoolVDSCommandParameters(vds,
+                                getStoragePool(),
+                                masterStorageDomainId,
+                                storagePoolIsoMap));
             } else {
                 log.errorFormat("Failed to connect host {0} to domain {1}",
                         vds.getName(),
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/transport/ProtocolDetector.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/transport/ProtocolDetector.java
index d24a1be..d305a6d 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/transport/ProtocolDetector.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/transport/ProtocolDetector.java
@@ -26,9 +26,12 @@
  */
 public class ProtocolDetector {
 
-    private VDS vds;
+    private final VDS vds;
+    private final ResourceManager resourceManager;
 
-    public ProtocolDetector(VDS vds) {
+    public ProtocolDetector(ResourceManager resourceManager,
+                            VDS vds) {
+        this.resourceManager = resourceManager;
         this.vds = vds;
     }
 
@@ -58,7 +61,7 @@
      * Stops {@code VdsManager} for a host.
      */
     public void stopConnection() {
-        ResourceManager.getInstance().RemoveVds(this.vds.getId());
+        resourceManager.RemoveVds(this.vds.getId());
     }
 
     /**
@@ -68,7 +71,7 @@
      */
     public boolean attemptFallbackProtocol() {
         vds.setProtocol(VdsProtocol.XML);
-        ResourceManager.getInstance().AddVds(vds, false);
+        resourceManager.AddVds(vds, false);
         return attemptConnection();
     }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/BllCDIAdapter.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/BllCDIAdapter.java
index dde74c1..39f22e4 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/BllCDIAdapter.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/BllCDIAdapter.java
@@ -6,8 +6,10 @@
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dao.StoragePoolDAO;
 import org.ovirt.engine.core.dao.VdsGroupDAO;
+import org.ovirt.engine.core.dao.network.InterfaceDao;
 import org.ovirt.engine.core.dao.network.NetworkClusterDao;
 import org.ovirt.engine.core.dao.network.NetworkDao;
+import org.ovirt.engine.core.dao.network.NetworkQoSDao;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 
@@ -21,8 +23,6 @@
  * Producers could be declared either by a field or by a method, to get more 
control on the production of an instance
  *
  * There is no need to instantiate this class and there is no visible usage to 
it but to the dependency scanner
- *
- *
  */
 public class BllCDIAdapter {
 
@@ -47,6 +47,11 @@
     }
 
     @Produces
+    private InterfaceDao produceInterfaceDao(DbFacade dbFacade) {
+        return dbFacade.getInterfaceDao();
+    }
+
+    @Produces
     private NetworkDao produceNetworkDao(DbFacade dbFacade) {
         return dbFacade.getNetworkDao();
     }
@@ -57,6 +62,11 @@
     }
 
     @Produces
+    private NetworkQoSDao produceNetworkQoSDao(DbFacade dbFacade) {
+        return dbFacade.getNetworkQosDao();
+    }
+
+    @Produces
     private VdsGroupDAO produceVdsGroupDao(DbFacade dbFacade) {
         return dbFacade.getVdsGroupDao();
     }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/AddVdsVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/AddVdsVDSCommand.java
index 745e6f3..924eae6 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/AddVdsVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/AddVdsVDSCommand.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.vdsbroker;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.vdscommands.AddVdsVDSCommandParameters;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
@@ -7,6 +9,10 @@
 import org.ovirt.engine.core.utils.log.LogFactory;
 
 public class AddVdsVDSCommand<P extends AddVdsVDSCommandParameters> extends 
VdsIdVDSCommandBase<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     public AddVdsVDSCommand(P parameters) {
         super(parameters, true);
     }
@@ -17,7 +23,7 @@
         VDS vds = DbFacade.getInstance().getVdsDao().get(getVdsId());
         log.infoFormat("AddVds - VDS {0} was added, will try to add it to the 
resource manager",
                 getVdsId());
-        ResourceManager.getInstance().AddVds(vds, false);
+        resourceManager.AddVds(vds, false);
     }
 
     private static final Log log = LogFactory.getLog(AddVdsVDSCommand.class);
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java
index 43898a0..f11f186 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java
@@ -3,6 +3,8 @@
 import java.util.Date;
 import java.util.List;
 
+import javax.inject.Inject;
+
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.common.businessentities.Snapshot;
 import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotStatus;
@@ -20,6 +22,10 @@
 import org.ovirt.engine.core.vdsbroker.vdsbroker.VDSGenericException;
 
 public class CreateVmVDSCommand<P extends CreateVmVDSCommandParameters> 
extends VdsIdVDSCommandBase<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     public CreateVmVDSCommand(P parameters) {
         super(parameters);
     }
@@ -37,7 +43,7 @@
         // set, it is actually memory from snapshot, thus it should be cleared 
right
         // after the VM started
         final boolean clearHibernationVolume = vm.getStatus() != 
VMStatus.Suspended;
-        if (canExecute() && 
ResourceManager.getInstance().AddAsyncRunningVm(vm.getId())) {
+        if (canExecute() && resourceManager.AddAsyncRunningVm(vm.getId())) {
             CreateVDSCommand<?> command = null;
             try {
                 command = initCreateVDSCommand(vm);
@@ -54,12 +60,12 @@
                     
DbFacade.getInstance().getVmDynamicDao().update(vm.getDynamicData());
                 } else {
                     handleCommandResult(command);
-                    
ResourceManager.getInstance().RemoveAsyncRunningVm(getParameters().getVmId());
+                    
resourceManager.RemoveAsyncRunningVm(getParameters().getVmId());
                 }
             } catch (Exception e) {
                 log.error("Error in excuting CreateVmVDSCommand", e);
                 if (command != null && 
!command.getVDSReturnValue().getSucceeded()) {
-                    
ResourceManager.getInstance().RemoveAsyncRunningVm(getParameters().getVmId());
+                    
resourceManager.RemoveAsyncRunningVm(getParameters().getVmId());
                 }
                 throw new RuntimeException(e);
             }
@@ -92,7 +98,7 @@
         Guid guid = getParameters().getVm().getId();
         String vmName = getParameters().getVm().getName();
         VmDynamic vmDynamicFromDb = 
DbFacade.getInstance().getVmDynamicDao().get(guid);
-        if 
(ResourceManager.getInstance().IsVmDuringInitiating(getParameters().getVm().getId()))
 {
+        if 
(resourceManager.IsVmDuringInitiating(getParameters().getVm().getId())) {
             log.infoFormat("Vm Running failed - vm {0}:{1} already running", 
guid, vmName);
             getVDSReturnValue().setReturnValue(vmDynamicFromDb.getStatus());
             return false;
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/DestroyVmVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/DestroyVmVDSCommand.java
index b4c14de..2cafa77 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/DestroyVmVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/DestroyVmVDSCommand.java
@@ -3,6 +3,8 @@
 import java.util.Collections;
 import java.util.List;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
@@ -16,6 +18,10 @@
 import org.ovirt.engine.core.vdsbroker.vdsbroker.DestroyVDSCommand;
 
 public class DestroyVmVDSCommand<P extends DestroyVmVDSCommandParameters> 
extends VdsIdVDSCommandBase<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     public DestroyVmVDSCommand(P parameters) {
         super(parameters);
     }
@@ -26,7 +32,7 @@
         if (_vdsManager != null) {
 
             final DestroyVmVDSCommandParameters parameters = getParameters();
-            
ResourceManager.getInstance().RemoveAsyncRunningVm(parameters.getVmId());
+            resourceManager.RemoveAsyncRunningVm(parameters.getVmId());
 
             final VM curVm = 
DbFacade.getInstance().getVmDao().get(parameters.getVmId());
             
curVm.setInterfaces(DbFacade.getInstance().getVmNetworkInterfaceDao().getAllForVm(curVm.getId()));
@@ -72,8 +78,7 @@
                 // if using stop then call to ProcessOnVmStop because
                 // will not be called from UpdateRunTimeInfo
                 if (!parameters.getGracefully()) {
-                    ResourceManager.getInstance().getEventListener()
-                       .processOnVmStop(Collections.singleton(curVm.getId()));
+                    
resourceManager.getEventListener().processOnVmStop(Collections.singleton(curVm.getId()));
                 }
 
                 getVDSReturnValue().setReturnValue(curVm.getStatus());
@@ -99,7 +104,7 @@
     private void changeStatus(DestroyVmVDSCommandParameters parameters, VM 
curVm) {
         // do the state transition only if that VM is really running on SRC
         if (getVdsId().equals(curVm.getRunOnVds())) {
-            ResourceManager.getInstance().InternalSetVmStatus(curVm,
+            resourceManager.InternalSetVmStatus(curVm,
                     parameters.getGracefully() ? VMStatus.PoweringDown : 
VMStatus.Down);
         }
     }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/GlusterMonitoringStrategy.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/GlusterMonitoringStrategy.java
index 15aaf2a..46cdb86 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/GlusterMonitoringStrategy.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/GlusterMonitoringStrategy.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.vdsbroker;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.businessentities.NonOperationalReason;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
@@ -12,6 +14,9 @@
  * This class defines gluster strategy entry points, which are needed in host 
monitoring phase
  */
 public class GlusterMonitoringStrategy implements MonitoringStrategy {
+
+    @Inject
+    private ResourceManager resourceManager;
 
     @Override
     public boolean canMoveToMaintenance(VDS vds) {
@@ -26,7 +31,7 @@
     @Override
     public void processSoftwareCapabilities(VDS vds) {
         // check if gluster is running
-        VDSReturnValue returnValue = 
ResourceManager.getInstance().runVdsCommand(VDSCommandType.GlusterServersList,
+        VDSReturnValue returnValue = 
resourceManager.runVdsCommand(VDSCommandType.GlusterServersList,
                 new VdsIdVDSCommandParametersBase(vds.getId()));
         if (!returnValue.getSucceeded()) {
             vds.setStatus(VDSStatus.NonOperational);
@@ -36,7 +41,7 @@
     }
 
     private void vdsNonOperational(VDS vds, NonOperationalReason reason) {
-        
ResourceManager.getInstance().getEventListener().vdsNonOperational(vds.getId(), 
reason, true, Guid.Empty, null);
+        resourceManager.getEventListener().vdsNonOperational(vds.getId(), 
reason, true, Guid.Empty, null);
     }
 
     @Override
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/IsVmDuringInitiatingVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/IsVmDuringInitiatingVDSCommand.java
index 85c9fbc..4fb8ed7 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/IsVmDuringInitiatingVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/IsVmDuringInitiatingVDSCommand.java
@@ -1,16 +1,20 @@
 package org.ovirt.engine.core.vdsbroker;
 
+import javax.inject.Inject;
+
 import 
org.ovirt.engine.core.common.vdscommands.IsVmDuringInitiatingVDSCommandParameters;
 
-public class IsVmDuringInitiatingVDSCommand<P extends 
IsVmDuringInitiatingVDSCommandParameters>
-extends VDSCommandBase<P> {
+public class IsVmDuringInitiatingVDSCommand<P extends 
IsVmDuringInitiatingVDSCommandParameters> extends
+                                                                               
                 VDSCommandBase<P> {
+    @Inject
+    private ResourceManager resourceManager;
+
     public IsVmDuringInitiatingVDSCommand(P parameters) {
         super(parameters);
     }
 
     @Override
     protected void executeVDSCommand() {
-        getVDSReturnValue().setReturnValue(ResourceManager.getInstance()
-                .IsVmDuringInitiating(getParameters().getVmId()));
+        
getVDSReturnValue().setReturnValue(resourceManager.IsVmDuringInitiating(getParameters().getVmId()));
     }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/MigrateVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/MigrateVDSCommand.java
index ec0bc0d..821b9bd 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/MigrateVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/MigrateVDSCommand.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.vdsbroker;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.vdscommands.MigrateVDSCommandParameters;
@@ -12,6 +14,9 @@
 import org.ovirt.engine.core.vdsbroker.vdsbroker.MigrateBrokerVDSCommand;
 
 public class MigrateVDSCommand<P extends MigrateVDSCommandParameters> extends 
VdsIdVDSCommandBase<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
 
     private static final Log log = LogFactory.getLog(MigrateVDSCommand.class);
 
@@ -33,9 +38,9 @@
         VM vm = getVmDao().get(getParameters().getVmId());
 
         if (vdsReturnValue.getSucceeded()) {
-            
ResourceManager.getInstance().AddAsyncRunningVm(getParameters().getVmId());
+            resourceManager.AddAsyncRunningVm(getParameters().getVmId());
 
-            ResourceManager.getInstance().InternalSetVmStatus(vm, 
VMStatus.MigratingFrom);
+            resourceManager.InternalSetVmStatus(vm, VMStatus.MigratingFrom);
             vm.setMigratingToVds(getParameters().getDstVdsId());
             getVmDynamicDAO().update(vm.getDynamicData());
 
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/RemoveVdsVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/RemoveVdsVDSCommand.java
index c54b9b1..4c5e00a 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/RemoveVdsVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/RemoveVdsVDSCommand.java
@@ -1,8 +1,13 @@
 package org.ovirt.engine.core.vdsbroker;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.vdscommands.RemoveVdsVDSCommandParameters;
 
 public class RemoveVdsVDSCommand<P extends RemoveVdsVDSCommandParameters> 
extends VdsIdVDSCommandBase<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
 
     private P parameters;
 
@@ -13,6 +18,6 @@
 
     @Override
     protected void executeVdsIdCommand() {
-        ResourceManager.getInstance().RemoveVds(getVdsId(), 
parameters.isNewHost());
+        resourceManager.RemoveVds(getVdsId(), parameters.isNewHost());
     }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java
index cc21d83..31fcc61 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java
@@ -10,7 +10,12 @@
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
 import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.Validate;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.businessentities.IVdsEventListener;
 import org.ovirt.engine.core.common.businessentities.VDS;
@@ -47,9 +52,9 @@
 import org.ovirt.engine.core.vdsbroker.irsbroker.IrsBrokerCommand;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.FutureVDSCommand;
 
+@Singleton
 public class ResourceManager {
 
-    private static ResourceManager instance = new ResourceManager();
     private final Map<Guid, HashSet<Guid>> vdsAndVmsList = new 
ConcurrentHashMap<>();
     private final Map<Guid, VdsManager> vdsManagersDict = new 
ConcurrentHashMap<>();
     private final Set<Guid> asyncRunningVms =
@@ -59,18 +64,20 @@
 
     private static final Log log = LogFactory.getLog(ResourceManager.class);
 
-    private ResourceManager() {
+    private final DbFacade dbFacade;
 
+    @Inject
+    private ResourceManager(DbFacade dbFacade) {
+        Validate.notNull(dbFacade, "dbFacade cannot be null");
+
+        this.dbFacade = dbFacade;
     }
 
-    public static ResourceManager getInstance() {
-        return instance;
-    }
-
-    public void init() {
+    @PostConstruct
+    void init() {
         log.info("Start initializing " + getClass().getSimpleName());
-        List<VDS> allVdsList = DbFacade.getInstance().getVdsDao().getAll();
-        HashSet<Guid> nonResponsiveVdss = new HashSet<Guid>();
+        List<VDS> allVdsList = dbFacade.getVdsDao().getAll();
+        Set<Guid> nonResponsiveVdss = new HashSet<>();
         for (VDS helper_vds : allVdsList) {
             if (helper_vds.getStatus() == VDSStatus.NonResponsive) {
                 nonResponsiveVdss.add(helper_vds.getId());
@@ -81,7 +88,7 @@
         boolean runningVmsInTransition = false;
 
         // Cleanup all vms dynamic data. This is defensive code on power crash
-        List<VM> vms = DbFacade.getInstance().getVmDao().getAll();
+        List<VM> vms = dbFacade.getVmDao().getAll();
         for (VM vm : vms) {
             if (!vm.isNotRunning()) {
                 if (vm.getRunOnVds() != null) {
@@ -121,7 +128,7 @@
             }
         }
 
-        
DbFacade.getInstance().getVdsDynamicDao().updateAllInBatch(updatedEntities);
+        dbFacade.getVdsDynamicDao().updateAllInBatch(updatedEntities);
 
         // Populate the VDS dictionary
         for (VDS curVds : allVdsList) {
@@ -182,7 +189,7 @@
     }
 
     public void reestablishConnection(Guid vdsId) {
-        VDS vds = DbFacade.getInstance().getVdsDao().get(vdsId);
+        VDS vds = dbFacade.getVdsDao().get(vdsId);
         RemoveVds(vds.getId());
         AddVds(vds, false);
     }
@@ -260,13 +267,13 @@
     }
 
     private void storeVm(VM vm) {
-        DbFacade.getInstance().getVmDynamicDao().update(vm.getDynamicData());
-        
DbFacade.getInstance().getVmStatisticsDao().update(vm.getStatisticsData());
+        dbFacade.getVmDynamicDao().update(vm.getDynamicData());
+        dbFacade.getVmStatisticsDao().update(vm.getStatisticsData());
         List<VmNetworkInterface> interfaces = vm.getInterfaces();
         if (interfaces != null) {
             for (VmNetworkInterface ifc : interfaces) {
                 VmNetworkStatistics stats = ifc.getStatistics();
-                
DbFacade.getInstance().getVmNetworkStatisticsDao().update(stats);
+                dbFacade.getVmNetworkStatisticsDao().update(stats);
             }
         }
     }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResumeVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResumeVDSCommand.java
index 55514e4..e189cc3 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResumeVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResumeVDSCommand.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.vdsbroker;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.vdscommands.ResumeVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VdsAndVmIDVDSParametersBase;
@@ -8,6 +10,10 @@
 import org.ovirt.engine.core.vdsbroker.vdsbroker.ResumeBrokerVDSCommand;
 
 public class ResumeVDSCommand<P extends ResumeVDSCommandParameters> extends 
VdsIdVDSCommandBase<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     public ResumeVDSCommand(P parameters) {
         super(parameters);
     }
@@ -22,7 +28,7 @@
             command.execute();
             if (command.getVDSReturnValue().getSucceeded()) {
                 retval = VMStatus.PoweringUp;
-                
ResourceManager.getInstance().AddAsyncRunningVm(parameters.getVmId());
+                resourceManager.AddAsyncRunningVm(parameters.getVmId());
             } else if (command.getVDSReturnValue().getExceptionObject() != 
null) {
                 log.errorFormat("VDS::pause Failed resume vm '{0}' in vds = 
{1} : {2}, error = {3}", parameters
                         .getVmId(), getVds().getId(), getVds().getName(), 
command.getVDSReturnValue()
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/SetVdsStatusVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/SetVdsStatusVDSCommand.java
index e4ede09..b02d352 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/SetVdsStatusVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/SetVdsStatusVDSCommand.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.vdsbroker;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
@@ -15,6 +17,10 @@
 import org.ovirt.engine.core.utils.transaction.TransactionSupport;
 
 public class SetVdsStatusVDSCommand<P extends 
SetVdsStatusVDSCommandParameters> extends VdsIdVDSCommandBase<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     public SetVdsStatusVDSCommand(P parameters) {
         super(parameters);
     }
@@ -30,8 +36,7 @@
                 log.infoFormat("VDS {0} is spm and moved from up calling 
resetIrs.", vds.getName());
                 // check if this host was spm and reset if do.
                 getVDSReturnValue().setSucceeded(
-                        ResourceManager
-                                .getInstance()
+                        resourceManager
                                 .runVdsCommand(
                                         VDSCommandType.ResetIrs,
                                         new 
ResetIrsVDSCommandParameters(vds.getStoragePoolId(), vds.getId()))
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/SetVmStatusVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/SetVmStatusVDSCommand.java
index 0c34f38..0b677da 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/SetVmStatusVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/SetVmStatusVDSCommand.java
@@ -2,6 +2,8 @@
 
 import java.util.List;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmDynamic;
@@ -15,6 +17,9 @@
 
 public class SetVmStatusVDSCommand<P extends SetVmStatusVDSCommandParameters> 
extends VDSCommandBase<P> {
     private static final Log log = 
LogFactory.getLog(SetVmStatusVDSCommand.class);
+
+    @Inject
+    private ResourceManager resourceManager;
 
     public SetVmStatusVDSCommand(P parameters) {
         super(parameters);
@@ -33,10 +38,10 @@
         VmDynamic vmDynamic = 
DbFacade.getInstance().getVmDynamicDao().get(parameters.getVmId());
         vmDynamic.setStatus(status);
         if (status.isNotRunning()) {
-            
ResourceManager.getInstance().RemoveAsyncRunningVm(parameters.getVmId());
+            resourceManager.RemoveAsyncRunningVm(parameters.getVmId());
             VmStatistics vmStatistics = 
DbFacade.getInstance().getVmStatisticsDao().get(parameters.getVmId());
             VM vm = new VM(null, vmDynamic, vmStatistics);
-            ResourceManager.getInstance().InternalSetVmStatus(vm, status, 
parameters.getExitStatus());
+            resourceManager.InternalSetVmStatus(vm, status, 
parameters.getExitStatus());
             
DbFacade.getInstance().getVmStatisticsDao().update(vm.getStatisticsData());
             List<VmNetworkInterface> interfaces = vm.getInterfaces();
             if (interfaces != null && !interfaces.isEmpty()) {
@@ -47,7 +52,7 @@
             }
 
         } else if (status == VMStatus.Unknown) {
-            
ResourceManager.getInstance().RemoveAsyncRunningVm(parameters.getVmId());
+            resourceManager.RemoveAsyncRunningVm(parameters.getVmId());
         }
         DbFacade.getInstance().getVmDynamicDao().update(vmDynamic);
     }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsIdVDSCommandBase.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsIdVDSCommandBase.java
index 7c9720d..19d3678 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsIdVDSCommandBase.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsIdVDSCommandBase.java
@@ -4,6 +4,7 @@
 import org.ovirt.engine.core.common.vdscommands.VdsIdVDSCommandParametersBase;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.di.Injector;
 
 public abstract class VdsIdVDSCommandBase<P extends 
VdsIdVDSCommandParametersBase> extends VDSCommandBase<P> {
     protected VdsManager _vdsManager;
@@ -11,7 +12,8 @@
     public VdsIdVDSCommandBase(P parameters, boolean newHost) {
         super(parameters);
         if (!newHost) {
-            _vdsManager = 
ResourceManager.getInstance().GetVdsManager(parameters.getVdsId());
+            final ResourceManager resourceManager = 
Injector.get(ResourceManager.class);
+            _vdsManager = resourceManager.GetVdsManager(parameters.getVdsId());
         }
     }
 
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java
index 0ab1354..ee73828 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java
@@ -42,6 +42,7 @@
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
+import org.ovirt.engine.core.di.Injector;
 import org.ovirt.engine.core.utils.NumaUtils;
 import org.ovirt.engine.core.utils.crypt.EngineEncryptionUtils;
 import org.ovirt.engine.core.utils.lock.EngineLock;
@@ -59,7 +60,6 @@
 import org.ovirt.engine.core.vdsbroker.jsonrpc.TransportFactory;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.GetCapabilitiesVDSCommand;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.HostNetworkTopologyPersister;
-import 
org.ovirt.engine.core.vdsbroker.vdsbroker.HostNetworkTopologyPersisterImpl;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.IVdsServer;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.VDSNetworkException;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.VDSRecoveringException;
@@ -76,6 +76,7 @@
     private final VdsMonitor vdsMonitor = new VdsMonitor();
     private VDS vds;
     private final HostNetworkTopologyPersister hostNetworkTopologyPersister;
+    private final ResourceManager resourceManager;
     private long lastUpdate;
     private long updateStartTime;
     private long nextMaintenanceAttemptTime;
@@ -89,6 +90,7 @@
     private boolean mBeforeFirstRefresh = true;
     private VdsUpdateRunTimeInfo vdsUpdater;
 
+
     private VdsManager(VDS vds) {
         log.info("Entered VdsManager constructor");
         this.vds = vds;
@@ -99,7 +101,9 @@
         sshSoftFencingExecuted = new AtomicBoolean(false);
         monitoringLock = new 
EngineLock(Collections.singletonMap(vdsId.toString(),
                 new Pair<String, String>(LockingGroup.VDS_INIT.name(), "")), 
null);
-        hostNetworkTopologyPersister = 
HostNetworkTopologyPersisterImpl.getInstance();
+
+        hostNetworkTopologyPersister = 
Injector.get(HostNetworkTopologyPersister.class);
+        resourceManager = Injector.get(ResourceManager.class);
 
         handlePreviousStatus();
         handleSecureSetup();
@@ -199,7 +203,7 @@
                         }
                         if (isMonitoringNeeded()) {
                             setStartTime();
-                            vdsUpdater = new 
VdsUpdateRunTimeInfo(VdsManager.this, vds, monitoringStrategy);
+                            vdsUpdater = new 
VdsUpdateRunTimeInfo(resourceManager, VdsManager.this, vds, monitoringStrategy);
                             vdsUpdater.refresh();
                             mUnrespondedAttempts.set(0);
                             sshSoftFencingExecuted.set(false);
@@ -209,7 +213,7 @@
                                 && vds.getStatus() != VDSStatus.PendingApproval
                                 && vds.getStatus() != VDSStatus.InstallingOS) {
                             log.infoFormat("Initializing Host: {0}", 
vds.getName());
-                            
ResourceManager.getInstance().HandleVdsFinishedInit(vds.getId());
+                            resourceManager.HandleVdsFinishedInit(vds.getId());
                             setInitialized(true);
                         }
                     } catch (VDSNetworkException e) {
@@ -316,12 +320,11 @@
         VDS vds = DbFacade.getInstance().getVdsDao().get(getVdsId());
         if (vds.getStatus() == VDSStatus.Initializing) {
             try {
-                ResourceManager
-                            .getInstance()
-                            .getEventListener()
-                            .vdsNonOperational(vds.getId(),
-                                    
NonOperationalReason.TIMEOUT_RECOVERING_FROM_CRASH,
-                                    true,
+                resourceManager
+                        .getEventListener()
+                        .vdsNonOperational(vds.getId(),
+                                
NonOperationalReason.TIMEOUT_RECOVERING_FROM_CRASH,
+                                true,
                                 Guid.Empty);
                 setIsSetNonOperationalExecuted(true);
             } catch (RuntimeException exp) {
@@ -419,7 +422,7 @@
                 monitoringStrategy.processHardwareCapabilities(vds);
 
                 // Always check VdsVersion
-                
ResourceManager.getInstance().getEventListener().handleVdsVersion(vds.getId());
+                
resourceManager.getEventListener().handleVdsVersion(vds.getId());
             }
         }
     }
@@ -510,7 +513,7 @@
                 && mFailedToRunVmAttempts.incrementAndGet() >= Config
                         .<Integer> 
getValue(ConfigValues.NumberOfFailedRunsOnVds)) {
             //Only one thread at a time can enter here
-            
ResourceManager.getInstance().runVdsCommand(VDSCommandType.SetVdsStatus,
+            resourceManager.runVdsCommand(VDSCommandType.SetVdsStatus,
                     new SetVdsStatusVDSCommandParameters(vds.getId(), 
VDSStatus.Error));
 
             SchedulerUtil sched = SchedulerUtilQuartzImpl.getInstance();
@@ -536,7 +539,7 @@
     public void succededToRunVm(Guid vmId) {
         mUnrespondedAttempts.set(0);
         sshSoftFencingExecuted.set(false);
-        ResourceManager.getInstance().succededToRunVm(vmId, vds.getId());
+        resourceManager.succededToRunVm(vmId, vds.getId());
     }
 
     public VDSStatus refreshCapabilities(AtomicBoolean 
processHardwareCapsNeeded, VDS vds) {
@@ -555,7 +558,7 @@
                 // host and an exception will be raised by VDSM.
                 (hostVersions = vds.getSupportedClusterVersionsSet()) != null 
&&
                 hostVersions.contains(clusterCompatibility)) {
-                VDSReturnValue ret = 
ResourceManager.getInstance().runVdsCommand(VDSCommandType.GetHardwareInfo,
+                VDSReturnValue ret = 
resourceManager.runVdsCommand(VDSCommandType.GetHardwareInfo,
                         new VdsIdAndVdsVDSCommandParametersBase(vds));
                 if (!ret.getSucceeded()) {
                     AuditLogableBase logable = new 
AuditLogableBase(vds.getId());
@@ -690,7 +693,7 @@
             if (!sshSoftFencingExecuted.getAndSet(true)) {
                 executeSshSoftFencing = true;
             }
-            
ResourceManager.getInstance().getEventListener().vdsNotResponding(vds, 
executeSshSoftFencing, lastUpdate);
+            resourceManager.getEventListener().vdsNotResponding(vds, 
executeSshSoftFencing, lastUpdate);
         }
         return true;
     }
@@ -785,9 +788,8 @@
         List<VM> vmList = getVmsToMoveToUnknown();
         for (VM vm :vmList) {
             destroyVmOnDestination(vm);
-            ResourceManager.getInstance()
-                    .runVdsCommand(VDSCommandType.SetVmStatus,
-                            new SetVmStatusVDSCommandParameters(vm.getId(), 
VMStatus.Unknown));
+            resourceManager.runVdsCommand(VDSCommandType.SetVmStatus,
+                    new SetVmStatusVDSCommandParameters(vm.getId(), 
VMStatus.Unknown));
             // log VM transition to unknown status
             AuditLogableBase logable = new AuditLogableBase();
             logable.setVmId(vm.getId());
@@ -805,7 +807,7 @@
             public void run() {
                 VDSReturnValue returnValue = null;
                 returnValue =
-                        ResourceManager.getInstance()
+                        resourceManager
                                 .runVdsCommand(
                                         VDSCommandType.DestroyVm,
                                         new 
DestroyVmVDSCommandParameters(vm.getMigratingToVds()
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
index 787ad9b..a7da535 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
@@ -141,6 +141,8 @@
     /** names of fields in {@link VmDynamic} that are not changed by VDSM */
     private static final List<String> UNCHANGEABLE_FIELDS_BY_VDSM;
 
+    private final ResourceManager resourceManager;
+
     static {
         List<String> tmpList = new ArrayList<String>();
         for (Field field : VmDynamic.class.getDeclaredFields()) {
@@ -151,11 +153,15 @@
         UNCHANGEABLE_FIELDS_BY_VDSM = Collections.unmodifiableList(tmpList);
     }
 
-    public VdsUpdateRunTimeInfo(VdsManager vdsManager, VDS vds, 
MonitoringStrategy monitoringStrategy) {
+    public VdsUpdateRunTimeInfo(ResourceManager resourceManager,
+                                VdsManager vdsManager,
+                                VDS vds,
+                                MonitoringStrategy monitoringStrategy) {
         _vdsManager = vdsManager;
         _vds = vds;
         _firstStatus = _vds.getStatus();
         this.monitoringStrategy = monitoringStrategy;
+        this.resourceManager = resourceManager;
         _vmDict = getDbFacade().getVmDao().getAllRunningByVds(_vds.getId());
     }
 
@@ -223,7 +229,7 @@
                     _vds.getName(),
                     _vds.getVdsGroupName()), cce);
             if (_vds.getStatus() != VDSStatus.PreparingForMaintenance && 
_vds.getStatus() != VDSStatus.Maintenance) {
-                
ResourceManager.getInstance().runVdsCommand(VDSCommandType.SetVdsStatus,
+                resourceManager.runVdsCommand(VDSCommandType.SetVdsStatus,
                         new SetVdsStatusVDSCommandParameters(_vds.getId(), 
VDSStatus.Error));
             }
         } catch (Throwable t) {
@@ -583,7 +589,7 @@
     }
 
     protected IVdsEventListener getVdsEventListener() {
-        return ResourceManager.getInstance().getEventListener();
+        return getResourceManager().getEventListener();
     }
 
     public void afterRefreshTreatment() {
@@ -625,7 +631,7 @@
             // rerun all vms from rerun list
             for (Guid vm_guid : _vmsToRerun) {
                 log.errorFormat("Rerun vm {0}. Called from vds {1}", vm_guid, 
_vds.getName());
-                ResourceManager.getInstance().RerunFailedCommand(vm_guid, 
_vds.getId());
+                resourceManager.RerunFailedCommand(vm_guid, _vds.getId());
 
             }
             for (Guid vm_guid : _succededToRunVms) {
@@ -652,7 +658,7 @@
             getVdsEventListener().processOnVmStop(_vmsMovedToDown);
 
             for (Guid vm_guid : _vmsToRemoveFromAsync) {
-                ResourceManager.getInstance().RemoveAsyncRunningVm(vm_guid);
+                getResourceManager().RemoveAsyncRunningVm(vm_guid);
             }
         } catch (IRSErrorException ex) {
             logFailureMessage("Could not finish afterRefreshTreatment", ex);
@@ -1593,7 +1599,7 @@
 
                 // when going to suspend, delete vm from cache later
                 if (status == VMStatus.SavingState) {
-                    ResourceManager.getInstance().InternalSetVmStatus(vmTo, 
VMStatus.Suspended);
+                    getResourceManager().InternalSetVmStatus(vmTo, 
VMStatus.Suspended);
                 }
 
                 clearVm(vmTo, vmInternalData.getVmDynamic().getExitStatus(), 
vmInternalData.getVmDynamic()
@@ -1628,7 +1634,7 @@
         if (exitStatus != VmExitStatus.Normal) {
             // Vm failed to run - try to rerun it on other Vds
             if (cacheVm != null) {
-                if 
(ResourceManager.getInstance().IsVmInAsyncRunningList(vmDynamic.getId())) {
+                if 
(getResourceManager().IsVmInAsyncRunningList(vmDynamic.getId())) {
                     log.infoFormat("Running on vds during rerun failed vm: 
{0}", vmDynamic.getRunOnVds());
                     _vmsToRerun.add(vmDynamic.getId());
                 } else if (cacheVm.isAutoStartup()) {
@@ -1637,12 +1643,12 @@
             }
             // if failed in destination right after migration
             else { // => cacheVm == null
-                
ResourceManager.getInstance().RemoveAsyncRunningVm(vmDynamic.getId());
+                getResourceManager().RemoveAsyncRunningVm(vmDynamic.getId());
                 addVmDynamicToList(vmDynamic);
             }
         } else {
             // Vm moved safely to down status. May be migration - just remove 
it from Async Running command.
-            
ResourceManager.getInstance().RemoveAsyncRunningVm(vmDynamic.getId());
+            getResourceManager().RemoveAsyncRunningVm(vmDynamic.getId());
         }
     }
 
@@ -1664,7 +1670,7 @@
 
         AuditLogableBase logable = new AuditLogableBase(_vds.getId(), 
vm.getId());
         auditLog(logable, type);
-        ResourceManager.getInstance().RemoveAsyncRunningVm(vm.getId());
+        getResourceManager().RemoveAsyncRunningVm(vm.getId());
     }
 
     private void proceedVmBeforeDeletion(VM curVm, VmDynamic vmDynamic) {
@@ -1693,7 +1699,7 @@
                     }
                 }
                 // set vm status to down if source vm crushed
-                ResourceManager.getInstance().InternalSetVmStatus(curVm,
+                    getResourceManager().InternalSetVmStatus(curVm,
                         VMStatus.Down,
                         vmDynamic.getExitStatus(),
                         vmDynamic.getExitMessage(),
@@ -1704,7 +1710,7 @@
                 type = AuditLogType.VM_MIGRATION_ABORT;
                 logable.addCustomValue("MigrationError", 
vmDynamic.getExitMessage());
 
-                
ResourceManager.getInstance().RemoveAsyncRunningVm(vmDynamic.getId());
+                    
getResourceManager().RemoveAsyncRunningVm(vmDynamic.getId());
             }
             break;
         }
@@ -1843,7 +1849,7 @@
                     if (_vmDict.containsKey(runningVm.getId())) {
                         staleRunningVms.add(runningVm.getId());
                         if (!_vdsManager.isInitialized()) {
-                            
ResourceManager.getInstance().RemoveVmFromDownVms(_vds.getId(), 
runningVm.getId());
+                            
getResourceManager().RemoveVmFromDownVms(_vds.getId(), runningVm.getId());
                         }
                     }
                 }
@@ -1920,7 +1926,7 @@
 
             Guid vmGuid = vmToRemove.getId();
             if (!migrating && !_vmsToRerun.contains(vmGuid)
-                    && 
ResourceManager.getInstance().IsVmInAsyncRunningList(vmGuid)) {
+                && getResourceManager().IsVmInAsyncRunningList(vmGuid)) {
                 _vmsToRerun.add(vmGuid);
                 log.infoFormat("add VM {0} to rerun treatment", 
vmToRemove.getName());
             }
@@ -1957,7 +1963,7 @@
                 newVmStatus);
 
         // if the DST host goes unresponsive it will take care all MigratingTo 
and unknown VMs
-        ResourceManager.getInstance().InternalSetVmStatus(vmToRemove, 
newVmStatus);
+        getResourceManager().InternalSetVmStatus(vmToRemove, newVmStatus);
 
         // save the VM state
         addVmDynamicToList(vmToRemove.getDynamicData());
@@ -2271,12 +2277,12 @@
             // the exit status and message were set, and we don't want to 
override them here.
             // we will add it to _vmDynamicToSave though because it might been 
removed from it in #updateRepository
             if (vm.getStatus() != VMStatus.Suspended && vm.getStatus() != 
VMStatus.Down) {
-                ResourceManager.getInstance().InternalSetVmStatus(vm, 
VMStatus.Down, exitStatus, exitMessage, exitReason);
+                getResourceManager().InternalSetVmStatus(vm, VMStatus.Down, 
exitStatus, exitMessage, exitReason);
             }
             addVmDynamicToList(vm.getDynamicData());
             addVmStatisticsToList(vm.getStatisticsData());
             addVmInterfaceStatisticsToList(vm.getInterfaces());
-            if 
(!ResourceManager.getInstance().IsVmInAsyncRunningList(vm.getId())) {
+            if (!getResourceManager().IsVmInAsyncRunningList(vm.getId())) {
                 _vmsMovedToDown.add(vm.getId());
             }
         }
@@ -2333,6 +2339,6 @@
     }
 
     protected ResourceManager getResourceManager() {
-        return ResourceManager.getInstance();
+        return resourceManager;
     }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VirtMonitoringStrategy.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VirtMonitoringStrategy.java
index c2e9529..0f68f39 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VirtMonitoringStrategy.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VirtMonitoringStrategy.java
@@ -17,6 +17,7 @@
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dao.VdsGroupDAO;
+import org.ovirt.engine.core.di.Injector;
 
 /**
  * This class defines virt strategy entry points, which are needed in host 
monitoring phase
@@ -84,15 +85,19 @@
 
     @Override
     public void processHardwareCapabilities(VDS vds) {
-        
ResourceManager.getInstance().getEventListener().processOnCpuFlagsChange(vds.getId());
+        
getResourceManager().getEventListener().processOnCpuFlagsChange(vds.getId());
     }
 
     protected void vdsNonOperational(VDS vds, NonOperationalReason reason, 
Map<String, String> customLogValues) {
-        ResourceManager.getInstance()
+        getResourceManager()
                 .getEventListener()
                 .vdsNonOperational(vds.getId(), reason, true, Guid.Empty, 
customLogValues);
     }
 
+    private ResourceManager getResourceManager() {
+        return Injector.get(ResourceManager.class);
+    }
+
     @Override
     public boolean processHardwareCapabilitiesNeeded(VDS oldVds, VDS newVds) {
         return !StringUtils.equals(oldVds.getCpuFlags(), newVds.getCpuFlags());
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetIsoListVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetIsoListVDSCommand.java
index 654c5c6..0304faa 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetIsoListVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetIsoListVDSCommand.java
@@ -1,23 +1,27 @@
 package org.ovirt.engine.core.vdsbroker.irsbroker;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.vdscommands.HSMGetIsoListParameters;
 import org.ovirt.engine.core.common.vdscommands.IrsBaseVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.vdsbroker.ResourceManager;
 
 public class GetIsoListVDSCommand<P extends IrsBaseVDSCommandParameters> 
extends IrsBrokerCommand<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     public GetIsoListVDSCommand(P parameters) {
         super(parameters);
     }
 
     @Override
     protected void executeIrsBrokerCommand() {
-        setReturnValue(ResourceManager
-                .getInstance()
-                .runVdsCommand(
-                        VDSCommandType.HsmGetIsoList,
-                        new 
HSMGetIsoListParameters(getCurrentIrsProxyData().getCurrentVdsId(),
-                                getParameters().getStoragePoolId()))
+        setReturnValue(resourceManager.runVdsCommand(
+                VDSCommandType.HsmGetIsoList,
+                new 
HSMGetIsoListParameters(getCurrentIrsProxyData().getCurrentVdsId(),
+                        getParameters().getStoragePoolId()))
                 .getReturnValue());
     }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/HttpImageTaskVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/HttpImageTaskVDSCommand.java
index b1606b1..8cf543c 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/HttpImageTaskVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/HttpImageTaskVDSCommand.java
@@ -8,6 +8,8 @@
 import java.util.concurrent.FutureTask;
 import java.util.concurrent.TimeUnit;
 
+import javax.inject.Inject;
+
 import org.apache.commons.httpclient.Header;
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.HttpMethodBase;
@@ -31,6 +33,10 @@
 import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcUtils;
 
 public abstract class HttpImageTaskVDSCommand<T extends HttpMethodBase, P 
extends ImageHttpAccessVDSCommandParameters> extends VdsBrokerCommand<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     private T method;
 
     public HttpImageTaskVDSCommand(P parameters) {
@@ -63,7 +69,7 @@
 
     protected void executeHttpMethod(final T method) {
         int responseCode = -1;
-        VdsManager manager = 
ResourceManager.getInstance().GetVdsManager(getParameters().getVdsId());
+        VdsManager manager = 
resourceManager.GetVdsManager(getParameters().getVdsId());
         final HttpClient httpclient = manager.getVdsProxy().getHttpClient();
         try {
             FutureTask<Integer> futureTask = new FutureTask(new 
Callable<Integer>() {
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java
index 286ca3b..e111a1e 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java
@@ -9,6 +9,8 @@
 import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.inject.Inject;
+
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
@@ -44,6 +46,9 @@
 public abstract class IrsBrokerCommand<P extends IrsBaseVDSCommandParameters> 
extends BrokerCommandBase<P> {
     private static Map<Guid, IrsProxyData> _irsProxyData = new 
ConcurrentHashMap<Guid, IrsProxyData>();
     static final VDSStatus reportingVdsStatus = VDSStatus.Up;
+
+    @Inject
+    private ResourceManager resourceManager;
 
     /**
      * process received domain monitoring information from a given vds if 
necessary (according to it's status
@@ -262,7 +267,7 @@
                     new Callable<EventResult>() {
                         @Override
                         public EventResult call() {
-                            return ResourceManager.getInstance()
+                            return resourceManager
                                     
.getEventListener().masterDomainNotOperational(
                                             masterDomainId, 
getParameters().getStoragePoolId(), true,
                                             getVDSReturnValue().getVdsError() 
!= null
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsProxyData.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsProxyData.java
index 8e47199..e20623f 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsProxyData.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsProxyData.java
@@ -62,6 +62,7 @@
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
+import org.ovirt.engine.core.di.Injector;
 import org.ovirt.engine.core.utils.ejb.BeanProxyType;
 import org.ovirt.engine.core.utils.ejb.BeanType;
 import org.ovirt.engine.core.utils.ejb.EjbUtils;
@@ -218,7 +219,7 @@
         VDSReturnValue result = null;
         Guid curVdsId = mCurrentVdsId;
         if (curVdsId != null) {
-            result = 
ResourceManager.getInstance().runVdsCommand(VDSCommandType.SpmStatus,
+            result = 
getResourceManager().runVdsCommand(VDSCommandType.SpmStatus,
                     new SpmStatusVDSCommandParameters(curVdsId, 
_storagePoolId));
         }
 
@@ -229,15 +230,13 @@
             if (storagePool.getStatus() != StoragePoolStatus.NonResponsive
                     && storagePool.getStatus() != 
StoragePoolStatus.NotOperational) {
                 if (result != null && result.getVdsError() != null) {
-                    ResourceManager
-                            .getInstance()
+                    getResourceManager()
                             .getEventListener()
                             .storagePoolStatusChange(_storagePoolId, 
StoragePoolStatus.NonResponsive,
                                     
AuditLogType.SYSTEM_CHANGE_STORAGE_POOL_STATUS_PROBLEMATIC_WITH_ERROR,
                                     result.getVdsError().getCode());
                 } else {
-                    ResourceManager
-                            .getInstance()
+                    getResourceManager()
                             .getEventListener()
                             .storagePoolStatusChange(_storagePoolId, 
StoragePoolStatus.NonResponsive,
                                     
AuditLogType.SYSTEM_CHANGE_STORAGE_POOL_STATUS_PROBLEMATIC,
@@ -250,8 +249,7 @@
             // then cause failover with attempts
             if (result != null && !(result.getExceptionObject() instanceof 
VDSNetworkException)) {
                 HashMap<Guid, AsyncTaskStatus> tasksList =
-                        (HashMap<Guid, AsyncTaskStatus>) ResourceManager
-                                .getInstance()
+                        (HashMap<Guid, AsyncTaskStatus>) getResourceManager()
                                 
.runVdsCommand(VDSCommandType.HSMGetAllTasksStatuses,
                                         new 
VdsIdVDSCommandParametersBase(curVdsId)).getReturnValue();
                 boolean allTasksFinished = true;
@@ -282,7 +280,7 @@
             // if recovered from network exception set back to up
             
DbFacade.getInstance().getStoragePoolDao().updateStatus(storagePool.getId(), 
StoragePoolStatus.Up);
             storagePool.setStatus(StoragePoolStatus.Up);
-            ResourceManager.getInstance().getEventListener()
+            getResourceManager().getEventListener()
                     .storagePoolStatusChanged(storagePool.getId(), 
storagePool.getStatus());
         }
         List<StorageDomain> domainsInDb = 
DbFacade.getInstance().getStorageDomainDao()
@@ -290,7 +288,7 @@
         GetStoragePoolInfoVDSCommandParameters tempVar = new 
GetStoragePoolInfoVDSCommandParameters(
                 _storagePoolId);
         tempVar.setIgnoreFailoverLimit(true);
-        VDSReturnValue storagePoolInfoResult = 
ResourceManager.getInstance().runVdsCommand(
+        VDSReturnValue storagePoolInfoResult = 
getResourceManager().runVdsCommand(
                 VDSCommandType.GetStoragePoolInfo, tempVar);
         if (storagePoolInfoResult.getSucceeded()) {
             KeyValuePairCompat<StoragePool, List<StorageDomain>> data =
@@ -402,7 +400,7 @@
                     if (pool != null) {
                         
DbFacade.getInstance().getStoragePoolDao().updateStatus(pool.getId(), 
StoragePoolStatus.Maintenance);
                         pool.setStatus(StoragePoolStatus.Maintenance);
-                        ResourceManager.getInstance().getEventListener()
+                        getResourceManager().getEventListener()
                                 .storagePoolStatusChanged(pool.getId(), 
StoragePoolStatus.Maintenance);
                     }
                 }
@@ -410,7 +408,7 @@
 
             // For block domains, synchronize LUN details comprising the 
storage domain with the DB
             if (statusChanged && data.getStatus() == 
StorageDomainStatus.Active && storage_domain.getStorageType().isBlockDomain()) {
-                
ResourceManager.getInstance().getEventListener().syncLunsInfoForBlockStorageDomain(
+                
getResourceManager().getEventListener().syncLunsInfoForBlockStorageDomain(
                         data.getId(), getCurrentVdsId());
             }
 
@@ -505,7 +503,7 @@
                         logable.setStorageDomainId(masterDomainId);
                         AuditLogDirector.log(logable, 
AuditLogType.SYSTEM_MASTER_DOMAIN_NOT_IN_SYNC);
 
-                        return ResourceManager.getInstance()
+                        return getResourceManager()
                                 .getEventListener()
                                 .masterDomainNotOperational(masterDomainId, 
storagePoolId, false, true);
 
@@ -531,14 +529,13 @@
         boolean performFailover = false;
         if (vdsId != null) {
             try {
-                VDSReturnValue statusResult = 
ResourceManager.getInstance().runVdsCommand(VDSCommandType.SpmStatus,
+                VDSReturnValue statusResult = 
getResourceManager().runVdsCommand(VDSCommandType.SpmStatus,
                         new SpmStatusVDSCommandParameters(vdsId, 
_storagePoolId));
                 if (statusResult != null
                         && statusResult.getSucceeded()
                         && (((SpmStatusResult) 
statusResult.getReturnValue()).getSpmStatus() == SpmStatus.SPM || 
((SpmStatusResult) statusResult
                                 .getReturnValue()).getSpmStatus() == 
SpmStatus.Contend)) {
-                    performFailover = ResourceManager
-                            .getInstance()
+                    performFailover = getResourceManager()
                             .runVdsCommand(VDSCommandType.SpmStop,
                                     new SpmStopVDSCommandParameters(vdsId, 
_storagePoolId)).getSucceeded();
                 } else {
@@ -561,6 +558,10 @@
             log.errorFormat("IRS failover failed - cant allocate vds server");
             return false;
         }
+    }
+
+    private ResourceManager getResourceManager() {
+        return Injector.get(ResourceManager.class);
     }
 
     public IIrsServer getIrsProxy() {
@@ -597,7 +598,7 @@
             public void run() {
                 try {
                     if 
(DbFacade.getInstance().isStoragePoolMasterUp(_storagePoolId)) {
-                        ResourceManager.getInstance()
+                        getResourceManager()
                                 .getEventListener()
                                 .storagePoolUpEvent(storagePool);
                     }
@@ -636,8 +637,7 @@
         StoragePoolStatus prevStatus = storagePool.getStatus();
         if (prevStatus != StoragePoolStatus.NonResponsive) {
             try {
-                ResourceManager
-                        .getInstance()
+                getResourceManager()
                         .getEventListener()
                         .storagePoolStatusChange(_storagePoolId, 
StoragePoolStatus.NonResponsive,
                                 
AuditLogType.SYSTEM_CHANGE_STORAGE_POOL_STATUS_PROBLEMATIC_SEARCHING_NEW_SPM,
@@ -665,7 +665,7 @@
             Integer selectedVdsSpmId = selectedVds.getVdsSpmId();
             mTriedVdssList.add(selectedVdsId);
 
-            VDSReturnValue returnValueFromVds = 
ResourceManager.getInstance().runVdsCommand(
+            VDSReturnValue returnValueFromVds = 
getResourceManager().runVdsCommand(
                     VDSCommandType.SpmStatus,
                     new SpmStatusVDSCommandParameters(selectedVds.getId(), 
_storagePoolId));
             spmStatus = (SpmStatusResult) returnValueFromVds.getReturnValue();
@@ -679,7 +679,7 @@
                             .getMasterStorageDomainIdForPool(_storagePoolId);
                     List<StoragePoolIsoMap> storagePoolIsoMap = 
DbFacade.getInstance()
                             
.getStoragePoolIsoMapDao().getAllForStoragePool(_storagePoolId);
-                    VDSReturnValue connectResult = 
ResourceManager.getInstance().runVdsCommand(
+                    VDSReturnValue connectResult = 
getResourceManager().runVdsCommand(
                             VDSCommandType.ConnectStoragePool,
                             new 
ConnectStoragePoolVDSCommandParameters(selectedVds, storagePool,
                                     masterDomainId, storagePoolIsoMap));
@@ -693,8 +693,7 @@
                     }
                     performedPoolConnect = true;
                     // refresh spmStatus result
-                    spmStatus = (SpmStatusResult) ResourceManager
-                            .getInstance()
+                    spmStatus = (SpmStatusResult) getResourceManager()
                             .runVdsCommand(VDSCommandType.SpmStatus,
                                     new 
SpmStatusVDSCommandParameters(selectedVds.getId(), _storagePoolId))
                             .getReturnValue();
@@ -722,7 +721,7 @@
                     // if could not start spm on this host and connected to
                     // pool here
                     // then disconnect
-                    ResourceManager.getInstance().runVdsCommand(
+                    getResourceManager().runVdsCommand(
                             VDSCommandType.DisconnectStoragePool,
                             new 
DisconnectStoragePoolVDSCommandParameters(selectedVdsId, _storagePoolId,
                                     selectedVdsSpmId));
@@ -785,7 +784,7 @@
                 storagePool.setStatus(StoragePoolStatus.Up);
             }
             DbFacade.getInstance().getStoragePoolDao().update(storagePool);
-            ResourceManager.getInstance()
+            getResourceManager()
                     .getEventListener()
                     .storagePoolStatusChanged(storagePool.getId(), 
storagePool.getStatus());
 
@@ -829,8 +828,7 @@
     }
 
     private void movePoolToProblematicInDB(StoragePool storagePool) {
-        ResourceManager
-                .getInstance()
+        getResourceManager()
                 .getEventListener()
                 .storagePoolStatusChange(storagePool.getId(), 
StoragePoolStatus.NonResponsive,
                         
AuditLogType.SYSTEM_CHANGE_STORAGE_POOL_STATUS_PROBLEMATIC, 
VdcBllErrors.ENGINE);
@@ -899,8 +897,7 @@
 
                 try {
                     if (!spmVdsId.equals(Guid.Empty)) {
-                        SpmStatusResult destSpmStatus = (SpmStatusResult) 
ResourceManager
-                                .getInstance()
+                        SpmStatusResult destSpmStatus = (SpmStatusResult) 
getResourceManager()
                                 .runVdsCommand(VDSCommandType.SpmStatus,
                                         new 
SpmStatusVDSCommandParameters(spmVdsId, _storagePoolId))
                                 .getReturnValue();
@@ -954,7 +951,7 @@
                             return spmStatus;
                         } else {
                             // try to stop spm
-                            VDSReturnValue spmStopReturnValue = 
ResourceManager.getInstance().runVdsCommand(
+                            VDSReturnValue spmStopReturnValue = 
getResourceManager().runVdsCommand(
                                     VDSCommandType.SpmStop,
                                     new 
SpmStopVDSCommandParameters(vdsToFenceObject.getId(), _storagePoolId));
                             // if spm stop succeeded no need to fence,
@@ -986,16 +983,15 @@
                 log.infoFormat("starting spm on vds {0}, storage pool {1}, 
prevId {2}, LVER {3}",
                         selectedVds.argvalue.getName(), storagePool.getName(), 
spmStatus.getSpmId(),
                         spmStatus.getSpmLVER());
-                spmStatus = (SpmStatusResult) ResourceManager
-                        .getInstance()
+                spmStatus =
+                        (SpmStatusResult) getResourceManager()
                         .runVdsCommand(
                                 VDSCommandType.SpmStart,
                                 new 
SpmStartVDSCommandParameters(selectedVds.argvalue.getId(), _storagePoolId,
                                         spmStatus.getSpmId(), 
spmStatus.getSpmLVER(), storagePool
                                                 .getrecovery_mode(), 
vdsSpmIdToFence != -1, 
storagePool.getStoragePoolFormatType())).getReturnValue();
                 if (spmStatus == null || spmStatus.getSpmStatus() != 
SpmStatus.SPM) {
-                    ResourceManager
-                            .getInstance()
+                    getResourceManager()
                             .getEventListener()
                             .storagePoolStatusChange(storagePool.getId(),
                                     StoragePoolStatus.NonResponsive,
@@ -1120,7 +1116,7 @@
                         // For block domains, synchronize LUN details 
comprising the storage domain with the DB
                         StorageDomain storageDomain = 
DbFacade.getInstance().getStorageDomainDao().get(tempData.getDomainId());
                         if (storageDomain.getStorageType().isBlockDomain()) {
-                            
ResourceManager.getInstance().getEventListener().syncLunsInfoForBlockStorageDomain(
+                            
getResourceManager().getEventListener().syncLunsInfoForBlockStorageDomain(
                                     storageDomain.getId(), vdsId);
                         }
                     }
@@ -1454,7 +1450,7 @@
 
                     @Override
                     public Void call() {
-                        ResourceManager.getInstance()
+                        getResourceManager()
                                 
.getEventListener().connectHostToDomainsInActiveOrUnknownStatus(vds);
                         return null;
                     }
@@ -1558,8 +1554,7 @@
                         ThreadPoolUtil.execute(new Runnable() {
                             @Override
                             public void run() {
-                                ResourceManager
-                                        .getInstance()
+                                getResourceManager()
                                         .getEventListener()
                                         .vdsNonOperational(vdsId, 
NonOperationalReason.STORAGE_DOMAIN_UNREACHABLE,
                                                 true, domainId);
@@ -1591,12 +1586,12 @@
             if (storageDomain.getStorageDomainType() != 
StorageDomainType.Master) {
                 log.errorFormat("Domain {0} was reported by all hosts in 
status UP as problematic. Moving the domain to NonOperational.",
                         domainIdTuple);
-                result = ResourceManager.getInstance()
+                result = getResourceManager()
                         
.getEventListener().storageDomainNotOperational(domainId, _storagePoolId);
             } else {
                 log.warnFormat("Domain {0} was reported by all hosts in status 
UP as problematic. Not moving the domain to NonOperational because it is being 
reconstructed now.",
                         domainIdTuple);
-                result = ResourceManager.getInstance()
+                result = getResourceManager()
                         
.getEventListener().masterDomainNotOperational(domainId, _storagePoolId, false, 
false);
             }
         }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ResetIrsVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ResetIrsVDSCommand.java
index b402d3d..d86c541 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ResetIrsVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ResetIrsVDSCommand.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.vdsbroker.irsbroker;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
@@ -12,6 +14,10 @@
 import org.ovirt.engine.core.vdsbroker.ResourceManager;
 
 public class ResetIrsVDSCommand<P extends ResetIrsVDSCommandParameters> 
extends IrsBrokerCommand<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     public ResetIrsVDSCommand(P parameters) {
         super(parameters);
     }
@@ -21,10 +27,8 @@
         P parameters = getParameters();
         Guid vdsId = parameters.getVdsId();
         if (getParameters().isVdsAlreadyRebooted() ||
-                ResourceManager
-                .getInstance()
-                .runVdsCommand(VDSCommandType.SpmStop,
-                        new SpmStopVDSCommandParameters(vdsId, 
parameters.getStoragePoolId())).getSucceeded()
+            resourceManager.runVdsCommand(VDSCommandType.SpmStop,
+                    new SpmStopVDSCommandParameters(vdsId, 
parameters.getStoragePoolId())).getSucceeded()
                 || parameters.getIgnoreStopFailed()) {
             if (getParameters().getPreferredSPMId() != null) {
                 
getCurrentIrsProxyData().setPreferredHostId(getParameters().getPreferredSPMId());
@@ -38,8 +42,7 @@
 
             StoragePool pool = 
DbFacade.getInstance().getStoragePoolDao().get(parameters.getStoragePoolId());
             if (pool != null && (pool.getStatus() == 
StoragePoolStatus.NotOperational)) {
-                ResourceManager
-                        .getInstance()
+                resourceManager
                         .getEventListener()
                         
.storagePoolStatusChange(parameters.getStoragePoolId(), 
StoragePoolStatus.NonResponsive,
                                 
AuditLogType.SYSTEM_CHANGE_STORAGE_POOL_STATUS_RESET_IRS, VdcBllErrors.ENGINE);
@@ -48,4 +51,5 @@
             getVDSReturnValue().setSucceeded(false);
         }
     }
+
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMClearTaskVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMClearTaskVDSCommand.java
index dac0b1c..9eeb200 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMClearTaskVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMClearTaskVDSCommand.java
@@ -1,20 +1,25 @@
 package org.ovirt.engine.core.vdsbroker.irsbroker;
 
+import javax.inject.Inject;
+
 import 
org.ovirt.engine.core.common.vdscommands.HSMTaskGuidBaseVDSCommandParameters;
 import 
org.ovirt.engine.core.common.vdscommands.SPMTaskGuidBaseVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 import org.ovirt.engine.core.vdsbroker.ResourceManager;
 
-public class SPMClearTaskVDSCommand<P extends 
SPMTaskGuidBaseVDSCommandParameters>
-        extends IrsBrokerCommand<P> {
+public class SPMClearTaskVDSCommand<P extends 
SPMTaskGuidBaseVDSCommandParameters> extends IrsBrokerCommand<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     public SPMClearTaskVDSCommand(P parameters) {
         super(parameters);
     }
 
     @Override
     protected void executeIrsBrokerCommand() {
-        VDSReturnValue returnValue = 
ResourceManager.getInstance().runVdsCommand(
+        VDSReturnValue returnValue = resourceManager.runVdsCommand(
                 VDSCommandType.HSMClearTask,
                 new 
HSMTaskGuidBaseVDSCommandParameters(getCurrentIrsProxyData().getCurrentVdsId(),
                         getParameters().getTaskId()));
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksInfoVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksInfoVDSCommand.java
index 1ac1b91..5d6cb85 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksInfoVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksInfoVDSCommand.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.vdsbroker.irsbroker;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.vdscommands.IrsBaseVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.common.vdscommands.VdsIdVDSCommandParametersBase;
@@ -8,6 +10,10 @@
 import org.ovirt.engine.core.vdsbroker.ResourceManager;
 
 public class SPMGetAllTasksInfoVDSCommand<P extends 
IrsBaseVDSCommandParameters> extends IrsBrokerCommand<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     public SPMGetAllTasksInfoVDSCommand(P parameters) {
         super(parameters);
     }
@@ -18,8 +24,7 @@
                 "-- executeIrsBrokerCommand: Attempting on storage pool '{0}'",
                 getParameters().getStoragePoolId());
 
-        setReturnValue(ResourceManager
-                .getInstance()
+        setReturnValue(resourceManager
                 .runVdsCommand(VDSCommandType.HSMGetAllTasksInfo,
                         new 
VdsIdVDSCommandParametersBase(getCurrentIrsProxyData().getCurrentVdsId()))
                 .getReturnValue());
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksStatusesVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksStatusesVDSCommand.java
index 6553738..9fb2239 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksStatusesVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksStatusesVDSCommand.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.vdsbroker.irsbroker;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.vdscommands.IrsBaseVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.common.vdscommands.VdsIdVDSCommandParametersBase;
@@ -9,13 +11,17 @@
 
 @Logged(executionLevel = LogLevel.DEBUG)
 public class SPMGetAllTasksStatusesVDSCommand<P extends 
IrsBaseVDSCommandParameters> extends IrsBrokerCommand<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     public SPMGetAllTasksStatusesVDSCommand(P parameters) {
         super(parameters);
     }
 
     @Override
     protected void executeIrsBrokerCommand() {
-        
setVDSReturnValue(ResourceManager.getInstance().runVdsCommand(VDSCommandType.HSMGetAllTasksStatuses,
+        
setVDSReturnValue(resourceManager.runVdsCommand(VDSCommandType.HSMGetAllTasksStatuses,
                 new 
VdsIdVDSCommandParametersBase(getCurrentIrsProxyData().getCurrentVdsId())));
     }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMRevertTaskVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMRevertTaskVDSCommand.java
index 62ad49e..3ff3b69 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMRevertTaskVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMRevertTaskVDSCommand.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.vdsbroker.irsbroker;
 
+import javax.inject.Inject;
+
 import 
org.ovirt.engine.core.common.vdscommands.HSMTaskGuidBaseVDSCommandParameters;
 import 
org.ovirt.engine.core.common.vdscommands.SPMTaskGuidBaseVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
@@ -7,6 +9,10 @@
 import org.ovirt.engine.core.vdsbroker.ResourceManager;
 
 public class SPMRevertTaskVDSCommand<P extends 
SPMTaskGuidBaseVDSCommandParameters> extends IrsBrokerCommand<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     public SPMRevertTaskVDSCommand(P parameters) {
         super(parameters);
     }
@@ -14,7 +20,7 @@
     @Override
     protected void executeIrsBrokerCommand() {
         VDSReturnValue returnValue =
-                ResourceManager.getInstance().runVdsCommand(
+                resourceManager.runVdsCommand(
                         VDSCommandType.HSMRevertTask,
                         new 
HSMTaskGuidBaseVDSCommandParameters(getCurrentIrsProxyData().getCurrentVdsId(),
                                 getParameters().getTaskId()));
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMStopTaskVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMStopTaskVDSCommand.java
index fb8777f..0fb1980 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMStopTaskVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMStopTaskVDSCommand.java
@@ -1,18 +1,24 @@
 package org.ovirt.engine.core.vdsbroker.irsbroker;
 
+import javax.inject.Inject;
+
 import 
org.ovirt.engine.core.common.vdscommands.HSMTaskGuidBaseVDSCommandParameters;
 import 
org.ovirt.engine.core.common.vdscommands.SPMTaskGuidBaseVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.vdsbroker.ResourceManager;
 
 public class SPMStopTaskVDSCommand<P extends 
SPMTaskGuidBaseVDSCommandParameters> extends IrsBrokerCommand<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     public SPMStopTaskVDSCommand(P parameters) {
         super(parameters);
     }
 
     @Override
     protected void executeIrsBrokerCommand() {
-        ResourceManager.getInstance().runVdsCommand(
+        resourceManager.runVdsCommand(
                 VDSCommandType.HSMStopTask,
                 new 
HSMTaskGuidBaseVDSCommandParameters(getCurrentIrsProxyData().getCurrentVdsId(),
                         getParameters().getTaskId()));
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SpmStopOnIrsVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SpmStopOnIrsVDSCommand.java
index 98fab70..69e34f9 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SpmStopOnIrsVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SpmStopOnIrsVDSCommand.java
@@ -1,17 +1,23 @@
 package org.ovirt.engine.core.vdsbroker.irsbroker;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.vdscommands.ResetIrsVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.vdsbroker.ResourceManager;
 
 public class SpmStopOnIrsVDSCommand<P extends 
SpmStopOnIrsVDSCommandParameters> extends IrsBrokerCommand<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     public SpmStopOnIrsVDSCommand(P parameters) {
         super(parameters);
     }
 
     @Override
     protected void executeIrsBrokerCommand() {
-        getVDSReturnValue().setSucceeded(ResourceManager.getInstance()
+        getVDSReturnValue().setSucceeded(resourceManager
                 .runVdsCommand(
                         VDSCommandType.ResetIrs,
                         new 
ResetIrsVDSCommandParameters(getParameters().getStoragePoolId(),
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/storage/StoragePoolDomainHelper.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/storage/StoragePoolDomainHelper.java
index cd80f22..8268982 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/storage/StoragePoolDomainHelper.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/storage/StoragePoolDomainHelper.java
@@ -19,6 +19,7 @@
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 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.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 import org.ovirt.engine.core.vdsbroker.ResourceManager;
@@ -59,7 +60,7 @@
      */
     public static boolean refreshHostPoolMetadata(VDS vds, StoragePool 
storagePool, Guid masterDomainId, List<StoragePoolIsoMap> storagePoolIsoMaps) {
         try {
-            ResourceManager.getInstance().runVdsCommand(
+            getResourceManager().runVdsCommand(
                     VDSCommandType.ConnectStoragePool,
                     new ConnectStoragePoolVDSCommandParameters(vds,
                             storagePool,
@@ -76,7 +77,7 @@
             error = null;
 
             try {
-                VDSReturnValue vdsReturnValue = 
ResourceManager.getInstance().runVdsCommand(
+                VDSReturnValue vdsReturnValue = 
getResourceManager().runVdsCommand(
                         VDSCommandType.ConnectStoragePool,
                         new ConnectStoragePoolVDSCommandParameters(vds,
                                 storagePool,
@@ -99,6 +100,10 @@
         return true;
     }
 
+    private static ResourceManager getResourceManager() {
+        return Injector.get(ResourceManager.class);
+    }
+
     public static void updateApplicablePoolDomainsStatuses(Guid storagePoolId,
             Set<StorageDomainStatus> applicableStatusesForUpdate,
             StorageDomainStatus newStatus, String reason) {
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CancelMigrateVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CancelMigrateVDSCommand.java
index 00bc075..e6e1d14 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CancelMigrateVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CancelMigrateVDSCommand.java
@@ -1,11 +1,17 @@
 package org.ovirt.engine.core.vdsbroker.vdsbroker;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.errors.VDSError;
 import org.ovirt.engine.core.common.errors.VdcBllErrors;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.vdsbroker.ResourceManager;
 
 public class CancelMigrateVDSCommand<P extends CancelMigrationVDSParameters> 
extends VdsBrokerCommand<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     public CancelMigrateVDSCommand(P parameters) {
         super(parameters);
     }
@@ -16,7 +22,7 @@
         status = getBroker().migrateCancel(vmId.toString());
         proceedProxyReturnValue();
         if (!getParameters().isRerunAfterCancel()) {
-            ResourceManager.getInstance().RemoveAsyncRunningVm(vmId);
+            resourceManager.RemoveAsyncRunningVm(vmId);
         }
     }
 
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java
index fa7dfb5..b3bcf02 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.vdsbroker.vdsbroker;
 
+import javax.inject.Inject;
+
 import 
org.ovirt.engine.core.common.vdscommands.CollectHostNetworkDataVdsCommandParameters;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.utils.transaction.TransactionMethod;
@@ -7,11 +9,11 @@
 
 public class CollectVdsNetworkDataVDSCommand extends 
GetCapabilitiesVDSCommand<CollectHostNetworkDataVdsCommandParameters> {
 
-    private final HostNetworkTopologyPersister hostNetworkTopologyPersister;
+    @Inject
+    private HostNetworkTopologyPersister hostNetworkTopologyPersister;
 
     public 
CollectVdsNetworkDataVDSCommand(CollectHostNetworkDataVdsCommandParameters 
parameters) {
         super(parameters);
-        hostNetworkTopologyPersister = 
HostNetworkTopologyPersisterImpl.getInstance();
     }
 
     @Override
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HostNetworkInterfacesPersisterImpl.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HostNetworkInterfacesPersisterImpl.java
index c8e3d8b..9dbd70e 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HostNetworkInterfacesPersisterImpl.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HostNetworkInterfacesPersisterImpl.java
@@ -9,19 +9,20 @@
 import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
 import org.ovirt.engine.core.dao.network.InterfaceDao;
 
-public class HostNetworkInterfacesPersisterImpl implements 
HostNetworkInterfacesPersister {
+final class HostNetworkInterfacesPersisterImpl implements 
HostNetworkInterfacesPersister {
 
     private final InterfaceDao interfaceDao;
     private final List<VdsNetworkInterface> reportedNics;
     private final Map<String, VdsNetworkInterface> reportedNicsByNames;
     private final List<VdsNetworkInterface> dbNics;
-    private List<VdsNetworkInterface> nicsForUpdate;
     private final Map<String, VdsNetworkInterface> userConfiguredNicsByName;
 
-    public HostNetworkInterfacesPersisterImpl(InterfaceDao interfaceDao,
-            List<VdsNetworkInterface> reportedNics,
-            List<VdsNetworkInterface> dbNics,
-            List<VdsNetworkInterface> userConfiguredNics) {
+    private List<VdsNetworkInterface> nicsForUpdate;
+
+    HostNetworkInterfacesPersisterImpl(InterfaceDao interfaceDao,
+                                       List<VdsNetworkInterface> reportedNics,
+                                       List<VdsNetworkInterface> dbNics,
+                                       List<VdsNetworkInterface> 
userConfiguredNics) {
         this.interfaceDao = interfaceDao;
         this.reportedNics = reportedNics;
         this.reportedNicsByNames = Entities.entitiesByName(reportedNics);
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HostNetworkTopologyPersisterImpl.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HostNetworkTopologyPersisterImpl.java
index 81338df..e7821da 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HostNetworkTopologyPersisterImpl.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HostNetworkTopologyPersisterImpl.java
@@ -10,7 +10,11 @@
 import java.util.List;
 import java.util.Map;
 
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
 import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.Validate;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.businessentities.Entities;
 import org.ovirt.engine.core.common.businessentities.NonOperationalReason;
@@ -20,9 +24,11 @@
 import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
 import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface.NetworkImplementationDetails;
 import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
+import org.ovirt.engine.core.dao.VmDynamicDAO;
+import org.ovirt.engine.core.dao.network.InterfaceDao;
+import org.ovirt.engine.core.dao.network.NetworkDao;
 import org.ovirt.engine.core.dao.network.NetworkQoSDao;
 import org.ovirt.engine.core.utils.NetworkUtils;
 import org.ovirt.engine.core.utils.linq.LinqUtils;
@@ -30,17 +36,32 @@
 import 
org.ovirt.engine.core.vdsbroker.vdsbroker.predicates.DisplayInterfaceEqualityPredicate;
 import 
org.ovirt.engine.core.vdsbroker.vdsbroker.predicates.IsNetworkOnInterfacePredicate;
 
-public final class HostNetworkTopologyPersisterImpl implements 
HostNetworkTopologyPersister {
+@Singleton
+final class HostNetworkTopologyPersisterImpl implements 
HostNetworkTopologyPersister {
 
-    private static final HostNetworkTopologyPersister instance = new 
HostNetworkTopologyPersisterImpl();
+    private final VmDynamicDAO vmDynamicDao;
+    private final InterfaceDao interfaceDao;
+    private final NetworkDao networkDao;
+    private final NetworkQoSDao networkQoSDao;
+    private final ResourceManager resourceManager;
 
-    // TODO: replace with CDI + make the class package protected
-    public static HostNetworkTopologyPersister getInstance() {
-        return instance;
-    }
+    @Inject
+    HostNetworkTopologyPersisterImpl(VmDynamicDAO vmDynamicDao,
+                                     InterfaceDao interfaceDao,
+                                     NetworkDao networkDao,
+                                     NetworkQoSDao networkQoSDao,
+                                     ResourceManager resourceManager) {
+        Validate.notNull(networkDao, "networkDao can not be null");
+        Validate.notNull(interfaceDao, "interfaceDao can not be null");
+        Validate.notNull(vmDynamicDao, "vmDynamicDao can not be null");
+        Validate.notNull(networkQoSDao, "networkQoSDao can not be null");
+        Validate.notNull(resourceManager, "resourceManager can not be null");
 
-    // Don't new me - use getInstance method
-    private HostNetworkTopologyPersisterImpl() {
+        this.vmDynamicDao = vmDynamicDao;
+        this.interfaceDao = interfaceDao;
+        this.networkDao = networkDao;
+        this.networkQoSDao = networkQoSDao;
+        this.resourceManager = resourceManager;
     }
 
     @Override
@@ -48,8 +69,9 @@
                                                                    boolean 
skipManagementNetwork,
                                                                    
List<VdsNetworkInterface> userConfiguredNics) {
         List<VdsNetworkInterface> dbIfaces =
-                
DbFacade.getInstance().getInterfaceDao().getAllInterfacesForVds(host.getId());
+                interfaceDao.getAllInterfacesForVds(host.getId());
         persistTopology(host.getInterfaces(), dbIfaces, userConfiguredNics);
+
         return enforceNetworkCompliance(host, skipManagementNetwork, dbIfaces);
     }
 
@@ -58,7 +80,7 @@
                                                           
List<VdsNetworkInterface> dbIfaces) {
         if (host.getStatus() != VDSStatus.Maintenance) {
 
-            List<Network> clusterNetworks = 
DbFacade.getInstance().getNetworkDao()
+            List<Network> clusterNetworks = networkDao
                     .getAllForCluster(host.getVdsGroupId());
             if (skipManagementNetwork) {
                 skipManagementNetworkCheck(host.getInterfaces(), 
clusterNetworks);
@@ -147,7 +169,7 @@
     }
 
     private boolean isVmRunningOnHost(Guid hostId) {
-        return 
!DbFacade.getInstance().getVmDynamicDao().getAllRunningForVds(hostId).isEmpty();
+        return !vmDynamicDao.getAllRunningForVds(hostId).isEmpty();
     }
 
     private Collection<Network> 
findNetworksOnInterfaces(Collection<VdsNetworkInterface> ifaces,
@@ -179,14 +201,12 @@
 
     private void logUnsynchronizedNetworks(VDS host, Map<String, Network> 
networks) {
         List<String> networkNames = new ArrayList<>();
-        NetworkQoSDao qosDao = DbFacade.getInstance().getNetworkQosDao();
 
         for (VdsNetworkInterface iface : host.getInterfaces()) {
             Network network = networks.get(iface.getNetworkName());
             NetworkImplementationDetails networkImplementationDetails =
                     NetworkUtils.calculateNetworkImplementationDetails(network,
-                            network == null ? null : 
qosDao.get(network.getQosId()),
-                            iface);
+                            network == null ? null : 
networkQoSDao.get(network.getQosId()), iface);
 
             if (networkImplementationDetails != null
                 && !networkImplementationDetails.isInSync()
@@ -218,14 +238,11 @@
      *            network interfaces that should preserve their configuration
      */
     private void persistTopology(List<VdsNetworkInterface> reportedNics,
-            List<VdsNetworkInterface> dbNics,
-            List<VdsNetworkInterface> userConfiguredNics) {
+                                 List<VdsNetworkInterface> dbNics,
+                                 List<VdsNetworkInterface> userConfiguredNics) 
{
 
         final HostNetworkInterfacesPersister networkInterfacesPersister =
-                new 
HostNetworkInterfacesPersisterImpl(DbFacade.getInstance().getInterfaceDao(),
-                        reportedNics,
-                        dbNics,
-                        userConfiguredNics);
+                new HostNetworkInterfacesPersisterImpl(interfaceDao, 
reportedNics, dbNics, userConfiguredNics);
 
         networkInterfacesPersister.persistTopology();
     }
@@ -261,8 +278,6 @@
     }
 
     private void setNonOperational(VDS host, NonOperationalReason reason, 
Map<String, String> customLogValues) {
-        ResourceManager.getInstance()
-                .getEventListener()
-                .vdsNonOperational(host.getId(), reason, true, Guid.Empty, 
customLogValues);
+        resourceManager.getEventListener().vdsNonOperational(host.getId(), 
reason, true, Guid.Empty, customLogValues);
     }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStartVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStartVDSCommand.java
index 8aab174..d264ea0 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStartVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStartVDSCommand.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.vdsbroker.vdsbroker;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.businessentities.AsyncTaskStatus;
 import org.ovirt.engine.core.common.businessentities.AsyncTaskStatusEnum;
 import org.ovirt.engine.core.common.businessentities.SpmStatusResult;
@@ -15,6 +17,10 @@
 import org.ovirt.engine.core.vdsbroker.irsbroker.OneUuidReturnForXmlRpc;
 
 public class SpmStartVDSCommand<P extends SpmStartVDSCommandParameters> 
extends VdsBrokerCommand<P> {
+
+    @Inject
+    private ResourceManager resourceManager;
+
     public SpmStartVDSCommand(P parameters) {
         super(parameters);
         vdsId = parameters.getVdsId();
@@ -38,8 +44,7 @@
         do {
             // TODO: make configurable
             ThreadUtils.sleep(1000);
-            taskStatus = (AsyncTaskStatus) ResourceManager
-                    .getInstance()
+            taskStatus = (AsyncTaskStatus) resourceManager
                     .runVdsCommand(VDSCommandType.HSMGetTaskStatus,
                             new HSMTaskGuidBaseVDSCommandParameters(vdsId, 
taskId)).getReturnValue();
             log.debugFormat("spmStart polling - task status: {0}", 
taskStatus.getStatus().toString());
@@ -52,8 +57,7 @@
             log.errorFormat("Start SPM Task failed - result: {0}, message: 
{1}", taskStatus.getResult().toString(),
                     taskStatus.getMessage());
         }
-        SpmStatusResult spmStatus = (SpmStatusResult) ResourceManager
-                .getInstance()
+        SpmStatusResult spmStatus = (SpmStatusResult) resourceManager
                 .runVdsCommand(VDSCommandType.SpmStatus,
                         new SpmStatusVDSCommandParameters(vdsId, 
getParameters().getStoragePoolId()))
                 .getReturnValue();
@@ -63,7 +67,7 @@
             log.errorFormat("spmStart polling ended, failed to get the spm 
status");
         }
         try {
-            
ResourceManager.getInstance().runVdsCommand(VDSCommandType.HSMClearTask,
+            resourceManager.runVdsCommand(VDSCommandType.HSMClearTask,
                     new HSMTaskGuidBaseVDSCommandParameters(vdsId, taskId));
         } catch (Exception e) {
             log.errorFormat("Could not clear spmStart task (id - {0}), 
continuing with SPM selection.", taskId);
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStopVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStopVDSCommand.java
index 0e0486c..2eb5722 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStopVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStopVDSCommand.java
@@ -4,6 +4,8 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.common.businessentities.AsyncTaskStatus;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
 import org.ovirt.engine.core.common.errors.VDSError;
@@ -23,6 +25,9 @@
 
 public class SpmStopVDSCommand<P extends SpmStopVDSCommandParameters> extends 
VdsBrokerCommand<P> {
     private EngineLock lock;
+
+    @Inject
+    private ResourceManager resourceManager;
 
     public SpmStopVDSCommand(P parameters) {
         super(parameters, 
DbFacade.getInstance().getVdsDao().get(parameters.getVdsId()));
@@ -51,8 +56,7 @@
 
                 boolean performSpmStop = true;
                 try {
-                    VDSReturnValue vdsReturnValue = ResourceManager
-                            .getInstance()
+                    VDSReturnValue vdsReturnValue = resourceManager
                             
.runVdsCommand(VDSCommandType.HSMGetAllTasksStatuses,
                                     new 
VdsIdVDSCommandParametersBase(getVds().getId()));
 
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerCommand.java
index 11f30ad..1198233 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerCommand.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.vdsbroker.vdsbroker;
 
+import javax.inject.Inject;
+
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VdsStatic;
@@ -17,6 +19,10 @@
     private final IVdsServer mVdsBroker;
     private VdsStatic vdsStatic;
     private VDS vds;
+
+    @Inject
+    private ResourceManager resourceManager;
+
     /**
      * Construct the command using the parameters and the {@link VDS} which is 
loaded from the DB.
      *
@@ -44,7 +50,7 @@
     }
 
     protected IVdsServer initializeVdsBroker(Guid vdsId) {
-        VdsManager vdsmanager = 
ResourceManager.getInstance().GetVdsManager(vdsId);
+        VdsManager vdsmanager = resourceManager.GetVdsManager(vdsId);
         if (vdsmanager == null) {
             throw new 
VdcBLLException(VdcBllErrors.RESOURCE_MANAGER_VDS_NOT_FOUND,
                     String.format("Vds with id: %1$s was not found", vdsId));
diff --git 
a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
 
b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
index 3ed4d4d..cedb72d 100644
--- 
a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
+++ 
b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
@@ -124,7 +124,7 @@
         initConditions();
         when(vdsManager.getRefreshStatistics()).thenReturn(false);
         updater = Mockito.spy(
-                    new VdsUpdateRunTimeInfo(vdsManager, vds, 
mock(MonitoringStrategy.class)) {
+                    new VdsUpdateRunTimeInfo(resourceManager, vdsManager, vds, 
mock(MonitoringStrategy.class)) {
 
             @Override
             public DbFacade getDbFacade() {


-- 
To view, visit http://gerrit.ovirt.org/34187
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5984b8fea6a6f3c76581f4f07eb0aa5abf83cfa0
Gerrit-PatchSet: 14
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Yevgeny Zaspitsky <yzasp...@redhat.com>
Gerrit-Reviewer: Alona Kaplan <alkap...@redhat.com>
Gerrit-Reviewer: Roy Golan <rgo...@redhat.com>
Gerrit-Reviewer: automat...@ovirt.org
Gerrit-Reviewer: oVirt Jenkins CI Server
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to