forcefull undeployment

Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/2a7f2758
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/2a7f2758
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/2a7f2758

Branch: refs/heads/master
Commit: 2a7f2758e1c588fc8895f567fa0244411c4c805f
Parents: b2f6bf3
Author: Udara Liyanage <[email protected]>
Authored: Sat Apr 4 00:50:07 2015 +0530
Committer: Udara Liyanage <[email protected]>
Committed: Sat Apr 4 21:32:37 2015 +0530

----------------------------------------------------------------------
 .../applications/topic/ApplicationBuilder.java  |   2 +-
 .../partition/ClusterLevelPartitionContext.java |  48 ++
 .../publisher/ClusterStatusEventPublisher.java  |   4 +-
 .../monitor/cluster/ClusterMonitor.java         |  60 +-
 .../monitor/component/ApplicationMonitor.java   |  11 +
 .../component/ParentComponentMonitor.java       |   2 +-
 .../autoscaler/services/AutoscalerService.java  |   7 +-
 .../services/impl/AutoscalerServiceImpl.java    | 101 ++-
 .../messaging/topology/TopologyBuilder.java     |   2 +-
 .../services/CloudControllerService.java        |   2 +
 .../impl/CloudControllerServiceImpl.java        |  24 +
 .../common/client/AutoscalerServiceClient.java  |   4 +-
 .../client/CloudControllerServiceClient.java    |   9 +-
 .../rest/endpoint/api/StratosApiV41.java        |   8 +-
 .../rest/endpoint/api/StratosApiV41Utils.java   |  48 +-
 .../src/main/resources/AutoscalerService.wsdl   | 247 +++---
 .../main/resources/CloudControllerService.wsdl  | 851 ++++++++++---------
 17 files changed, 812 insertions(+), 618 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
index 05c6196..275f506 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
@@ -349,7 +349,7 @@ public class ApplicationBuilder {
                         Cluster cluster = 
service.getCluster(aClusterData.getClusterId());
                         if (cluster != null) {
                             for (ClusterInstance instance : 
cluster.getInstanceIdToInstanceContextMap().values()) {
-                                
ClusterStatusEventPublisher.sendClusterTerminatingEvent(applicationId,
+                                
ClusterStatusEventPublisher.sendClusterStatusClusterTerminatingEvent(applicationId,
                                         aClusterData.getServiceType(),
                                         aClusterData.getClusterId(),
                                         instance.getInstanceId());

http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
index bbd2623..d8bbf52 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
@@ -25,6 +25,7 @@ import 
org.apache.stratos.autoscaler.context.member.MemberStatsContext;
 import org.apache.stratos.autoscaler.util.ConfUtil;
 import org.apache.stratos.cloud.controller.stub.domain.MemberContext;
 import org.apache.stratos.cloud.controller.stub.domain.Partition;
+import org.apache.stratos.common.client.CloudControllerServiceClient;
 import org.apache.stratos.common.constants.StratosConstants;
 
 import java.io.Serializable;
@@ -68,6 +69,7 @@ public class ClusterLevelPartitionContext extends 
PartitionContext implements Se
     // termination pending members, member is added to this when Autoscaler 
send grace fully shut down event
     private List<MemberContext> terminationPendingMembers;
 
+
     //member id: time that member is moved to termination pending status
     private Map<String, Long> terminationPendingStartedTime;
 
@@ -82,6 +84,51 @@ public class ClusterLevelPartitionContext extends 
PartitionContext implements Se
         this.pendingMembers = new ArrayList<MemberContext>();
     }
 
+    public void terminateAllRemainingInstances(){
+
+        // Forcefully deleting remaining active members
+        for (Iterator<MemberContext> iterator = activeMembers.iterator(); 
iterator.hasNext();) {
+            MemberContext member = iterator.next();
+            iterator.remove();
+            terminateForcefully(member.getMemberId());
+        }
+
+        // Forcefully deleting remaining pending members
+        for (Iterator<MemberContext> iterator = pendingMembers.iterator(); 
iterator.hasNext();) {
+            MemberContext member = iterator.next();
+            iterator.remove();
+            terminateForcefully(member.getMemberId());
+        }
+
+        /// Forcefully deleting remaining termination pending members
+        for (Iterator<MemberContext> iterator = 
terminationPendingMembers.iterator(); iterator.hasNext();) {
+            MemberContext member = iterator.next();
+            // Remove the current element from the iterator and the list.
+            iterator.remove();
+            terminateForcefully(member.getMemberId());
+        }
+
+
+        // Forcefully deleting remaining obsolete members
+        for (Map.Entry<String, MemberContext> entry : 
obsoletedMembers.entrySet())
+        {
+            MemberContext ObsoleteMemberContext = entry.getValue();
+            obsoletedMembers.remove(entry.getKey());
+            terminateForcefully(ObsoleteMemberContext.getMemberId());
+        }
+    }
+
+    private void terminateForcefully(String  memberId) {
+        try {
+            if(log.isDebugEnabled()){
+                log.debug(String.format("Forcefully terminating member 
[member-id] %s" , memberId));
+            }
+            
CloudControllerServiceClient.getInstance().terminateInstanceForcefully(memberId);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
     public ClusterLevelPartitionContext(int max, Partition partition, String 
networkPartitionId) {
 
         super(max, partition, networkPartitionId);
@@ -580,6 +627,7 @@ public class ClusterLevelPartitionContext extends 
PartitionContext implements Se
 
     }
 
+
 //    @Override
 //    public int getCurrentElementCount() {
 //        //TODO find and return correct member instance count

http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java
index c2901f2..270a2ab 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java
@@ -174,8 +174,8 @@ public class ClusterStatusEventPublisher {
         }
     }
 
-    public static void sendClusterTerminatingEvent(String appId, String 
serviceName,
-                                                   String clusterId, String 
instanceId) {
+    public static void sendClusterStatusClusterTerminatingEvent(String appId, 
String serviceName,
+                                                                String 
clusterId, String instanceId) {
 
         try {
             TopologyManager.acquireReadLockForCluster(serviceName, clusterId);

http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
index d473f59..c29521d 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
@@ -18,23 +18,11 @@
  */
 package org.apache.stratos.autoscaler.monitor.cluster;
 
-import java.rmi.RemoteException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.context.AutoscalerContext;
 import org.apache.stratos.autoscaler.context.InstanceContext;
 import org.apache.stratos.autoscaler.context.cluster.AbstractClusterContext;
 import org.apache.stratos.autoscaler.context.cluster.ClusterContext;
@@ -76,33 +64,20 @@ import org.apache.stratos.messaging.domain.topology.Cluster;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 import org.apache.stratos.messaging.domain.topology.Member;
 import org.apache.stratos.messaging.domain.topology.Service;
-import org.apache.stratos.messaging.event.health.stat.AverageLoadAverageEvent;
-import 
org.apache.stratos.messaging.event.health.stat.AverageMemoryConsumptionEvent;
-import 
org.apache.stratos.messaging.event.health.stat.AverageRequestsInFlightEvent;
-import 
org.apache.stratos.messaging.event.health.stat.AverageRequestsServingCapabilityEvent;
-import 
org.apache.stratos.messaging.event.health.stat.GradientOfLoadAverageEvent;
-import 
org.apache.stratos.messaging.event.health.stat.GradientOfMemoryConsumptionEvent;
-import 
org.apache.stratos.messaging.event.health.stat.GradientOfRequestsInFlightEvent;
-import 
org.apache.stratos.messaging.event.health.stat.MemberAverageLoadAverageEvent;
-import 
org.apache.stratos.messaging.event.health.stat.MemberAverageMemoryConsumptionEvent;
-import org.apache.stratos.messaging.event.health.stat.MemberFaultEvent;
-import 
org.apache.stratos.messaging.event.health.stat.MemberGradientOfLoadAverageEvent;
-import 
org.apache.stratos.messaging.event.health.stat.MemberGradientOfMemoryConsumptionEvent;
-import 
org.apache.stratos.messaging.event.health.stat.MemberSecondDerivativeOfLoadAverageEvent;
-import 
org.apache.stratos.messaging.event.health.stat.MemberSecondDerivativeOfMemoryConsumptionEvent;
-import 
org.apache.stratos.messaging.event.health.stat.SecondDerivativeOfLoadAverageEvent;
-import 
org.apache.stratos.messaging.event.health.stat.SecondDerivativeOfMemoryConsumptionEvent;
-import 
org.apache.stratos.messaging.event.health.stat.SecondDerivativeOfRequestsInFlightEvent;
-import org.apache.stratos.messaging.event.topology.ClusterRemovedEvent;
-import org.apache.stratos.messaging.event.topology.MemberActivatedEvent;
-import org.apache.stratos.messaging.event.topology.MemberMaintenanceModeEvent;
-import org.apache.stratos.messaging.event.topology.MemberReadyToShutdownEvent;
-import org.apache.stratos.messaging.event.topology.MemberStartedEvent;
-import org.apache.stratos.messaging.event.topology.MemberTerminatedEvent;
+import org.apache.stratos.messaging.event.health.stat.*;
+import org.apache.stratos.messaging.event.topology.*;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.FactHandle;
 
+import java.rmi.RemoteException;
+import java.util.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+
 /**
  * Is responsible for monitoring a service cluster. This runs periodically
  * and perform minimum instance check and scaling check using the underlying
@@ -666,7 +641,7 @@ public class ClusterMonitor extends Monitor implements 
Runnable {
                 log.info("Publishing Cluster terminating event for 
[application] " + appId +
                         " [cluster] " + this.getClusterId() + " [instance] " + 
instanceId);
             }
-            
ClusterStatusEventPublisher.sendClusterTerminatingEvent(getAppId(), 
getServiceId(), getClusterId(), instanceId);
+            
ClusterStatusEventPublisher.sendClusterStatusClusterTerminatingEvent(getAppId(),
 getServiceId(), getClusterId(), instanceId);
         }
     }
 
@@ -1328,10 +1303,17 @@ public class ClusterMonitor extends Monitor implements 
Runnable {
                     // need to terminate active, pending and obsolete members
                     //FIXME to traverse concurrent
                     // active members
+
+                    
if(AutoscalerContext.getInstance().getAppMonitor(getAppId()).isForce()){
+                        log.info(String.format("Terminating all remaining 
members of partition [partition-id] %s [application-id] %s" , 
partitionContext.getPartitionId(), getAppId()));
+                        partitionContext.terminateAllRemainingInstances();
+                    }
+
                     List<String> activeMemberIdList = new ArrayList<String>();
                     Iterator<MemberContext> iterator = 
partitionContext.getActiveMembers().listIterator();
                     while (iterator.hasNext()) {
                         MemberContext activeMemberCtxt = iterator.next();
+
                         activeMemberIdList.add(activeMemberCtxt.getMemberId());
 
                     }
@@ -1355,11 +1337,15 @@ public class ClusterMonitor extends Monitor implements 
Runnable {
                         }
                         
partitionContext.movePendingMemberToObsoleteMembers(memberId);
                     }
+
+                    /*
                     if (partitionContext.getTotalMemberCount() == 0) {
                         allMovedToObsolete = allMovedToObsolete && true;
                     } else {
                         allMovedToObsolete = false;
                     }
+                    */
+                    allMovedToObsolete = 
partitionContext.getTotalMemberCount() == 0;
                 }
 
                 if (allMovedToObsolete) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
index 078d99b..98abf8c 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
@@ -70,6 +70,9 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
     //Flag to set whether application is terminating
     private boolean isTerminating;
 
+    // Flag to set if forcefull undeployment is invoked for the application.
+    private boolean force;
+
     public ApplicationMonitor(Application application) throws 
DependencyBuilderException,
             TopologyInConsistentException {
         super(application);
@@ -534,4 +537,12 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
        
        return null;
     }
+
+    public boolean isForce() {
+        return force;
+    }
+
+    public void setForce(boolean force) {
+        this.force = force;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
index 0bba2da..5f6fef8 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
@@ -388,7 +388,7 @@ public abstract class ParentComponentMonitor extends 
Monitor implements Runnable
                         log.info("Publishing Cluster Terminating event for 
[application]: " + appId +
                                 " [group] " + this.id + " [cluster]: " + 
terminationContext.getId());
                     }
-                    
ClusterStatusEventPublisher.sendClusterTerminatingEvent(this.appId,
+                    
ClusterStatusEventPublisher.sendClusterStatusClusterTerminatingEvent(this.appId,
                             ((ClusterMonitor) monitor).getServiceId(),
                             terminationContext.getId(), instanceId);
                 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java
index 71633d2..ae268bd 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java
@@ -21,8 +21,6 @@
 
 package org.apache.stratos.autoscaler.services;
 
-import java.rmi.RemoteException;
-
 import org.apache.stratos.autoscaler.applications.pojo.ApplicationContext;
 import org.apache.stratos.autoscaler.exception.AutoScalerException;
 import org.apache.stratos.autoscaler.exception.InvalidArgumentException;
@@ -36,6 +34,8 @@ import 
org.apache.stratos.autoscaler.pojo.policy.autoscale.AutoscalePolicy;
 import org.apache.stratos.autoscaler.pojo.policy.deployment.ApplicationPolicy;
 import org.apache.stratos.common.Properties;
 
+import java.rmi.RemoteException;
+
 public interface AutoscalerService {
     /**
      * Add autoscaling policy
@@ -106,7 +106,8 @@ public interface AutoscalerService {
      * @param applicationId
      * @return
      */
-    public void undeployApplication(String applicationId);
+
+    public void undeployApplication(String applicationId, boolean force);
 
     /**
      * Delete an application

http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
index 5dee5ca..b48148b 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
@@ -36,6 +36,7 @@ import 
org.apache.stratos.autoscaler.exception.application.InvalidServiceGroupEx
 import 
org.apache.stratos.autoscaler.exception.policy.ApplicatioinPolicyNotExistsException;
 import org.apache.stratos.autoscaler.exception.policy.InvalidPolicyException;
 import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor;
+import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor;
 import org.apache.stratos.autoscaler.pojo.Dependencies;
 import org.apache.stratos.autoscaler.pojo.ServiceGroup;
 import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
@@ -45,20 +46,22 @@ import 
org.apache.stratos.autoscaler.registry.RegistryManager;
 import org.apache.stratos.autoscaler.services.AutoscalerService;
 import org.apache.stratos.autoscaler.util.AutoscalerUtil;
 import org.apache.stratos.common.Properties;
+import org.apache.stratos.common.client.CloudControllerServiceClient;
 import org.apache.stratos.common.client.StratosManagerServiceClient;
 import org.apache.stratos.common.util.CommonUtil;
 import 
org.apache.stratos.manager.service.stub.domain.application.signup.ApplicationSignUp;
 import 
org.apache.stratos.manager.service.stub.domain.application.signup.ArtifactRepository;
 import org.apache.stratos.messaging.domain.application.Application;
 import org.apache.stratos.messaging.domain.application.ClusterDataHolder;
+import org.apache.stratos.messaging.domain.topology.Cluster;
+import org.apache.stratos.messaging.domain.topology.Member;
 import 
org.apache.stratos.messaging.message.receiver.application.ApplicationManager;
+import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 import org.wso2.carbon.registry.api.RegistryException;
 
 import java.rmi.RemoteException;
 import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
+import java.util.*;
 
 /**
  * Auto Scaler Service API is responsible getting Partitions and Policies.
@@ -377,8 +380,46 @@ public class AutoscalerServiceImpl implements 
AutoscalerService {
         }
     }
 
-    @Override
-    public void undeployApplication(String applicationId) {
+    public void undeployApplication(String applicationId, boolean force){
+
+        AutoscalerContext asCtx = AutoscalerContext.getInstance();
+        ApplicationMonitor appMonitor = asCtx.getAppMonitor(applicationId);
+
+        if(appMonitor == null){
+            log.info(String.format("Could not find application monitor for the 
application %s, hence returning", applicationId));
+            return;
+        }
+        if(! force){
+            // Gracefull undeployment flow
+            if(appMonitor.isTerminating()){
+                log.info("Application monitor is already in terminating, 
graceful undeployment is has already been attempted thus not invoking again");
+                return;
+            }else{
+                log.info(String.format("Gracefully undeploying the application 
" + applicationId));
+                undeployApplicationGracefully(applicationId);
+            }
+        }else{
+            // force undeployment flow
+            if (appMonitor.isTerminating()) {
+
+                if(appMonitor.isForce()){
+                    log.warn("Force undeployment is already in progress, hence 
not invoking again");
+                    return;
+                }else{
+                    log.info(String.format("Previous gracefull undeployment is 
in progress for [application-id] %s , thus  terminating instances directly", 
applicationId));
+                    appMonitor.setForce(true);
+                    terminateAllApplicationMembersForcefully(applicationId);
+                }
+            }else{
+                log.info(String.format("Forcefully undeploying the application 
" + applicationId));
+                appMonitor.setForce(true);
+                undeployApplicationGracefully(applicationId);
+            }
+        }
+
+    }
+
+    private void undeployApplicationGracefully(String applicationId) {
         try {
             if (log.isInfoEnabled()) {
                 log.info("Starting to undeploy application: [application-id] " 
+ applicationId);
@@ -426,6 +467,7 @@ public class AutoscalerServiceImpl implements 
AutoscalerService {
                 throw new RuntimeException(msg);
             }
 
+
             if 
(ApplicationContext.STATUS_DEPLOYED.equals(applicationContext.getStatus())) {
                 String msg = String.format("Application is in deployed state, 
please undeploy it before deleting: " +
                         "[application-id] %s", applicationId);
@@ -659,4 +701,53 @@ public class AutoscalerServiceImpl implements 
AutoscalerService {
        public ApplicationPolicy[] getApplicationPolicies() {
                return PolicyManager.getInstance().getApplicationPolicies();
        }
+
+    private void terminateAllApplicationMembersForcefully(String 
applicationId)  {
+        if (StringUtils.isEmpty(applicationId)){
+            throw new IllegalArgumentException("Application Id can not be 
empty");
+        }
+
+        Application application;
+        try{
+            ApplicationManager.acquireReadLockForApplication(applicationId);
+            application = 
ApplicationManager.getApplications().getApplication(applicationId);
+            if(application == null){
+                log.warn(String.format("Could not find application, thus no 
members to be terminated [application-id] %s", applicationId));
+                return;
+            }
+        }finally {
+            ApplicationManager.releaseReadLockForApplication(applicationId);
+        }
+
+
+        Set<ClusterDataHolder> allClusters = 
application.getClusterDataRecursively();
+        //CloudControllerServiceClient cloudControllerServiceClient = 
CloudControllerServiceClient.getInstance().ter
+        for(ClusterDataHolder clusterDataHolder : allClusters){
+            String serviceType = clusterDataHolder.getServiceType();
+            String clusterId = clusterDataHolder.getClusterId();
+
+            Cluster cluster;
+            try {
+                TopologyManager.acquireReadLockForCluster(serviceType, 
clusterId);
+                cluster = 
TopologyManager.getTopology().getService(serviceType).getCluster(clusterId);
+            }finally {
+                TopologyManager.releaseReadLockForCluster(serviceType, 
clusterId);
+            }
+
+            List<String> memberListToTerminate = new LinkedList<String>();
+            for(Member member : cluster.getMembers()){
+                memberListToTerminate.add(member.getMemberId());
+            }
+
+            for(String memberIdToTerminate : memberListToTerminate){
+                try {
+                    log.info(String.format("Terminating member forcefully 
[member-id] %s of the cluster [cluster-id] %s [application-id] %s", 
memberIdToTerminate, clusterId, application));
+                    
CloudControllerServiceClient.getInstance().terminateInstanceForcefully(memberIdToTerminate);
+                } catch (Exception e) {
+                    log.error(String.format("Forcefull termination of member 
%s is failed, but continuing forcefull deletion of other members", 
memberIdToTerminate));
+                }
+            }
+
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
index ee5cee6..abc0d91 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
@@ -1047,7 +1047,7 @@ public class TopologyBuilder {
             ClusterStatus status = ClusterStatus.Terminating;
             if(context.isStateTransitionValid(status)) {
                 context.setStatus(status);
-                log.info("Cluster Terminating adding status started for" + 
cluster.getClusterId());
+                log.info("Cluster Terminating adding status started for " + 
cluster.getClusterId());
                 TopologyManager.updateTopology(topology);
                 //publishing data
                 ClusterInstanceTerminatingEvent clusterTerminaingEvent = new 
ClusterInstanceTerminatingEvent(event.getAppId(),

http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java
index 48f61ad..0799862 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java
@@ -175,6 +175,8 @@ public interface CloudControllerService {
        void terminateInstance(String memberId) throws InvalidMemberException, 
InvalidCartridgeTypeException,
                                                       CloudControllerException;
 
+       void terminateInstanceForcefully(String memberId) throws  
InvalidCartridgeTypeException;
+
        /**
         * Calling this method will result in termination of all instances 
belong
         * to the provided cluster ID.

http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
index 7386872..3df93de 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
@@ -482,6 +482,7 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
         memberContext.setProperties(instanceContext.getProperties());
         memberContext.setLoadBalancingIPType(loadBalancingIPType);
         memberContext.setInitTime(System.currentTimeMillis());
+        
memberContext.setObsoleteExpiryTime(instanceContext.getObsoleteExpiryTime());
 
         return memberContext;
     }
@@ -547,6 +548,29 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
         return clusterId + memberId.toString();
     }
 
+    public void terminateInstanceForcefully(String memberId)  {
+
+        log.info(String.format("Starting to forcefully terminate the member " 
+ memberId));
+        boolean memberTerminated = true;
+        try {
+            this.terminateInstance(memberId);
+        } catch (InvalidMemberException e) {
+            memberTerminated = false;
+        } catch (CloudControllerException e){
+            memberTerminated = false;
+        } catch (InvalidCartridgeTypeException e) {
+            memberTerminated = false;
+        }
+
+        if(memberTerminated){
+            log.info(String.format("Member terminated [member-id] %s ", 
memberId));
+        }else{
+            log.warn(String.format("Stratos could not terminate the member 
[member-id] %s. This may due to a issue in the underlying IaaS, Please 
terminate the member manually", memberId));
+            MemberContext memberContext = 
CloudControllerContext.getInstance().getMemberContextOfMemberId(memberId);
+            
CloudControllerServiceUtil.executeMemberTerminationPostProcess(memberContext);
+        }
+    }
+
     @Override
     public void terminateInstance(String memberId) throws 
InvalidMemberException,
             InvalidCartridgeTypeException, CloudControllerException {

http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
 
b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
index 37e9e43..9a95a36 100644
--- 
a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
+++ 
b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
@@ -136,9 +136,9 @@ public class AutoscalerServiceClient {
        return stub.getApplicationNetworkPartitions(applicationId);
     }
 
-    public void undeployApplication(String applicationId) throws
+    public void undeployApplication(String applicationId, boolean force) throws
             AutoscalerServiceApplicationDefinitionExceptionException, 
RemoteException {
-        stub.undeployApplication(applicationId);
+        stub.undeployApplication(applicationId, force);
     }
 
     public void deleteApplication(String applicationId) throws RemoteException 
{

http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/CloudControllerServiceClient.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/CloudControllerServiceClient.java
 
b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/CloudControllerServiceClient.java
index 32ee917..ebfaa80 100644
--- 
a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/CloudControllerServiceClient.java
+++ 
b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/CloudControllerServiceClient.java
@@ -123,7 +123,14 @@ public class CloudControllerServiceClient {
                        log.debug(String.format("Service call 
terminateInstance() returned in %dms", (endTime - startTime)));
                }
     }
-    
+
+    public void terminateInstanceForcefully(String memberId) throws Exception {
+        if (log.isDebugEnabled()) {
+            log.debug(String.format("Terminating instance forcefully via cloud 
controller: [member] %s", memberId));
+        }
+        stub.terminateInstanceForcefully(memberId);
+    }
+
     public void terminateAllInstances(String clusterId) throws 
RemoteException, 
                                                                
CloudControllerServiceInvalidClusterExceptionException {
        if (log.isInfoEnabled()) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
index 4545de6..ddd5a4d 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
@@ -615,8 +615,7 @@ public class StratosApiV41 extends AbstractApi {
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/protected/manage/getApplications")
-    public Response getApplications()
-            throws RestAPIException {
+    public Response getApplications() throws RestAPIException {
         List<ApplicationBean> applicationDefinitions = 
StratosApiV41Utils.getApplications();
         ApplicationBean[] applicationDefinitionsArray = applicationDefinitions
                 .toArray(new ApplicationBean[applicationDefinitions.size()]);
@@ -893,8 +892,9 @@ public class StratosApiV41 extends AbstractApi {
     @Consumes("application/json")
     @AuthorizationAction("/permission/protected/manage/undeployApplication")
     public Response undeployApplication(
-            @PathParam("applicationId") String applicationId) throws 
RestAPIException {
-        StratosApiV41Utils.undeployApplication(applicationId);
+            @PathParam("applicationId") String applicationId, 
@QueryParam("force") @DefaultValue("false") boolean force) throws 
RestAPIException {
+
+        StratosApiV41Utils.undeployApplication(applicationId, force);
         return Response.accepted().entity(new 
SuccessResponseBean(Response.Status.ACCEPTED.getStatusCode(),
                 String.format("Application undeployed successfully: 
[application] %s", applicationId))).build();
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index eea42d2..7ed3fdc 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -23,22 +23,17 @@ import org.apache.axis2.context.ConfigurationContext;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import 
org.apache.stratos.autoscaler.stub.AutoscalerServiceApplicatioinPolicyNotExistsExceptionException;
-import 
org.apache.stratos.autoscaler.stub.AutoscalerServiceApplicationDefinitionExceptionException;
-import 
org.apache.stratos.autoscaler.stub.AutoscalerServiceInvalidApplicationPolicyExceptionException;
-import 
org.apache.stratos.autoscaler.stub.AutoscalerServiceInvalidPolicyExceptionException;
-import 
org.apache.stratos.autoscaler.stub.AutoscalerServiceRemoteExceptionException;
+import org.apache.stratos.autoscaler.stub.*;
 import org.apache.stratos.autoscaler.stub.deployment.policy.ApplicationPolicy;
 import org.apache.stratos.autoscaler.stub.pojo.ApplicationContext;
 import org.apache.stratos.autoscaler.stub.pojo.ServiceGroup;
 import org.apache.stratos.cloud.controller.stub.*;
-import org.apache.stratos.cloud.controller.stub.domain.*;
+import org.apache.stratos.cloud.controller.stub.domain.Cartridge;
+import org.apache.stratos.cloud.controller.stub.domain.DeploymentPolicy;
+import org.apache.stratos.cloud.controller.stub.domain.Persistence;
+import org.apache.stratos.cloud.controller.stub.domain.Volume;
 import org.apache.stratos.common.beans.PropertyBean;
-import org.apache.stratos.common.beans.application.ApplicationBean;
-import 
org.apache.stratos.common.beans.application.ApplicationNetworkPartitionIdListBean;
-import org.apache.stratos.common.beans.application.ComponentBean;
-import org.apache.stratos.common.beans.application.GroupBean;
-import org.apache.stratos.common.beans.application.GroupReferenceBean;
+import org.apache.stratos.common.beans.application.*;
 import 
org.apache.stratos.common.beans.application.domain.mapping.ApplicationDomainMappingsBean;
 import 
org.apache.stratos.common.beans.application.domain.mapping.DomainMappingBean;
 import 
org.apache.stratos.common.beans.application.signup.ApplicationSignUpBean;
@@ -1322,23 +1317,20 @@ public class StratosApiV41Utils {
         }
     }
 
-    public static void undeployApplication(String applicationId) throws 
RestAPIException {
+    public static void undeployApplication(String applicationId, boolean 
force) throws RestAPIException {
         AutoscalerServiceClient autoscalerServiceClient = 
getAutoscalerServiceClient();
+        if(force){
+            if(log.isDebugEnabled()){
+                log.debug("Forcefully undeploying application [application-id] 
" + applicationId);
+            }
+        }else{
+            if(log.isDebugEnabled()){
+                log.debug("Gracefully undeploying application [application-id] 
" + applicationId);
+            }
+        }
         if (autoscalerServiceClient != null) {
             try {
-                ApplicationContext application = 
autoscalerServiceClient.getApplication(applicationId);
-                if(application == null) {
-                    String message = String.format("Application is not found: 
[application-id] %s", applicationId);
-                    log.error(message);
-                    throw new RestAPIException(message);
-                }
-                if 
(!application.getStatus().equals(APPLICATION_STATUS_DEPLOYED)) {
-                    String message = String.format("Application is not 
deployed: [application-id] %s", applicationId);
-                    log.error(message);
-                    throw new RestAPIException(message);
-                }
-
-                autoscalerServiceClient.undeployApplication(applicationId);
+                autoscalerServiceClient.undeployApplication(applicationId, 
force);
             } catch (RemoteException e) {
                 String message = "Could not undeploy application: 
[application-id] " + applicationId;
                 log.error(message, e);
@@ -1389,6 +1381,7 @@ public class StratosApiV41Utils {
         }
         return applicationBean;
     }
+
     private static void 
addGroupsInstancesToApplicationInstanceBean(ApplicationInstanceBean 
applicationInstanceBean,
                                                                     
Application application) {
         Collection<Group> groups = application.getGroups();
@@ -1405,9 +1398,7 @@ public class StratosApiV41Utils {
 
     }
 
-    private static void addClustersInstancesToApplicationInstanceBean(
-            ApplicationInstanceBean applicationInstanceBean,
-            Application application) {
+    private static void 
addClustersInstancesToApplicationInstanceBean(ApplicationInstanceBean 
applicationInstanceBean,Application application) {
 
         Map<String, ClusterDataHolder> topLevelClusterDataMap = 
application.getClusterDataMap();
         if(topLevelClusterDataMap != null) {
@@ -1418,6 +1409,7 @@ public class StratosApiV41Utils {
                 try {
                     TopologyManager.acquireReadLockForCluster(serviceType, 
clusterId);
                     Cluster cluster = 
TopologyManager.getTopology().getService(serviceType).getCluster(clusterId);
+
                     
applicationInstanceBean.getClusterInstances().add(ObjectConverter.
                             
convertClusterToClusterInstanceBean(applicationInstanceBean.getInstanceId(),
                                     cluster, entry.getKey()));

http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoscalerService.wsdl
----------------------------------------------------------------------
diff --git 
a/service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoscalerService.wsdl
 
b/service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoscalerService.wsdl
index 5ed320f..a4299c3 100644
--- 
a/service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoscalerService.wsdl
+++ 
b/service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoscalerService.wsdl
@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 
xmlns:ns="http://impl.services.autoscaler.stratos.apache.org"; 
xmlns:ax28="http://application.exception.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax25="http://pojo.applications.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax21="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd"; 
xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
xmlns:ax22="http://common.stratos.apache.org/xsd"; 
xmlns:ax218="http://policy.exception.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax214="http://rmi.java/xsd"; 
xmlns:ax220="http://exception.autoscaler.stratos.apache.org/xsd"; 
xmlns:ns1="http://org.apache.axis2/xsd"; xmlns:ax215="http://io.java/xsd"; 
xmlns:ax212="http://autoscale.policy.pojo.autoscaler.stratos.apache.org/xsd"; 
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"; 
xmlns:ax210="http://pojo.autoscaler.stratos.apache.org/xsd"; 
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"; xmlns:mime="http://schemas.
 xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; 
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"; 
targetNamespace="http://impl.services.autoscaler.stratos.apache.org";>
+<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 
xmlns:ax29="http://autoscale.policy.pojo.autoscaler.stratos.apache.org/xsd"; 
xmlns:ns="http://impl.services.autoscaler.stratos.apache.org"; 
xmlns:ax27="http://pojo.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax25="http://application.exception.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax21="http://pojo.applications.autoscaler.stratos.apache.org/xsd"; 
xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
xmlns:ax22="http://common.stratos.apache.org/xsd"; 
xmlns:ax216="http://policy.exception.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax219="http://rmi.java/xsd"; 
xmlns:ax214="http://exception.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax220="http://io.java/xsd"; xmlns:ns1="http://org.apache.axis2/xsd"; 
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"; 
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"; 
xmlns:ax211="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd"; 
xmlns:mime="http://schemas.x
 mlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; 
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"; 
targetNamespace="http://impl.services.autoscaler.stratos.apache.org";>
     <wsdl:types>
-        <xs:schema xmlns:ax216="http://io.java/xsd"; 
attributeFormDefault="qualified" elementFormDefault="qualified" 
targetNamespace="http://rmi.java/xsd";>
+        <xs:schema xmlns:ax221="http://io.java/xsd"; 
attributeFormDefault="qualified" elementFormDefault="qualified" 
targetNamespace="http://rmi.java/xsd";>
             <xs:import namespace="http://io.java/xsd"/>
             <xs:complexType name="RemoteException">
                 <xs:complexContent>
-                    <xs:extension base="ax216:IOException">
+                    <xs:extension base="ax220:IOException">
                         <xs:sequence>
                             <xs:element minOccurs="0" name="cause" 
nillable="true" type="xs:anyType"/>
                             <xs:element minOccurs="0" name="message" 
nillable="true" type="xs:string"/>
@@ -21,7 +21,7 @@
                     <xs:element minOccurs="0" name="id" nillable="true" 
type="xs:string"/>
                     <xs:element minOccurs="0" name="instanceRoundingFactor" 
type="xs:float"/>
                     <xs:element minOccurs="0" name="isPublic" 
type="xs:boolean"/>
-                    <xs:element minOccurs="0" name="loadThresholds" 
nillable="true" type="ax212:LoadThresholds"/>
+                    <xs:element minOccurs="0" name="loadThresholds" 
nillable="true" type="ax29:LoadThresholds"/>
                     <xs:element minOccurs="0" name="tenantId" type="xs:int"/>
                 </xs:sequence>
             </xs:complexType>
@@ -33,17 +33,17 @@
                 </xs:sequence>
             </xs:complexType>
         </xs:schema>
-        <xs:schema xmlns:ax26="http://common.stratos.apache.org/xsd"; 
attributeFormDefault="qualified" elementFormDefault="qualified" 
targetNamespace="http://pojo.applications.autoscaler.stratos.apache.org/xsd";>
+        <xs:schema xmlns:ax23="http://common.stratos.apache.org/xsd"; 
attributeFormDefault="qualified" elementFormDefault="qualified" 
targetNamespace="http://pojo.applications.autoscaler.stratos.apache.org/xsd";>
             <xs:import namespace="http://common.stratos.apache.org/xsd"/>
             <xs:complexType name="ApplicationContext">
                 <xs:sequence>
                     <xs:element minOccurs="0" name="alias" nillable="true" 
type="xs:string"/>
                     <xs:element minOccurs="0" name="applicationId" 
nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="components" 
nillable="true" type="ax25:ComponentContext"/>
+                    <xs:element minOccurs="0" name="components" 
nillable="true" type="ax21:ComponentContext"/>
                     <xs:element minOccurs="0" name="description" 
nillable="true" type="xs:string"/>
                     <xs:element minOccurs="0" name="multiTenant" 
type="xs:boolean"/>
                     <xs:element minOccurs="0" name="name" nillable="true" 
type="xs:string"/>
-                    <xs:element minOccurs="0" name="properties" 
nillable="true" type="ax26:Properties"/>
+                    <xs:element minOccurs="0" name="properties" 
nillable="true" type="ax23:Properties"/>
                     <xs:element minOccurs="0" name="status" nillable="true" 
type="xs:string"/>
                     <xs:element minOccurs="0" name="tenantAdminUsername" 
nillable="true" type="xs:string"/>
                     <xs:element minOccurs="0" name="tenantDomain" 
nillable="true" type="xs:string"/>
@@ -52,10 +52,10 @@
             </xs:complexType>
             <xs:complexType name="ComponentContext">
                 <xs:sequence>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" 
name="applicationClusterContexts" nillable="true" 
type="ax25:ApplicationClusterContext"/>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" 
name="cartridgeContexts" nillable="true" type="ax25:CartridgeContext"/>
-                    <xs:element minOccurs="0" name="dependencyContext" 
nillable="true" type="ax25:DependencyContext"/>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" 
name="groupContexts" nillable="true" type="ax25:GroupContext"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" 
name="applicationClusterContexts" nillable="true" 
type="ax21:ApplicationClusterContext"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" 
name="cartridgeContexts" nillable="true" type="ax21:CartridgeContext"/>
+                    <xs:element minOccurs="0" name="dependencyContext" 
nillable="true" type="ax21:DependencyContext"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" 
name="groupContexts" nillable="true" type="ax21:GroupContext"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="ApplicationClusterContext">
@@ -66,8 +66,8 @@
                     <xs:element maxOccurs="unbounded" minOccurs="0" 
name="dependencyClusterIds" nillable="true" type="xs:string"/>
                     <xs:element minOccurs="0" name="deploymentPolicyName" 
nillable="true" type="xs:string"/>
                     <xs:element minOccurs="0" name="hostName" nillable="true" 
type="xs:string"/>
-                    <xs:element minOccurs="0" name="persistenceContext" 
nillable="true" type="ax25:PersistenceContext"/>
-                    <xs:element minOccurs="0" name="properties" 
nillable="true" type="ax26:Properties"/>
+                    <xs:element minOccurs="0" name="persistenceContext" 
nillable="true" type="ax21:PersistenceContext"/>
+                    <xs:element minOccurs="0" name="properties" 
nillable="true" type="ax23:Properties"/>
                     <xs:element minOccurs="0" name="tenantRange" 
nillable="true" type="xs:string"/>
                     <xs:element minOccurs="0" name="textPayload" 
nillable="true" type="xs:string"/>
                 </xs:sequence>
@@ -75,7 +75,7 @@
             <xs:complexType name="PersistenceContext">
                 <xs:sequence>
                     <xs:element minOccurs="0" name="persistenceRequired" 
type="xs:boolean"/>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" 
name="volumes" nillable="true" type="ax25:VolumeContext"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" 
name="volumes" nillable="true" type="ax21:VolumeContext"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="VolumeContext">
@@ -94,21 +94,21 @@
                 <xs:sequence>
                     <xs:element minOccurs="0" name="cartridgeMax" 
type="xs:int"/>
                     <xs:element minOccurs="0" name="cartridgeMin" 
type="xs:int"/>
-                    <xs:element minOccurs="0" name="subscribableInfoContext" 
nillable="true" type="ax25:SubscribableInfoContext"/>
+                    <xs:element minOccurs="0" name="subscribableInfoContext" 
nillable="true" type="ax21:SubscribableInfoContext"/>
                     <xs:element minOccurs="0" name="type" nillable="true" 
type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="SubscribableInfoContext">
                 <xs:sequence>
                     <xs:element minOccurs="0" name="alias" nillable="true" 
type="xs:string"/>
-                    <xs:element minOccurs="0" name="artifactRepositoryContext" 
nillable="true" type="ax25:ArtifactRepositoryContext"/>
+                    <xs:element minOccurs="0" name="artifactRepositoryContext" 
nillable="true" type="ax21:ArtifactRepositoryContext"/>
                     <xs:element minOccurs="0" name="autoscalingPolicy" 
nillable="true" type="xs:string"/>
                     <xs:element maxOccurs="unbounded" minOccurs="0" 
name="dependencyAliases" nillable="true" type="xs:string"/>
                     <xs:element minOccurs="0" name="deploymentPolicy" 
nillable="true" type="xs:string"/>
                     <xs:element minOccurs="0" name="maxMembers" type="xs:int"/>
                     <xs:element minOccurs="0" name="minMembers" type="xs:int"/>
-                    <xs:element minOccurs="0" name="persistenceContext" 
nillable="true" type="ax25:PersistenceContext"/>
-                    <xs:element minOccurs="0" name="properties" 
nillable="true" type="ax26:Properties"/>
+                    <xs:element minOccurs="0" name="persistenceContext" 
nillable="true" type="ax21:PersistenceContext"/>
+                    <xs:element minOccurs="0" name="properties" 
nillable="true" type="ax23:Properties"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="ArtifactRepositoryContext">
@@ -130,9 +130,9 @@
             <xs:complexType name="GroupContext">
                 <xs:sequence>
                     <xs:element minOccurs="0" name="alias" nillable="true" 
type="xs:string"/>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" 
name="cartridgeContexts" nillable="true" type="ax25:CartridgeContext"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" 
name="cartridgeContexts" nillable="true" type="ax21:CartridgeContext"/>
                     <xs:element minOccurs="0" name="deploymentPolicy" 
nillable="true" type="xs:string"/>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" 
name="groupContexts" nillable="true" type="ax25:GroupContext"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" 
name="groupContexts" nillable="true" type="ax21:GroupContext"/>
                     <xs:element minOccurs="0" name="groupMaxInstances" 
type="xs:int"/>
                     <xs:element minOccurs="0" name="groupMinInstances" 
type="xs:int"/>
                     <xs:element minOccurs="0" name="groupScalingEnabled" 
type="xs:boolean"/>
@@ -144,8 +144,8 @@
             <xs:complexType name="ServiceGroup">
                 <xs:sequence>
                     <xs:element maxOccurs="unbounded" minOccurs="0" 
name="cartridges" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="dependencies" 
nillable="true" type="ax210:Dependencies"/>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" 
name="groups" nillable="true" type="ax210:ServiceGroup"/>
+                    <xs:element minOccurs="0" name="dependencies" 
nillable="true" type="ax27:Dependencies"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" 
name="groups" nillable="true" type="ax27:ServiceGroup"/>
                     <xs:element minOccurs="0" name="groupscalingEnabled" 
type="xs:boolean"/>
                     <xs:element minOccurs="0" name="name" nillable="true" 
type="xs:string"/>
                 </xs:sequence>
@@ -158,53 +158,53 @@
                 </xs:sequence>
             </xs:complexType>
         </xs:schema>
-        <xs:schema 
xmlns:ax29="http://application.exception.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax27="http://pojo.applications.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax24="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax217="http://rmi.java/xsd"; 
xmlns:ax219="http://policy.exception.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax221="http://exception.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax222="http://common.stratos.apache.org/xsd"; 
xmlns:ax213="http://autoscale.policy.pojo.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax211="http://pojo.autoscaler.stratos.apache.org/xsd"; 
attributeFormDefault="qualified" elementFormDefault="qualified" 
targetNamespace="http://impl.services.autoscaler.stratos.apache.org";>
-            <xs:import 
namespace="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd"/>
+        <xs:schema xmlns:ax28="http://pojo.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax26="http://application.exception.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax24="http://pojo.applications.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax217="http://policy.exception.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax218="http://common.stratos.apache.org/xsd"; 
xmlns:ax215="http://exception.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax222="http://rmi.java/xsd"; 
xmlns:ax213="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd"; 
xmlns:ax210="http://autoscale.policy.pojo.autoscaler.stratos.apache.org/xsd"; 
attributeFormDefault="qualified" elementFormDefault="qualified" 
targetNamespace="http://impl.services.autoscaler.stratos.apache.org";>
             <xs:import 
namespace="http://pojo.applications.autoscaler.stratos.apache.org/xsd"/>
             <xs:import 
namespace="http://application.exception.autoscaler.stratos.apache.org/xsd"/>
             <xs:import 
namespace="http://pojo.autoscaler.stratos.apache.org/xsd"/>
             <xs:import 
namespace="http://autoscale.policy.pojo.autoscaler.stratos.apache.org/xsd"/>
-            <xs:import namespace="http://rmi.java/xsd"/>
-            <xs:import 
namespace="http://policy.exception.autoscaler.stratos.apache.org/xsd"/>
+            <xs:import 
namespace="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd"/>
             <xs:import 
namespace="http://exception.autoscaler.stratos.apache.org/xsd"/>
+            <xs:import 
namespace="http://policy.exception.autoscaler.stratos.apache.org/xsd"/>
             <xs:import namespace="http://common.stratos.apache.org/xsd"/>
-            <xs:element name="getApplicationPolicy">
+            <xs:import namespace="http://rmi.java/xsd"/>
+            <xs:element name="getApplications">
                 <xs:complexType>
-                    <xs:sequence>
-                        <xs:element minOccurs="0" name="applicationPolicyId" 
nillable="true" type="xs:string"/>
-                    </xs:sequence>
+                    <xs:sequence/>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="getApplicationPolicyResponse">
+            <xs:element name="getApplicationsResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" 
nillable="true" type="ax24:ApplicationPolicy"/>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" 
name="return" nillable="true" type="ax24:ApplicationContext"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="getApplications">
+            <xs:element name="getApplication">
                 <xs:complexType>
-                    <xs:sequence/>
+                    <xs:sequence>
+                        <xs:element minOccurs="0" name="applicationId" 
nillable="true" type="xs:string"/>
+                    </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="getApplicationsResponse">
+            <xs:element name="getApplicationResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element maxOccurs="unbounded" minOccurs="0" 
name="return" nillable="true" type="ax27:ApplicationContext"/>
+                        <xs:element minOccurs="0" name="return" 
nillable="true" type="ax24:ApplicationContext"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="AutoscalerServiceApplicationDefinitionException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" 
name="ApplicationDefinitionException" nillable="true" 
type="ax29:ApplicationDefinitionException"/>
+                        <xs:element minOccurs="0" 
name="ApplicationDefinitionException" nillable="true" 
type="ax25:ApplicationDefinitionException"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="addApplication">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="applicationContext" 
nillable="true" type="ax27:ApplicationContext"/>
+                        <xs:element minOccurs="0" name="applicationContext" 
nillable="true" type="ax24:ApplicationContext"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
@@ -218,7 +218,7 @@
             <xs:element name="getServiceGroupResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" 
nillable="true" type="ax210:ServiceGroup"/>
+                        <xs:element minOccurs="0" name="return" 
nillable="true" type="ax27:ServiceGroup"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
@@ -232,275 +232,276 @@
             <xs:element name="getAutoscalingPolicyResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" 
nillable="true" type="ax212:AutoscalePolicy"/>
+                        <xs:element minOccurs="0" name="return" 
nillable="true" type="ax29:AutoscalePolicy"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="getApplication">
+            <xs:element name="getApplicationPolicy">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="applicationId" 
nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="applicationPolicyId" 
nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="getApplicationResponse">
+            <xs:element name="getApplicationPolicyResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" 
nillable="true" type="ax27:ApplicationContext"/>
+                        <xs:element minOccurs="0" name="return" 
nillable="true" type="ax213:ApplicationPolicy"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="deleteApplication">
+            <xs:element name="serviceGroupExist">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="applicationId" 
nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="serviceName" 
nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="AutoscalerServiceRemoteException">
+            <xs:element name="serviceGroupExistResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="RemoteException" 
nillable="true" type="ax217:RemoteException"/>
+                        <xs:element minOccurs="0" name="return" 
type="xs:boolean"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element 
name="AutoscalerServiceInvalidApplicationPolicyException">
+            <xs:element name="AutoscalerServiceAutoScalerException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" 
name="InvalidApplicationPolicyException" nillable="true" 
type="ax29:InvalidApplicationPolicyException"/>
+                        <xs:element minOccurs="0" name="AutoScalerException" 
nillable="true" type="ax214:AutoScalerException"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="AutoscalerServiceInvalidPolicyException">
+            <xs:element name="getServiceGroups">
                 <xs:complexType>
-                    <xs:sequence>
-                        <xs:element minOccurs="0" 
name="InvalidPolicyException" nillable="true" 
type="ax219:InvalidPolicyException"/>
-                    </xs:sequence>
+                    <xs:sequence/>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="addApplicationPolicy">
+            <xs:element name="getServiceGroupsResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="applicationPolicy" 
nillable="true" type="ax24:ApplicationPolicy"/>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" 
name="return" nillable="true" type="ax27:ServiceGroup"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="removeApplicationPolicy">
+            <xs:element name="removeServiceGroup">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="applicationPolicyId" 
nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="groupName" 
nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element 
name="AutoscalerServiceApplicatioinPolicyNotExistsException">
+            <xs:element name="AutoscalerServiceInvalidPolicyException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" 
name="ApplicatioinPolicyNotExistsException" nillable="true" 
type="ax219:ApplicatioinPolicyNotExistsException"/>
+                        <xs:element minOccurs="0" 
name="InvalidPolicyException" nillable="true" 
type="ax217:InvalidPolicyException"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="updateApplicationPolicy">
+            <xs:element name="removeApplicationPolicy">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="applicationPolicy" 
nillable="true" type="ax24:ApplicationPolicy"/>
+                        <xs:element minOccurs="0" name="applicationPolicyId" 
nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="getApplicationPolicies">
+            <xs:element name="getAutoScalingPolicies">
                 <xs:complexType>
                     <xs:sequence/>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="getApplicationPoliciesResponse">
+            <xs:element name="getAutoScalingPoliciesResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element maxOccurs="unbounded" minOccurs="0" 
name="return" nillable="true" type="ax24:ApplicationPolicy"/>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" 
name="return" nillable="true" type="ax29:AutoscalePolicy"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="serviceGroupExist">
+            <xs:element name="addAutoScalingPolicy">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="serviceName" 
nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="autoscalePolicy" 
nillable="true" type="ax29:AutoscalePolicy"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="serviceGroupExistResponse">
+            <xs:element name="addAutoScalingPolicyResponse">
                 <xs:complexType>
                     <xs:sequence>
                         <xs:element minOccurs="0" name="return" 
type="xs:boolean"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="AutoscalerServiceAutoScalerException">
+            <xs:element name="updateAutoScalingPolicy">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="AutoScalerException" 
nillable="true" type="ax220:AutoScalerException"/>
+                        <xs:element minOccurs="0" name="autoscalePolicy" 
nillable="true" type="ax29:AutoscalePolicy"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="getServiceGroups">
+            <xs:element name="updateAutoScalingPolicyResponse">
                 <xs:complexType>
-                    <xs:sequence/>
+                    <xs:sequence>
+                        <xs:element minOccurs="0" name="return" 
type="xs:boolean"/>
+                    </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="getServiceGroupsResponse">
+            <xs:element name="removeAutoScalingPolicy">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element maxOccurs="unbounded" minOccurs="0" 
name="return" nillable="true" type="ax210:ServiceGroup"/>
+                        <xs:element minOccurs="0" name="autoscalePolicyId" 
nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="removeServiceGroup">
+            <xs:element name="removeAutoScalingPolicyResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="groupName" 
nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="return" 
type="xs:boolean"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="addAutoScalingPolicy">
+            <xs:element name="deployApplication">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="autoscalePolicy" 
nillable="true" type="ax212:AutoscalePolicy"/>
+                        <xs:element minOccurs="0" name="applicationId" 
nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="applicationPolicyId" 
nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="addAutoScalingPolicyResponse">
+            <xs:element name="deployApplicationResponse">
                 <xs:complexType>
                     <xs:sequence>
                         <xs:element minOccurs="0" name="return" 
type="xs:boolean"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="getAutoScalingPolicies">
+            <xs:element name="undeployApplication">
                 <xs:complexType>
-                    <xs:sequence/>
+                    <xs:sequence>
+                        <xs:element minOccurs="0" name="applicationId" 
nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="force" 
type="xs:boolean"/>
+                    </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="getAutoScalingPoliciesResponse">
+            <xs:element name="deleteApplication">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element maxOccurs="unbounded" minOccurs="0" 
name="return" nillable="true" type="ax212:AutoscalePolicy"/>
+                        <xs:element minOccurs="0" name="applicationId" 
nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="updateAutoScalingPolicy">
+            <xs:element name="AutoscalerServiceInvalidArgumentException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="autoscalePolicy" 
nillable="true" type="ax212:AutoscalePolicy"/>
+                        <xs:element minOccurs="0" 
name="InvalidArgumentException" nillable="true" 
type="ax214:InvalidArgumentException"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="updateAutoScalingPolicyResponse">
+            <xs:element name="updateClusterMonitor">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" 
type="xs:boolean"/>
+                        <xs:element minOccurs="0" name="clusterId" 
nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="properties" 
nillable="true" type="ax22:Properties"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="removeAutoScalingPolicy">
+            <xs:element name="AutoscalerServiceInvalidServiceGroupException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="autoscalePolicyId" 
nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" 
name="InvalidServiceGroupException" nillable="true" 
type="ax25:InvalidServiceGroupException"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="removeAutoScalingPolicyResponse">
+            <xs:element name="addServiceGroup">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" 
type="xs:boolean"/>
+                        <xs:element minOccurs="0" name="servicegroup" 
nillable="true" type="ax27:ServiceGroup"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="deployApplication">
+            <xs:element name="findClusterId">
                 <xs:complexType>
                     <xs:sequence>
                         <xs:element minOccurs="0" name="applicationId" 
nillable="true" type="xs:string"/>
-                        <xs:element minOccurs="0" name="applicationPolicyId" 
nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="alias" nillable="true" 
type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="deployApplicationResponse">
+            <xs:element name="findClusterIdResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" 
type="xs:boolean"/>
+                        <xs:element minOccurs="0" name="return" 
nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="undeployApplication">
+            <xs:element name="undeployServiceGroup">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="applicationId" 
nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="name" nillable="true" 
type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="AutoscalerServiceInvalidArgumentException">
+            <xs:element name="getApplicationNetworkPartitions">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" 
name="InvalidArgumentException" nillable="true" 
type="ax220:InvalidArgumentException"/>
+                        <xs:element minOccurs="0" name="applicationId" 
nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="updateClusterMonitor">
+            <xs:element name="getApplicationNetworkPartitionsResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="clusterId" 
nillable="true" type="xs:string"/>
-                        <xs:element minOccurs="0" name="properties" 
nillable="true" type="ax22:Properties"/>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" 
name="return" nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="AutoscalerServiceInvalidServiceGroupException">
+            <xs:element name="AutoscalerServiceRemoteException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" 
name="InvalidServiceGroupException" nillable="true" 
type="ax29:InvalidServiceGroupException"/>
+                        <xs:element minOccurs="0" name="RemoteException" 
nillable="true" type="ax219:RemoteException"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="addServiceGroup">
+            <xs:element 
name="AutoscalerServiceInvalidApplicationPolicyException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="servicegroup" 
nillable="true" type="ax210:ServiceGroup"/>
+                        <xs:element minOccurs="0" 
name="InvalidApplicationPolicyException" nillable="true" 
type="ax25:InvalidApplicationPolicyException"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="findClusterId">
+            <xs:element name="addApplicationPolicy">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="applicationId" 
nillable="true" type="xs:string"/>
-                        <xs:element minOccurs="0" name="alias" nillable="true" 
type="xs:string"/>
+                        <xs:element minOccurs="0" name="applicationPolicy" 
nillable="true" type="ax213:ApplicationPolicy"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="findClusterIdResponse">
+            <xs:element 
name="AutoscalerServiceApplicatioinPolicyNotExistsException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" 
nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" 
name="ApplicatioinPolicyNotExistsException" nillable="true" 
type="ax217:ApplicatioinPolicyNotExistsException"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="getApplicationNetworkPartitions">
+            <xs:element name="updateApplicationPolicy">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="applicationId" 
nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="applicationPolicy" 
nillable="true" type="ax213:ApplicationPolicy"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="getApplicationNetworkPartitionsResponse">
+            <xs:element name="getApplicationPolicies">
                 <xs:complexType>
-                    <xs:sequence>
-                        <xs:element maxOccurs="unbounded" minOccurs="0" 
name="return" nillable="true" type="xs:string"/>
-                    </xs:sequence>
+                    <xs:sequence/>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="undeployServiceGroup">
+            <xs:element name="getApplicationPoliciesResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="name" nillable="true" 
type="xs:string"/>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" 
name="return" nillable="true" type="ax213:ApplicationPolicy"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
         </xs:schema>
-        <xs:schema xmlns:ax23="http://common.stratos.apache.org/xsd"; 
attributeFormDefault="qualified" elementFormDefault="qualified" 
targetNamespace="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd";>
+        <xs:schema xmlns:ax212="http://common.stratos.apache.org/xsd"; 
attributeFormDefault="qualified" elementFormDefault="qualified" 
targetNamespace="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd";>
             <xs:import namespace="http://common.stratos.apache.org/xsd"/>
             <xs:complexType name="ApplicationPolicy">
                 <xs:sequence>
@@ -508,7 +509,7 @@
                     <xs:element minOccurs="0" name="id" nillable="true" 
type="xs:string"/>
                     <xs:element maxOccurs="unbounded" minOccurs="0" 
name="networkPartitionGroups" nillable="true" type="xs:string"/>
                     <xs:element maxOccurs="unbounded" minOccurs="0" 
name="networkPartitions" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="properties" 
nillable="true" type="ax23:Properties"/>
+                    <xs:element minOccurs="0" name="properties" 
nillable="true" type="ax22:Properties"/>
                 </xs:sequence>
             </xs:complexType>
         </xs:schema>
@@ -518,12 +519,12 @@
                     <xs:element minOccurs="0" name="message" nillable="true" 
type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
-            <xs:complexType name="InvalidApplicationPolicyException">
+            <xs:complexType name="InvalidServiceGroupException">
                 <xs:sequence>
                     <xs:element minOccurs="0" name="message" nillable="true" 
type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
-            <xs:complexType name="InvalidServiceGroupException">
+            <xs:complexType name="InvalidApplicationPolicyException">
                 <xs:sequence>
                     <xs:element minOccurs="0" name="message" nillable="true" 
type="xs:string"/>
                 </xs:sequence>

Reply via email to