You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by wi...@apache.org on 2013/09/02 22:05:10 UTC

[24/50] [abbrv] Switched over to use the new jobs framework

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8930cfa9/server/src/com/cloud/async/dao/AsyncJobDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/async/dao/AsyncJobDaoImpl.java b/server/src/com/cloud/async/dao/AsyncJobDaoImpl.java
deleted file mode 100644
index 69ffa10..0000000
--- a/server/src/com/cloud/async/dao/AsyncJobDaoImpl.java
+++ /dev/null
@@ -1,150 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.async.dao;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.util.Date;
-import java.util.List;
-
-import javax.ejb.Local;
-
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import org.apache.cloudstack.api.ApiCommandJobType;
-
-import com.cloud.async.AsyncJobResult;
-import com.cloud.async.AsyncJobVO;
-import com.cloud.utils.db.DB;
-import com.cloud.utils.db.Filter;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.Transaction;
-
-@Component
-@Local(value = { AsyncJobDao.class })
-public class AsyncJobDaoImpl extends GenericDaoBase<AsyncJobVO, Long> implements AsyncJobDao {
-    private static final Logger s_logger = Logger.getLogger(AsyncJobDaoImpl.class.getName());
-	
-	private final SearchBuilder<AsyncJobVO> pendingAsyncJobSearch;	
-	private final SearchBuilder<AsyncJobVO> pendingAsyncJobsSearch;	
-	private final SearchBuilder<AsyncJobVO> expiringUnfinishedAsyncJobSearch;
-	private final SearchBuilder<AsyncJobVO> expiringCompletedAsyncJobSearch;
-
-	
-	public AsyncJobDaoImpl() {
-		pendingAsyncJobSearch = createSearchBuilder();
-		pendingAsyncJobSearch.and("instanceType", pendingAsyncJobSearch.entity().getInstanceType(), 
-			SearchCriteria.Op.EQ);
-		pendingAsyncJobSearch.and("instanceId", pendingAsyncJobSearch.entity().getInstanceId(), 
-			SearchCriteria.Op.EQ);
-		pendingAsyncJobSearch.and("status", pendingAsyncJobSearch.entity().getStatus(), 
-				SearchCriteria.Op.EQ);
-		pendingAsyncJobSearch.done();
-		
-		pendingAsyncJobsSearch = createSearchBuilder();
-		pendingAsyncJobsSearch.and("instanceType", pendingAsyncJobsSearch.entity().getInstanceType(), 
-			SearchCriteria.Op.EQ);
-		pendingAsyncJobsSearch.and("accountId", pendingAsyncJobsSearch.entity().getAccountId(), 
-			SearchCriteria.Op.EQ);
-		pendingAsyncJobsSearch.and("status", pendingAsyncJobsSearch.entity().getStatus(), 
-				SearchCriteria.Op.EQ);
-		pendingAsyncJobsSearch.done();
-		
-		expiringUnfinishedAsyncJobSearch = createSearchBuilder();
-		expiringUnfinishedAsyncJobSearch.and("created", expiringUnfinishedAsyncJobSearch.entity().getCreated(),
-			SearchCriteria.Op.LTEQ);
-		expiringUnfinishedAsyncJobSearch.and("completeMsId", expiringUnfinishedAsyncJobSearch.entity().getCompleteMsid(), SearchCriteria.Op.NULL);
-		expiringUnfinishedAsyncJobSearch.and("jobStatus", expiringUnfinishedAsyncJobSearch.entity().getStatus(), SearchCriteria.Op.EQ);
-		expiringUnfinishedAsyncJobSearch.done();
-		
-		expiringCompletedAsyncJobSearch = createSearchBuilder();
-		expiringCompletedAsyncJobSearch.and("created", expiringCompletedAsyncJobSearch.entity().getCreated(),
-			SearchCriteria.Op.LTEQ);
-		expiringCompletedAsyncJobSearch.and("completeMsId", expiringCompletedAsyncJobSearch.entity().getCompleteMsid(), SearchCriteria.Op.NNULL);
-		expiringCompletedAsyncJobSearch.and("jobStatus", expiringCompletedAsyncJobSearch.entity().getStatus(), SearchCriteria.Op.NEQ);
-		expiringCompletedAsyncJobSearch.done();
-	}
-	
-	public AsyncJobVO findInstancePendingAsyncJob(String instanceType, long instanceId) {
-        SearchCriteria<AsyncJobVO> sc = pendingAsyncJobSearch.create();
-        sc.setParameters("instanceType", instanceType);
-        sc.setParameters("instanceId", instanceId);
-        sc.setParameters("status", AsyncJobResult.STATUS_IN_PROGRESS);
-        
-        List<AsyncJobVO> l = listIncludingRemovedBy(sc);
-        if(l != null && l.size() > 0) {
-        	if(l.size() > 1) {
-        		s_logger.warn("Instance " + instanceType + "-" + instanceId + " has multiple pending async-job");
-        	}
-        	
-        	return l.get(0);
-        }
-        return null;
-	}
-	
-	public List<AsyncJobVO> findInstancePendingAsyncJobs(ApiCommandJobType instanceType, Long accountId) {
-		SearchCriteria<AsyncJobVO> sc = pendingAsyncJobsSearch.create();
-        sc.setParameters("instanceType", instanceType);
-        
-        if (accountId != null) {
-            sc.setParameters("accountId", accountId);
-        }
-        sc.setParameters("status", AsyncJobResult.STATUS_IN_PROGRESS);
-        
-        return listBy(sc);
-	}
-	
-	@Override
-	public List<AsyncJobVO> getExpiredUnfinishedJobs(Date cutTime, int limit) {
-		SearchCriteria<AsyncJobVO> sc = expiringUnfinishedAsyncJobSearch.create();
-		sc.setParameters("created", cutTime);
-		sc.setParameters("jobStatus", 0);
-		Filter filter = new Filter(AsyncJobVO.class, "created", true, 0L, (long)limit);
-		return listIncludingRemovedBy(sc, filter);
-	}
-	
-	@Override
-	public List<AsyncJobVO> getExpiredCompletedJobs(Date cutTime, int limit) {
-		SearchCriteria<AsyncJobVO> sc = expiringCompletedAsyncJobSearch.create();
-		sc.setParameters("created", cutTime);
-		sc.setParameters("jobStatus", 0);
-		Filter filter = new Filter(AsyncJobVO.class, "created", true, 0L, (long)limit);
-		return listIncludingRemovedBy(sc, filter);
-	}
-
-	@DB
-	public void resetJobProcess(long msid, int jobResultCode, String jobResultMessage) {
-		String sql = "UPDATE async_job SET job_status=" + AsyncJobResult.STATUS_FAILED + ", job_result_code=" + jobResultCode 
-			+ ", job_result='" + jobResultMessage + "' where job_status=0 AND (job_complete_msid=? OR (job_complete_msid IS NULL AND job_init_msid=?))";
-		
-        Transaction txn = Transaction.currentTxn();
-        PreparedStatement pstmt = null;
-        try {
-            pstmt = txn.prepareAutoCloseStatement(sql);
-            pstmt.setLong(1, msid);
-            pstmt.setLong(2, msid);
-            pstmt.execute();
-        } catch (SQLException e) {
-        	s_logger.warn("Unable to reset job status for management server " + msid, e);
-        } catch (Throwable e) {
-        	s_logger.warn("Unable to reset job status for management server " + msid, e);
-        }
-	}
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8930cfa9/server/src/com/cloud/async/dao/SyncQueueDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/async/dao/SyncQueueDao.java b/server/src/com/cloud/async/dao/SyncQueueDao.java
deleted file mode 100644
index edd695c..0000000
--- a/server/src/com/cloud/async/dao/SyncQueueDao.java
+++ /dev/null
@@ -1,25 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.async.dao;
-
-import com.cloud.async.SyncQueueVO;
-import com.cloud.utils.db.GenericDao;
-
-public interface SyncQueueDao extends GenericDao<SyncQueueVO, Long>{
-	public void ensureQueue(String syncObjType, long syncObjId);
-	public SyncQueueVO find(String syncObjType, long syncObjId);
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8930cfa9/server/src/com/cloud/async/dao/SyncQueueDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/async/dao/SyncQueueDaoImpl.java b/server/src/com/cloud/async/dao/SyncQueueDaoImpl.java
deleted file mode 100644
index 7b4c182..0000000
--- a/server/src/com/cloud/async/dao/SyncQueueDaoImpl.java
+++ /dev/null
@@ -1,81 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloud.async.dao;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.util.Date;
-import java.util.TimeZone;
-
-import javax.ejb.Local;
-
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import com.cloud.async.SyncQueueVO;
-import com.cloud.utils.DateUtil;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.Transaction;
-
-@Component
-@Local(value = { SyncQueueDao.class })
-public class SyncQueueDaoImpl extends GenericDaoBase<SyncQueueVO, Long> implements SyncQueueDao {
-    private static final Logger s_logger = Logger.getLogger(SyncQueueDaoImpl.class.getName());
-    
-    SearchBuilder<SyncQueueVO> TypeIdSearch = createSearchBuilder();
-	
-	@Override
-	public void ensureQueue(String syncObjType, long syncObjId) {
-		Date dt = DateUtil.currentGMTTime();
-        String sql = "INSERT IGNORE INTO sync_queue(sync_objtype, sync_objid, created, last_updated)" +
-                " values(?, ?, ?, ?)";
-		
-        Transaction txn = Transaction.currentTxn();
-        PreparedStatement pstmt = null;
-        try {
-            pstmt = txn.prepareAutoCloseStatement(sql);
-            pstmt.setString(1, syncObjType);
-            pstmt.setLong(2, syncObjId);
-            pstmt.setString(3, DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), dt));
-            pstmt.setString(4, DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), dt));
-            pstmt.execute();
-        } catch (SQLException e) {
-        	s_logger.warn("Unable to create sync queue " + syncObjType + "-" + syncObjId + ":" + e.getMessage(), e);
-        } catch (Throwable e) {
-        	s_logger.warn("Unable to create sync queue " + syncObjType + "-" + syncObjId + ":" + e.getMessage(), e);
-        }
-	}
-	
-	@Override
-	public SyncQueueVO find(String syncObjType, long syncObjId) {
-    	SearchCriteria<SyncQueueVO> sc = TypeIdSearch.create();
-    	sc.setParameters("syncObjType", syncObjType);
-    	sc.setParameters("syncObjId", syncObjId);
-        return findOneBy(sc);
-	}
-
-	protected SyncQueueDaoImpl() {
-	    super();
-	    TypeIdSearch = createSearchBuilder();
-        TypeIdSearch.and("syncObjType", TypeIdSearch.entity().getSyncObjType(), SearchCriteria.Op.EQ);
-        TypeIdSearch.and("syncObjId", TypeIdSearch.entity().getSyncObjId(), SearchCriteria.Op.EQ);
-        TypeIdSearch.done();
-	}
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8930cfa9/server/src/com/cloud/async/dao/SyncQueueItemDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/async/dao/SyncQueueItemDao.java b/server/src/com/cloud/async/dao/SyncQueueItemDao.java
deleted file mode 100644
index b5a4eab..0000000
--- a/server/src/com/cloud/async/dao/SyncQueueItemDao.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.async.dao;
-
-import java.util.List;
-
-import com.cloud.async.SyncQueueItemVO;
-import com.cloud.utils.db.GenericDao;
-
-public interface SyncQueueItemDao extends GenericDao<SyncQueueItemVO, Long> {
-	public SyncQueueItemVO getNextQueueItem(long queueId);
-	public List<SyncQueueItemVO> getNextQueueItems(int maxItems);
-	public List<SyncQueueItemVO> getActiveQueueItems(Long msid, boolean exclusive);
-	public List<SyncQueueItemVO> getBlockedQueueItems(long thresholdMs, boolean exclusive);
-	public Long getQueueItemIdByContentIdAndType(long contentId, String contentType);
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8930cfa9/server/src/com/cloud/async/dao/SyncQueueItemDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/async/dao/SyncQueueItemDaoImpl.java b/server/src/com/cloud/async/dao/SyncQueueItemDaoImpl.java
deleted file mode 100644
index d2d2929..0000000
--- a/server/src/com/cloud/async/dao/SyncQueueItemDaoImpl.java
+++ /dev/null
@@ -1,163 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloud.async.dao;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.TimeZone;
-
-import javax.ejb.Local;
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import com.cloud.async.SyncQueueItemVO;
-import com.cloud.utils.DateUtil;
-import com.cloud.utils.db.DB;
-import com.cloud.utils.db.Filter;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.GenericSearchBuilder;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.SearchCriteria.Op;
-import com.cloud.utils.db.Transaction;
-
-@Component
-@Local(value = { SyncQueueItemDao.class })
-@DB
-public class SyncQueueItemDaoImpl extends GenericDaoBase<SyncQueueItemVO, Long> implements SyncQueueItemDao {
-    private static final Logger s_logger = Logger.getLogger(SyncQueueItemDaoImpl.class);
-    final GenericSearchBuilder<SyncQueueItemVO, Long> queueIdSearch;
-    
-    protected SyncQueueItemDaoImpl() {
-        super();
-        queueIdSearch = createSearchBuilder(Long.class);
-        queueIdSearch.and("contentId", queueIdSearch.entity().getContentId(), Op.EQ);
-        queueIdSearch.and("contentType", queueIdSearch.entity().getContentType(), Op.EQ);
-        queueIdSearch.selectField(queueIdSearch.entity().getId());
-        queueIdSearch.done();
-    }
-    
-
-	@Override
-	public SyncQueueItemVO getNextQueueItem(long queueId) {
-		
-		SearchBuilder<SyncQueueItemVO> sb = createSearchBuilder();
-        sb.and("queueId", sb.entity().getQueueId(), SearchCriteria.Op.EQ);
-        sb.and("lastProcessNumber", sb.entity().getLastProcessNumber(),	SearchCriteria.Op.NULL);
-        sb.done();
-        
-    	SearchCriteria<SyncQueueItemVO> sc = sb.create();
-    	sc.setParameters("queueId", queueId);
-    	
-    	Filter filter = new Filter(SyncQueueItemVO.class, "created", true, 0L, 1L);
-        List<SyncQueueItemVO> l = listBy(sc, filter);
-        if(l != null && l.size() > 0)
-        	return l.get(0);
-    	
-		return null;
-	}
-
-	@Override
-	public List<SyncQueueItemVO> getNextQueueItems(int maxItems) {
-		List<SyncQueueItemVO> l = new ArrayList<SyncQueueItemVO>();
-		
-		String sql = "SELECT i.id, i.queue_id, i.content_type, i.content_id, i.created " +
-					 " FROM sync_queue AS q JOIN sync_queue_item AS i ON q.id = i.queue_id " +
-                     " WHERE q.queue_size < q.queue_size_limit AND i.queue_proc_number IS NULL " +
-					 " GROUP BY q.id " +
-					 " ORDER BY i.id " +
-					 " LIMIT 0, ?";
-
-        Transaction txn = Transaction.currentTxn();
-        PreparedStatement pstmt = null;
-        try {
-            pstmt = txn.prepareAutoCloseStatement(sql);
-            pstmt.setInt(1, maxItems);
-            ResultSet rs = pstmt.executeQuery();
-            while(rs.next()) {
-            	SyncQueueItemVO item = new SyncQueueItemVO();
-            	item.setId(rs.getLong(1));
-            	item.setQueueId(rs.getLong(2));
-            	item.setContentType(rs.getString(3));
-            	item.setContentId(rs.getLong(4));
-            	item.setCreated(DateUtil.parseDateString(TimeZone.getTimeZone("GMT"), rs.getString(5)));
-            	l.add(item);
-            }
-        } catch (SQLException e) {
-        	s_logger.error("Unexpected sql excetpion, ", e);
-        } catch (Throwable e) {
-        	s_logger.error("Unexpected excetpion, ", e);
-        }
-		return l;
-	}
-	
-	@Override
-	public List<SyncQueueItemVO> getActiveQueueItems(Long msid, boolean exclusive) {
-		SearchBuilder<SyncQueueItemVO> sb = createSearchBuilder();
-        sb.and("lastProcessMsid", sb.entity().getLastProcessMsid(),
-    		SearchCriteria.Op.EQ);
-        sb.done();
-        
-    	SearchCriteria<SyncQueueItemVO> sc = sb.create();
-    	sc.setParameters("lastProcessMsid", msid);
-    	
-    	Filter filter = new Filter(SyncQueueItemVO.class, "created", true, null, null);
-    	
-    	if(exclusive)
-    		return lockRows(sc, filter, true);
-        return listBy(sc, filter);
-	}
-	
-
-    @Override
-    public List<SyncQueueItemVO> getBlockedQueueItems(long thresholdMs, boolean exclusive) {
-        Date cutTime = DateUtil.currentGMTTime();
-        
-        SearchBuilder<SyncQueueItemVO> sbItem = createSearchBuilder();
-        sbItem.and("lastProcessMsid", sbItem.entity().getLastProcessMsid(), SearchCriteria.Op.NNULL);
-        sbItem.and("lastProcessNumber", sbItem.entity().getLastProcessNumber(), SearchCriteria.Op.NNULL);
-        sbItem.and("lastProcessNumber", sbItem.entity().getLastProcessTime(), SearchCriteria.Op.NNULL);
-        sbItem.and("lastProcessTime2", sbItem.entity().getLastProcessTime(), SearchCriteria.Op.LT);
-        
-        sbItem.done();
-        
-        SearchCriteria<SyncQueueItemVO> sc = sbItem.create();
-        sc.setParameters("lastProcessTime2", new Date(cutTime.getTime() - thresholdMs));
-        
-        if(exclusive)
-            return lockRows(sc, null, true);
-        return listBy(sc, null);
-    }
-
-
-    @Override
-    public Long getQueueItemIdByContentIdAndType(long contentId, String contentType) {
-        SearchCriteria<Long> sc = queueIdSearch.create();
-        sc.setParameters("contentId", contentId);
-        sc.setParameters("contentType", contentType);
-        List<Long> id = customSearch(sc, null);
-
-        return id.size() == 0 ? null : id.get(0);
-    }
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8930cfa9/server/src/com/cloud/async/executor/ExtractJobResultObject.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/async/executor/ExtractJobResultObject.java b/server/src/com/cloud/async/executor/ExtractJobResultObject.java
deleted file mode 100644
index 772f074..0000000
--- a/server/src/com/cloud/async/executor/ExtractJobResultObject.java
+++ /dev/null
@@ -1,183 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.async.executor;
-
-import java.util.Date;
-
-import com.cloud.async.AsyncInstanceCreateStatus;
-import com.cloud.serializer.Param;
-import com.cloud.storage.Volume.Type;
-import com.cloud.storage.upload.UploadState;
-
-public class ExtractJobResultObject {
-	
-	public ExtractJobResultObject(Long accountId, String typeName, String currState, int uploadPercent, Long uploadId){
-		this.accountId = accountId;
-		this.name = typeName;
-		this.state = currState;
-		this.id = uploadId;
-		this.uploadPercent = uploadPercent;
-	}
-
-    public ExtractJobResultObject(Long accountId, String typeName, String currState, Long uploadId, String url){
-        this.accountId = accountId;
-        this.name = typeName;
-        this.state = currState;
-        this.id = uploadId;
-        this.url = url;
-    }	
-    
-	public ExtractJobResultObject(){		
-	}
-	
-	@Param(name="id")
-	private long id;
-    
-	@Param(name="name")
-	private String name;
-	
-    @Param(name="uploadPercentage")
-	private int uploadPercent;
-    
-    @Param(name="uploadStatus")
-	private String uploadStatus;
-    
-    @Param(name="accountid")
-    long accountId;    
- 
-    @Param(name="result_string")
-    String result_string;    
-
-    @Param(name="created")
-    private Date createdDate;
-
-    @Param(name="state")
-    private String state;
-    
-    @Param(name="storagetype")
-	String storageType;
-    
-    @Param(name="storage")
-    private String storage;
-    
-    @Param(name="zoneid")
-    private Long zoneId;
-
-    @Param(name="zonename")
-    private String zoneName;
-
-    @Param(name="url")
-    private String url;
-    
-    public String getUrl() {
-        return url;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    public int getUploadPercent() {
-        return uploadPercent;
-    }
-
-    public void setUploadPercent(int i) {
-        this.uploadPercent = i;
-    }
-
-    public String getUploadStatus() {
-        return uploadStatus;
-    }
-
-    public void setUploadStatus(String uploadStatus) {
-        this.uploadStatus = uploadStatus;
-    }
-
-    public String getResult_string() {
-        return result_string;
-    }
-
-    public void setResult_string(String resultString) {
-        result_string = resultString;
-    }
-
-    
-    public Long getZoneId() {
-		return zoneId;
-	}
-
-	public void setZoneId(Long zoneId) {
-		this.zoneId = zoneId;
-	}
-
-	public String getZoneName() {
-		return zoneName;
-	}
-
-	public void setZoneName(String zoneName) {
-		this.zoneName = zoneName;
-	}
-
-	public String getStorage() {
-		return storage;
-	}
-
-	public void setStorage(String storage) {
-		this.storage = storage;
-	}
-
-	public void setId(long id) {
-		this.id = id;
-	}
-	
-	public long getId() {
-		return id;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-	
-	public String getName() {
-		return name;
-	}
-          
-    public void setCreatedDate(Date createdDate) {
-        this.createdDate = createdDate;
-    }
-
-    public Date getCreatedDate() {
-        return createdDate;
-    }
-
-    public void setState(String status) {
-        this.state = status;
-    }
-
-    public String getState() {
-        return state;
-    }
-   
-    public void setStorageType (String storageType) {
-    	this.storageType = storageType;
-    }
-    
-    public String getStorageType() {
-    	return storageType;
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8930cfa9/server/src/com/cloud/storage/VolumeManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeManagerImpl.java b/server/src/com/cloud/storage/VolumeManagerImpl.java
index 36bc103..1490ac5 100644
--- a/server/src/com/cloud/storage/VolumeManagerImpl.java
+++ b/server/src/com/cloud/storage/VolumeManagerImpl.java
@@ -68,6 +68,10 @@ import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeApiResult;
 import org.apache.cloudstack.framework.async.AsyncCallFuture;
+import org.apache.cloudstack.framework.jobs.AsyncJob;
+import org.apache.cloudstack.framework.jobs.AsyncJobExecutionContext;
+import org.apache.cloudstack.framework.jobs.AsyncJobManager;
+import org.apache.cloudstack.framework.jobs.impl.AsyncJobVO;
 import org.apache.cloudstack.storage.command.AttachAnswer;
 import org.apache.cloudstack.storage.command.AttachCommand;
 import org.apache.cloudstack.storage.command.CommandResult;
@@ -88,10 +92,6 @@ import com.cloud.agent.api.to.DiskTO;
 import com.cloud.agent.api.to.VirtualMachineTO;
 import com.cloud.alert.AlertManager;
 import com.cloud.api.ApiDBUtils;
-import com.cloud.async.AsyncJobExecutor;
-import com.cloud.async.AsyncJobManager;
-import com.cloud.async.AsyncJobVO;
-import com.cloud.async.BaseAsyncJobExecutor;
 import com.cloud.capacity.CapacityManager;
 import com.cloud.capacity.dao.CapacityDao;
 import com.cloud.configuration.Config;
@@ -1869,21 +1869,20 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
         }
 
 
-        AsyncJobExecutor asyncExecutor = BaseAsyncJobExecutor
-                .getCurrentExecutor();
-        if (asyncExecutor != null) {
-            AsyncJobVO job = asyncExecutor.getJob();
+        AsyncJobExecutionContext asyncExecutionContext = AsyncJobExecutionContext.getCurrentExecutionContext();
+               
+        if (asyncExecutionContext != null) {
+            AsyncJob job = asyncExecutionContext.getJob();
 
             if (s_logger.isInfoEnabled()) {
                 s_logger.info("Trying to attaching volume " + volumeId
                         + " to vm instance:" + vm.getId()
-                        + ", update async job-" + job.getId() + " = [ " + job.getUuid()
-                        + " ] progress status");
+                        + ", update async job-" + job.getId()
+                        + " progress status");
             }
 
             _asyncMgr.updateAsyncJobAttachment(job.getId(), "volume", volumeId);
-            _asyncMgr.updateAsyncJobStatus(job.getId(),
-                    BaseCmd.PROGRESS_INSTANCE_CREATED, volumeId);
+            _asyncMgr.updateAsyncJobStatus(job.getId(), BaseCmd.PROGRESS_INSTANCE_CREATED, Long.toString(volumeId));
         }
 
         VolumeVO newVol = _volumeDao.findById(volumeOnPrimaryStorage.getId());
@@ -1969,28 +1968,19 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
                     "Please specify a VM that is either running or stopped.");
         }
 
-        // Check if the VM has VM snapshots
-        List<VMSnapshotVO> vmSnapshots = _vmSnapshotDao.findByVm(vmId);
-        if(vmSnapshots.size() > 0){
-            throw new InvalidParameterValueException(
-                    "Unable to detach volume, the specified volume is attached to a VM that has VM snapshots.");
-        }
-
-        AsyncJobExecutor asyncExecutor = BaseAsyncJobExecutor
-                .getCurrentExecutor();
-        if (asyncExecutor != null) {
-            AsyncJobVO job = asyncExecutor.getJob();
+        AsyncJobExecutionContext asyncExecutionContext = AsyncJobExecutionContext.getCurrentExecutionContext();
+        if (asyncExecutionContext != null) {
+            AsyncJob job = asyncExecutionContext.getJob();
 
             if (s_logger.isInfoEnabled()) {
                 s_logger.info("Trying to attaching volume " + volumeId
                         + "to vm instance:" + vm.getId()
-                        + ", update async job-" + job.getId() + " = [ " + job.getUuid()
-                        + " ] progress status");
+                        + ", update async job-" + job.getId()
+                        + " progress status");
             }
 
             _asyncMgr.updateAsyncJobAttachment(job.getId(), "volume", volumeId);
-            _asyncMgr.updateAsyncJobStatus(job.getId(),
-                    BaseCmd.PROGRESS_INSTANCE_CREATED, volumeId);
+            _asyncMgr.updateAsyncJobStatus(job.getId(), BaseCmd.PROGRESS_INSTANCE_CREATED, volumeId.toString());
         }
 
         String errorMsg = "Failed to detach volume: " + volume.getName()

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8930cfa9/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
index 6a5d0ca..35166cd 100644
--- a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
+++ b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
@@ -22,25 +22,26 @@ import java.util.List;
 import java.util.Map;
 import java.util.Timer;
 import java.util.TimerTask;
+import java.util.UUID;
 
 import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import com.cloud.event.ActionEventUtils;
-import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotCmd;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
 import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotCmd;
+import org.apache.cloudstack.context.ServerContexts;
+import org.apache.cloudstack.framework.jobs.AsyncJobManager;
+import org.apache.cloudstack.framework.jobs.dao.AsyncJobDao;
+import org.apache.cloudstack.framework.jobs.impl.AsyncJobVO;
+
 import com.cloud.api.ApiDispatcher;
 import com.cloud.api.ApiGsonHelper;
-import com.cloud.user.Account;
-import com.cloud.async.AsyncJobManager;
-import com.cloud.async.AsyncJobResult;
-import com.cloud.async.AsyncJobVO;
-import com.cloud.async.dao.AsyncJobDao;
 import com.cloud.configuration.dao.ConfigurationDao;
+import com.cloud.event.ActionEventUtils;
 import com.cloud.event.EventTypes;
 import com.cloud.storage.Snapshot;
 import com.cloud.storage.SnapshotPolicyVO;
@@ -55,7 +56,6 @@ import com.cloud.user.User;
 import com.cloud.utils.DateUtil;
 import com.cloud.utils.DateUtil.IntervalType;
 import com.cloud.utils.NumbersUtil;
-
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.concurrency.TestClock;
@@ -69,7 +69,8 @@ import com.cloud.utils.db.SearchCriteria;
 public class SnapshotSchedulerImpl extends ManagerBase implements SnapshotScheduler {
     private static final Logger s_logger = Logger.getLogger(SnapshotSchedulerImpl.class);
 
-    @Inject protected AsyncJobDao             _asyncJobDao;
+    @Inject
+    protected AsyncJobDao _asyncJobDao;
     @Inject protected SnapshotDao             _snapshotDao;
     @Inject protected SnapshotScheduleDao     _snapshotScheduleDao;
     @Inject protected SnapshotPolicyDao       _snapshotPolicyDao;
@@ -142,14 +143,14 @@ public class SnapshotSchedulerImpl extends ManagerBase implements SnapshotSchedu
             Long asyncJobId = snapshotSchedule.getAsyncJobId();
             AsyncJobVO asyncJob = _asyncJobDao.findById(asyncJobId);
             switch (asyncJob.getStatus()) {
-            case AsyncJobResult.STATUS_SUCCEEDED:
+            case SUCCEEDED:
                 // The snapshot has been successfully backed up.
                 // The snapshot state has also been cleaned up.
                 // We can schedule the next job for this snapshot.
                 // Remove the existing entry in the snapshot_schedule table.
                 scheduleNextSnapshotJob(snapshotSchedule);
                 break;
-            case AsyncJobResult.STATUS_FAILED:
+            case FAILED:
                 // Check the snapshot status.
                 Long snapshotId = snapshotSchedule.getSnapshotId();
                 if (snapshotId == null) {
@@ -187,7 +188,7 @@ public class SnapshotSchedulerImpl extends ManagerBase implements SnapshotSchedu
                 }
 
                 break;
-            case AsyncJobResult.STATUS_IN_PROGRESS:
+            case IN_PROGRESS:
                 // There is no way of knowing from here whether
                 // 1) Another management server is processing this snapshot job
                 // 2) The management server has crashed and this snapshot is lying
@@ -248,9 +249,9 @@ public class SnapshotSchedulerImpl extends ManagerBase implements SnapshotSchedu
                 params.put("id", ""+cmd.getEntityId());
                 params.put("ctxStartEventId", "1");
 
-                AsyncJobVO job = new AsyncJobVO(User.UID_SYSTEM, volume.getAccountId(), CreateSnapshotCmd.class.getName(),
+                AsyncJobVO job = new AsyncJobVO(UUID.randomUUID().toString(), User.UID_SYSTEM, volume.getAccountId(), CreateSnapshotCmd.class.getName(),
                         ApiGsonHelper.getBuilder().create().toJson(params), cmd.getEntityId(),
-                        cmd.getInstanceType());
+                        cmd.getInstanceType() != null ? cmd.getInstanceType().toString() : null);
 
                 long jobId = _asyncMgr.submitAsyncJob(job);
 
@@ -373,11 +374,14 @@ public class SnapshotSchedulerImpl extends ManagerBase implements SnapshotSchedu
             TimerTask timerTask = new TimerTask() {
                 @Override
                 public void run() {
+                    ServerContexts.registerSystemContext();
                     try {
                         Date currentTimestamp = new Date();
                         poll(currentTimestamp);
                     } catch (Throwable t) {
-                        s_logger.warn("Catch throwable in snapshot scheduler " + t.toString(), t);
+                        s_logger.warn("Catch throwable in snapshot scheduler ", t);
+                    } finally {
+                        ServerContexts.unregisterSystemContext();
                     }
                 }
             };

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8930cfa9/server/src/com/cloud/storage/upload/UploadListener.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/upload/UploadListener.java b/server/src/com/cloud/storage/upload/UploadListener.java
index d3b7af9..09db421 100755
--- a/server/src/com/cloud/storage/upload/UploadListener.java
+++ b/server/src/com/cloud/storage/upload/UploadListener.java
@@ -25,6 +25,9 @@ import java.util.TimerTask;
 
 import javax.inject.Inject;
 
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+
 import org.apache.cloudstack.api.command.user.iso.ExtractIsoCmd;
 import org.apache.cloudstack.api.command.user.template.ExtractTemplateCmd;
 import org.apache.cloudstack.api.command.user.volume.ExtractVolumeCmd;
@@ -33,8 +36,8 @@ import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
 import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.cloudstack.framework.jobs.AsyncJobManager;
+import org.apache.cloudstack.jobs.JobInfo;
 
 import com.cloud.agent.Listener;
 import com.cloud.agent.api.AgentControlAnswer;
@@ -48,8 +51,7 @@ import com.cloud.agent.api.storage.UploadCommand;
 import com.cloud.agent.api.storage.UploadProgressCommand;
 import com.cloud.agent.api.storage.UploadProgressCommand.RequestType;
 import com.cloud.api.ApiDBUtils;
-import com.cloud.async.AsyncJobManager;
-import com.cloud.async.AsyncJobResult;
+import com.cloud.api.ApiSerializerHelper;
 import com.cloud.host.Host;
 import com.cloud.storage.Storage;
 import com.cloud.storage.Upload.Status;
@@ -66,7 +68,7 @@ public class UploadListener implements Listener {
         private final RequestType reqType;
 
         public StatusTask(UploadListener ul, RequestType req) {
-            this.reqType = req;
+            reqType = req;
             this.ul = ul;
         }
 
@@ -167,19 +169,19 @@ public class UploadListener implements Listener {
     public UploadListener(DataStore host, Timer _timer, UploadDao uploadDao,
             UploadVO uploadObj, UploadMonitorImpl uploadMonitor, UploadCommand cmd,
             Long accountId, String typeName, Type type, long eventId, long asyncJobId, AsyncJobManager asyncMgr) {
-        this.sserver = host;
+        sserver = host;
         this.uploadDao = uploadDao;
         this.uploadMonitor = uploadMonitor;
         this.cmd = cmd;
-        this.uploadId = uploadObj.getId();
+        uploadId = uploadObj.getId();
         this.accountId = accountId;
         this.typeName = typeName;
         this.type = type;
         initStateMachine();
-        this.currState = getState(Status.NOT_UPLOADED.toString());
-        this.timer = _timer;
-        this.timeoutTask = new TimeoutTask(this);
-        this.timer.schedule(timeoutTask, 3 * STATUS_POLL_INTERVAL);
+        currState = getState(Status.NOT_UPLOADED.toString());
+        timer = _timer;
+        timeoutTask = new TimeoutTask(this);
+        timer.schedule(timeoutTask, 3 * STATUS_POLL_INTERVAL);
         this.eventId = eventId;
         this.asyncJobId = asyncJobId;
         this.asyncMgr = asyncMgr;
@@ -190,7 +192,7 @@ public class UploadListener implements Listener {
         else {
             extractId = ApiDBUtils.findTemplateById(uploadObj.getTypeId()).getUuid();
         }
-        this.resultObj = new ExtractResponse(extractId, typeName, ApiDBUtils.findAccountById(accountId).getUuid(), Status.NOT_UPLOADED.toString(),
+        resultObj = new ExtractResponse(extractId, typeName, ApiDBUtils.findAccountById(accountId).getUuid(), Status.NOT_UPLOADED.toString(),
                 ApiDBUtils.findUploadById(uploadId).getUuid());
         resultObj.setResponseName(responseNameMap.get(type.toString()));
         updateDatabase(Status.NOT_UPLOADED, cmd.getUrl(), "");
@@ -215,11 +217,11 @@ public class UploadListener implements Listener {
     }
 
     public void setCommand(UploadCommand _cmd) {
-        this.cmd = _cmd;
+        cmd = _cmd;
     }
 
     public void setJobId(String _jobId) {
-        this.jobId = _jobId;
+        jobId = _jobId;
     }
 
     public String getJobId() {
@@ -370,7 +372,7 @@ public class UploadListener implements Listener {
         resultObj.setResultString(uploadErrorString);
         resultObj.setState(state.toString());
         asyncMgr.updateAsyncJobAttachment(asyncJobId, type.toString(), 1L);
-        asyncMgr.updateAsyncJobStatus(asyncJobId, AsyncJobResult.STATUS_IN_PROGRESS, resultObj);
+        asyncMgr.updateAsyncJobStatus(asyncJobId, JobInfo.Status.IN_PROGRESS.ordinal(), ApiSerializerHelper.toSerializedString(resultObj));
 
         UploadVO vo = uploadDao.createForUpdate();
         vo.setUploadState(state);
@@ -383,7 +385,7 @@ public class UploadListener implements Listener {
         resultObj.setResultString(uploadErrorString);
         resultObj.setState(state.toString());
         asyncMgr.updateAsyncJobAttachment(asyncJobId, type.toString(), 1L);
-        asyncMgr.updateAsyncJobStatus(asyncJobId, AsyncJobResult.STATUS_IN_PROGRESS, resultObj);
+        asyncMgr.updateAsyncJobStatus(asyncJobId, JobInfo.Status.IN_PROGRESS.ordinal(), ApiSerializerHelper.toSerializedString(resultObj));
 
         UploadVO vo = uploadDao.createForUpdate();
         vo.setUploadState(state);
@@ -411,12 +413,12 @@ public class UploadListener implements Listener {
 
         if (answer.getUploadStatus() == Status.UPLOAD_IN_PROGRESS) {
             asyncMgr.updateAsyncJobAttachment(asyncJobId, type.toString(), 1L);
-            asyncMgr.updateAsyncJobStatus(asyncJobId, AsyncJobResult.STATUS_IN_PROGRESS, resultObj);
+            asyncMgr.updateAsyncJobStatus(asyncJobId, JobInfo.Status.IN_PROGRESS.ordinal(), ApiSerializerHelper.toSerializedString(resultObj));
         } else if (answer.getUploadStatus() == Status.UPLOADED) {
             resultObj.setResultString("Success");
-            asyncMgr.completeAsyncJob(asyncJobId, AsyncJobResult.STATUS_SUCCEEDED, 1, resultObj);
+            asyncMgr.completeAsyncJob(asyncJobId, JobInfo.Status.SUCCEEDED, 1, ApiSerializerHelper.toSerializedString(resultObj));
         } else {
-            asyncMgr.completeAsyncJob(asyncJobId, AsyncJobResult.STATUS_FAILED, 2, resultObj);
+            asyncMgr.completeAsyncJob(asyncJobId, JobInfo.Status.FAILED, 2, ApiSerializerHelper.toSerializedString(resultObj));
         }
         UploadVO updateBuilder = uploadDao.createForUpdate();
         updateBuilder.setUploadPercent(answer.getUploadPct());
@@ -460,7 +462,7 @@ public class UploadListener implements Listener {
     }
 
     public void setCurrState(Status uploadState) {
-        this.currState = getState(currState.toString());
+        currState = getState(currState.toString());
     }
 
     public static class Callback implements AsyncCompletionCallback<Answer> {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8930cfa9/server/src/com/cloud/storage/upload/UploadMonitor.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/upload/UploadMonitor.java b/server/src/com/cloud/storage/upload/UploadMonitor.java
index b4ba531..301c0e6 100755
--- a/server/src/com/cloud/storage/upload/UploadMonitor.java
+++ b/server/src/com/cloud/storage/upload/UploadMonitor.java
@@ -18,16 +18,14 @@ package com.cloud.storage.upload;
 
 
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.framework.jobs.AsyncJobManager;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
 
-import com.cloud.async.AsyncJobManager;
-import com.cloud.host.HostVO;
 import com.cloud.storage.Storage.ImageFormat;
 import com.cloud.storage.Upload.Mode;
 import com.cloud.storage.Upload.Status;
 import com.cloud.storage.Upload.Type;
 import com.cloud.storage.UploadVO;
-import com.cloud.storage.VMTemplateHostVO;
 import com.cloud.storage.VMTemplateVO;
 import com.cloud.storage.VolumeVO;
 import com.cloud.utils.component.Manager;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8930cfa9/server/src/com/cloud/storage/upload/UploadMonitorImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/upload/UploadMonitorImpl.java b/server/src/com/cloud/storage/upload/UploadMonitorImpl.java
index b6dcc79..8c05279 100755
--- a/server/src/com/cloud/storage/upload/UploadMonitorImpl.java
+++ b/server/src/com/cloud/storage/upload/UploadMonitorImpl.java
@@ -32,15 +32,17 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
+import org.apache.cloudstack.framework.jobs.AsyncJobManager;
 import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
 import org.apache.cloudstack.storage.image.datastore.ImageStoreEntity;
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Answer;
@@ -49,7 +51,6 @@ import com.cloud.agent.api.storage.DeleteEntityDownloadURLCommand;
 import com.cloud.agent.api.storage.UploadCommand;
 import com.cloud.agent.api.storage.UploadProgressCommand.RequestType;
 import com.cloud.api.ApiDBUtils;
-import com.cloud.async.AsyncJobManager;
 import com.cloud.configuration.dao.ConfigurationDao;
 import com.cloud.host.Host;
 import com.cloud.host.HostVO;
@@ -180,7 +181,7 @@ public class UploadMonitorImpl extends ManagerBase implements UploadMonitor {
 
 		Type type = (template.getFormat() == ImageFormat.ISO) ? Type.ISO : Type.TEMPLATE ;
 
-		DataStore secStore = this.storeMgr.getImageStore(dataCenterId);
+		DataStore secStore = storeMgr.getImageStore(dataCenterId);
 
 		UploadVO uploadTemplateObj = new UploadVO(secStore.getId(), template.getId(), new Date(),
 													Upload.Status.NOT_UPLOADED, type, url, Mode.FTP_UPLOAD);
@@ -212,7 +213,7 @@ public class UploadMonitorImpl extends ManagerBase implements UploadMonitor {
 	    Type type = (template.getFormat() == ImageFormat.ISO) ? Type.ISO : Type.TEMPLATE ;
 
             // find an endpoint to send command
-            DataStore store = this.storeMgr.getDataStore(vmTemplateHost.getDataStoreId(), DataStoreRole.Image);
+            DataStore store = storeMgr.getDataStore(vmTemplateHost.getDataStoreId(), DataStoreRole.Image);
             EndPoint ep = _epSelector.select(store);
 
 	    //Check if it already exists.
@@ -299,7 +300,7 @@ public class UploadMonitorImpl extends ManagerBase implements UploadMonitor {
 
             // Create Symlink at ssvm
             String uuid = UUID.randomUUID().toString() + "." + format.toString().toLowerCase() ;
-            DataStore secStore = this.storeMgr.getDataStore(ApiDBUtils.findUploadById(uploadId).getDataStoreId(), DataStoreRole.Image);
+            DataStore secStore = storeMgr.getDataStore(ApiDBUtils.findUploadById(uploadId).getDataStoreId(), DataStoreRole.Image);
             EndPoint ep = _epSelector.select(secStore);
             if( ep == null ) {
             	errorString = "There is no secondary storage VM for secondary storage host " + secStore.getName();
@@ -357,7 +358,7 @@ public class UploadMonitorImpl extends ManagerBase implements UploadMonitor {
 	            	hostname = hostname + "." + _ssvmUrlDomain;
 	            }else{
 	            	hostname = hostname + ".realhostip.com";
-	            }	            
+	            }
 	        }
 	        return scheme + "://" + hostname + "/userdata/" + uuid;
 	    }
@@ -376,7 +377,7 @@ public class UploadMonitorImpl extends ManagerBase implements UploadMonitor {
         	s_logger.warn("Only realhostip.com ssl cert is supported, ignoring self-signed and other certs");
         }
 
-        _ssvmUrlDomain = configs.get("secstorage.ssl.cert.domain");      
+        _ssvmUrlDomain = configs.get("secstorage.ssl.cert.domain");
         
         _agentMgr.registerForHostEvents(new UploadListener(this), true, false, false);
         String cleanupInterval = configs.get("extract.url.cleanup.interval");
@@ -484,7 +485,7 @@ public class UploadMonitorImpl extends ManagerBase implements UploadMonitor {
         for (UploadVO extractJob : extractJobs){
             if( getTimeDiff(extractJob.getLastUpdated()) > EXTRACT_URL_LIFE_LIMIT_IN_SECONDS ){
                 String path = extractJob.getInstallPath();
-                DataStore secStore = this.storeMgr.getDataStore(extractJob.getDataStoreId(), DataStoreRole.Image);
+                DataStore secStore = storeMgr.getDataStore(extractJob.getDataStoreId(), DataStoreRole.Image);
 
 
                 // Would delete the symlink for the Type and if Type == VOLUME then also the volume

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8930cfa9/server/src/com/cloud/template/TemplateManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java
index 5a9f5d9..c951720 100755
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@ -30,6 +30,9 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 import org.apache.cloudstack.api.BaseListTemplateOrIsoPermissionsCmd;
 import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoCmd;
@@ -55,18 +58,18 @@ import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
 import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
-import org.apache.cloudstack.engine.subsystem.api.storage.StorageCacheManager;
-import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
-import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService;
 import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.StorageCacheManager;
+import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
-
+import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService.TemplateApiResult;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
 import org.apache.cloudstack.framework.async.AsyncCallFuture;
+import org.apache.cloudstack.framework.jobs.AsyncJobManager;
 import org.apache.cloudstack.storage.command.AttachCommand;
 import org.apache.cloudstack.storage.command.CommandResult;
 import org.apache.cloudstack.storage.command.DettachCommand;
@@ -77,9 +80,6 @@ import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
 import org.apache.cloudstack.storage.image.datastore.ImageStoreEntity;
 
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.Command;
@@ -91,7 +91,6 @@ import com.cloud.agent.api.to.NfsTO;
 import com.cloud.api.ApiDBUtils;
 import com.cloud.api.query.dao.UserVmJoinDao;
 import com.cloud.api.query.vo.UserVmJoinVO;
-import com.cloud.async.AsyncJobManager;
 import com.cloud.configuration.Config;
 import com.cloud.configuration.Resource.ResourceType;
 import com.cloud.configuration.dao.ConfigurationDao;
@@ -119,27 +118,27 @@ import com.cloud.projects.Project;
 import com.cloud.projects.ProjectManager;
 import com.cloud.resource.ResourceManager;
 import com.cloud.server.ConfigurationServer;
+import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.GuestOSVO;
 import com.cloud.storage.LaunchPermissionVO;
+import com.cloud.storage.ScopeType;
 import com.cloud.storage.Snapshot;
 import com.cloud.storage.SnapshotVO;
 import com.cloud.storage.Storage;
 import com.cloud.storage.Storage.ImageFormat;
 import com.cloud.storage.Storage.TemplateType;
-import com.cloud.storage.DataStoreRole;
-import com.cloud.storage.ScopeType;
 import com.cloud.storage.StorageManager;
 import com.cloud.storage.StoragePool;
 import com.cloud.storage.StoragePoolHostVO;
 import com.cloud.storage.StoragePoolStatus;
 import com.cloud.storage.TemplateProfile;
 import com.cloud.storage.Upload;
-import com.cloud.storage.VMTemplateZoneVO;
 import com.cloud.storage.VMTemplateHostVO;
 import com.cloud.storage.VMTemplateStoragePoolVO;
 import com.cloud.storage.VMTemplateStorageResourceAssoc;
 import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
 import com.cloud.storage.VMTemplateVO;
+import com.cloud.storage.VMTemplateZoneVO;
 import com.cloud.storage.Volume;
 import com.cloud.storage.VolumeManager;
 import com.cloud.storage.VolumeVO;
@@ -175,7 +174,8 @@ import com.cloud.utils.Pair;
 import com.cloud.utils.component.AdapterBase;
 import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.concurrency.NamedThreadFactory;
-import com.cloud.utils.db.*;
+import com.cloud.utils.db.DB;
+import com.cloud.utils.db.Transaction;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.vm.UserVmManager;
 import com.cloud.vm.UserVmVO;
@@ -361,9 +361,9 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
     public DataStore getImageStore(String storeUuid, Long zoneId) {
         DataStore imageStore = null;
         if (storeUuid != null) {
-            imageStore = this._dataStoreMgr.getDataStore(storeUuid, DataStoreRole.Image);
+            imageStore = _dataStoreMgr.getDataStore(storeUuid, DataStoreRole.Image);
         } else {
-            List<DataStore> stores = this._dataStoreMgr.getImageStoresByScope(new ZoneScope(zoneId));
+            List<DataStore> stores = _dataStoreMgr.getImageStoresByScope(new ZoneScope(zoneId));
             if (stores.size() > 1) {
                 throw new CloudRuntimeException("multiple image stores, don't know which one to use");
             }
@@ -464,13 +464,13 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
 
         _accountMgr.checkAccess(caller, AccessType.ModifyEntry, true, template);
 
-        List<DataStore> ssStores = this._dataStoreMgr.getImageStoresByScope(new ZoneScope(zoneId));
+        List<DataStore> ssStores = _dataStoreMgr.getImageStoresByScope(new ZoneScope(zoneId));
 
         TemplateDataStoreVO tmpltStoreRef = null;
         ImageStoreEntity tmpltStore = null;
         if (ssStores != null) {
             for (DataStore store : ssStores) {
-                tmpltStoreRef = this._tmplStoreDao.findByStoreTemplate(store.getId(), templateId);
+                tmpltStoreRef = _tmplStoreDao.findByStoreTemplate(store.getId(), templateId);
                 if (tmpltStoreRef != null) {
                     if (tmpltStoreRef.getDownloadState() == com.cloud.storage.VMTemplateStorageResourceAssoc.Status.DOWNLOADED) {
                         tmpltStore = (ImageStoreEntity) store;
@@ -494,7 +494,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
         for (final StoragePoolVO pool : pools) {
             if (pool.getDataCenterId() == zoneId) {
                 s_logger.info("Schedule to preload template " + template.getId() + " into primary storage " + pool.getId());
-                this._preloadExecutor.execute(new Runnable() {
+                _preloadExecutor.execute(new Runnable() {
                     @Override
                     public void run() {
                         try {
@@ -542,7 +542,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
             }
         }
 
-        templateStoreRef = this._tmplStoreDao.findByTemplateZoneDownloadStatus(templateId, pool.getDataCenterId(),
+        templateStoreRef = _tmplStoreDao.findByTemplateZoneDownloadStatus(templateId, pool.getDataCenterId(),
                 VMTemplateStorageResourceAssoc.Status.DOWNLOADED);
         if (templateStoreRef == null) {
             s_logger.error("Unable to find a secondary storage host who has completely downloaded the template.");
@@ -559,10 +559,10 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
             if (s_logger.isDebugEnabled()) {
                 s_logger.debug("Downloading template " + templateId + " to pool " + poolId);
             }
-            DataStore srcSecStore = this._dataStoreMgr.getDataStore(templateStoreRef.getDataStoreId(), DataStoreRole.Image);
-            TemplateInfo srcTemplate = this._tmplFactory.getTemplate(templateId, srcSecStore);
+            DataStore srcSecStore = _dataStoreMgr.getDataStore(templateStoreRef.getDataStoreId(), DataStoreRole.Image);
+            TemplateInfo srcTemplate = _tmplFactory.getTemplate(templateId, srcSecStore);
 
-            AsyncCallFuture<TemplateApiResult> future = this._tmpltSvr.prepareTemplateOnPrimary(srcTemplate, pool);
+            AsyncCallFuture<TemplateApiResult> future = _tmpltSvr.prepareTemplateOnPrimary(srcTemplate, pool);
             try {
                 TemplateApiResult result = future.get();
                 if (result.isFailed()) {
@@ -619,13 +619,13 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
         long tmpltId = template.getId();
         long dstZoneId = dstZone.getId();
         // find all eligible image stores for the destination zone
-        List<DataStore> dstSecStores = this._dataStoreMgr.getImageStoresByScope(new ZoneScope(dstZoneId));
+        List<DataStore> dstSecStores = _dataStoreMgr.getImageStoresByScope(new ZoneScope(dstZoneId));
         if (dstSecStores == null || dstSecStores.isEmpty()) {
             throw new StorageUnavailableException("Destination zone is not ready, no image store associated", DataCenter.class, dstZone.getId());
         }
         AccountVO account = _accountDao.findById(template.getAccountId());
         // find the size of the template to be copied
-        TemplateDataStoreVO srcTmpltStore = this._tmplStoreDao.findByStoreTemplate(srcSecStore.getId(), tmpltId);
+        TemplateDataStoreVO srcTmpltStore = _tmplStoreDao.findByStoreTemplate(srcSecStore.getId(), tmpltId);
 
         _resourceLimitMgr.checkResourceLimit(account, ResourceType.template);
         _resourceLimitMgr.checkResourceLimit(account, ResourceType.secondary_storage, new Long(srcTmpltStore.getSize()));
@@ -641,17 +641,17 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
             createEventType = EventTypes.EVENT_TEMPLATE_CREATE;
         }
 
-        TemplateInfo srcTemplate = this._tmplFactory.getTemplate(template.getId(), srcSecStore);
+        TemplateInfo srcTemplate = _tmplFactory.getTemplate(template.getId(), srcSecStore);
         // Copy will just find one eligible image store for the destination zone
         // and copy template there, not propagate to all image stores
         // for that zone
         for (DataStore dstSecStore : dstSecStores) {
-            TemplateDataStoreVO dstTmpltStore = this._tmplStoreDao.findByStoreTemplate(dstSecStore.getId(), tmpltId);
+            TemplateDataStoreVO dstTmpltStore = _tmplStoreDao.findByStoreTemplate(dstSecStore.getId(), tmpltId);
             if (dstTmpltStore != null && dstTmpltStore.getDownloadState() == Status.DOWNLOADED) {
                 return true; // already downloaded on this image store
             }
 
-            AsyncCallFuture<TemplateApiResult> future = this._tmpltSvr.copyTemplate(srcTemplate, dstSecStore);
+            AsyncCallFuture<TemplateApiResult> future = _tmpltSvr.copyTemplate(srcTemplate, dstSecStore);
             try {
                 TemplateApiResult result = future.get();
                 if (result.isFailed()) {
@@ -775,7 +775,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
 
     @Override
     public void evictTemplateFromStoragePool(VMTemplateStoragePoolVO templatePoolVO) {
-        StoragePool pool = (StoragePool) this._dataStoreMgr.getPrimaryDataStore(templatePoolVO.getPoolId());
+        StoragePool pool = (StoragePool) _dataStoreMgr.getPrimaryDataStore(templatePoolVO.getPoolId());
         VMTemplateVO template = _tmpltDao.findByIdIncludingRemoved(templatePoolVO.getTemplateId());
 
         if (s_logger.isDebugEnabled()) {
@@ -974,7 +974,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
     // for ISO, we need to consider whether to copy to cache storage or not if it is not on NFS, since our hypervisor resource always assumes that they are in NFS
     @Override
     public TemplateInfo prepareIso(long isoId, long dcId){
-        TemplateInfo tmplt = this._tmplFactory.getTemplate(isoId, DataStoreRole.Image, dcId);
+        TemplateInfo tmplt = _tmplFactory.getTemplate(isoId, DataStoreRole.Image, dcId);
         if (tmplt == null || tmplt.getFormat() != ImageFormat.ISO ) {
             s_logger.warn("ISO: " + isoId + " does not exist in vm_template table");
             return null;
@@ -995,7 +995,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
     }
 
     private boolean attachISOToVM(long vmId, long isoId, boolean attach) {
-        UserVmVO vm = this._userVmDao.findById(vmId);
+        UserVmVO vm = _userVmDao.findById(vmId);
 
         if (vm == null) {
             return false;
@@ -1088,7 +1088,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
             throw new InvalidParameterValueException("Unable to delete iso, as it's used by other vms");
         }
 
-        if (zoneId != null && (this._dataStoreMgr.getImageStore(zoneId) == null)) {
+        if (zoneId != null && (_dataStoreMgr.getImageStore(zoneId) == null)) {
             throw new InvalidParameterValueException("Failed to find a secondary storage store in the specified zone.");
         }
         TemplateAdapter adapter = getAdapter(template.getHypervisorType());
@@ -1339,7 +1339,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
         VolumeVO volume = null;
 
         try {
-            TemplateInfo tmplInfo = this._tmplFactory.getTemplate(templateId, DataStoreRole.Image);
+            TemplateInfo tmplInfo = _tmplFactory.getTemplate(templateId, DataStoreRole.Image);
             long zoneId = 0;
             if (snapshotId != null) {
                 snapshot = _snapshotDao.findById(snapshotId);
@@ -1348,17 +1348,17 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
                 volume = _volumeDao.findById(volumeId);
                 zoneId = volume.getDataCenterId();
             }
-            DataStore store = this._dataStoreMgr.getImageStore(zoneId);
+            DataStore store = _dataStoreMgr.getImageStore(zoneId);
             if (store == null) {
                 throw new CloudRuntimeException("cannot find an image store for zone " + zoneId);
             }
             AsyncCallFuture<TemplateApiResult> future = null;
             if (snapshotId != null) {
-                SnapshotInfo snapInfo = this._snapshotFactory.getSnapshot(snapshotId, DataStoreRole.Image);
-                future = this._tmpltSvr.createTemplateFromSnapshotAsync(snapInfo, tmplInfo, store);
+                SnapshotInfo snapInfo = _snapshotFactory.getSnapshot(snapshotId, DataStoreRole.Image);
+                future = _tmpltSvr.createTemplateFromSnapshotAsync(snapInfo, tmplInfo, store);
             } else if (volumeId != null) {
-                VolumeInfo volInfo = this._volFactory.getVolume(volumeId);
-                future = this._tmpltSvr.createTemplateFromVolumeAsync(volInfo, tmplInfo, store);
+                VolumeInfo volInfo = _volFactory.getVolume(volumeId);
+                future = _tmpltSvr.createTemplateFromVolumeAsync(volInfo, tmplInfo, store);
             } else {
                 throw new CloudRuntimeException("Creating private Template need to specify snapshotId or volumeId");
             }
@@ -1373,9 +1373,9 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
                 }
 
                 VMTemplateZoneVO templateZone = new VMTemplateZoneVO(zoneId, templateId, new Date());
-                this._tmpltZoneDao.persist(templateZone);
+                _tmpltZoneDao.persist(templateZone);
 
-                privateTemplate = this._tmpltDao.findById(templateId);
+                privateTemplate = _tmpltDao.findById(templateId);
                 if (snapshotId != null) {
                     //getting the prent volume
                     long parentVolumeId=_snapshotDao.findById(snapshotId).getVolumeId();
@@ -1392,7 +1392,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
                         _tmpltDao.update(privateTemplate.getId(), privateTemplate);
                     }
                 }
-                TemplateDataStoreVO srcTmpltStore = this._tmplStoreDao.findByStoreTemplate(store.getId(), templateId);
+                TemplateDataStoreVO srcTmpltStore = _tmplStoreDao.findByStoreTemplate(store.getId(), templateId);
                 UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_TEMPLATE_CREATE, privateTemplate.getAccountId(), zoneId,
                         privateTemplate.getId(), privateTemplate.getName(), null, privateTemplate.getSourceTemplateId(), srcTmpltStore.getPhysicalSize(), privateTemplate.getSize());
                 _usageEventDao.persist(usageEvent);
@@ -1419,11 +1419,11 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
                 // it up here to avoid
                 // some leftovers which will cause removing template from
                 // vm_template table fail.
-                this._tmplStoreDao.deletePrimaryRecordsForTemplate(templateId);
+                _tmplStoreDao.deletePrimaryRecordsForTemplate(templateId);
                 // Remove the template_zone_ref record
-                this._tmpltZoneDao.deletePrimaryRecordsForTemplate(templateId);
+                _tmpltZoneDao.deletePrimaryRecordsForTemplate(templateId);
                 // Remove the template record
-                this._tmpltDao.expunge(templateId);
+                _tmpltDao.expunge(templateId);
 
                 // decrement resource count
                 if (accountId != null) {
@@ -1503,7 +1503,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
         SnapshotVO snapshot = null;
         VMTemplateVO privateTemplate = null;
         if (volumeId != null) { // create template from volume
-            volume = this._volumeDao.findById(volumeId);
+            volume = _volumeDao.findById(volumeId);
             if (volume == null) {
                 throw new InvalidParameterValueException("Failed to create private template record, unable to find volume " + volumeId);
             }
@@ -1513,7 +1513,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
             // If private template is created from Volume, check that the volume
             // will not be active when the private template is
             // created
-            if (!this._volumeMgr.volumeInactive(volume)) {
+            if (!_volumeMgr.volumeInactive(volume)) {
                 String msg = "Unable to create private template for volume: " + volume.getName()
                         + "; volume is attached to a non-stopped VM, please stop the VM first";
                 if (s_logger.isInfoEnabled()) {
@@ -1522,15 +1522,15 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
                 throw new CloudRuntimeException(msg);
             }
 
-            hyperType = this._volumeDao.getHypervisorType(volumeId);
+            hyperType = _volumeDao.getHypervisorType(volumeId);
         } else { // create template from snapshot
             snapshot = _snapshotDao.findById(snapshotId);
             if (snapshot == null) {
                 throw new InvalidParameterValueException("Failed to create private template record, unable to find snapshot " + snapshotId);
             }
 
-            volume = this._volumeDao.findById(snapshot.getVolumeId());
-            VolumeVO snapshotVolume = this._volumeDao.findByIdIncludingRemoved(snapshot.getVolumeId());
+            volume = _volumeDao.findById(snapshot.getVolumeId());
+            VolumeVO snapshotVolume = _volumeDao.findByIdIncludingRemoved(snapshot.getVolumeId());
 
             // check permissions
             _accountMgr.checkAccess(caller, null, true, snapshot);
@@ -1560,13 +1560,13 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
             featured = Boolean.FALSE;
         }
         Long guestOSId = cmd.getOsTypeId();
-        GuestOSVO guestOS = this._guestOSDao.findById(guestOSId);
+        GuestOSVO guestOS = _guestOSDao.findById(guestOSId);
         if (guestOS == null) {
             throw new InvalidParameterValueException("GuestOS with ID: " + guestOSId + " does not exist.");
         }
 
         String uniqueName = Long.valueOf((userId == null) ? 1 : userId).toString() + UUID.nameUUIDFromBytes(name.getBytes()).toString();
-        Long nextTemplateId = this._tmpltDao.getNextInSequence(Long.class, "id");
+        Long nextTemplateId = _tmpltDao.getNextInSequence(Long.class, "id");
         String description = cmd.getDisplayText();
         boolean isExtractable = false;
         Long sourceTemplateId = null;
@@ -1602,11 +1602,11 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
         }
         privateTemplate.setSourceTemplateId(sourceTemplateId);
 
-        VMTemplateVO template = this._tmpltDao.persist(privateTemplate);
+        VMTemplateVO template = _tmpltDao.persist(privateTemplate);
         // Increment the number of templates
         if (template != null) {
             if (cmd.getDetails() != null) {
-                this._templateDetailsDao.persist(template.getId(), cmd.getDetails());
+                _templateDetailsDao.persist(template.getId(), cmd.getDetails());
             }
 
             _resourceLimitMgr.incrementResourceCount(templateOwner.getId(), ResourceType.template);
@@ -1624,19 +1624,19 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
 
     @Override
     public Pair<String, String> getAbsoluteIsoPath(long templateId, long dataCenterId) {
-        TemplateDataStoreVO templateStoreRef = this._tmplStoreDao.findByTemplateZoneDownloadStatus(templateId, dataCenterId,
+        TemplateDataStoreVO templateStoreRef = _tmplStoreDao.findByTemplateZoneDownloadStatus(templateId, dataCenterId,
                 VMTemplateStorageResourceAssoc.Status.DOWNLOADED);
         if (templateStoreRef == null) {
             throw new CloudRuntimeException("Template " + templateId + " has not been completely downloaded to zone " + dataCenterId);
         }
-        DataStore store = this._dataStoreMgr.getDataStore(templateStoreRef.getDataStoreId(), DataStoreRole.Image);
+        DataStore store = _dataStoreMgr.getDataStore(templateStoreRef.getDataStoreId(), DataStoreRole.Image);
         String isoPath = store.getUri() + "/" + templateStoreRef.getInstallPath();
         return new Pair<String, String>(isoPath, store.getUri());
     }
 
     @Override
     public String getSecondaryStorageURL(long zoneId) {
-        DataStore secStore = this._dataStoreMgr.getImageStore(zoneId);
+        DataStore secStore = _dataStoreMgr.getImageStore(zoneId);
         if (secStore == null) {
             return null;
         }
@@ -1648,10 +1648,10 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
     // just pick one is enough.
     @Override
     public DataStore getImageStore(long zoneId, long tmpltId) {
-        TemplateDataStoreVO tmpltStore = this._tmplStoreDao.findByTemplateZoneDownloadStatus(tmpltId, zoneId,
+        TemplateDataStoreVO tmpltStore = _tmplStoreDao.findByTemplateZoneDownloadStatus(tmpltId, zoneId,
                 VMTemplateStorageResourceAssoc.Status.DOWNLOADED);
         if (tmpltStore != null) {
-            return this._dataStoreMgr.getDataStore(tmpltStore.getDataStoreId(), DataStoreRole.Image);
+            return _dataStoreMgr.getDataStore(tmpltStore.getDataStoreId(), DataStoreRole.Image);
         }
 
         return null;
@@ -1659,7 +1659,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
 
     @Override
     public Long getTemplateSize(long templateId, long zoneId) {
-        TemplateDataStoreVO templateStoreRef = this._tmplStoreDao.findByTemplateZoneDownloadStatus(templateId, zoneId,
+        TemplateDataStoreVO templateStoreRef = _tmplStoreDao.findByTemplateZoneDownloadStatus(templateId, zoneId,
                 VMTemplateStorageResourceAssoc.Status.DOWNLOADED);
         if (templateStoreRef == null) {
             throw new CloudRuntimeException("Template " + templateId + " has not been completely downloaded to zone " + zoneId);
@@ -1672,14 +1672,14 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
     @Override
     public List<DataStore> getImageStoreByTemplate(long templateId, Long zoneId) {
         // find all eligible image stores for this zone scope
-        List<DataStore> imageStores = this._dataStoreMgr.getImageStoresByScope(new ZoneScope(zoneId));
+        List<DataStore> imageStores = _dataStoreMgr.getImageStoresByScope(new ZoneScope(zoneId));
         if (imageStores == null || imageStores.size() == 0) {
             return null;
         }
         List<DataStore> stores = new ArrayList<DataStore>();
         for (DataStore store : imageStores) {
             // check if the template is stored there
-            List<TemplateDataStoreVO> storeTmpl = this._tmplStoreDao.listByTemplateStore(templateId, store.getId());
+            List<TemplateDataStoreVO> storeTmpl = _tmplStoreDao.listByTemplateStore(templateId, store.getId());
             if (storeTmpl != null && storeTmpl.size() > 0) {
                 stores.add(store);
             }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8930cfa9/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index 4e09dac..07d5f64 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -66,6 +66,7 @@ import org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntity;
 import org.apache.cloudstack.engine.service.api.OrchestrationService;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
+import org.apache.cloudstack.framework.jobs.AsyncJobManager;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.to.TemplateObjectTO;
@@ -89,7 +90,6 @@ import com.cloud.alert.AlertManager;
 import com.cloud.api.ApiDBUtils;
 import com.cloud.api.query.dao.UserVmJoinDao;
 import com.cloud.api.query.vo.UserVmJoinVO;
-import com.cloud.async.AsyncJobManager;
 import com.cloud.capacity.CapacityManager;
 import com.cloud.configuration.Config;
 import com.cloud.configuration.ConfigurationManager;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8930cfa9/server/test/com/cloud/keystore/KeystoreTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/keystore/KeystoreTest.java b/server/test/com/cloud/keystore/KeystoreTest.java
index 47212c1..9ef4c79 100644
--- a/server/test/com/cloud/keystore/KeystoreTest.java
+++ b/server/test/com/cloud/keystore/KeystoreTest.java
@@ -168,7 +168,7 @@ public class KeystoreTest extends TestCase {
 
     	vm.setObjectName("virtualmachine");
 */
-    	String result = ApiSerializerHelper.toSerializedStringOld(vm);
+    	String result = ApiSerializerHelper.toSerializedString(vm);
         // String result = "org.apache.cloudstack.api.response.UserVmResponse/virtualmachine/{\"id\":{\"_tableName\":\"vm_instance\",\"_value\":3},\"name\":\"i-2-3-KY\",\"displayname\":\"i-2-3-KY\",\"account\":\"admin\",\"projectid\":{\"_tableName\":\"projects\"},\"domainid\":{\"_tableName\":\"domain\",\"_value\":1},\"domain\":\"ROOT\",\"created\":\"2011-11-02T21:54:07-0700\",\"state\":\"Running\",\"haenable\":false,\"groupid\":{\"_tableName\":\"instance_group\"},\"zoneid\":{\"_tableName\":\"data_center\",\"_value\":1},\"zonename\":\"KY\",\"hostid\":{\"_tableName\":\"host\",\"_value\":1},\"hostname\":\"xenserver-basic\",\"templateid\":{\"_tableName\":\"vm_template\",\"_value\":2},\"templatename\":\"CentOS 5.3(64-bit) no GUI (XenServer)\",\"templatedisplaytext\":\"CentOS 5.3(64-bit) no GUI (XenServer)\",\"passwordenabled\":false,\"isoid\":{\"_tableName\":\"vm_template\"},\"serviceofferingid\":{\"_tableName\":\"disk_offering\",\"_value\":7},\"serviceofferingname\":\"Small Instance\",\
 "cpunumber\":1,\"cpuspeed\":500,\"memory\":512,\"guestosid\":{\"_tableName\":\"guest_os\",\"_value\":12},\"rootdeviceid\":0,\"rootdevicetype\":\"NetworkFilesystem\",\"securitygroup\":[],\"jobid\":{\"_tableName\":\"async_job\"},\"nic\":[{\"id\":7,\"networkid\":200,\"netmask\":\"255.255.255.0\",\"gateway\":\"10.1.1.1\",\"ipaddress\":\"10.1.1.116\",\"isolationuri\":\"vlan://1699\",\"broadcasturi\":\"vlan://1699\",\"traffictype\":\"Guest\",\"type\":\"Virtual\",\"isdefault\":true,\"macaddress\":\"02:00:39:a7:00:01\"}],\"hypervisor\":\"XenServer\"}";
     	System.out.println(result);
     	//Object obj = ApiSerializerHelper.fromSerializedString(result);
@@ -177,7 +177,7 @@ public class KeystoreTest extends TestCase {
     	alert.setId("100");
     	alert.setDescription("Hello");
 
-    	result = ApiSerializerHelper.toSerializedStringOld(alert);
+    	result = ApiSerializerHelper.toSerializedString(alert);
     	System.out.println(result);
     	ApiSerializerHelper.fromSerializedString(result);
     }