Put command classes under Spring injection framework

This commit is contained in:
Kelven Yang 2013-01-15 18:06:25 -08:00
parent a2dab60236
commit df684261cf
7 changed files with 57 additions and 91 deletions

View File

@ -25,6 +25,8 @@ import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import javax.inject.Inject;
import org.apache.cloudstack.query.QueryService;
import org.apache.log4j.Logger;
@ -109,84 +111,43 @@ public abstract class BaseCmd {
@Parameter(name = "response", type = CommandType.STRING)
private String responseType;
public static ConfigurationService _configService;
public static AccountService _accountService;
public static UserVmService _userVmService;
public static ManagementService _mgr;
public static StorageService _storageService;
public static ResourceService _resourceService;
public static NetworkService _networkService;
public static TemplateService _templateService;
public static SecurityGroupService _securityGroupService;
public static SnapshotService _snapshotService;
public static ConsoleProxyService _consoleProxyService;
public static VpcVirtualNetworkApplianceService _routerService;
public static ResponseGenerator _responseGenerator;
public static EntityManager _entityMgr;
public static RulesService _rulesService;
public static AutoScaleService _autoScaleService;
public static LoadBalancingRulesService _lbService;
public static RemoteAccessVpnService _ravService;
public static BareMetalVmService _bareMetalVmService;
public static ProjectService _projectService;
public static FirewallService _firewallService;
public static DomainService _domainService;
public static ResourceLimitService _resourceLimitService;
public static IdentityService _identityService;
public static StorageNetworkService _storageNetworkService;
public static TaggedResourceService _taggedResourceService;
public static VpcService _vpcService;
public static NetworkACLService _networkACLService;
public static Site2SiteVpnService _s2sVpnService;
@Inject public ConfigurationService _configService;
@Inject public AccountService _accountService;
@Inject public UserVmService _userVmService;
@Inject public ManagementService _mgr;
@Inject public StorageService _storageService;
@Inject public ResourceService _resourceService;
@Inject public NetworkService _networkService;
@Inject public TemplateService _templateService;
@Inject public SecurityGroupService _securityGroupService;
@Inject public SnapshotService _snapshotService;
@Inject public ConsoleProxyService _consoleProxyService;
@Inject public VpcVirtualNetworkApplianceService _routerService;
@Inject public ResponseGenerator _responseGenerator;
@Inject public EntityManager _entityMgr;
@Inject public RulesService _rulesService;
@Inject public AutoScaleService _autoScaleService;
@Inject public LoadBalancingRulesService _lbService;
@Inject public RemoteAccessVpnService _ravService;
@Inject public BareMetalVmService _bareMetalVmService;
@Inject public ProjectService _projectService;
@Inject public FirewallService _firewallService;
@Inject public DomainService _domainService;
@Inject public ResourceLimitService _resourceLimitService;
@Inject public IdentityService _identityService;
@Inject public StorageNetworkService _storageNetworkService;
@Inject public TaggedResourceService _taggedResourceService;
@Inject public VpcService _vpcService;
@Inject public NetworkACLService _networkACLService;
@Inject public Site2SiteVpnService _s2sVpnService;
public static QueryService _queryService;
public static void setComponents(ResponseGenerator generator) {
_mgr = ComponentContext.getComponent(ManagementService.class);
_accountService = ComponentContext.getComponent(AccountService.class);
_configService = ComponentContext.getComponent(ConfigurationService.class);
_userVmService = ComponentContext.getComponent(UserVmService.class);
// TODO, ugly and will change soon
//
Map<String, UserVmService> svmServices = ComponentContext.getComponentsOfType(UserVmService.class);
_userVmService = svmServices.get("BareMetalVmManagerImpl");
_storageService = ComponentContext.getComponent(StorageService.class);
_resourceService = ComponentContext.getComponent(ResourceService.class);
_networkService = ComponentContext.getComponent(NetworkService.class);
_templateService = ComponentContext.getComponent(TemplateService.class);
// TODO, will change to looking for primary component
// ugly binding to a specific implementation
Map<String, SecurityGroupService> _sgServices = ComponentContext.getComponentsOfType(SecurityGroupService.class);
_securityGroupService = _sgServices.get("SecurityGroupManagerImpl2");
_snapshotService = ComponentContext.getComponent(SnapshotService.class);
_consoleProxyService = ComponentContext.getComponent(ConsoleProxyService.class);
_routerService = ComponentContext.getComponent(VpcVirtualNetworkApplianceService.class);
_entityMgr = ComponentContext.getComponent(EntityManager.class);
_rulesService = ComponentContext.getComponent(RulesService.class);
_lbService = ComponentContext.getComponent(LoadBalancingRulesService.class);
_ravService = ComponentContext.getComponent(RemoteAccessVpnService.class);
_responseGenerator = generator;
_bareMetalVmService = ComponentContext.getComponent(BareMetalVmService.class);
_projectService = ComponentContext.getComponent(ProjectService.class);
_firewallService = ComponentContext.getComponent(FirewallService.class);
_domainService = ComponentContext.getComponent(DomainService.class);
_resourceLimitService = ComponentContext.getComponent(ResourceLimitService.class);
_identityService = ComponentContext.getComponent(IdentityService.class);
_storageNetworkService = ComponentContext.getComponent(StorageNetworkService.class);
_taggedResourceService = ComponentContext.getComponent(TaggedResourceService.class);
_vpcService = ComponentContext.getComponent(VpcService.class);
_networkACLService = ComponentContext.getComponent(NetworkACLService.class);
_s2sVpnService = ComponentContext.getComponent(Site2SiteVpnService.class);
}
@Inject public QueryService _queryService;
public abstract void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException;
public void configure() {
}
public String getResponseType() {
if (responseType == null) {
return RESPONSE_TYPE_XML;

View File

@ -42,6 +42,9 @@ public abstract class BaseListCmd extends BaseCmd {
// ///////////////// Accessors ///////////////////////
// ///////////////////////////////////////////////////
public BaseListCmd() {
}
public String getKeyword() {
return keyword;
}
@ -62,10 +65,14 @@ public abstract class BaseListCmd extends BaseCmd {
return pageSize;
}
public static void configure() {
if (_configService.getDefaultPageSize().longValue() != PAGESIZE_UNLIMITED) {
MAX_PAGESIZE = _configService.getDefaultPageSize();
}
public void configure() {
if(MAX_PAGESIZE == null) {
if (_configService.getDefaultPageSize().longValue() != PAGESIZE_UNLIMITED) {
MAX_PAGESIZE = _configService.getDefaultPageSize();
} else {
MAX_PAGESIZE = PAGESIZE_UNLIMITED;
}
}
}
@Override

View File

@ -42,7 +42,6 @@ import com.cloud.utils.db.GenericDao;
import com.cloud.utils.db.StateMachine;
import com.cloud.utils.fsm.FiniteStateObject;
import com.cloud.vm.VirtualMachine.State;
import org.apache.cloudstack.api.InternalIdentity;
@Entity
@Table(name="vm_instance")
@ -144,12 +143,6 @@ public class VMInstanceVO implements VirtualMachine, FiniteStateObject<State, Vi
@Enumerated(value=EnumType.STRING)
protected HypervisorType hypervisorType;
@Column(name="ram")
protected long ram;
@Column(name="cpu")
protected int cpu;
@Column(name="tags")
protected String tags;

View File

@ -18,8 +18,11 @@
*/
package org.apache.cloudstack.storage.snapshot.db;
import org.springframework.stereotype.Component;
import com.cloud.utils.db.GenericDaoBase;
@Component
public class SnapshotDao2Impl extends GenericDaoBase<SnapshotVO, Long> implements SnapshotDao2 {
}

View File

@ -26,6 +26,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
import org.apache.cloudstack.storage.datastore.DataStoreStatus;
@ -49,7 +50,7 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase<PrimaryDataStoreVO,
protected final SearchBuilder<PrimaryDataStoreVO> DeleteLvmSearch;
protected final GenericSearchBuilder<PrimaryDataStoreVO, Long> StatusCountSearch;
protected final PrimaryDataStoreDetailsDao _detailsDao = null;
@Inject protected PrimaryDataStoreDetailsDao _detailsDao;
private final String DetailsSqlPrefix = "SELECT storage_pool.* from storage_pool LEFT JOIN storage_pool_details ON storage_pool.id = storage_pool_details.pool_id WHERE storage_pool.removed is null and storage_pool.data_center_id = ? and (storage_pool.pod_id = ? or storage_pool.pod_id is null) and (";
private final String DetailsSqlSuffix = ") GROUP BY storage_pool_details.pool_id HAVING COUNT(storage_pool_details.name) >= ?";
@ -95,8 +96,6 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase<PrimaryDataStoreVO,
StatusCountSearch.and("status", StatusCountSearch.entity().getStatus(), SearchCriteria.Op.IN);
StatusCountSearch.select(null, Func.COUNT, null);
StatusCountSearch.done();
// _detailsDao = ComponentInject.inject(PrimaryDataStoreDetailsDaoImpl.class);
}
@Override

View File

@ -132,6 +132,8 @@ import org.apache.cloudstack.api.response.VpnUsersResponse;
import org.apache.cloudstack.api.response.ZoneResponse;
import org.apache.cloudstack.api.response.S3Response;
import org.springframework.stereotype.Component;
import com.cloud.async.AsyncJob;
import com.cloud.capacity.Capacity;
import com.cloud.capacity.CapacityVO;
@ -240,6 +242,7 @@ import com.cloud.vm.NicProfile;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.Type;
@Component
public class ApiResponseHelper implements ResponseGenerator {
public final Logger s_logger = Logger.getLogger(ApiResponseHelper.class);

View File

@ -132,6 +132,7 @@ import com.cloud.utils.Pair;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.ReflectUtil;
import com.cloud.utils.StringUtils;
import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.component.PluggableService;
import com.cloud.utils.concurrency.NamedThreadFactory;
import com.cloud.utils.db.SearchCriteria;
@ -179,9 +180,6 @@ public class ApiServer implements HttpRequestHandler {
}
public void init() {
BaseCmd.setComponents(new ApiResponseHelper());
BaseListCmd.configure();
_systemAccount = _accountMgr.getSystemAccount();
_systemUser = _accountMgr.getSystemUser();
@ -346,6 +344,8 @@ public class ApiServer implements HttpRequestHandler {
Class<?> cmdClass = getCmdClass(command[0]);
if (cmdClass != null) {
BaseCmd cmdObj = (BaseCmd) cmdClass.newInstance();
cmdObj = ComponentContext.inject(cmdObj);
cmdObj.configure();
cmdObj.setFullUrlParams(paramMap);
cmdObj.setResponseType(responseType);
// This is where the command is either serialized, or directly dispatched