mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
ComponentLocator changes
This commit is contained in:
parent
17afeade00
commit
ed31497188
@ -23,214 +23,10 @@
|
||||
documented, please contact the author.
|
||||
-->
|
||||
<components.xml>
|
||||
<management-server class="com.cloud.server.ManagementServerImpl">
|
||||
<dao name="StackMaid Dao" class="com.cloud.maid.dao.StackMaidDaoImpl"/>
|
||||
<dao name="VM Template Zone" class="com.cloud.storage.dao.VMTemplateZoneDaoImpl"/>
|
||||
<dao name="domain router" class="com.cloud.vm.dao.DomainRouterDaoImpl"/>
|
||||
<dao name="host" class="com.cloud.host.dao.HostDaoImpl"/>
|
||||
<dao name="VM Instance" class="com.cloud.vm.dao.VMInstanceDaoImpl"/>
|
||||
<dao name="User VM" class="com.cloud.vm.dao.UserVmDaoImpl"/>
|
||||
<dao name="ServiceOffering" class="com.cloud.service.dao.ServiceOfferingDaoImpl">
|
||||
<param name="cache.size">50</param>
|
||||
<param name="cache.time.to.live">-1</param>
|
||||
</dao>
|
||||
<dao name="DiskOffering" class="com.cloud.storage.dao.DiskOfferingDaoImpl">
|
||||
<param name="cache.size">50</param>
|
||||
<param name="cache.time.to.live">-1</param>
|
||||
</dao>
|
||||
<dao name="host zone" class="com.cloud.dc.dao.DataCenterDaoImpl">
|
||||
<param name="cache.size">50</param>
|
||||
<param name="cache.time.to.live">-1</param>
|
||||
</dao>
|
||||
<dao name="host pod" class="com.cloud.dc.dao.HostPodDaoImpl">
|
||||
<param name="cache.size">50</param>
|
||||
<param name="cache.time.to.live">-1</param>
|
||||
</dao>
|
||||
<dao name="IP Addresses" class="com.cloud.network.dao.IPAddressDaoImpl"/>
|
||||
<dao name="vlan" class="com.cloud.dc.dao.VlanDaoImpl">
|
||||
</dao>
|
||||
<dao name="PodVlanMap" class="com.cloud.dc.dao.PodVlanMapDaoImpl"/>
|
||||
<dao name="AccountVlanMap" class="com.cloud.dc.dao.AccountVlanMapDaoImpl"/>
|
||||
<dao name="Volume" class="com.cloud.storage.dao.VolumeDaoImpl"/>
|
||||
<dao name="Events" class="com.cloud.event.dao.EventDaoImpl"/>
|
||||
<dao name="User" class="com.cloud.user.dao.UserDaoImpl">
|
||||
<param name="cache.size">5000</param>
|
||||
<param name="cache.time.to.live">300</param>
|
||||
</dao>
|
||||
<dao name="UserStats" class="com.cloud.user.dao.UserStatisticsDaoImpl"/>
|
||||
<dao name="Disk Template" class="com.cloud.storage.dao.DiskTemplateDaoImpl">
|
||||
<param name="cache.size">50</param>
|
||||
<param name="cache.time.to.live">-1</param>
|
||||
</dao>
|
||||
<dao name="Firewall Rules" class="com.cloud.network.dao.FirewallRulesDaoImpl"/>
|
||||
<dao name="Load Balancer" class="com.cloud.network.dao.LoadBalancerDaoImpl"/>
|
||||
<dao name="Network Rule Config" class="com.cloud.network.dao.NetworkRuleConfigDaoImpl"/>
|
||||
<dao name="Load Balancer Mapping" class="com.cloud.network.dao.LoadBalancerVMMapDaoImpl"/>
|
||||
<dao name="Datacenter IP Addresses" class="com.cloud.dc.dao.DataCenterIpAddressDaoImpl"/>
|
||||
<dao name="Network Security Group" class="com.cloud.network.security.dao.NetworkGroupDaoImpl"/>
|
||||
<dao name="Ingress Rules" class="com.cloud.network.security.dao.IngressRuleDaoImpl"/>
|
||||
<dao name="Network Group Mapping" class="com.cloud.network.security.dao.NetworkGroupVMMapDaoImpl"/>
|
||||
<dao name="Network Group Rules" class="com.cloud.network.security.dao.NetworkGroupRulesDaoImpl"/>
|
||||
<dao name="Network Group Work" class="com.cloud.network.security.dao.NetworkGroupWorkDaoImpl"/>
|
||||
<dao name="Network Group VM Ruleset log" class="com.cloud.network.security.dao.VmRulesetLogDaoImpl"/>
|
||||
<dao name="Alert" class="com.cloud.alert.dao.AlertDaoImpl"/>
|
||||
<dao name="Capacity" class="com.cloud.capacity.dao.CapacityDaoImpl"/>
|
||||
<dao name="Domain" class="com.cloud.domain.dao.DomainDaoImpl"/>
|
||||
<dao name="Account" class="com.cloud.user.dao.AccountDaoImpl"/>
|
||||
<dao name="ResourceLimit" class="com.cloud.configuration.dao.ResourceLimitDaoImpl"/>
|
||||
<dao name="ResourceCount" class="com.cloud.configuration.dao.ResourceCountDaoImpl"/>
|
||||
<dao name="UserAccount" class="com.cloud.user.dao.UserAccountDaoImpl"/>
|
||||
<dao name="VM Template Host" class="com.cloud.storage.dao.VMTemplateHostDaoImpl"/>
|
||||
<dao name="Upload" class="com.cloud.storage.dao.UploadDaoImpl"/>
|
||||
<dao name="VM Template Pool" class="com.cloud.storage.dao.VMTemplatePoolDaoImpl"/>
|
||||
<dao name="Launch Permission" class="com.cloud.storage.dao.LaunchPermissionDaoImpl"/>
|
||||
<dao name="Configuration" class="com.cloud.configuration.dao.ConfigurationDaoImpl"/>
|
||||
<dao name="VM Template" class="com.cloud.storage.dao.VMTemplateDaoImpl">
|
||||
<param name="cache.size">50</param>
|
||||
<param name="cache.time.to.live">-1</param>
|
||||
<param name="routing.uniquename">routing</param>
|
||||
</dao>
|
||||
<dao name="HA" class="com.cloud.ha.dao.HighAvailabilityDaoImpl"/>
|
||||
<dao name="Console Proxy" class="com.cloud.vm.dao.ConsoleProxyDaoImpl"/>
|
||||
<dao name="Secondary Storage VM" class="com.cloud.vm.dao.SecondaryStorageVmDaoImpl"/>
|
||||
<dao name="Upgrade" class="com.cloud.maint.dao.AgentUpgradeDaoImpl"/>
|
||||
<dao name="Management Server Host" class="com.cloud.cluster.dao.ManagementServerHostDaoImpl"/>
|
||||
<dao name="Snapshot" class="com.cloud.storage.dao.SnapshotDaoImpl"/>
|
||||
<dao name="AsyncJobDao" class="com.cloud.async.dao.AsyncJobDaoImpl"/>
|
||||
<dao name="SyncQueueDao" class="com.cloud.async.dao.SyncQueueDaoImpl"/>
|
||||
<dao name="SyncQueueItemDao" class="com.cloud.async.dao.SyncQueueItemDaoImpl"/>
|
||||
<dao name="GuestOSDao" class="com.cloud.storage.dao.GuestOSDaoImpl"/>
|
||||
<dao name="GuestOSCategoryDao" class="com.cloud.storage.dao.GuestOSCategoryDaoImpl"/>
|
||||
<dao name="StoragePoolDao" class="com.cloud.storage.dao.StoragePoolDaoImpl"/>
|
||||
<dao name="StoragePoolHostDao" class="com.cloud.storage.dao.StoragePoolHostDaoImpl"/>
|
||||
<dao name="HostDetails" class="com.cloud.host.dao.DetailsDaoImpl"/>
|
||||
<dao name="SnapshotPolicyDao" class="com.cloud.storage.dao.SnapshotPolicyDaoImpl"/>
|
||||
<dao name="SnapshotScheduleDao" class="com.cloud.storage.dao.SnapshotScheduleDaoImpl"/>
|
||||
<dao name="PreallocatedLunDao" class="com.cloud.storage.preallocatedlun.dao.PreallocatedLunDaoImpl"/>
|
||||
<dao name="ClusterDao" class="com.cloud.dc.dao.ClusterDaoImpl"/>
|
||||
<dao name="Certificate" class="com.cloud.certificate.dao.CertificateDaoImpl"/>
|
||||
<dao name="NetworkConfigurationDao" class="com.cloud.network.dao.NetworkConfigurationDaoImpl"/>
|
||||
<dao name="NetworkOfferingDao" class="com.cloud.offerings.dao.NetworkOfferingDaoImpl"/>
|
||||
<dao name="NicDao" class="com.cloud.vm.dao.NicDaoImpl"/>
|
||||
<dao name="InstanceGroupDao" class="com.cloud.vm.dao.InstanceGroupDaoImpl"/>
|
||||
<dao name="Instance Group to VM Mapping" class="com.cloud.vm.dao.InstanceGroupVMMapDaoImpl"/>
|
||||
<dao name="Remote Access VPN" class="com.cloud.network.dao.RemoteAccessVpnDaoImpl"/>
|
||||
<dao name="VPN Users" class="com.cloud.network.dao.VpnUserDaoImpl"/>
|
||||
|
||||
<adapters key="com.cloud.agent.manager.allocator.HostAllocator">
|
||||
<adapter name="FirstFitRouting" class="com.cloud.agent.manager.allocator.impl.RecreateHostAllocator"/>
|
||||
<!--adapter name="FirstFit" class="com.cloud.agent.manager.allocator.impl.FirstFitAllocator"/-->
|
||||
</adapters>
|
||||
<adapters key="com.cloud.storage.allocator.StoragePoolAllocator">
|
||||
<adapter name="LocalStorage" class="com.cloud.storage.allocator.LocalStoragePoolAllocator"/>
|
||||
< adapter name="Storage" class="com.cloud.storage.allocator.FirstFitStoragePoolAllocator"/ >
|
||||
<adapter name="Storage" class="com.cloud.storage.allocator.RandomStoragePoolAllocator"/>
|
||||
<adapter name="GarbageCollecting" class="com.cloud.storage.allocator.GarbageCollectingStoragePoolAllocator"/>
|
||||
</adapters>
|
||||
<adapters key="com.cloud.agent.manager.allocator.PodAllocator">
|
||||
<adapter name="User First" class="com.cloud.agent.manager.allocator.impl.UserConcentratedAllocator"/>
|
||||
</adapters>
|
||||
<!--
|
||||
<adapters key="com.cloud.network.VirtualNetworkAllocator">
|
||||
<adapter name="Basic" class="com.cloud.network.BasicVirtualNetworkAllocator"/>
|
||||
</adapters>
|
||||
-->
|
||||
<adapters key="com.cloud.consoleproxy.ConsoleProxyAllocator">
|
||||
<adapter name="Balance" class="com.cloud.consoleproxy.ConsoleProxyBalanceAllocator"/>
|
||||
</adapters>
|
||||
<adapters key="com.cloud.network.configuration.NetworkGuru">
|
||||
<adapter name="GuestNetworkGuru" class="com.cloud.network.configuration.GuestNetworkGuru"/>
|
||||
<adapter name="PublicNetworkGuru" class="com.cloud.network.configuration.PublicNetworkGuru"/>
|
||||
<adapter name="PodBasedNetworkGuru" class="com.cloud.network.configuration.PodBasedNetworkGuru"/>
|
||||
<adapter name="ControlNetworkGuru" class="com.cloud.network.configuration.ControlNetworkGuru"/>
|
||||
</adapters>
|
||||
<adapters key="com.cloud.storage.secondary.SecondaryStorageVmAllocator">
|
||||
<adapter name="Balance" class="com.cloud.storage.secondary.SecondaryStorageVmDefaultAllocator"/>
|
||||
</adapters>
|
||||
<adapters key="com.cloud.network.IpAddrAllocator">
|
||||
<adapter name="Basic" class="com.cloud.network.ExteralIpAddressAllocator"/>
|
||||
</adapters>
|
||||
|
||||
<manager name="StackMaidManager" class="com.cloud.maid.StackMaidManagerImpl">
|
||||
</manager>
|
||||
|
||||
<adapters key="com.cloud.server.auth.UserAuthenticator">
|
||||
<adapter name="MD5" class="com.cloud.server.auth.MD5UserAuthenticator"/>
|
||||
</adapters>
|
||||
<adapters key="com.cloud.ha.Investigator">
|
||||
<adapter name="SimpleInvestigator" class="com.cloud.ha.CheckOnAgentInvestigator"/>
|
||||
<adapter name="XenServerInvestigator" class="com.cloud.ha.XenServerInvestigator"/>
|
||||
<adapter name="PingInvestigator" class="com.cloud.ha.InvestigatorImpl"/>
|
||||
</adapters>
|
||||
<adapters key="com.cloud.ha.FenceBuilder">
|
||||
<adapter name="StorageFenceBuilder" class="com.cloud.ha.StorageFence"/>
|
||||
</adapters>
|
||||
<adapters key="com.cloud.resource.Discoverer">
|
||||
<adapter name="XCP Agent" class="com.cloud.hypervisor.xen.discoverer.XcpServerDiscoverer"/>
|
||||
<adapter name="SecondaryStorage" class="com.cloud.storage.secondary.SecondaryStorageDiscoverer"/>
|
||||
<adapter name="KVM Agent" class="com.cloud.hypervisor.kvm.discoverer.KvmServerDiscoverer"/>
|
||||
</adapters>
|
||||
<adapters key="com.cloud.deploy.DeploymentPlanner">
|
||||
<adapter name="Simple" class="com.cloud.deploy.SimplePlanner"/>
|
||||
</adapters>
|
||||
<manager name="agent manager" class="com.cloud.agent.manager.AgentManagerImpl">
|
||||
</manager>
|
||||
<manager name="account manager" class="com.cloud.user.AccountManagerImpl">
|
||||
</manager>
|
||||
<manager name="configuration manager" class="com.cloud.configuration.ConfigurationManagerImpl">
|
||||
</manager>
|
||||
<manager name="network manager" class="com.cloud.network.NetworkManagerImpl">
|
||||
</manager>
|
||||
<manager name="download manager" class="com.cloud.storage.download.DownloadMonitorImpl">
|
||||
</manager>
|
||||
<manager name="upload manager" class="com.cloud.storage.upload.UploadMonitorImpl">
|
||||
</manager>
|
||||
<manager name="console proxy manager" class="com.cloud.consoleproxy.AgentBasedStandaloneConsoleProxyManager">
|
||||
</manager>
|
||||
<manager name="secondary storage vm manager" class="com.cloud.storage.secondary.SecondaryStorageManagerImpl">
|
||||
</manager>
|
||||
<manager name="vm manager" class="com.cloud.vm.UserVmManagerImpl"/>
|
||||
<manager name="upgrade manager" class="com.cloud.maint.UpgradeManagerImpl">
|
||||
</manager>
|
||||
<manager name="StorageManager" class="com.cloud.storage.StorageManagerImpl">
|
||||
</manager>
|
||||
<manager name="Cluster Manager" class="com.cloud.cluster.DummyClusterManagerImpl">
|
||||
</manager>
|
||||
<manager name="SyncQueueManager" class="com.cloud.async.SyncQueueManagerImpl">
|
||||
</manager>
|
||||
<manager name="AsyncJobManager" class="com.cloud.async.AsyncJobManagerImpl">
|
||||
</manager>
|
||||
<manager name="AsyncJobExecutorContext" class="com.cloud.async.AsyncJobExecutorContextImpl">
|
||||
</manager>
|
||||
<manager name="HA Manager" class="com.cloud.ha.HighAvailabilityManagerImpl">
|
||||
</manager>
|
||||
<manager name="Alert Manager" class="com.cloud.alert.AlertManagerImpl">
|
||||
</manager>
|
||||
<manager name="Template Manager" class="com.cloud.template.TemplateManagerImpl">
|
||||
</manager>
|
||||
<manager name="Snapshot Manager" class="com.cloud.storage.snapshot.SnapshotManagerImpl">
|
||||
</manager>
|
||||
<manager name="SnapshotScheduler" class="com.cloud.storage.snapshot.SnapshotSchedulerImpl">
|
||||
</manager>
|
||||
<manager name="NetworkGroupManager" class="com.cloud.network.security.NetworkGroupManagerImpl">
|
||||
</manager>
|
||||
<manager name="VmManager" class="com.cloud.vm.MauriceMoss"/>
|
||||
<manager name="DomainRouterManager" class="com.cloud.network.router.DomainRouterManagerImpl"/>
|
||||
|
||||
<management-server class="com.cloud.server.ManagementServerImpl" library="com.cloud.configuration.DefaultComponentLibrary">
|
||||
</management-server>
|
||||
|
||||
<configuration-server class="com.cloud.server.ConfigurationServerImpl">
|
||||
<dao name="Configuration configuration server" class="com.cloud.configuration.dao.ConfigurationDaoImpl">
|
||||
<param name="premium">false</param>
|
||||
</dao>
|
||||
<dao name="Snapshot policy defaults" class="com.cloud.storage.dao.SnapshotPolicyDaoImpl"/>
|
||||
<dao name="DiskOffering configuration server" class="com.cloud.storage.dao.DiskOfferingDaoImpl"/>
|
||||
<dao name="ServiceOffering configuration server" class="com.cloud.service.dao.ServiceOfferingDaoImpl">
|
||||
<param name="cache.size">50</param>
|
||||
<param name="cache.time.to.live">-1</param>
|
||||
</dao>
|
||||
<dao name="host zone configuration server" class="com.cloud.dc.dao.DataCenterDaoImpl"/>
|
||||
<dao name="host pod configuration server" class="com.cloud.dc.dao.HostPodDaoImpl"/>
|
||||
<configuration-server class="com.cloud.server.ConfigurationServerImpl" extends="management-server">
|
||||
</configuration-server>
|
||||
|
||||
</components.xml>
|
||||
|
||||
@ -1,107 +0,0 @@
|
||||
/**
|
||||
* Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
|
||||
*
|
||||
* This software is licensed under the GNU General Public License v3 or later.
|
||||
*
|
||||
* It is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or any later version.
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package com.cloud.storage;
|
||||
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import com.cloud.utils.db.GenericDao;
|
||||
|
||||
/**
|
||||
* @author ahuang
|
||||
*
|
||||
*/
|
||||
@Entity
|
||||
@Table(name="disk_template_ref")
|
||||
public class DiskTemplateVO {
|
||||
@Id
|
||||
@GeneratedValue(strategy=GenerationType.IDENTITY)
|
||||
@Column(name="id")
|
||||
Long id;
|
||||
|
||||
@Column(name="description")
|
||||
String description;
|
||||
|
||||
@Column(name="host")
|
||||
String host;
|
||||
|
||||
@Column(name="path")
|
||||
String path;
|
||||
|
||||
@Column(name="size")
|
||||
long size;
|
||||
|
||||
@Column(name="type")
|
||||
String type;
|
||||
|
||||
@Column(name=GenericDao.CREATED_COLUMN)
|
||||
Date created;
|
||||
|
||||
@Column(name=GenericDao.REMOVED_COLUMN)
|
||||
Date removed;
|
||||
|
||||
public DiskTemplateVO(Long id, String description, String path, long size, String type) {
|
||||
this.id = id;
|
||||
this.description = description;
|
||||
this.path = path;
|
||||
this.size = size;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public String getHost() {
|
||||
return host;
|
||||
}
|
||||
|
||||
public String getPath() {
|
||||
return path;
|
||||
}
|
||||
|
||||
public long getSize() {
|
||||
return size;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public Date getCreated() {
|
||||
return created;
|
||||
}
|
||||
|
||||
public Date getRemoved() {
|
||||
return removed;
|
||||
}
|
||||
|
||||
protected DiskTemplateVO() {
|
||||
}
|
||||
}
|
||||
@ -1,26 +0,0 @@
|
||||
/**
|
||||
* Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
|
||||
*
|
||||
* This software is licensed under the GNU General Public License v3 or later.
|
||||
*
|
||||
* It is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or any later version.
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package com.cloud.storage.dao;
|
||||
|
||||
import com.cloud.storage.DiskTemplateVO;
|
||||
import com.cloud.utils.db.GenericDao;
|
||||
|
||||
public interface DiskTemplateDao extends GenericDao<DiskTemplateVO, Long> {
|
||||
public DiskTemplateVO findByTypeAndSize(String type, long size);
|
||||
|
||||
}
|
||||
@ -1,53 +0,0 @@
|
||||
/**
|
||||
* Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
|
||||
*
|
||||
* This software is licensed under the GNU General Public License v3 or later.
|
||||
*
|
||||
* It is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or any later version.
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package com.cloud.storage.dao;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.ejb.Local;
|
||||
|
||||
import com.cloud.storage.DiskTemplateVO;
|
||||
import com.cloud.utils.db.GenericDaoBase;
|
||||
import com.cloud.utils.db.SearchBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
|
||||
@Local(value={DiskTemplateDao.class})
|
||||
public class DiskTemplateDaoImpl extends GenericDaoBase<DiskTemplateVO, Long> implements DiskTemplateDao {
|
||||
|
||||
protected SearchBuilder<DiskTemplateVO> TypeSizeSearch;
|
||||
|
||||
protected static final String BY_TYPE_AND_SIZE_CLAUSE = "type = ? AND size = ?";
|
||||
|
||||
protected DiskTemplateDaoImpl() {
|
||||
super();
|
||||
|
||||
TypeSizeSearch = createSearchBuilder();
|
||||
TypeSizeSearch.and("type", TypeSizeSearch.entity().getType(), SearchCriteria.Op.EQ);
|
||||
TypeSizeSearch.and("size", TypeSizeSearch.entity().getSize(), SearchCriteria.Op.EQ);
|
||||
}
|
||||
|
||||
public DiskTemplateVO findByTypeAndSize(String type, long size) {
|
||||
SearchCriteria<DiskTemplateVO> sc = TypeSizeSearch.create();
|
||||
sc.setParameters("type", type);
|
||||
sc.setParameters("size", size);
|
||||
|
||||
List<DiskTemplateVO> vos = listBy(sc);
|
||||
assert(vos.size() <= 1); // Should only have one. If more than one something is wrong.
|
||||
return vos.size() == 0 ? null : vos.get(0);
|
||||
}
|
||||
}
|
||||
@ -52,8 +52,10 @@ import com.cloud.storage.template.Processor.FormatInfo;
|
||||
import com.cloud.storage.template.TemplateDownloader.DownloadCompleteCallback;
|
||||
import com.cloud.storage.template.TemplateDownloader.Status;
|
||||
import com.cloud.utils.NumbersUtil;
|
||||
import com.cloud.utils.component.Adapter;
|
||||
import com.cloud.utils.component.Adapters;
|
||||
import com.cloud.utils.component.ComponentLocator;
|
||||
import com.cloud.utils.component.ComponentLocator.ComponentInfo;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.utils.script.OutputInterpreter;
|
||||
import com.cloud.utils.script.Script;
|
||||
@ -770,24 +772,23 @@ public class DownloadManagerImpl implements DownloadManager {
|
||||
}
|
||||
s_logger.info("createtmplt.sh found in " + createTmpltScr);
|
||||
|
||||
List<Processor> processors = new ArrayList<Processor>();
|
||||
List<ComponentInfo<Adapter>> processors = new ArrayList<ComponentInfo<Adapter>>();
|
||||
|
||||
Processor processor = new VhdProcessor();
|
||||
|
||||
processor.configure("VHD Processor", params);
|
||||
processors.add(processor);
|
||||
processors.add(new ComponentInfo<Adapter>("VHD Processor", VhdProcessor.class, processor));
|
||||
|
||||
processor = new IsoProcessor();
|
||||
processor.configure("ISO Processor", params);
|
||||
processors.add(processor);
|
||||
processors.add(new ComponentInfo<Adapter>("ISO Processor", IsoProcessor.class, processor));
|
||||
|
||||
processor = new QCOW2Processor();
|
||||
processor.configure("QCOW2 Processor", params);
|
||||
processors.add(processor);
|
||||
processors.add(new ComponentInfo<Adapter>("QCOW2 Processor", QCOW2Processor.class, processor));
|
||||
|
||||
processor = new VmdkProcessor();
|
||||
processor.configure("VMDK Processor", params);
|
||||
processors.add(processor);
|
||||
processors.add(new ComponentInfo<Adapter>("VMDK Processor", VmdkProcessor.class, processor));
|
||||
|
||||
_processors = new Adapters<Processor>("processors", processors);
|
||||
// Add more processors here.
|
||||
|
||||
@ -23,14 +23,16 @@ import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.ejb.Local;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.storage.StorageLayer;
|
||||
import com.cloud.storage.Storage.ImageFormat;
|
||||
import com.cloud.storage.StorageLayer;
|
||||
import com.cloud.utils.NumbersUtil;
|
||||
|
||||
@Local(value=Processor.class)
|
||||
public class QCOW2Processor implements Processor {
|
||||
private static final Logger s_logger = Logger.getLogger(QCOW2Processor.class);
|
||||
String _name;
|
||||
|
||||
@ -4,9 +4,7 @@ import java.io.File;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
@ -457,20 +455,6 @@ public class UploadManagerImpl implements UploadManager {
|
||||
scriptsDir = "scripts/storage/secondary";
|
||||
}
|
||||
|
||||
List<Processor> processors = new ArrayList<Processor>();
|
||||
_processors = new Adapters<Processor>("processors", processors);
|
||||
Processor processor = new VhdProcessor();
|
||||
|
||||
processor.configure("VHD Processor", params);
|
||||
processors.add(processor);
|
||||
|
||||
processor = new IsoProcessor();
|
||||
processor.configure("ISO Processor", params);
|
||||
processors.add(processor);
|
||||
|
||||
processor = new QCOW2Processor();
|
||||
processor.configure("QCOW2 Processor", params);
|
||||
processors.add(processor);
|
||||
// Add more processors here.
|
||||
threadPool = Executors.newFixedThreadPool(numInstallThreads);
|
||||
|
||||
|
||||
@ -23,13 +23,14 @@ import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.ejb.Local;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.exception.InternalErrorException;
|
||||
import com.cloud.storage.StorageLayer;
|
||||
import com.cloud.storage.Storage.ImageFormat;
|
||||
import com.cloud.storage.StorageLayer;
|
||||
import com.cloud.utils.NumbersUtil;
|
||||
|
||||
/**
|
||||
@ -38,6 +39,7 @@ import com.cloud.utils.NumbersUtil;
|
||||
* into the VHD format.
|
||||
*
|
||||
*/
|
||||
@Local(value=Processor.class)
|
||||
public class VhdProcessor implements Processor {
|
||||
|
||||
private static final Logger s_logger = Logger.getLogger(VhdProcessor.class);
|
||||
|
||||
@ -3,15 +3,17 @@ package com.cloud.storage.template;
|
||||
import java.io.File;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.ejb.Local;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.exception.InternalErrorException;
|
||||
import com.cloud.storage.StorageLayer;
|
||||
import com.cloud.storage.Storage.ImageFormat;
|
||||
import com.cloud.storage.StorageLayer;
|
||||
import com.cloud.utils.script.Script;
|
||||
|
||||
@Local(value=Processor.class)
|
||||
public class VmdkProcessor implements Processor {
|
||||
private static final Logger s_logger = Logger.getLogger(VmdkProcessor.class);
|
||||
|
||||
|
||||
@ -37,7 +37,7 @@ import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.uservm.UserVm;
|
||||
|
||||
@Implementation(description="Destroys a virtual machine. Once destroyed, only the administrator can recover it.")
|
||||
@Implementation(description="Destroys a virtual machine. Once destroyed, only the administrator can recover it.", responseObject=UserVmResponse.class)
|
||||
public class DestroyVm2Cmd extends BaseAsyncCmd {
|
||||
public static final Logger s_logger = Logger.getLogger(DestroyVm2Cmd.class.getName());
|
||||
|
||||
|
||||
@ -24,6 +24,8 @@ import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.cloud.acl.DomainChecker;
|
||||
import com.cloud.acl.SecurityChecker;
|
||||
import com.cloud.agent.manager.AgentManagerImpl;
|
||||
import com.cloud.agent.manager.allocator.HostAllocator;
|
||||
import com.cloud.agent.manager.allocator.PodAllocator;
|
||||
@ -54,11 +56,14 @@ import com.cloud.dc.dao.DataCenterIpAddressDaoImpl;
|
||||
import com.cloud.dc.dao.HostPodDaoImpl;
|
||||
import com.cloud.dc.dao.PodVlanMapDaoImpl;
|
||||
import com.cloud.dc.dao.VlanDaoImpl;
|
||||
import com.cloud.deploy.DeploymentPlanner;
|
||||
import com.cloud.deploy.SimplePlanner;
|
||||
import com.cloud.domain.dao.DomainDaoImpl;
|
||||
import com.cloud.event.dao.EventDaoImpl;
|
||||
import com.cloud.ha.CheckOnAgentInvestigator;
|
||||
import com.cloud.ha.FenceBuilder;
|
||||
import com.cloud.ha.HighAvailabilityManagerImpl;
|
||||
import com.cloud.ha.Investigator;
|
||||
import com.cloud.ha.InvestigatorImpl;
|
||||
import com.cloud.ha.StorageFence;
|
||||
import com.cloud.ha.XenServerInvestigator;
|
||||
@ -72,9 +77,11 @@ import com.cloud.maid.dao.StackMaidDaoImpl;
|
||||
import com.cloud.maint.UpgradeManagerImpl;
|
||||
import com.cloud.maint.dao.AgentUpgradeDaoImpl;
|
||||
import com.cloud.network.ExteralIpAddressAllocator;
|
||||
import com.cloud.network.IpAddrAllocator;
|
||||
import com.cloud.network.NetworkManagerImpl;
|
||||
import com.cloud.network.configuration.ControlNetworkGuru;
|
||||
import com.cloud.network.configuration.GuestNetworkGuru;
|
||||
import com.cloud.network.configuration.NetworkGuru;
|
||||
import com.cloud.network.configuration.PodBasedNetworkGuru;
|
||||
import com.cloud.network.configuration.PublicNetworkGuru;
|
||||
import com.cloud.network.dao.FirewallRulesDaoImpl;
|
||||
@ -94,7 +101,9 @@ import com.cloud.network.security.dao.NetworkGroupVMMapDaoImpl;
|
||||
import com.cloud.network.security.dao.NetworkGroupWorkDaoImpl;
|
||||
import com.cloud.network.security.dao.VmRulesetLogDaoImpl;
|
||||
import com.cloud.offerings.dao.NetworkOfferingDaoImpl;
|
||||
import com.cloud.resource.Discoverer;
|
||||
import com.cloud.server.auth.MD5UserAuthenticator;
|
||||
import com.cloud.server.auth.UserAuthenticator;
|
||||
import com.cloud.service.dao.ServiceOfferingDaoImpl;
|
||||
import com.cloud.storage.StorageManagerImpl;
|
||||
import com.cloud.storage.allocator.FirstFitStoragePoolAllocator;
|
||||
@ -102,7 +111,6 @@ import com.cloud.storage.allocator.GarbageCollectingStoragePoolAllocator;
|
||||
import com.cloud.storage.allocator.LocalStoragePoolAllocator;
|
||||
import com.cloud.storage.allocator.StoragePoolAllocator;
|
||||
import com.cloud.storage.dao.DiskOfferingDaoImpl;
|
||||
import com.cloud.storage.dao.DiskTemplateDaoImpl;
|
||||
import com.cloud.storage.dao.GuestOSCategoryDaoImpl;
|
||||
import com.cloud.storage.dao.GuestOSDaoImpl;
|
||||
import com.cloud.storage.dao.LaunchPermissionDaoImpl;
|
||||
@ -121,6 +129,7 @@ import com.cloud.storage.download.DownloadMonitorImpl;
|
||||
import com.cloud.storage.preallocatedlun.dao.PreallocatedLunDaoImpl;
|
||||
import com.cloud.storage.secondary.SecondaryStorageDiscoverer;
|
||||
import com.cloud.storage.secondary.SecondaryStorageManagerImpl;
|
||||
import com.cloud.storage.secondary.SecondaryStorageVmAllocator;
|
||||
import com.cloud.storage.secondary.SecondaryStorageVmDefaultAllocator;
|
||||
import com.cloud.storage.snapshot.SnapshotManagerImpl;
|
||||
import com.cloud.storage.snapshot.SnapshotSchedulerImpl;
|
||||
@ -137,6 +146,7 @@ import com.cloud.utils.component.ComponentLibrary;
|
||||
import com.cloud.utils.component.ComponentLocator.ComponentInfo;
|
||||
import com.cloud.utils.component.Manager;
|
||||
import com.cloud.utils.db.GenericDao;
|
||||
import com.cloud.vm.ItWorkDaoImpl;
|
||||
import com.cloud.vm.MauriceMoss;
|
||||
import com.cloud.vm.UserVmManagerImpl;
|
||||
import com.cloud.vm.dao.ConsoleProxyDaoImpl;
|
||||
@ -152,38 +162,47 @@ public class DefaultComponentLibrary implements ComponentLibrary {
|
||||
|
||||
protected final Map<String, ComponentInfo<GenericDao<?, ? extends Serializable>>> _daos = new LinkedHashMap<String, ComponentInfo<GenericDao<?, ?>>>();
|
||||
|
||||
protected void addDao(String name, Class<? extends GenericDao<?, ? extends Serializable>> clazz) {
|
||||
addDao(name, clazz, null, true);
|
||||
protected ComponentInfo<? extends GenericDao<?, ? extends Serializable>> addDao(String name, Class<? extends GenericDao<?, ? extends Serializable>> clazz) {
|
||||
return addDao(name, clazz, new ArrayList<Pair<String, Object>>(), true);
|
||||
}
|
||||
|
||||
protected void addDao(String name, Class<? extends GenericDao<?, ? extends Serializable>> clazz, List<Pair<String, Object>> params,
|
||||
boolean singleton) {
|
||||
ComponentInfo<GenericDao<?, ? extends Serializable>> ComponentInfo = new ComponentInfo<GenericDao<?, ? extends Serializable>>(name, clazz, params, singleton);
|
||||
for (String key : ComponentInfo.getKeys()) {
|
||||
_daos.put(key, ComponentInfo);
|
||||
protected ComponentInfo<? extends GenericDao<?, ? extends Serializable>> addDao(String name, Class<? extends GenericDao<?, ? extends Serializable>> clazz, List<Pair<String, Object>> params, boolean singleton) {
|
||||
ComponentInfo<GenericDao<?, ? extends Serializable>> componentInfo = new ComponentInfo<GenericDao<?, ? extends Serializable>>(name, clazz, params, singleton);
|
||||
for (String key : componentInfo.getKeys()) {
|
||||
_daos.put(key, componentInfo);
|
||||
}
|
||||
return componentInfo;
|
||||
}
|
||||
|
||||
protected void addDaos() {
|
||||
protected void populateDaos() {
|
||||
addDao("StackMaidDao", StackMaidDaoImpl.class);
|
||||
addDao("VMTemplateZoneDao", VMTemplateZoneDaoImpl.class);
|
||||
addDao("DomainRouterDao", DomainRouterDaoImpl.class);
|
||||
addDao("HostDao", HostDaoImpl.class);
|
||||
addDao("VMInstanceDao", VMInstanceDaoImpl.class);
|
||||
addDao("UserVmDao", UserVmDaoImpl.class);
|
||||
addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class);
|
||||
addDao("DiskOfferingDao", DiskOfferingDaoImpl.class);
|
||||
addDao("DataCenterDao", DataCenterDaoImpl.class);
|
||||
addDao("HostPodDao", HostPodDaoImpl.class);
|
||||
ComponentInfo<? extends GenericDao<?, ? extends Serializable>> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class);
|
||||
info.addParameter("cache.size", "50");
|
||||
info.addParameter("cache.time.to.live", "600");
|
||||
info = addDao("DiskOfferingDao", DiskOfferingDaoImpl.class);
|
||||
info.addParameter("cache.size", "50");
|
||||
info.addParameter("cache.time.to.live", "600");
|
||||
info = addDao("DataCenterDao", DataCenterDaoImpl.class);
|
||||
info.addParameter("cache.size", "50");
|
||||
info.addParameter("cache.time.to.live", "600");
|
||||
info = addDao("HostPodDao", HostPodDaoImpl.class);
|
||||
info.addParameter("cache.size", "50");
|
||||
info.addParameter("cache.time.to.live", "600");
|
||||
addDao("IPAddressDao", IPAddressDaoImpl.class);
|
||||
addDao("VlanDao", VlanDaoImpl.class);
|
||||
addDao("PodVlanMapDao", PodVlanMapDaoImpl.class);
|
||||
addDao("AccountVlanMapDao", AccountVlanMapDaoImpl.class);
|
||||
addDao("VolumeDao", VolumeDaoImpl.class);
|
||||
addDao("EventDao", EventDaoImpl.class);
|
||||
addDao("UserDao", UserDaoImpl.class);
|
||||
info = addDao("UserDao", UserDaoImpl.class);
|
||||
info.addParameter("cache.size", "5000");
|
||||
info.addParameter("cache.time.to.live", "300");
|
||||
addDao("UserStatisticsDao", UserStatisticsDaoImpl.class);
|
||||
addDao("DiskTemplateDao", DiskTemplateDaoImpl.class);
|
||||
addDao("FirewallRulesDao", FirewallRulesDaoImpl.class);
|
||||
addDao("LoadBalancerDao", LoadBalancerDaoImpl.class);
|
||||
addDao("NetworkRuleConfigDao", NetworkRuleConfigDaoImpl.class);
|
||||
@ -207,7 +226,10 @@ public class DefaultComponentLibrary implements ComponentLibrary {
|
||||
addDao("VMTemplatePoolDao", VMTemplatePoolDaoImpl.class);
|
||||
addDao("LaunchPermissionDao", LaunchPermissionDaoImpl.class);
|
||||
addDao("ConfigurationDao", ConfigurationDaoImpl.class);
|
||||
addDao("VMTemplateDao", VMTemplateDaoImpl.class);
|
||||
info = addDao("VMTemplateDao", VMTemplateDaoImpl.class);
|
||||
info.addParameter("cache.size", "100");
|
||||
info.addParameter("cache.time.to.live", "600");
|
||||
info.addParameter("routing.uniquename", "routing");
|
||||
addDao("HighAvailabilityDao", HighAvailabilityDaoImpl.class);
|
||||
addDao("ConsoleProxyDao", ConsoleProxyDaoImpl.class);
|
||||
addDao("SecondaryStorageVmDao", SecondaryStorageVmDaoImpl.class);
|
||||
@ -234,6 +256,7 @@ public class DefaultComponentLibrary implements ComponentLibrary {
|
||||
addDao("InstanceGroupVMMapDao", InstanceGroupVMMapDaoImpl.class);
|
||||
addDao("RemoteAccessVpnDao", RemoteAccessVpnDaoImpl.class);
|
||||
addDao("VpnUserDao", VpnUserDaoImpl.class);
|
||||
addDao("ItWorkDao", ItWorkDaoImpl.class);
|
||||
}
|
||||
|
||||
Map<String, ComponentInfo<Manager>> _managers = new HashMap<String, ComponentInfo<Manager>>();
|
||||
@ -242,23 +265,24 @@ public class DefaultComponentLibrary implements ComponentLibrary {
|
||||
@Override
|
||||
public synchronized Map<String, ComponentInfo<GenericDao<?, ?>>> getDaos() {
|
||||
if (_daos.size() == 0) {
|
||||
addDaos();
|
||||
populateDaos();
|
||||
}
|
||||
return _daos;
|
||||
}
|
||||
|
||||
protected void addManager(String name, Class<? extends Manager> clazz, List<Pair<String, Object>> params, boolean singleton) {
|
||||
ComponentInfo<Manager> ComponentInfo = new ComponentInfo<Manager>(name, clazz, params, singleton);
|
||||
for (String key : ComponentInfo.getKeys()) {
|
||||
_managers.put(key, ComponentInfo);
|
||||
protected ComponentInfo<Manager> addManager(String name, Class<? extends Manager> clazz, List<Pair<String, Object>> params, boolean singleton) {
|
||||
ComponentInfo<Manager> info = new ComponentInfo<Manager>(name, clazz, params, singleton);
|
||||
for (String key : info.getKeys()) {
|
||||
_managers.put(key, info);
|
||||
}
|
||||
return info;
|
||||
}
|
||||
|
||||
protected void addManager(String name, Class<? extends Manager> clazz) {
|
||||
addManager(name, clazz, null, true);
|
||||
protected ComponentInfo<Manager> addManager(String name, Class<? extends Manager> clazz) {
|
||||
return addManager(name, clazz, new ArrayList<Pair<String, Object>>(), true);
|
||||
}
|
||||
|
||||
protected void addManagers() {
|
||||
protected void populateManagers() {
|
||||
addManager("StackMaidManager", StackMaidManagerImpl.class);
|
||||
addManager("agent manager", AgentManagerImpl.class);
|
||||
addManager("account manager", AccountManagerImpl.class);
|
||||
@ -285,7 +309,7 @@ public class DefaultComponentLibrary implements ComponentLibrary {
|
||||
addManager("DomainRouterManager", DomainRouterManagerImpl.class);
|
||||
}
|
||||
|
||||
protected <T> void addAdapterChain(Class<T> interphace, List<Pair<String, Class<? extends T>>> adapters) {
|
||||
protected <T> List<ComponentInfo<Adapter>> addAdapterChain(Class<T> interphace, List<Pair<String, Class<? extends T>>> adapters) {
|
||||
ArrayList<ComponentInfo<Adapter>> lst = new ArrayList<ComponentInfo<Adapter>>(adapters.size());
|
||||
for (Pair<String, Class<? extends T>> adapter : adapters) {
|
||||
@SuppressWarnings("unchecked")
|
||||
@ -293,17 +317,24 @@ public class DefaultComponentLibrary implements ComponentLibrary {
|
||||
lst.add(new ComponentInfo<Adapter>(adapter.first(), clazz));
|
||||
}
|
||||
_adapters.put(interphace.getName(), lst);
|
||||
return lst;
|
||||
}
|
||||
|
||||
protected <T> void addOneAdapter(Class<T> interphace, String name, Class<? extends T> adapterClass) {
|
||||
List<Pair<String, Class<? extends T>>> adapters = new ArrayList<Pair<String, Class<? extends T>>>();
|
||||
adapters.add(new Pair<String, Class<? extends T>>(name, adapterClass));
|
||||
addAdapterChain(interphace, adapters);
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized Map<String, ComponentInfo<Manager>> getManagers() {
|
||||
if (_managers.size() == 0) {
|
||||
addManagers();
|
||||
populateManagers();
|
||||
}
|
||||
return _managers;
|
||||
}
|
||||
|
||||
public void addAllAdapters() {
|
||||
protected void populateAdapters() {
|
||||
|
||||
List<Pair<String, Class<? extends HostAllocator>>> hostAllocators = new ArrayList<Pair<String, Class<? extends HostAllocator>>>();
|
||||
hostAllocators.add(new Pair<String, Class<? extends HostAllocator>>("FirstFitRouting", RecreateHostAllocator.class));
|
||||
@ -317,51 +348,42 @@ public class DefaultComponentLibrary implements ComponentLibrary {
|
||||
poolAllocators.add(new Pair<String, Class<? extends StoragePoolAllocator>>("GarbageCollecting", GarbageCollectingStoragePoolAllocator.class));
|
||||
addAdapterChain(StoragePoolAllocator.class, poolAllocators);
|
||||
|
||||
List<Pair<String, Class<? extends PodAllocator>>> podAllocators = new ArrayList<Pair<String, Class<? extends PodAllocator>>>();
|
||||
podAllocators.add(new Pair<String, Class<? extends PodAllocator>>("User First", UserConcentratedAllocator.class));
|
||||
addAdapterChain(PodAllocator.class, podAllocators);
|
||||
|
||||
List<Pair<String, Class<? extends ConsoleProxyAllocator>>> proxyAllocators = new ArrayList<Pair<String, Class<? extends ConsoleProxyAllocator>>>();
|
||||
proxyAllocators.add(new Pair<String, Class<? extends ConsoleProxyAllocator>>("Balance", ConsoleProxyBalanceAllocator.class));
|
||||
addAdapterChain(ConsoleProxyAllocator.class, proxyAllocators);
|
||||
|
||||
// NetworkGuru
|
||||
addAdapterChain("GuestNetworkGuru", GuestNetworkGuru.class);
|
||||
addAdapterChain("PublicNetworkGuru", PublicNetworkGuru.class);
|
||||
addAdapterChain("PodBasedNetworkGuru", PodBasedNetworkGuru.class);
|
||||
addAdapterChain("ControlNetworkGuru", ControlNetworkGuru.class);
|
||||
|
||||
// Secondary Storage Vm Allocator
|
||||
addAdapterChain("Balance", SecondaryStorageVmDefaultAllocator.class);
|
||||
List<Pair<String, Class<? extends NetworkGuru>>> networkGurus = new ArrayList<Pair<String, Class<? extends NetworkGuru>>>();
|
||||
networkGurus.add(new Pair<String, Class<? extends NetworkGuru>>("GuestNetworkGuru", GuestNetworkGuru.class));
|
||||
networkGurus.add(new Pair<String, Class<? extends NetworkGuru>>("PublicNetworkGuru", PublicNetworkGuru.class));
|
||||
networkGurus.add(new Pair<String, Class<? extends NetworkGuru>>("PodBasedNetworkGuru", PodBasedNetworkGuru.class));
|
||||
networkGurus.add(new Pair<String, Class<? extends NetworkGuru>>("ControlNetworkGuru", ControlNetworkGuru.class));
|
||||
addAdapterChain(NetworkGuru.class, networkGurus);
|
||||
|
||||
// Ip Address Allocator
|
||||
addAdapterChain("Basic", ExteralIpAddressAllocator.class);
|
||||
|
||||
addOneAdapter(PodAllocator.class, "UserConcentratedPodAllocator", UserConcentratedAllocator.class);
|
||||
addOneAdapter(ConsoleProxyAllocator.class, "ConsoleProxyBalanceAllocator", ConsoleProxyBalanceAllocator.class);
|
||||
addOneAdapter(SecondaryStorageVmAllocator.class, "SecondaryStorageVmDefaultBalance", SecondaryStorageVmDefaultAllocator.class);
|
||||
addOneAdapter(IpAddrAllocator.class, "BasicExternalIpAddressAllocator", ExteralIpAddressAllocator.class);
|
||||
addOneAdapter(UserAuthenticator.class, "MD5UserAuthenticator", MD5UserAuthenticator.class);
|
||||
|
||||
// User Authenticator
|
||||
addAdapterChain("MD5", MD5UserAuthenticator.class);
|
||||
|
||||
// HA Investigator
|
||||
addAdapterChain("SimpleInvestigator", CheckOnAgentInvestigator.class);
|
||||
addAdapterChain("XenServerInvestigator", XenServerInvestigator.class);
|
||||
addAdapterChain("PingInvestigator", InvestigatorImpl.class);
|
||||
List<Pair<String, Class<? extends Investigator>>> investigators = new ArrayList<Pair<String, Class<? extends Investigator>>>();
|
||||
investigators.add(new Pair<String, Class<? extends Investigator>>("SimpleInvestigator", CheckOnAgentInvestigator.class));
|
||||
investigators.add(new Pair<String, Class<? extends Investigator>>("XenServerInvestigator", XenServerInvestigator.class));
|
||||
investigators.add(new Pair<String, Class<? extends Investigator>>("PingInvestigator", InvestigatorImpl.class));
|
||||
addAdapterChain(Investigator.class, investigators);
|
||||
|
||||
addOneAdapter(FenceBuilder.class, "StorageFenceBuilder", StorageFence.class);
|
||||
|
||||
List<Pair<String, Class<? extends Discoverer>>> discovers = new ArrayList<Pair<String, Class<? extends Discoverer>>>();
|
||||
discovers.add(new Pair<String, Class<? extends Discoverer>>("XCP Agent", XcpServerDiscoverer.class));
|
||||
discovers.add(new Pair<String, Class<? extends Discoverer>>("SecondaryStorage", SecondaryStorageDiscoverer.class));
|
||||
discovers.add(new Pair<String, Class<? extends Discoverer>>("KVM Agent", KvmServerDiscoverer.class));
|
||||
addAdapterChain(Discoverer.class, discovers);
|
||||
|
||||
// HA Fence Builder
|
||||
addAdapterChain("StorageFenceBuilder", StorageFence.class);
|
||||
|
||||
// Discoverer
|
||||
addAdapterChain("XCP Agent", XcpServerDiscoverer.class);
|
||||
addAdapterChain("SecondaryStorage", SecondaryStorageDiscoverer.class);
|
||||
addAdapterChain("KVM Agent", KvmServerDiscoverer.class);
|
||||
|
||||
// Deployment Planner
|
||||
addAdapterChain("Simple", SimplePlanner.class);
|
||||
addOneAdapter(SecurityChecker.class, "DomainChecker", DomainChecker.class);
|
||||
addOneAdapter(DeploymentPlanner.class, "SimpleDeploymentPlanner", SimplePlanner.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized Map<String, List<ComponentInfo<Adapter>>> getAdapters() {
|
||||
if (_adapters.size() == 0) {
|
||||
addAdapters();
|
||||
populateAdapters();
|
||||
}
|
||||
return _adapters;
|
||||
}
|
||||
|
||||
@ -531,7 +531,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach
|
||||
@Override
|
||||
public ConsoleProxyVO startProxy(long proxyVmId, long startEventId) {
|
||||
try {
|
||||
return start2(proxyVmId, startEventId);
|
||||
return start(proxyVmId, startEventId);
|
||||
} catch (StorageUnavailableException e) {
|
||||
s_logger.warn("Exception while trying to start console proxy", e);
|
||||
return null;
|
||||
@ -881,7 +881,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach
|
||||
if (s_logger.isDebugEnabled())
|
||||
s_logger.debug("Assign console proxy from a newly started instance for request from data center : " + dataCenterId);
|
||||
|
||||
Map<String, Object> context = createProxyInstance2(dataCenterId);
|
||||
Map<String, Object> context = createProxyInstance(dataCenterId);
|
||||
|
||||
long proxyVmId = (Long) context.get("proxyVmId");
|
||||
if (proxyVmId == 0) {
|
||||
@ -921,7 +921,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach
|
||||
if (s_logger.isDebugEnabled())
|
||||
s_logger.debug("Assign console proxy from a newly started instance for request from data center : " + dataCenterId);
|
||||
|
||||
Map<String, Object> context = createProxyInstance2(dataCenterId);
|
||||
Map<String, Object> context = createProxyInstance(dataCenterId);
|
||||
|
||||
long proxyVmId = (Long) context.get("proxyVmId");
|
||||
if (proxyVmId == 0) {
|
||||
@ -1468,7 +1468,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach
|
||||
try {
|
||||
if (proxyLock.lock(ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_SYNC)) {
|
||||
try {
|
||||
readyProxy = start2(readyProxy.getId(), 0);
|
||||
readyProxy = start(readyProxy.getId(), 0);
|
||||
} finally {
|
||||
proxyLock.unlock();
|
||||
}
|
||||
|
||||
@ -49,13 +49,11 @@ import com.cloud.api.ServerApiException;
|
||||
import com.cloud.api.commands.AddVpnUserCmd;
|
||||
import com.cloud.api.commands.AssignToLoadBalancerRuleCmd;
|
||||
import com.cloud.api.commands.AssociateIPAddrCmd;
|
||||
import com.cloud.api.commands.CreateIpForwardingRuleCmd;
|
||||
import com.cloud.api.commands.CreatePortForwardingRuleCmd;
|
||||
import com.cloud.api.commands.CreateLoadBalancerRuleCmd;
|
||||
import com.cloud.api.commands.CreatePortForwardingRuleCmd;
|
||||
import com.cloud.api.commands.CreateRemoteAccessVpnCmd;
|
||||
import com.cloud.api.commands.DeleteIpForwardingRuleCmd;
|
||||
import com.cloud.api.commands.DeletePortForwardingRuleCmd;
|
||||
import com.cloud.api.commands.DeleteLoadBalancerRuleCmd;
|
||||
import com.cloud.api.commands.DeletePortForwardingRuleCmd;
|
||||
import com.cloud.api.commands.DeleteRemoteAccessVpnCmd;
|
||||
import com.cloud.api.commands.DisassociateIPAddrCmd;
|
||||
import com.cloud.api.commands.ListPortForwardingRulesCmd;
|
||||
@ -125,7 +123,6 @@ import com.cloud.resource.Resource.ReservationStrategy;
|
||||
import com.cloud.service.ServiceOfferingVO;
|
||||
import com.cloud.service.dao.ServiceOfferingDao;
|
||||
import com.cloud.storage.StorageManager;
|
||||
import com.cloud.storage.dao.DiskTemplateDao;
|
||||
import com.cloud.storage.dao.GuestOSDao;
|
||||
import com.cloud.storage.dao.StoragePoolDao;
|
||||
import com.cloud.storage.dao.VMTemplateDao;
|
||||
@ -167,7 +164,6 @@ import com.cloud.vm.UserVmVO;
|
||||
import com.cloud.vm.VMInstanceVO;
|
||||
import com.cloud.vm.VirtualMachine;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
import com.cloud.vm.dao.DomainRouterDao;
|
||||
import com.cloud.vm.dao.NicDao;
|
||||
import com.cloud.vm.dao.UserVmDao;
|
||||
|
||||
@ -186,7 +182,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
||||
@Inject LoadBalancerVMMapDao _loadBalancerVMMapDao = null;
|
||||
@Inject IPAddressDao _ipAddressDao = null;
|
||||
@Inject VMTemplateDao _templateDao = null;
|
||||
@Inject DiskTemplateDao _diskDao = null;
|
||||
@Inject UserDao _userDao = null;
|
||||
@Inject AccountDao _accountDao = null;
|
||||
@Inject DomainDao _domainDao = null;
|
||||
|
||||
@ -134,7 +134,6 @@ import com.cloud.storage.StorageManager;
|
||||
import com.cloud.storage.StoragePoolVO;
|
||||
import com.cloud.storage.VMTemplateVO;
|
||||
import com.cloud.storage.VolumeVO;
|
||||
import com.cloud.storage.dao.DiskTemplateDao;
|
||||
import com.cloud.storage.dao.GuestOSDao;
|
||||
import com.cloud.storage.dao.StoragePoolDao;
|
||||
import com.cloud.storage.dao.VMTemplateDao;
|
||||
@ -195,7 +194,6 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute
|
||||
@Inject LoadBalancerVMMapDao _loadBalancerVMMapDao = null;
|
||||
@Inject IPAddressDao _ipAddressDao = null;
|
||||
@Inject VMTemplateDao _templateDao = null;
|
||||
@Inject DiskTemplateDao _diskDao = null;
|
||||
@Inject DomainRouterDao _routerDao = null;
|
||||
@Inject UserDao _userDao = null;
|
||||
@Inject AccountDao _accountDao = null;
|
||||
|
||||
@ -75,9 +75,9 @@ import com.cloud.api.commands.StartSystemVm2Cmd;
|
||||
import com.cloud.api.commands.StopSystemVm2Cmd;
|
||||
import com.cloud.api.commands.StopSystemVmCmd;
|
||||
import com.cloud.api.commands.UpdateDomainCmd;
|
||||
import com.cloud.api.commands.UpdatePortForwardingRuleCmd;
|
||||
import com.cloud.api.commands.UpdateIsoCmd;
|
||||
import com.cloud.api.commands.UpdateIsoPermissionsCmd;
|
||||
import com.cloud.api.commands.UpdatePortForwardingRuleCmd;
|
||||
import com.cloud.api.commands.UpdateTemplateCmd;
|
||||
import com.cloud.api.commands.UpdateTemplatePermissionsCmd;
|
||||
import com.cloud.api.commands.UpdateVMGroupCmd;
|
||||
@ -111,7 +111,6 @@ import com.cloud.network.VpnUserVO;
|
||||
import com.cloud.network.security.NetworkGroupVO;
|
||||
import com.cloud.service.ServiceOfferingVO;
|
||||
import com.cloud.storage.DiskOfferingVO;
|
||||
import com.cloud.storage.DiskTemplateVO;
|
||||
import com.cloud.storage.GuestOSCategoryVO;
|
||||
import com.cloud.storage.GuestOSVO;
|
||||
import com.cloud.storage.SnapshotPolicyVO;
|
||||
@ -642,12 +641,6 @@ public interface ManagementServer {
|
||||
List<UsageVO> searchForUsage(Criteria c);
|
||||
*/
|
||||
|
||||
/**
|
||||
* Obtains a list of all active DiskTemplates.
|
||||
* @return list of DiskTemplates
|
||||
*/
|
||||
List<DiskTemplateVO> listAllActiveDiskTemplates();
|
||||
|
||||
/**
|
||||
* Obtains a list of all templates.
|
||||
* @return list of VMTemplates
|
||||
|
||||
@ -162,7 +162,7 @@ import com.cloud.dc.VlanVO;
|
||||
import com.cloud.dc.dao.AccountVlanMapDao;
|
||||
import com.cloud.dc.dao.ClusterDao;
|
||||
import com.cloud.dc.dao.DataCenterDao;
|
||||
import com.cloud.dc.dao.DataCenterIpAddressDaoImpl;
|
||||
import com.cloud.dc.dao.DataCenterIpAddressDao;
|
||||
import com.cloud.dc.dao.HostPodDao;
|
||||
import com.cloud.dc.dao.PodVlanMapDao;
|
||||
import com.cloud.dc.dao.VlanDao;
|
||||
@ -212,7 +212,6 @@ import com.cloud.server.auth.UserAuthenticator;
|
||||
import com.cloud.service.ServiceOfferingVO;
|
||||
import com.cloud.service.dao.ServiceOfferingDao;
|
||||
import com.cloud.storage.DiskOfferingVO;
|
||||
import com.cloud.storage.DiskTemplateVO;
|
||||
import com.cloud.storage.GuestOSCategoryVO;
|
||||
import com.cloud.storage.GuestOSVO;
|
||||
import com.cloud.storage.LaunchPermissionVO;
|
||||
@ -237,7 +236,6 @@ import com.cloud.storage.Volume.VolumeType;
|
||||
import com.cloud.storage.VolumeStats;
|
||||
import com.cloud.storage.VolumeVO;
|
||||
import com.cloud.storage.dao.DiskOfferingDao;
|
||||
import com.cloud.storage.dao.DiskTemplateDao;
|
||||
import com.cloud.storage.dao.GuestOSCategoryDao;
|
||||
import com.cloud.storage.dao.GuestOSDao;
|
||||
import com.cloud.storage.dao.LaunchPermissionDao;
|
||||
@ -316,7 +314,7 @@ public class ManagementServerImpl implements ManagementServer {
|
||||
private final NetworkGroupDao _networkSecurityGroupDao;
|
||||
private final LoadBalancerDao _loadBalancerDao;
|
||||
private final IPAddressDao _publicIpAddressDao;
|
||||
private final DataCenterIpAddressDaoImpl _privateIpAddressDao;
|
||||
private final DataCenterIpAddressDao _privateIpAddressDao;
|
||||
private final LoadBalancerVMMapDao _loadBalancerVMMapDao;
|
||||
private final DomainRouterDao _routerDao;
|
||||
private final ConsoleProxyDao _consoleProxyDao;
|
||||
@ -359,7 +357,6 @@ public class ManagementServerImpl implements ManagementServer {
|
||||
private final UserStatisticsDao _userStatsDao;
|
||||
private final VMInstanceDao _vmInstanceDao;
|
||||
private final VolumeDao _volumeDao;
|
||||
private final DiskTemplateDao _diskTemplateDao;
|
||||
private final AlertManager _alertMgr;
|
||||
private final AsyncJobDao _jobDao;
|
||||
private final AsyncJobManager _asyncMgr;
|
||||
@ -425,7 +422,7 @@ public class ManagementServerImpl implements ManagementServer {
|
||||
_networkSecurityGroupDao = locator.getDao(NetworkGroupDao.class);
|
||||
_loadBalancerDao = locator.getDao(LoadBalancerDao.class);
|
||||
_publicIpAddressDao = locator.getDao(IPAddressDao.class);
|
||||
_privateIpAddressDao = locator.getDao(DataCenterIpAddressDaoImpl.class);
|
||||
_privateIpAddressDao = locator.getDao(DataCenterIpAddressDao.class);
|
||||
_loadBalancerVMMapDao = locator.getDao(LoadBalancerVMMapDao.class);
|
||||
_consoleProxyDao = locator.getDao(ConsoleProxyDao.class);
|
||||
_secStorageVmDao = locator.getDao(SecondaryStorageVmDao.class);
|
||||
@ -458,7 +455,6 @@ public class ManagementServerImpl implements ManagementServer {
|
||||
_userStatsDao = locator.getDao(UserStatisticsDao.class);
|
||||
_vmInstanceDao = locator.getDao(VMInstanceDao.class);
|
||||
_volumeDao = locator.getDao(VolumeDao.class);
|
||||
_diskTemplateDao = locator.getDao(DiskTemplateDao.class);
|
||||
_alertMgr = locator.getManager(AlertManager.class);
|
||||
_asyncMgr = locator.getManager(AsyncJobManager.class);
|
||||
_tmpltMgr = locator.getManager(TemplateManager.class);
|
||||
@ -3195,11 +3191,6 @@ public class ManagementServerImpl implements ManagementServer {
|
||||
return _publicIpAddressDao.search(sc, searchFilter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DiskTemplateVO> listAllActiveDiskTemplates() {
|
||||
return _diskTemplateDao.listAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserAccount authenticateUser(String username, String password, Long domainId, Map<String, Object[]> requestParameters) {
|
||||
UserAccount user = null;
|
||||
|
||||
@ -161,7 +161,6 @@ import com.cloud.storage.Volume;
|
||||
import com.cloud.storage.Volume.VolumeType;
|
||||
import com.cloud.storage.VolumeVO;
|
||||
import com.cloud.storage.dao.DiskOfferingDao;
|
||||
import com.cloud.storage.dao.DiskTemplateDao;
|
||||
import com.cloud.storage.dao.GuestOSCategoryDao;
|
||||
import com.cloud.storage.dao.GuestOSDao;
|
||||
import com.cloud.storage.dao.SnapshotDao;
|
||||
@ -218,7 +217,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
|
||||
@Inject UserStatisticsDao _userStatsDao = null;
|
||||
@Inject VMTemplateDao _templateDao = null;
|
||||
@Inject VMTemplateHostDao _templateHostDao = null;
|
||||
@Inject DiskTemplateDao _diskDao = null;
|
||||
@Inject DomainDao _domainDao = null;
|
||||
@Inject ResourceLimitDao _limitDao = null;
|
||||
@Inject UserVmDao _vmDao = null;
|
||||
|
||||
@ -1,6 +1,3 @@
|
||||
ALTER TABLE `cloud`.`disk_template_ref` ADD INDEX `i_disk_template_ref__removed`(`removed`);
|
||||
ALTER TABLE `cloud`.`disk_template_ref` ADD INDEX `i_disk_template_ref__type__size`(`type`, `size`);
|
||||
|
||||
ALTER TABLE `cloud`.`volumes` ADD INDEX `i_volumes__removed`(`removed`);
|
||||
ALTER TABLE `cloud`.`volumes` ADD INDEX `i_volumes__pod_id`(`pod_id`);
|
||||
ALTER TABLE `cloud`.`volumes` ADD INDEX `i_volumes__data_center_id`(`data_center_id`);
|
||||
|
||||
@ -18,7 +18,6 @@ DROP TABLE IF EXISTS `cloud`.`host_zone_ref`;
|
||||
DROP TABLE IF EXISTS `cloud`.`data_ceneter`;
|
||||
DROP TABLE IF EXISTS `cloud`.`volumes`;
|
||||
DROP TABLE IF EXISTS `cloud`.`storage`;
|
||||
DROP TABLE IF EXISTS `cloud`.`disk_template_ref`;
|
||||
DROP TABLE IF EXISTS `cloud`.`data_center`;
|
||||
DROP TABLE IF EXISTS `cloud`.`pricing`;
|
||||
DROP TABLE IF EXISTS `cloud`.`sequence`;
|
||||
@ -278,19 +277,6 @@ INSERT INTO `cloud`.`sequence` (name, value) VALUES ('storage_pool_seq', 200);
|
||||
INSERT INTO `cloud`.`sequence` (name, value) VALUES ('volume_seq', 1);
|
||||
INSERT INTO `cloud`.`sequence` (name, value) VALUES ('network_configuration_seq', 1);
|
||||
|
||||
CREATE TABLE `cloud`.`disk_template_ref` (
|
||||
`id` bigint unsigned NOT NULL auto_increment,
|
||||
`description` varchar(255) NOT NULL,
|
||||
`host` varchar(255) NOT NULL COMMENT 'host on which the server exists',
|
||||
`parent` varchar(255) NOT NULL COMMENT 'parent path',
|
||||
`path` varchar(255) NOT NULL,
|
||||
`size` int(10) unsigned NOT NULL COMMENT 'size of the disk',
|
||||
`type` varchar(255) NOT NULL COMMENT 'file system type',
|
||||
`created` datetime NOT NULL COMMENT 'Date created',
|
||||
`removed` datetime COMMENT 'Date removed if not null',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE TABLE `cloud`.`volumes` (
|
||||
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',
|
||||
`account_id` bigint unsigned NOT NULL COMMENT 'owner. foreign key to account table',
|
||||
|
||||
@ -25,6 +25,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.cloud.utils.EnumerationImpl;
|
||||
import com.cloud.utils.component.ComponentLocator.ComponentInfo;
|
||||
|
||||
/**
|
||||
* Adapters is a simple wrapper around the list of adapters. The reason is
|
||||
@ -34,11 +35,13 @@ import com.cloud.utils.EnumerationImpl;
|
||||
* the iterator even during dynamic reloading.
|
||||
*
|
||||
**/
|
||||
public class Adapters<T extends Adapter> implements Iterable<T> {
|
||||
private Map<String, T> _map;
|
||||
public class Adapters<T> implements Iterable<T> {
|
||||
protected Map<String, T> _map;
|
||||
protected List<ComponentInfo<Adapter>> _infos;
|
||||
|
||||
protected String _name;
|
||||
|
||||
public Adapters(String name, List<T> adapters) {
|
||||
public Adapters(String name, List<ComponentInfo<Adapter>> adapters) {
|
||||
_name = name;
|
||||
set(adapters);
|
||||
}
|
||||
@ -65,12 +68,15 @@ public class Adapters<T extends Adapter> implements Iterable<T> {
|
||||
return _map.values();
|
||||
}
|
||||
|
||||
protected void set(List<T> adapters) {
|
||||
protected void set(List<ComponentInfo<Adapter>> adapters) {
|
||||
HashMap<String, T> map = new HashMap<String, T>(adapters.size());
|
||||
for (T adapter : adapters) {
|
||||
map.put(adapter.getName(), adapter);
|
||||
for (ComponentInfo<Adapter> adapter : adapters) {
|
||||
@SuppressWarnings("unchecked")
|
||||
T t = (T)adapter.instance;
|
||||
map.put(adapter.getName(), t);
|
||||
}
|
||||
this._map = map;
|
||||
this._infos = adapters;
|
||||
}
|
||||
|
||||
public T get(String name) {
|
||||
|
||||
@ -32,6 +32,7 @@ import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import javax.ejb.Local;
|
||||
import javax.management.InstanceAlreadyExistsException;
|
||||
@ -72,55 +73,38 @@ import com.cloud.utils.mgmt.ManagementBean;
|
||||
*
|
||||
**/
|
||||
@SuppressWarnings("unchecked")
|
||||
public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
public class ComponentLocator implements ComponentLocatorMBean {
|
||||
protected static final Logger s_logger = Logger.getLogger(ComponentLocator.class);
|
||||
|
||||
protected static HashMap<String, Object> s_singletons = new HashMap<String, Object>(111);
|
||||
protected static ConcurrentHashMap<Class<?>, Singleton> s_singletons = new ConcurrentHashMap<Class<?>, Singleton>(111);
|
||||
static HashMap<String, ComponentLocator> s_locators = new HashMap<String, ComponentLocator>();
|
||||
private static boolean s_doOnce = false;
|
||||
protected static final Callback[] s_callbacks = new Callback[] { NoOp.INSTANCE, new DatabaseCallback() };
|
||||
protected static final CallbackFilter s_callbackFilter = new DatabaseCallbackFilter();
|
||||
protected static final HashMap<Class<?>, InjectInfo> s_factories = new HashMap<Class<?>, InjectInfo>();
|
||||
protected static HashMap<String, ComponentLocator> s_locatorMap = new HashMap<String, ComponentLocator>();
|
||||
protected static HashMap<String, Object> _componentMap = new HashMap<String, Object>();
|
||||
protected static HashMap<String, String> _implementationClassMap = new HashMap<String, String>();
|
||||
|
||||
protected HashMap<String, Adapters<? extends Adapter>> _adapterMap;
|
||||
protected HashMap<String, ComponentInfo<Manager>> _managerMap;
|
||||
protected LinkedHashMap<String, ComponentInfo<GenericDao<?, ?>>> _daoMap;
|
||||
protected ComponentLocator _parentLocator;
|
||||
protected String _serverName;
|
||||
protected HashMap<String, Adapters<? extends Adapter>> _adapterMap;
|
||||
protected HashMap<String, ComponentInfo<Manager>> _managerMap;
|
||||
protected LinkedHashMap<String, ComponentInfo<GenericDao<?, ?>>> _daoMap;
|
||||
protected ComponentLocator _parentLocator;
|
||||
protected String _serverName;
|
||||
protected Object _component;
|
||||
|
||||
public ComponentLocator(String server) {
|
||||
_parentLocator = null;
|
||||
_serverName = server;
|
||||
Runtime.getRuntime().addShutdownHook(this);
|
||||
}
|
||||
|
||||
public String getLocatorName() {
|
||||
return _serverName;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public synchronized void run() {
|
||||
Iterator<Adapters<? extends Adapter>> itAdapters = _adapterMap.values().iterator();
|
||||
while (itAdapters.hasNext()) {
|
||||
Adapters<? extends Adapter> adapters = itAdapters.next();
|
||||
itAdapters.remove();
|
||||
Enumeration<? extends Adapter> it = adapters.enumeration();
|
||||
while (it.hasMoreElements()) {
|
||||
Adapter adapter = it.nextElement();
|
||||
adapter.stop();
|
||||
}
|
||||
}
|
||||
|
||||
Iterator<ComponentInfo<Manager>> itManagers = _managerMap.values().iterator();
|
||||
while (itManagers.hasNext()) {
|
||||
ComponentInfo<Manager> manager = itManagers.next();
|
||||
itManagers.remove();
|
||||
manager.instance.stop();
|
||||
}
|
||||
public String getName() {
|
||||
return getLocatorName();
|
||||
}
|
||||
|
||||
|
||||
protected void parse(String filename, String log4jFile) {
|
||||
try {
|
||||
SAXParserFactory spfactory = SAXParserFactory.newInstance();
|
||||
@ -139,31 +123,43 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
XmlHandler handler = new XmlHandler(_serverName);
|
||||
saxParser.parse(file, handler);
|
||||
|
||||
if (handler.parent != null) {
|
||||
_parentLocator = getLocatorInternal(handler.parent, false, filename, log4jFile);
|
||||
}
|
||||
|
||||
_daoMap = new LinkedHashMap<String, ComponentInfo<GenericDao<?, ? extends Serializable>>>();
|
||||
_managerMap = new LinkedHashMap<String, ComponentInfo<Manager>>();
|
||||
_adapterMap = new HashMap<String, Adapters<? extends Adapter>>();
|
||||
if (handler.library != null) {
|
||||
Class<?> clazz = Class.forName(handler.library);
|
||||
ComponentLibrary library = (ComponentLibrary)clazz.newInstance();
|
||||
_managerMap.putAll(library.getManagers());
|
||||
_daoMap.putAll(library.getDaos());
|
||||
createAdaptersMap(library.getAdapters());
|
||||
if (handler.parent != null) {
|
||||
synchronized(s_locators) {
|
||||
_parentLocator = s_locators.get(handler.parent);
|
||||
if (_parentLocator == null) {
|
||||
_parentLocator = new ComponentLocator(handler.parent);
|
||||
s_locators.put(handler.parent, _parentLocator);
|
||||
_parentLocator.parse(filename, log4jFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_managerMap.putAll(handler.managers);
|
||||
_daoMap.putAll(handler.daos);
|
||||
ComponentLibrary library = null;
|
||||
if (handler.library != null) {
|
||||
Class<?> clazz = Class.forName(handler.library);
|
||||
library = (ComponentLibrary)clazz.newInstance();
|
||||
_daoMap.putAll(library.getDaos());
|
||||
_managerMap.putAll(library.getManagers());
|
||||
}
|
||||
|
||||
_daoMap.putAll(handler.daos);
|
||||
_managerMap.putAll(handler.managers);
|
||||
|
||||
startDaos(); // daos should not be using managers and adapters.
|
||||
createAdaptersMap(handler.adapters);
|
||||
instantiateManagers();
|
||||
if (library != null) {
|
||||
instantiateAdapters(library.getAdapters());
|
||||
}
|
||||
instantiateAdapters(handler.adapters);
|
||||
instantiateManagers();
|
||||
_component = createInstance(handler.componentClass, true, true);
|
||||
configureManagers();
|
||||
configureAdapters();
|
||||
startManagers();
|
||||
startAdapters();
|
||||
|
||||
|
||||
} catch (ParserConfigurationException e) {
|
||||
s_logger.error("Unable to load " + _serverName + " due to errors while parsing " + filename, e);
|
||||
@ -192,13 +188,29 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
|
||||
for (Map.Entry<String, ComponentInfo<GenericDao<?, ?>>> entry : entries) {
|
||||
ComponentInfo<GenericDao<?, ?>> info = entry.getValue();
|
||||
s_logger.info("Starting DAO: " + info.name);
|
||||
try {
|
||||
info.instance = (GenericDao<?, ?>)createInstance(info.clazz, true, info.singleton);
|
||||
inject(info.clazz, info.instance);
|
||||
if (!info.instance.configure(info.name, info.params)) {
|
||||
s_logger.error("Unable to configure DAO: " + info.name);
|
||||
System.exit(1);
|
||||
if (info.singleton) {
|
||||
s_logger.info("Starting singleton DAO: " + info.name);
|
||||
Singleton singleton = s_singletons.get(info.clazz);
|
||||
if (singleton.state == Singleton.State.Instantiated) {
|
||||
inject(info.clazz, info.instance);
|
||||
singleton.state = Singleton.State.Injected;
|
||||
}
|
||||
if (singleton.state == Singleton.State.Injected) {
|
||||
if (!info.instance.configure(info.name, info.params)) {
|
||||
s_logger.error("Unable to configure DAO: " + info.name);
|
||||
System.exit(1);
|
||||
}
|
||||
singleton.state = Singleton.State.Started;
|
||||
}
|
||||
} else {
|
||||
s_logger.info("Starting DAO: " + info.name);
|
||||
inject(info.clazz, info.instance);
|
||||
if (!info.instance.configure(info.name, info.params)) {
|
||||
s_logger.error("Unable to configure DAO: " + info.name);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
} catch (ConfigurationException e) {
|
||||
s_logger.error("Unable to configure DAO: " + info.name, e);
|
||||
@ -215,13 +227,13 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
|
||||
private static Object createInstance(Class<?> clazz, boolean inject, boolean singleton, Object... args) {
|
||||
Factory factory = null;
|
||||
Object entity = null;
|
||||
Singleton entity = null;
|
||||
synchronized(s_factories) {
|
||||
if (singleton) {
|
||||
entity = s_singletons.get(clazz.toString());
|
||||
entity = s_singletons.get(clazz);
|
||||
if (entity != null) {
|
||||
s_logger.debug("Found singleton instantiation for " + clazz.toString());
|
||||
return entity;
|
||||
return entity.singleton;
|
||||
}
|
||||
}
|
||||
InjectInfo info = s_factories.get(clazz);
|
||||
@ -263,22 +275,23 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
throw new CloudRuntimeException("Unable to find constructor to match parameters given: " + clazz.getName());
|
||||
}
|
||||
|
||||
entity = factory.newInstance(argTypes, args, s_callbacks);
|
||||
entity = new Singleton(factory.newInstance(argTypes, args, s_callbacks));
|
||||
} else {
|
||||
entity = factory.newInstance(s_callbacks);
|
||||
entity = new Singleton(factory.newInstance(s_callbacks));
|
||||
}
|
||||
|
||||
if (inject) {
|
||||
inject(clazz, entity);
|
||||
inject(clazz, entity.singleton);
|
||||
entity.state = Singleton.State.Injected;
|
||||
}
|
||||
|
||||
if (singleton) {
|
||||
synchronized(s_factories) {
|
||||
s_singletons.put(clazz.toString(), entity);
|
||||
s_singletons.put(clazz, entity);
|
||||
}
|
||||
}
|
||||
|
||||
return entity;
|
||||
return entity.singleton;
|
||||
}
|
||||
|
||||
|
||||
@ -293,50 +306,22 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
}
|
||||
|
||||
if (info == null) {
|
||||
return null;
|
||||
throw new CloudRuntimeException("Unable to find DAO " + name);
|
||||
}
|
||||
|
||||
_daoMap.put(name, info);
|
||||
return info;
|
||||
}
|
||||
|
||||
private static synchronized Object getComponent(Class<?> clazz) {
|
||||
String name = clazz.getName();
|
||||
try {
|
||||
Object component = _componentMap.get(name);
|
||||
if (component == null) {
|
||||
Class<?> impl = Class.forName(name);
|
||||
component = createInstance(impl, true, true);
|
||||
_componentMap.put(name, component);
|
||||
}
|
||||
return component;
|
||||
} catch (ClassNotFoundException e) {
|
||||
s_logger.error("Unable to load " + name + " due to ", e);
|
||||
System.exit(1);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static synchronized Object getComponent(String componentName) {
|
||||
ComponentLocator locator = s_locators.get(componentName);
|
||||
if (locator == null) {
|
||||
ComponentLocator.getLocator(componentName);
|
||||
locator = ComponentLocator.getLocator(componentName);
|
||||
}
|
||||
String implementationClass = _implementationClassMap.get(componentName);
|
||||
if (implementationClass != null) {
|
||||
try {
|
||||
Class<?> clazz = Class.forName(implementationClass);
|
||||
return getComponent(clazz);
|
||||
} catch (Exception ex) {
|
||||
s_logger.error("Failed to get component " + componentName + ", caused by exception " + ex, ex);
|
||||
}
|
||||
} else {
|
||||
s_logger.warn("Unable to find component with name: " + componentName);
|
||||
}
|
||||
return null;
|
||||
return locator._component;
|
||||
}
|
||||
|
||||
public <T extends GenericDao<?, ?>> T getDao(Class<T> clazz) {
|
||||
public <T extends GenericDao<?, ? extends Serializable>> T getDao(Class<T> clazz) {
|
||||
ComponentInfo<GenericDao<?, ?>> info = getDao(clazz.getName());
|
||||
return info != null ? (T)info.instance : null;
|
||||
}
|
||||
@ -356,17 +341,40 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
Set<Map.Entry<String, ComponentInfo<Manager>>> entries = _managerMap.entrySet();
|
||||
for (Map.Entry<String, ComponentInfo<Manager>> entry : entries) {
|
||||
ComponentInfo<Manager> info = entry.getValue();
|
||||
s_logger.info("Injecting Manager: " + info.name);
|
||||
inject(info.clazz, info.instance);
|
||||
if (info.singleton) {
|
||||
Singleton s = s_singletons.get(info.clazz);
|
||||
if (s.state == Singleton.State.Instantiated) {
|
||||
s_logger.info("Injecting singleton Manager: " + info.name);
|
||||
inject(info.clazz, info.instance);
|
||||
s.state = Singleton.State.Injected;
|
||||
}
|
||||
} else {
|
||||
s_logger.info("Injecting Manager: " + info.name);
|
||||
inject(info.clazz, info.instance);
|
||||
}
|
||||
}
|
||||
for (Map.Entry<String, ComponentInfo<Manager>> entry : entries) {
|
||||
ComponentInfo<Manager> info = entry.getValue();
|
||||
s_logger.info("Configuring Manager: " + info.name);
|
||||
try {
|
||||
info.instance.configure(info.name, info.params);
|
||||
} catch (ConfigurationException e) {
|
||||
s_logger.error("Unable to configure manager: " + info.name, e);
|
||||
System.exit(1);
|
||||
if (info.singleton) {
|
||||
Singleton s = s_singletons.get(info.clazz);
|
||||
if (s.state == Singleton.State.Injected) {
|
||||
s_logger.info("Configuring singleton Manager: " + info.name);
|
||||
try {
|
||||
info.instance.configure(info.name, info.params);
|
||||
} catch (ConfigurationException e) {
|
||||
s_logger.error("Unable to configure manager: " + info.name, e);
|
||||
System.exit(1);
|
||||
}
|
||||
s.state = Singleton.State.Configured;
|
||||
}
|
||||
} else {
|
||||
s_logger.info("Configuring Manager: " + info.name);
|
||||
try {
|
||||
info.instance.configure(info.name, info.params);
|
||||
} catch (ConfigurationException e) {
|
||||
s_logger.error("Unable to configure manager: " + info.name, e);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -384,12 +392,16 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
Class<?> fc = field.getType();
|
||||
Object instance = null;
|
||||
if (Manager.class.isAssignableFrom(fc)) {
|
||||
s_logger.trace("Manager: " + fc.getName());
|
||||
instance = locator.getManager(fc);
|
||||
} else if (GenericDao.class.isAssignableFrom(fc)) {
|
||||
instance = locator.getDao((Class<? extends GenericDao<?, ?>>)fc);
|
||||
s_logger.trace("Dao:" + fc.getName());
|
||||
instance = locator.getDao((Class<? extends GenericDao<?, ? extends Serializable>>)fc);
|
||||
} else if (Adapters.class.isAssignableFrom(fc)) {
|
||||
s_logger.trace("Adapter" + fc.getName());
|
||||
instance = locator.getAdapters(inject.adapter());
|
||||
} else {
|
||||
s_logger.trace("Other:" + fc.getName());
|
||||
instance = locator.getManager(fc);
|
||||
}
|
||||
|
||||
@ -414,14 +426,29 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
Set<Map.Entry<String, ComponentInfo<Manager>>> entries = _managerMap.entrySet();
|
||||
for (Map.Entry<String, ComponentInfo<Manager>> entry : entries) {
|
||||
ComponentInfo<Manager> info = entry.getValue();
|
||||
s_logger.info("Starting Manager: " + info.name);
|
||||
if (!info.instance.start()) {
|
||||
throw new CloudRuntimeException("Incorrect Configuration: " + info.name);
|
||||
if (info.singleton) {
|
||||
Singleton s = s_singletons.get(info.clazz);
|
||||
if (s.state == Singleton.State.Configured) {
|
||||
s_logger.info("Starting singleton Manager: " + info.name);
|
||||
if (!info.instance.start()) {
|
||||
throw new CloudRuntimeException("Incorrect Configuration: " + info.name);
|
||||
}
|
||||
if (info.instance instanceof ManagementBean) {
|
||||
registerMBean((ManagementBean) info.instance);
|
||||
}
|
||||
s_logger.info("Started Manager: " + info.name);
|
||||
s.state = Singleton.State.Started;
|
||||
}
|
||||
} else {
|
||||
s_logger.info("Starting Manager: " + info.name);
|
||||
if (!info.instance.start()) {
|
||||
throw new CloudRuntimeException("Incorrect Configuration: " + info.name);
|
||||
}
|
||||
if (info.instance instanceof ManagementBean) {
|
||||
registerMBean((ManagementBean) info.instance);
|
||||
}
|
||||
s_logger.info("Started Manager: " + info.name);
|
||||
}
|
||||
if (info.instance instanceof ManagementBean) {
|
||||
registerMBean((ManagementBean) info.instance);
|
||||
}
|
||||
s_logger.info("Started Manager: " + info.name);
|
||||
}
|
||||
}
|
||||
|
||||
@ -468,19 +495,35 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
}
|
||||
return (T)info.instance;
|
||||
}
|
||||
|
||||
protected void instantiateAdapters(Map<String, List<ComponentInfo<Adapter>>> map) {
|
||||
Set<Map.Entry<String, List<ComponentInfo<Adapter>>>> entries = map.entrySet();
|
||||
for (Map.Entry<String, List<ComponentInfo<Adapter>>> entry : entries) {
|
||||
Adapters<Adapter> adapters = (Adapters<Adapter>)_adapterMap.get(entry.getKey());
|
||||
List<Adapter> lst = new ArrayList<Adapter>();
|
||||
for (ComponentInfo<Adapter> info : entry.getValue()) {
|
||||
s_logger.info("Instantiating Adapter: " + info.name);
|
||||
info.instance = (Adapter)createInstance(info.clazz, true, info.singleton);
|
||||
|
||||
protected void configureAdapters() {
|
||||
for (Adapters<? extends Adapter> adapters : _adapterMap.values()) {
|
||||
List<ComponentInfo<Adapter>> infos = adapters._infos;
|
||||
for (ComponentInfo<Adapter> info : infos) {
|
||||
try {
|
||||
if (!info.instance.configure(info.name, info.params)) {
|
||||
s_logger.error("Unable to configure adapter: " + info.name);
|
||||
System.exit(1);
|
||||
if (info.singleton) {
|
||||
Singleton singleton = s_singletons.get(info.clazz);
|
||||
if (singleton.state == Singleton.State.Instantiated) {
|
||||
s_logger.info("Injecting singleton Adapter: " + info.getName());
|
||||
inject(info.clazz, info.instance);
|
||||
singleton.state = Singleton.State.Injected;
|
||||
}
|
||||
if (singleton.state == Singleton.State.Injected) {
|
||||
s_logger.info("Configuring singleton Adapter: " + info.getName());
|
||||
if (!info.instance.configure(info.name, info.params)) {
|
||||
s_logger.error("Unable to configure adapter: " + info.name);
|
||||
System.exit(1);
|
||||
}
|
||||
singleton.state = Singleton.State.Configured;
|
||||
}
|
||||
} else {
|
||||
s_logger.info("Injecting Adapter: " + info.getName());
|
||||
inject(info.clazz, info.instance);
|
||||
s_logger.info("Configuring singleton Adapter: " + info.getName());
|
||||
if (!info.instance.configure(info.name, info.params)) {
|
||||
s_logger.error("Unable to configure adapter: " + info.name);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
} catch (ConfigurationException e) {
|
||||
s_logger.error("Unable to configure adapter: " + info.name, e);
|
||||
@ -489,32 +532,48 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
s_logger.error("Unable to configure adapter: " + info.name, e);
|
||||
System.exit(1);
|
||||
}
|
||||
lst.add(info.instance);
|
||||
s_logger.info("Instantiated Adapter: " + info.name);
|
||||
}
|
||||
adapters.set(lst);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void createAdaptersMap(Map<String, List<ComponentInfo<Adapter>>> map) {
|
||||
protected void instantiateAdapters(Map<String, List<ComponentInfo<Adapter>>> map) {
|
||||
Set<Map.Entry<String, List<ComponentInfo<Adapter>>>> entries = map.entrySet();
|
||||
for (Map.Entry<String, List<ComponentInfo<Adapter>>> entry : entries) {
|
||||
List<? extends Adapter> lst = new ArrayList<Adapter>(entry.getValue().size());
|
||||
_adapterMap.put(entry.getKey(), new Adapters(entry.getKey(), lst));
|
||||
for (ComponentInfo<Adapter> info : entry.getValue()) {
|
||||
s_logger.info("Instantiating Adapter: " + info.name);
|
||||
info.instance = (Adapter)createInstance(info.clazz, false, info.singleton);
|
||||
}
|
||||
Adapters<Adapter> adapters = new Adapters<Adapter>(entry.getKey(), entry.getValue());
|
||||
_adapterMap.put(entry.getKey(), adapters);
|
||||
}
|
||||
}
|
||||
|
||||
protected void startAdapters() {
|
||||
for (Map.Entry<String, Adapters<? extends Adapter>> entry : _adapterMap.entrySet()) {
|
||||
for (Adapter adapter : entry.getValue().get()) {
|
||||
s_logger.info("Starting Adapter: " + adapter.getName());
|
||||
if (!adapter.start()) {
|
||||
throw new CloudRuntimeException("Unable to start adapter: " + adapter.getName());
|
||||
for (ComponentInfo<Adapter> adapter : entry.getValue()._infos) {
|
||||
if (adapter.singleton) {
|
||||
Singleton s = s_singletons.get(adapter.clazz);
|
||||
if (s.state == Singleton.State.Configured) {
|
||||
s_logger.info("Starting singleton Adapter: " + adapter.getName());
|
||||
if (!adapter.instance.start()) {
|
||||
throw new CloudRuntimeException("Unable to start adapter: " + adapter.getName());
|
||||
}
|
||||
if (adapter.instance instanceof ManagementBean) {
|
||||
registerMBean((ManagementBean)adapter.instance);
|
||||
}
|
||||
s_logger.info("Started Adapter: " + adapter.instance.getName());
|
||||
}
|
||||
s.state = Singleton.State.Started;
|
||||
} else {
|
||||
s_logger.info("Starting Adapter: " + adapter.getName());
|
||||
if (!adapter.instance.start()) {
|
||||
throw new CloudRuntimeException("Unable to start adapter: " + adapter.getName());
|
||||
}
|
||||
if (adapter.instance instanceof ManagementBean) {
|
||||
registerMBean((ManagementBean)adapter.instance);
|
||||
}
|
||||
s_logger.info("Started Adapter: " + adapter.instance.getName());
|
||||
}
|
||||
if (adapter instanceof ManagementBean) {
|
||||
registerMBean((ManagementBean)adapter);
|
||||
}
|
||||
s_logger.info("Started Adapter: " + adapter.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -589,10 +648,9 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
return adapters;
|
||||
}
|
||||
}
|
||||
return new Adapters(key, new ArrayList<Adapter>());
|
||||
return new Adapters<Adapter>(key, new ArrayList<ComponentInfo<Adapter>>());
|
||||
}
|
||||
|
||||
static HashMap<String, ComponentLocator> s_locators = new HashMap<String, ComponentLocator>();
|
||||
protected static ComponentLocator getLocatorInternal(String server, boolean setInThreadLocal, String configFileName, String log4jFile) {
|
||||
// init log4j based on the passed in configuration
|
||||
if (s_doOnce == false) {
|
||||
@ -605,6 +663,7 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
PropertyConfigurator.configureAndWatch(file.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
Runtime.getRuntime().addShutdownHook(new CleanupThread());
|
||||
s_doOnce = true;
|
||||
}
|
||||
|
||||
@ -669,6 +728,11 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
this(name, clazz, new ArrayList<Pair<String, Object>>(0));
|
||||
}
|
||||
|
||||
public ComponentInfo(String name, Class<? extends T> clazz, T instance) {
|
||||
this(name, clazz);
|
||||
this.instance = instance;
|
||||
}
|
||||
|
||||
public ComponentInfo(String name, Class<? extends T> clazz, List<Pair<String, Object>> params) {
|
||||
this(name, clazz, params, true);
|
||||
}
|
||||
@ -705,6 +769,10 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addParameter(String name, String value) {
|
||||
params.put(name, value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -723,7 +791,8 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
StringBuilder value;
|
||||
String serverName;
|
||||
boolean parse;
|
||||
ComponentInfo<?> currentInfo;
|
||||
ComponentInfo<?> currentInfo;
|
||||
Class<?> componentClass;
|
||||
|
||||
public XmlHandler(String serverName) {
|
||||
this.serverName = serverName;
|
||||
@ -770,8 +839,10 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
parent = getAttribute(atts, "extends");
|
||||
String implementationClass = getAttribute(atts, "class");
|
||||
|
||||
if (implementationClass != null) {
|
||||
_implementationClassMap.put(_serverName, implementationClass);
|
||||
try {
|
||||
componentClass = Class.forName(implementationClass);
|
||||
} catch (ClassNotFoundException e) {
|
||||
throw new CloudRuntimeException("Unable to find " + implementationClass, e);
|
||||
}
|
||||
|
||||
library = getAttribute(atts, "library");
|
||||
@ -860,4 +931,68 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
|
||||
this.enhancer = enhancer;
|
||||
}
|
||||
}
|
||||
|
||||
protected static class CleanupThread extends Thread {
|
||||
@Override
|
||||
public synchronized void run() {
|
||||
for (ComponentLocator locator : s_locators.values()) {
|
||||
Iterator<Adapters<? extends Adapter>> itAdapters = locator._adapterMap.values().iterator();
|
||||
while (itAdapters.hasNext()) {
|
||||
Adapters<? extends Adapter> adapters = itAdapters.next();
|
||||
itAdapters.remove();
|
||||
for (ComponentInfo<Adapter> adapter : adapters._infos) {
|
||||
if (adapter.singleton) {
|
||||
Singleton singleton = s_singletons.get(adapter.clazz);
|
||||
if (singleton.state == Singleton.State.Started) {
|
||||
s_logger.info("Asking " + adapter.getName() + " to shutdown.");
|
||||
adapter.instance.stop();
|
||||
singleton.state = Singleton.State.Stopped;
|
||||
} else {
|
||||
s_logger.debug("Skippng " + adapter.getName() + " because it has already stopped");
|
||||
}
|
||||
} else {
|
||||
s_logger.info("Asking " + adapter.getName() + " to shutdown.");
|
||||
adapter.instance.stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (ComponentLocator locator : s_locators.values()) {
|
||||
Iterator<ComponentInfo<Manager>> itManagers = locator._managerMap.values().iterator();
|
||||
while (itManagers.hasNext()) {
|
||||
ComponentInfo<Manager> manager = itManagers.next();
|
||||
itManagers.remove();
|
||||
if (manager.singleton == true) {
|
||||
Singleton singleton = s_singletons.get(manager.clazz);
|
||||
if (singleton.state == Singleton.State.Started) {
|
||||
s_logger.info("Asking Manager " + manager.getName() + " to shutdown.");
|
||||
manager.instance.stop();
|
||||
singleton.state = Singleton.State.Stopped;
|
||||
} else {
|
||||
s_logger.info("Skipping Manager " + manager.getName() + " because it is not in a state to shutdown.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static class Singleton {
|
||||
public enum State {
|
||||
Instantiated,
|
||||
Injected,
|
||||
Configured,
|
||||
Started,
|
||||
Stopped
|
||||
}
|
||||
|
||||
public Object singleton;
|
||||
public State state;
|
||||
|
||||
public Singleton(Object singleton) {
|
||||
this.singleton = singleton;
|
||||
this.state = State.Instantiated;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user