http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/CartridgeInfoBean.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/CartridgeInfoBean.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/CartridgeInfoBean.java
index e29d028..eec247d 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/CartridgeInfoBean.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/CartridgeInfoBean.java
@@ -18,7 +18,12 @@
  */
 package org.apache.stratos.rest.endpoint.bean;
 
+import 
org.apache.stratos.rest.endpoint.bean.cartridge.definition.PersistenceBean;
+import org.apache.stratos.rest.endpoint.bean.cartridge.definition.PropertyBean;
+
 import javax.xml.bind.annotation.XmlRootElement;
+import java.util.ArrayList;
+import java.util.List;
 
 @XmlRootElement
 public class CartridgeInfoBean {
@@ -34,11 +39,15 @@ public class CartridgeInfoBean {
     String dataCartridgeAlias;
     boolean commitsEnabled;
 
-    private boolean persistanceRequired;
-    private String size;
-    private boolean removeOnTermination;
     private String serviceGroup;
 
+    private PersistenceBean persistence;
+
+    private List<PropertyBean> property;
+
+    public CartridgeInfoBean() {
+    }
+
     public String getCartridgeType() {
         return cartridgeType;
     }
@@ -119,31 +128,7 @@ public class CartridgeInfoBean {
         this.deploymentPolicy = deploymentPolicy;
     }
 
-    public boolean isPersistanceRequired() {
-        return persistanceRequired;
-    }
-
-    public void setPersistanceRequired(boolean persistanceRequired) {
-        this.persistanceRequired = persistanceRequired;
-    }
-
-    public String getSize() {
-        return size;
-    }
-
-    public void setSize(String size) {
-        this.size = size;
-    }
-
-    public boolean isRemoveOnTermination() {
-        return removeOnTermination;
-    }
-
-    public void setRemoveOnTermination(boolean removeOnTermination) {
-        this.removeOnTermination = removeOnTermination;
-    }
-
-       public boolean isCommitsEnabled() {
+    public boolean isCommitsEnabled() {
                return commitsEnabled;
        }
 
@@ -158,5 +143,20 @@ public class CartridgeInfoBean {
        public void setServiceGroup(String serviceGroup) {
                this.serviceGroup = serviceGroup;
        }
-    
+
+    public PersistenceBean getPersistence() {
+        return persistence;
+    }
+
+    public void setPersistence(PersistenceBean persistenceBean) {
+        this.persistence = persistenceBean;
+    }
+
+    public List<PropertyBean> getProperty() {
+        return property;
+    }
+
+    public void setProperty(List<PropertyBean> property) {
+        this.property = property;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/VolumeBean.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/VolumeBean.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/VolumeBean.java
index 7eabb45..a9d7441 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/VolumeBean.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/VolumeBean.java
@@ -23,6 +23,8 @@ import javax.xml.bind.annotation.XmlRootElement;
 @XmlRootElement
 public class VolumeBean {
 
+    public String id;
+
     public String size;
 
     public String device;
@@ -30,6 +32,10 @@ public class VolumeBean {
     public boolean removeOnTermination;
 
     public String mappingPath;
+    
+    public String snapshotId;
+
+    public String volumeId;
 
     public String toString () {
         return " [ Persistence Required : " + ", Size: " + size + ", device: " 
+

http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/CompositeApplicationDefinitionBean.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/CompositeApplicationDefinitionBean.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/CompositeApplicationDefinitionBean.java
new file mode 100644
index 0000000..2efc62b
--- /dev/null
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/CompositeApplicationDefinitionBean.java
@@ -0,0 +1,17 @@
+package org.apache.stratos.rest.endpoint.bean.compositeapplication.definition;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+import java.util.List;
+
+@XmlRootElement(name = "applicationDefinitionBean")
+
+public class CompositeApplicationDefinitionBean {
+       
+       public String applicationId;
+       public String alias;
+       public List<ConfigGroup> components;
+       public List<ConfigCartridge> cartridges;
+       
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigCartridge.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigCartridge.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigCartridge.java
new file mode 100644
index 0000000..85d57ce
--- /dev/null
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigCartridge.java
@@ -0,0 +1,8 @@
+package org.apache.stratos.rest.endpoint.bean.compositeapplication.definition;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "cartridge")
+public class ConfigCartridge {
+       public String alias;
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigDependencies.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigDependencies.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigDependencies.java
new file mode 100644
index 0000000..5efd201
--- /dev/null
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigDependencies.java
@@ -0,0 +1,57 @@
+package org.apache.stratos.rest.endpoint.bean.compositeapplication.definition;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "dependencies")
+public class ConfigDependencies {
+       public List<Pair> startup_order = new ArrayList<Pair>();
+       public String kill_behavior;
+               
+       /*
+       public String getKill_behavior() {
+               return kill_behavior;
+       }
+
+       public void setKill_behavior(String kill_behavior) {
+               this.kill_behavior = kill_behavior;
+       }
+
+       public List<Pair> getStartup_order() {
+               return startup_order;
+       }
+
+       public void setStartup_order(List<Pair> startup_order) {
+               this.startup_order = startup_order;
+       }
+       */
+       
+
+       public static class Pair {
+               private String key;
+               private String value;
+               
+               private Pair() {}
+               
+               public Pair(String key, String value) {
+                       this.key = key;
+                       this.value = value;
+               }
+               
+               public String getKey() {
+                       return key;
+               }
+               public void setKey(String key) {
+                       this.key = key;
+               }
+               public String getValue() {
+                       return value;
+               }
+               public void setValue(String value) {
+                       this.value = value;
+               }
+       }
+       
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigGroup.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigGroup.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigGroup.java
new file mode 100644
index 0000000..bbdd0e3
--- /dev/null
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigGroup.java
@@ -0,0 +1,35 @@
+package org.apache.stratos.rest.endpoint.bean.compositeapplication.definition;
+
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "components")
+public class ConfigGroup {
+       public  String alias;
+       public  List<String> subscribables;
+       public ConfigDependencies dependencies;
+       
+       /*
+       public String getAlias() {
+               return alias;
+       }
+       public void setAlias(String alias) {
+               this.alias = alias;
+       }
+       public List<String> getSubscribables() {
+               return subscribables;
+       }
+       public void setSubscribables(List<String> subscribables) {
+               this.subscribables = subscribables;
+       }
+       public ConfigDependencies getDependencies() {
+               return dependencies;
+       }
+       public void setDependencies(ConfigDependencies dependencies) {
+               this.dependencies = dependencies;
+       }
+       */
+
+       
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
index 1208967..84ddfbf 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
@@ -19,15 +19,31 @@
 
 package org.apache.stratos.rest.endpoint.bean.util.converter;
 
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.lang.StringUtils;
 import org.apache.stratos.cloud.controller.stub.pojo.*;
+import org.apache.stratos.manager.application.utils.ApplicationUtils;
 import org.apache.stratos.manager.deploy.service.Service;
 import org.apache.stratos.messaging.domain.topology.Cluster;
+import org.apache.stratos.messaging.domain.topology.CompositeApplication;
 import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.Partition;
 import 
org.apache.stratos.rest.endpoint.bean.autoscaler.partition.PartitionGroup;
 import org.apache.stratos.rest.endpoint.bean.autoscaler.policy.autoscale.*;
 import 
org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy;
 import org.apache.stratos.rest.endpoint.bean.cartridge.definition.*;
+import 
org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.CompositeApplicationDefinitionBean;
+import 
org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.ConfigCartridge;
+import 
org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.ConfigDependencies;
+import 
org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.ConfigGroup;
 import org.apache.stratos.rest.endpoint.bean.topology.Member;
+import org.apache.stratos.messaging.domain.topology.Cartridge;
+import org.apache.stratos.messaging.domain.topology.Composite;
+import org.apache.stratos.messaging.domain.topology.ConfigCompositeApplication;
+import org.apache.stratos.messaging.domain.topology.Dependencies;
+import org.apache.stratos.messaging.domain.topology.Group;
+import org.apache.stratos.messaging.domain.topology.Scalable;
+import 
org.apache.stratos.messaging.domain.topology.util.CompositeApplicationBuilder;
+import org.apache.commons.logging.Log;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -145,18 +161,25 @@ public class PojoConverter {
         return iaasConfigsArray;
     }
 
-    private static Persistence getPersistence(PersistenceBean persistenceBean) 
{
+    public static Persistence getPersistence(PersistenceBean persistenceBean) {
         Persistence persistence = new Persistence();
         persistence.setPersistanceRequired(persistenceBean.isRequired);
         VolumeBean[] volumeBean = new 
VolumeBean[persistenceBean.volume.size()];
         persistenceBean.volume.toArray(volumeBean);
-        Volume[] volumes = new Volume[persistenceBean.volume.size()];
-        for (int i = 0 ; i < volumes.length ; i++) {
+         Volume[] volumes = new Volume[persistenceBean.volume.size()];
+         for (int i = 0 ; i < volumes.length ; i++) {
             Volume volume = new Volume();
-            volume.setSize(Integer.parseInt(volumeBean[i].size));
+            volume.setId(volumeBean[i].id);
+            volume.setVolumeId(volumeBean[i].volumeId);
+            if(StringUtils.isEmpty(volume.getVolumeId())){
+                volume.setSize(Integer.parseInt(volumeBean[i].size));
+            }
+
             volume.setDevice(volumeBean[i].device);
             volume.setRemoveOntermination(volumeBean[i].removeOnTermination);
             volume.setMappingPath(volumeBean[i].mappingPath);
+            volume.setSnapshotId(volumeBean[i].snapshotId);
+
             volumes[i] = volume;
         }
         persistence.setVolumes(volumes);
@@ -164,7 +187,7 @@ public class PojoConverter {
 
     }
 
-    private static Properties getProperties (List<PropertyBean> propertyBeans) 
{
+    public static Properties getProperties(List<PropertyBean> propertyBeans) {
 
         //convert to an array
         PropertyBean [] propertyBeansArray = new 
PropertyBean[propertyBeans.size()];
@@ -636,4 +659,124 @@ public class PojoConverter {
 
         return serviceDefinitionBeans;
     }
+    
+       private static Log log = LogFactory.getLog(PojoConverter.class);
+       
+       
+       public static ConfigCompositeApplication 
convertToCompositeApplication(CompositeApplicationDefinitionBean appBean) {
+               ConfigCompositeApplication configApp = new 
ConfigCompositeApplication();
+               
+               configApp.setAlias(appBean.alias);
+               configApp.setApplicationId(appBean.applicationId);
+               
+               
List<org.apache.stratos.messaging.domain.topology.ConfigCartridge> 
configCartridges = 
+                               new 
ArrayList<org.apache.stratos.messaging.domain.topology.ConfigCartridge>();
+               
+               for (ConfigCartridge beanCartridge : appBean.cartridges ) {
+                       
org.apache.stratos.messaging.domain.topology.ConfigCartridge configCartridge = 
+                                       new 
org.apache.stratos.messaging.domain.topology.ConfigCartridge();
+                       configCartridge.setAlias(beanCartridge.alias);
+                       configCartridges.add(configCartridge);
+               }
+               configApp.setCartridges(configCartridges);
+               
+               // converting groups / components
+               List<org.apache.stratos.messaging.domain.topology.ConfigGroup> 
configGroups = 
+                               new 
ArrayList<org.apache.stratos.messaging.domain.topology.ConfigGroup>();
+               
+               for (ConfigGroup beanGroup : appBean.components ) {
+                       
org.apache.stratos.messaging.domain.topology.ConfigGroup configGroup = 
+                                       new 
org.apache.stratos.messaging.domain.topology.ConfigGroup();
+                       configGroup.setAlias(beanGroup.alias);
+                       configGroup.setSubscribables(beanGroup.subscribables);
+                       
org.apache.stratos.messaging.domain.topology.ConfigDependencies configDep = 
+                                       new 
org.apache.stratos.messaging.domain.topology.ConfigDependencies();
+                       
+                       
+                       // convert dependencies
+                       
configDep.setKill_behavior(beanGroup.dependencies.kill_behavior);
+                       
List<org.apache.stratos.messaging.domain.topology.ConfigDependencies.Pair> 
configPairs = 
+                                       new 
ArrayList<org.apache.stratos.messaging.domain.topology.ConfigDependencies.Pair>();
+                       for (ConfigDependencies.Pair beanPair : 
beanGroup.dependencies.startup_order) {
+                               configPairs.add(new 
org.apache.stratos.messaging.domain.topology.ConfigDependencies.Pair(beanPair.getKey(),
 beanPair.getValue()));
+                       }
+                       configDep.setStartup_order(configPairs);
+                       configGroup.setDependencies(configDep);
+                       
+                       configGroups.add(configGroup);
+               }
+               configApp.setComponents(configGroups);
+               
+               return configApp;
+       }
+       
+       // grouping
+       public static CompositeApplicationDefinition 
convertToCompositeApplicationForCC (CompositeApplicationDefinitionBean appBean) 
{
+               CompositeApplicationDefinition configApp = new 
CompositeApplicationDefinition();
+               
+               configApp.setAlias(appBean.alias);
+               configApp.setApplicationId(appBean.applicationId);
+               
+               
+               
+               
List<org.apache.stratos.cloud.controller.stub.pojo.ConfigCartridge> 
configCartridges = 
+                               new 
ArrayList<org.apache.stratos.cloud.controller.stub.pojo.ConfigCartridge>();
+               
+               for (ConfigCartridge beanCartridge : appBean.cartridges ) {
+                       
org.apache.stratos.cloud.controller.stub.pojo.ConfigCartridge configCartridge = 
+                                       new 
org.apache.stratos.cloud.controller.stub.pojo.ConfigCartridge();
+                       configCartridge.setAlias(beanCartridge.alias);
+                       configCartridges.add(configCartridge);
+               }
+               org.apache.stratos.cloud.controller.stub.pojo.ConfigCartridge 
[] arrayConfigCartridge = 
+                               new 
org.apache.stratos.cloud.controller.stub.pojo.ConfigCartridge[configCartridges.size()];
+               arrayConfigCartridge = 
configCartridges.toArray(arrayConfigCartridge);
+               configApp.setCartridges(arrayConfigCartridge);
+               
+               // converting groups / components
+               List<org.apache.stratos.cloud.controller.stub.pojo.ConfigGroup> 
configGroups = 
+                               new 
ArrayList<org.apache.stratos.cloud.controller.stub.pojo.ConfigGroup>();
+               
+               for (ConfigGroup beanGroup : appBean.components ) {
+                       
org.apache.stratos.cloud.controller.stub.pojo.ConfigGroup configGroup = 
+                                       new 
org.apache.stratos.cloud.controller.stub.pojo.ConfigGroup();
+                       configGroup.setAlias(beanGroup.alias);
+                       String [] arraySubscribables = new 
String[beanGroup.subscribables.size()];
+                       arraySubscribables = 
beanGroup.subscribables.toArray(arraySubscribables);
+                       configGroup.setSubscribables(arraySubscribables);
+                       
org.apache.stratos.cloud.controller.stub.pojo.ConfigDependencies configDep = 
+                                       new 
org.apache.stratos.cloud.controller.stub.pojo.ConfigDependencies();
+                       
+                       
+                       // convert dependencies
+                       
configDep.setKill_behavior(beanGroup.dependencies.kill_behavior);
+                       int i = 0;
+                       
org.apache.stratos.cloud.controller.stub.pojo.ConfigDependencyPair[] 
configPairs = 
+                                       new 
org.apache.stratos.cloud.controller.stub.pojo.ConfigDependencyPair[beanGroup.dependencies.startup_order.size()];
+                       
+                       for (ConfigDependencies.Pair beanPair : 
beanGroup.dependencies.startup_order) {
+                               //configPairs.add(new 
org.apache.stratos.messaging.domain.topology.ConfigDependencies.Pair(beanPair.getKey(),
 beanPair.getValue()));
+                               
+                               
org.apache.stratos.cloud.controller.stub.pojo.ConfigDependencyPair pair = new 
org.apache.stratos.cloud.controller.stub.pojo.ConfigDependencyPair();
+                               pair.setKey(beanPair.getKey());
+                               pair.setValue(beanPair.getValue());
+                               
+                               configPairs[i] = pair;
+                               i++;
+                       }
+                       configDep.setStartup_order(configPairs);
+                       configGroup.setDependencies(configDep);
+                       
+                       configGroups.add(configGroup);
+                       
+               }
+               org.apache.stratos.cloud.controller.stub.pojo.ConfigGroup [] 
configGroupArray  =  
+                               new 
org.apache.stratos.cloud.controller.stub.pojo.ConfigGroup[configGroups.size()];
+               configGroupArray = configGroups.toArray(configGroupArray);
+               configApp.setComponents(configGroupArray);
+               
+               return configApp;
+       }
+    
+    
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
index 44b2c26..c88acf1 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
@@ -23,14 +23,19 @@ import org.apache.axis2.context.ConfigurationContext;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
+import org.apache.stratos.cloud.controller.stub.pojo.*;
 import org.apache.stratos.cloud.controller.stub.pojo.CartridgeConfig;
 import org.apache.stratos.cloud.controller.stub.pojo.CartridgeInfo;
+import 
org.apache.stratos.cloud.controller.stub.pojo.CompositeApplicationDefinition;
 import org.apache.stratos.cloud.controller.stub.pojo.Property;
 import 
org.apache.stratos.autoscaler.stub.AutoScalerServiceInvalidPartitionExceptionException;
 import 
org.apache.stratos.autoscaler.stub.AutoScalerServiceInvalidPolicyExceptionException;
 import 
org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidCartridgeDefinitionExceptionException;
 import 
org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidCartridgeTypeExceptionException;
+import 
org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidCompositeApplicationDefinitionExceptionException;
 import 
org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidIaasProviderExceptionException;
+import org.apache.stratos.manager.application.CompositeApplicationManager;
+import org.apache.stratos.manager.application.utils.ApplicationUtils;
 import org.apache.stratos.manager.client.AutoscalerServiceClient;
 import org.apache.stratos.manager.client.CloudControllerServiceClient;
 import org.apache.stratos.manager.deploy.service.Service;
@@ -48,6 +53,7 @@ import 
org.apache.stratos.manager.topology.model.TopologyClusterInformationModel
 import org.apache.stratos.manager.utils.ApplicationManagementUtil;
 import org.apache.stratos.manager.utils.CartridgeConstants;
 import org.apache.stratos.messaging.domain.topology.Cluster;
+import org.apache.stratos.messaging.domain.topology.ConfigCompositeApplication;
 import org.apache.stratos.messaging.domain.topology.Member;
 import org.apache.stratos.messaging.domain.topology.MemberStatus;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
@@ -58,10 +64,15 @@ import 
org.apache.stratos.rest.endpoint.bean.autoscaler.partition.Partition;
 import 
org.apache.stratos.rest.endpoint.bean.autoscaler.partition.PartitionGroup;
 import 
org.apache.stratos.rest.endpoint.bean.autoscaler.policy.autoscale.AutoscalePolicy;
 import 
org.apache.stratos.rest.endpoint.bean.cartridge.definition.CartridgeDefinitionBean;
+import 
org.apache.stratos.rest.endpoint.bean.cartridge.definition.PersistenceBean;
 import 
org.apache.stratos.rest.endpoint.bean.cartridge.definition.ServiceDefinitionBean;
+import 
org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.CompositeApplicationDefinitionBean;
+import 
org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.ConfigDependencies;
+import 
org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.ConfigGroup;
 import 
org.apache.stratos.rest.endpoint.bean.repositoryNotificationInfoBean.Payload;
 import org.apache.stratos.rest.endpoint.bean.util.converter.PojoConverter;
 import org.apache.stratos.rest.endpoint.exception.RestAPIException;
+import org.apache.stratos.messaging.domain.topology.CompositeApplication;
 
 import javax.ws.rs.core.Response;
 
@@ -74,6 +85,7 @@ public class ServiceUtils {
     public static final String SHOULD_DELETE_VOLUME = 
"volume.delete.on.unsubscription";
     public static final String VOLUME_SIZE = "volume.size.gb";
     public static final String DEVICE_NAME = "volume.device.name";
+    public static final String VOLUME_ID = "volume.id";
 
     private static Log log = LogFactory.getLog(ServiceUtils.class);
     private static CartridgeSubscriptionManager cartridgeSubsciptionManager = 
new CartridgeSubscriptionManager();
@@ -120,6 +132,197 @@ public class ServiceUtils {
         stratosAdminResponse.setMessage("Successfully deployed cartridge 
definition with type " + cartridgeDefinitionBean.type);
         return stratosAdminResponse;
     }
+    
+    // Grouping
+    /*
+    static StratosAdminResponse 
deployApplication(CompositeApplicationDefinitionBean applicationDefinitionBean, 
ConfigurationContext ctxt,
+            String userName, String tenantDomain) throws RestAPIException {
+
+               log.info("Starting to deploy a application " + 
applicationDefinitionBean);
+               
+               if (log.isDebugEnabled()) {
+                       log.debug("application data id:" + 
applicationDefinitionBean.applicationId + " /alias: " + 
+                                       applicationDefinitionBean.alias);
+                       if (applicationDefinitionBean.components != null) {
+                               log.debug("application config groups size " + 
applicationDefinitionBean.components.size());
+                               for (ConfigGroup cfg : 
applicationDefinitionBean.components) {
+                                       log.debug("listing application config 
groups "  + cfg.alias + " /sub " + 
+                                              cfg.subscribables + " /dep " + 
cfg.dependencies);
+                                       if (cfg.dependencies != null) {
+                                               log.debug("listing application 
group dependencies: kill: " +  
+                                                      
cfg.dependencies.kill_behavior + " / startup: " + 
+                                                      
cfg.dependencies.startup_order);
+                                               if 
(cfg.dependencies.startup_order != null) {
+                                                       for 
(ConfigDependencies.Pair pair :  cfg.dependencies.startup_order) {
+                                                               
log.debug("listing dependencies pairs : " + pair.getKey() + " / " + 
pair.getValue());
+                                                       }
+                                               }
+                                       }
+                               }
+                       } else {
+                               log.debug("no config group in application");
+                       }
+
+               }
+
+               // convert to json
+               String applicationId = applicationDefinitionBean.applicationId;
+               
+               if (log.isDebugEnabled()) {
+                       log.debug("publishing application created event " + 
applicationId);
+               }
+               
+               // convert to domain object - move to ojoConverted
+               ConfigCompositeApplication app = 
PojoConverter.convertToCompositeApplication(applicationDefinitionBean);
+               if (log.isDebugEnabled()) {
+                       log.debug("converted application to 
CompositeApplication " + app);
+               }
+               CompositeApplicationManager manager = new 
CompositeApplicationManager();
+               
+               
+                       try {
+                               manager.deployCompositeApplication(app);
+                       } catch (ADCException e) {
+                               // TODO Auto-generated catch block
+                               e.printStackTrace();
+                               String message = e.getMessage();
+                               log.error(message, e);
+                               throw new RestAPIException(message, e);
+                       }
+               
+               log.info("l [type] " + applicationDefinitionBean);
+               // deploy to cloud controller
+               CloudControllerServiceClient cloudControllerServiceClient = 
getCloudControllerServiceClient();
+            
+               
+               if (log.isDebugEnabled()) {
+                       log.debug("deployeing composite app in cloud 
controller");
+               }
+            
+            
ServiceUtils.deployCompositeApplicationDefinition(applicationDefinitionBean, 
ctxt, userName, tenantDomain);
+                
+            if (log.isDebugEnabled()) {
+                       log.debug("done deployeing composite app in cloud 
controller");
+               }
+
+               StratosAdminResponse stratosAdminResponse = new 
StratosAdminResponse();
+               stratosAdminResponse.setMessage("Successfully deployed 
application definition w" + applicationDefinitionBean);
+               return stratosAdminResponse;
+    } */
+    
+    static StratosAdminResponse deployCompositeApplicationDefinition 
(CompositeApplicationDefinitionBean compositeApplicationDefinition, 
ConfigurationContext ctxt,
+            String userName, String tenantDomain) throws RestAPIException {
+
+            log.info("Starting to deploy composite application definition "+  
compositeApplicationDefinition);
+            
+            CompositeApplicationDefinition appConfig = 
PojoConverter.convertToCompositeApplicationForCC(compositeApplicationDefinition);
+            
+
+            CloudControllerServiceClient cloudControllerServiceClient = 
getCloudControllerServiceClient();
+            
+            if (cloudControllerServiceClient != null) {
+                       // call CC
+               try {
+                                       cloudControllerServiceClient
+                                       
.deployCompositeApplicationDefinition(appConfig);
+                               } catch (RemoteException e) {
+                                       // TODO Auto-generated catch block
+                                       e.printStackTrace();
+                                       log.error(e.getMessage(), e);
+                               throw new RestAPIException(e.getMessage(), e);
+                               } catch 
(CloudControllerServiceInvalidCompositeApplicationDefinitionExceptionException 
e) {
+                                       // TODO Auto-generated catch block
+                                       e.printStackTrace();
+                                       //String message = 
e.getFaultMessage().getInvalidCompositeApplicationDefinitionException().getMessage();
+                                       String message = 
"CloudControllerServiceInvalidCompositeApplicationDefinitionExceptionException";
+                               log.error(message, e);
+                               throw new RestAPIException(message, e);
+                               } catch 
(CloudControllerServiceInvalidIaasProviderExceptionException e) {
+                                       // TODO Auto-generated catch block
+                                       e.printStackTrace();
+                                       String message = 
e.getFaultMessage().getInvalidIaasProviderException().getMessage();
+                               log.error(message, e);
+                               throw new RestAPIException(message, e);
+                               }
+               
+                log.info("Successfully composite application to cloud 
controller");
+                    
+            }
+
+            StratosAdminResponse stratosAdminResponse = new 
StratosAdminResponse();
+            stratosAdminResponse.setMessage("Successfully composite 
application to cloud controller");
+            return stratosAdminResponse;
+        }
+    
+    static StratosAdminResponse unDeployApplication(String 
configCompositeApplicationAlias, ConfigurationContext ctxt,
+            String userName, String tenantDomain) throws RestAPIException {
+
+               log.info("Starting to undeploy a composite application 
definition " + configCompositeApplicationAlias);
+               
+               CloudControllerServiceClient cloudControllerServiceClient = 
getCloudControllerServiceClient();
+            
+            if (cloudControllerServiceClient != null) {
+               try {
+                       if (log.isDebugEnabled()) {
+                               log.debug("trying to undeploy composite 
application definition " + configCompositeApplicationAlias);
+                       }
+                                       
cloudControllerServiceClient.unDeployCompositeApplicationDefinition(configCompositeApplicationAlias);
+                               } catch (RemoteException e) {
+                                       // TODO Auto-generated catch block
+                                       e.printStackTrace();
+                                       String message = "Remote 
ExceptionException";
+                               log.error(message, e);
+                               throw new RestAPIException(message, e);
+                               } catch 
(CloudControllerServiceInvalidCompositeApplicationDefinitionExceptionException 
e) {
+                                       // TODO Auto-generated catch block
+                                       e.printStackTrace();
+                                       String message = 
"CloudControllerServiceInvalidCompositeApplicationDefinitionExceptionException";
+                               log.error(message, e);
+                               throw new RestAPIException(message, e);
+                               } catch 
(CloudControllerServiceInvalidIaasProviderExceptionException e) {
+                                       // TODO Auto-generated catch block
+                                       e.printStackTrace();
+                                       String message = 
"CloudControllerServiceInvalidIaasProviderExceptionException";
+                               log.error(message, e);
+                               throw new RestAPIException(message, e);
+                               }
+            } else {
+               if (log.isDebugEnabled()) {
+                       log.debug("cloud controller client is null while trying 
to undeploy composite application definition");
+               }
+            }
+               
+               log.info("l [type] " + configCompositeApplicationAlias);
+
+               StratosAdminResponse stratosAdminResponse = new 
StratosAdminResponse();
+               stratosAdminResponse.setMessage("Successfully un-deployed 
application with alias " + configCompositeApplicationAlias);
+               return stratosAdminResponse;
+    }
+    
+    
+    static StratosAdminResponse unDeployApplicationOld(String 
configCompositeApplicationAlias, ConfigurationContext ctxt,
+            String userName, String tenantDomain) throws RestAPIException {
+
+               log.info("Starting to undeploy a composite application " + 
configCompositeApplicationAlias);
+               
+               CompositeApplicationManager manager = new 
CompositeApplicationManager();        
+               
+                       try {
+                               
manager.unDeployCompositeApplication(configCompositeApplicationAlias);
+                       } catch (ADCException e) {
+                               // TODO Auto-generated catch block
+                               e.printStackTrace();
+                               String message = e.getMessage();
+                               log.error(message, e);
+                               throw new RestAPIException(message, e);
+                       }
+               
+               log.info("l [type] " + configCompositeApplicationAlias);
+
+               StratosAdminResponse stratosAdminResponse = new 
StratosAdminResponse();
+               stratosAdminResponse.setMessage("Successfully un-deployed 
application with alias " + configCompositeApplicationAlias);
+               return stratosAdminResponse;
+    }
 
     @SuppressWarnings("unused")
     private static DeploymentPolicy[] intersection(
@@ -993,14 +1196,30 @@ public class ServiceUtils {
         
subscriptionData.setCommitsEnabled(cartridgeInfoBean.isCommitsEnabled());
         subscriptionData.setServiceGroup(cartridgeInfoBean.getServiceGroup());
         
+
+        PersistenceBean persistenceBean = cartridgeInfoBean.getPersistence();
+        if(persistenceBean != null) {
+            
subscriptionData.setPersistence(PojoConverter.getPersistence(persistenceBean));
+        }
+        if(cartridgeInfoBean.getProperty() != null){
+            
subscriptionData.setProperties(PojoConverter.getProperties(cartridgeInfoBean.getProperty()));
+        }
+
+        /*
+        if (cartridgeInfoBean.getPersistence() != null) {
+
         if (cartridgeInfoBean.isPersistanceRequired()) {
             // Add persistence related properties to PersistenceContext
             PersistenceContext persistenceContext = new PersistenceContext();
             
persistenceContext.setPersistanceRequiredProperty(IS_VOLUME_REQUIRED, 
String.valueOf(cartridgeInfoBean.isPersistanceRequired()));
             persistenceContext.setSizeProperty(VOLUME_SIZE, 
cartridgeInfoBean.getSize());
             
persistenceContext.setDeleteOnTerminationProperty(SHOULD_DELETE_VOLUME, 
String.valueOf(cartridgeInfoBean.isRemoveOnTermination()));
+            if(cartridgeInfoBean.getVolumeId() != null) {
+                persistenceContext.setVolumeIdProperty(VOLUME_ID, 
String.valueOf(cartridgeInfoBean.getVolumeId()));
+            }
             subscriptionData.setPersistanceCtxt(persistenceContext);
         }
+        */
 
         //subscribe
         return 
cartridgeSubsciptionManager.subscribeToCartridgeWithProperties(subscriptionData);
@@ -1072,6 +1291,7 @@ public class ServiceUtils {
             
subscriptionData.setTenantId(ApplicationManagementUtil.getTenantId(configurationContext));
             subscriptionData.setTenantAdminUsername(userName);
             subscriptionData.setRepositoryType("git");
+            //subscriptionData.setPayloadProperties(props);
             //subscriptionData.setProperties(props);
             subscriptionData.setPrivateRepository(false);
 
@@ -1082,6 +1302,7 @@ public class ServiceUtils {
             
cartridgeSubscription.getPayloadData().add("LOAD_BALANCED_SERVICE_TYPE", 
loadBalancedCartridgeType);
 
             Properties lbProperties = new Properties();
+            lbProperties.setPayloadProperties(props);
             lbProperties.setProperties(props);
             
cartridgeSubsciptionManager.registerCartridgeSubscription(cartridgeSubscription,
 lbProperties);
             

http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
index 7b744a5..a836fb7 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
@@ -39,6 +39,7 @@ import 
org.apache.stratos.rest.endpoint.bean.autoscaler.policy.autoscale.Autosca
 import 
org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy;
 import 
org.apache.stratos.rest.endpoint.bean.cartridge.definition.CartridgeDefinitionBean;
 import 
org.apache.stratos.rest.endpoint.bean.cartridge.definition.ServiceDefinitionBean;
+import 
org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.CompositeApplicationDefinitionBean;
 import 
org.apache.stratos.rest.endpoint.bean.repositoryNotificationInfoBean.Payload;
 import 
org.apache.stratos.rest.endpoint.bean.repositoryNotificationInfoBean.Repository;
 import org.apache.stratos.rest.endpoint.bean.topology.Cluster;
@@ -105,6 +106,75 @@ public class StratosAdmin extends AbstractAdmin {
         return Response.ok().header("WWW-Authenticate", 
"Basic").type(MediaType.APPLICATION_JSON).
                 
entity(Utils.buildAuthenticationSuccessMessage(sessionId)).build();
     }
+    
+    @POST
+    @Path("/application/definition/")
+    @Produces("application/json")
+    @Consumes("application/json")
+    @AuthorizationAction("/permission/protected/manage/monitor/tenants")
+    @SuperTenantService(true)
+    // Grouping
+    public StratosAdminResponse 
deployApplicationDefinition(CompositeApplicationDefinitionBean 
applicationDefinitionBean)
+            throws RestAPIException {
+
+        /*return ServiceUtils.deployApplication(applicationDefinitionBean, 
getConfigContext(), getUsername(),
+                                     getTenantDomain());
+                                     */
+       return 
ServiceUtils.deployCompositeApplicationDefinition(applicationDefinitionBean, 
getConfigContext(), getUsername(),
+                                     getTenantDomain());
+
+    }
+    
+    @POST
+    @Path("/application/definition/undeploy")
+    @Produces("application/json")
+    @Consumes("application/json")
+    @AuthorizationAction("/permission/protected/manage/monitor/tenants")
+    @SuperTenantService(true)
+    // Grouping
+    public StratosAdminResponse unDeployApplicationDefinition(String alias)
+            throws RestAPIException {
+
+        return ServiceUtils.unDeployApplication(alias, getConfigContext(), 
getUsername(),
+                                     getTenantDomain());
+
+    }
+    
+
+    
+    @DELETE
+    @Path("/application/definition/{applicationAlias}")
+    @Produces("application/json")
+    @Consumes("application/json")
+    @AuthorizationAction("/permission/protected/manage/monitor/tenants")
+    @SuperTenantService(true)
+    // Grouping
+    public StratosAdminResponse 
unDeployApplicationDefinitionX(@PathParam("applicationAlias")String  
configCompositeApplicationAlias)
+            throws RestAPIException {
+
+        return 
ServiceUtils.unDeployApplication(configCompositeApplicationAlias, 
getConfigContext(), getUsername(),
+                getTenantDomain());
+
+    }
+    
+    
+    
+    /*
+     * Grouping --- fix  API, use this instead of POST to remove application 
!!!!
+   
+    @DELETE
+    @Path("/cartridge/definition/{cartridgeType}")
+    @Produces("application/json")
+    @Consumes("application/json")
+    @AuthorizationAction("/permission/protected/manage/monitor/tenants")
+    @SuperTenantService(true)
+    public StratosAdminResponse unDeployCartridgeDefinition 
(@PathParam("cartridgeType") String cartridgeType) throws RestAPIException {
+
+        return ServiceUtils.undeployCartridge(cartridgeType);
+    }
+    nnnnnn
+    */
+    
 
     @POST
     @Path("/cartridge/definition/")

http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh
----------------------------------------------------------------------
diff --git 
a/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh 
b/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh
index db86d7d..317da88 100644
--- a/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh
+++ b/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh
@@ -44,7 +44,8 @@ properties="-Dmb.ip=MB-IP
            -Dmonitoring.server.port=MONITORING-SERVER-PORT
            -Dmonitoring.server.secure.port=MONITORING-SERVER-SECURE-PORT
            -Dmonitoring.server.admin.username=MONITORING-SERVER-ADMIN-USERNAME
-           -Dmonitoring.server.admin.password=MONITORING-SERVER-ADMIN-PASSWORD"
+           -Dmonitoring.server.admin.password=MONITORING-SERVER-ADMIN-PASSWORD
+           -DAPP_PATH=APP-PATH"
 
 # Uncomment below line to enable remote debugging
 #debug="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"

http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/products/cartridge-agent/modules/distribution/src/main/conf/templates/jndi.properties.template
----------------------------------------------------------------------
diff --git 
a/products/cartridge-agent/modules/distribution/src/main/conf/templates/jndi.properties.template
 
b/products/cartridge-agent/modules/distribution/src/main/conf/templates/jndi.properties.template
index c6b062a..45b8d7a 100644
--- 
a/products/cartridge-agent/modules/distribution/src/main/conf/templates/jndi.properties.template
+++ 
b/products/cartridge-agent/modules/distribution/src/main/conf/templates/jndi.properties.template
@@ -20,6 +20,6 @@
 # Please use loadbalancer.conf for updating mb-ip, mb-port and 
templates/jndi.properties.template
 # file for updating other configurations.
 #
-connectionfactoryName=topicConnectionfactory
-connectionfactory.topicConnectionfactory=amqp://admin:admin@carbon/carbon?brokerlist='tcp://$mb_ip:$mb_port'
-java.naming.factory.initial=org.wso2.andes.jndi.PropertiesFileInitialContextFactory
+connectionfactoryName=TopicConnectionFactory
+connectionfactory.topicConnectionfactory=tcp://$mb_ip:$mb_port
+java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory

http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/products/cartridge-agent/modules/distribution/src/main/extensions/mount_volumes.sh
----------------------------------------------------------------------
diff --git 
a/products/cartridge-agent/modules/distribution/src/main/extensions/mount_volumes.sh
 
b/products/cartridge-agent/modules/distribution/src/main/extensions/mount_volumes.sh
index 48f3ceb..63e303f 100755
--- 
a/products/cartridge-agent/modules/distribution/src/main/extensions/mount_volumes.sh
+++ 
b/products/cartridge-agent/modules/distribution/src/main/extensions/mount_volumes.sh
@@ -28,8 +28,8 @@ log=/var/log/apache-stratos/cartridge-agent-extensions.log
 echo -e "Starting mounting volumes" 2>&1 | tee -a $log
 
 # $1  is passed from Cartridge Agent code.
-echo -e "launh param file location $1" | tee -a $log
-#source /opt/apache-stratos-cartridge-agent/launch.params
+echo -e "launch param file location $1" | tee -a $log
+
 PERSISTENCE_MAPPING=$1
 echo -e "Persistance mappings : $PERSISTENCE_MAPPING" 2>&1 | tee -a $log
 
@@ -37,8 +37,29 @@ mount_volume(){
 
         device=$1;
         mount_point=$2;
-        echo "device $device"
-        echo "point  $mount_point"
+    echo -e "device $device" | tee -a $log
+        echo -e "mount point  $mount_point"| tee -a $log
+
+
+        if [  "$mount_point" = "null" ]
+        then
+              echo -e "[ERROR] Mount point can not be null" | tee -a $log
+          return
+        fi
+
+        if [  "$device" = "null" ]
+        then
+              echo -e "[ERROR] Device can not be null" | tee -a $log
+          return
+        fi
+
+        device_exist=`sudo fdisk -l $device`;
+        if [ "$device_exist" = "" ]
+        then
+              echo -e "[ERROR] Device $device does not exist in this 
instance." | tee -a $log
+          return
+    fi
+
         # check if the volume has a file system
         output=`sudo file -s $device`;
         echo $output | tee -a $log
@@ -59,15 +80,15 @@ mount_volume(){
         if [ ! -d "$mount_point" ]
         then
               echo "creating the  mount point directory $mount_point since it 
does not exist." | tee -a $log
-              sudo mkdir $mount_point
+              sudo mkdir -p $mount_point
         fi
 
         #mounting the device if it is not already mounted
         if [ ! "$device_mounted" = "" ]
         then
-              echo -e "Device $device is already mounted." | tee -a $log
+              echo -e "[WARNING] Device $device is already mounted." | tee -a 
$log
         else
-              sudo mount $device $mount_point
+              sudo mount $device $mount_point  2>&1 | tee -a $log
         fi
 
 }
@@ -75,12 +96,65 @@ mount_volume(){
 IFS='|' read -ra ADDR <<< "${PERSISTENCE_MAPPING}"
 echo "${ADDR[@]}" | tee -a $log
 
+echo -e "\n Volumes before mounting...." | tee -a $log
+output=`/bin/lsblk`
+echo -e "\n$output\n" | tee -a $log
+output=`/sbin/blkid`
+echo -e "\n$output\n" | tee -a $log
+
+totalcount=0
 for i in "${!ADDR[@]}"; do
-        # expected PERSISTANCE_MAPPING format is 
device1|mountPoint1|device2|mountpoint2...
-        # so that even indexes are devices and odd indexes are mount points..
-        if (( $i  % 2 == 0 ))
+        # expected PERSISTANCE_MAPPING format is 
device1|volumeID1|mountPoint1|device2|volumeID2|mountpoint2...
+        if (( $i  % 3 == 0 ))
         then
-           mount_volume ${ADDR[$i]} ${ADDR[$i + 1]}
+           devicelist[$totalcount]=${ADDR[$i]}
+           mountpathlist[$totalcount]=${ADDR[$i + 2]}
+           totalcount=$((totalcount+1))
+           lastdevice=${ADDR[$i]}
         fi
 done
 
+
+device_exist=`sudo fdisk -l $lastdevice`;
+if [ "$device_exist" = "" ]
+then
+# Last device doesn't exist, which means devices are not attached as per the 
order given in the payload
+# So start mounting from the last available device and come down
+    devlist=`sudo lsblk -n | cut -f 1 -d " "`
+    devcount=`echo ${devlist} | awk '{print NF}'`
+    totalcount=$((totalcount-1))
+        counter=0
+    for ((i=${devcount}-1; totalcount>=0; i--)); do
+        devnum=`expr ${devcount} - ${counter}`
+        currdevice=`echo ${devlist} | cut -d " " -f ${devnum}`
+        fileout=`sudo file -s /dev/${currdevice}`
+        if [[ $fileout == *ROM* ]] || [[ $fileout == *boot* ]] || [[ $fileout 
== *cloud* ]] || [[ $fileout == *not-regular* ]] || [[ $fileout == *empty* ]] 
|| [[ $fileout == *swap* ]]
+        then
+            # Ignore special files as checked above...
+            counter=`expr ${counter} + 1`
+            continue
+        fi
+        mountpath=${mountpathlist[$totalcount]}
+        totalcount=$((totalcount-1))
+        echo "device is $currdevice"
+        echo "mount path is $mountpath"
+        counter=`expr ${counter} + 1`
+        mount_volume "/dev/${currdevice}" ${mountpath}
+    done
+else
+# Last device exists, which means the volumes are created or few might have 
been skipped in the first part since the device is already present
+# Mount of rest of the volumes will be fine and contine
+    for i in "${!ADDR[@]}"; do
+        # expected PERSISTANCE_MAPPING format is 
device1|volumeID1|mountPoint1|device2|volumeID2|mountpoint2...
+        if (( $i  % 3 == 0 ))
+        then
+           mount_volume ${ADDR[$i]} ${ADDR[$i + 2]}
+        fi
+    done
+fi
+
+echo -e "\n Volumes after mounting...." | tee -a $log
+output=`/bin/lsblk`
+echo -e "\n$output\n" | tee -a $log
+output=`/sbin/blkid`
+echo -e "\n$output\n" | tee -a $log

http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/products/stratos/modules/distribution/src/assembly/bin.xml
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/assembly/bin.xml 
b/products/stratos/modules/distribution/src/assembly/bin.xml
index 6e1d991..0cefc0c 100755
--- a/products/stratos/modules/distribution/src/assembly/bin.xml
+++ b/products/stratos/modules/distribution/src/assembly/bin.xml
@@ -644,6 +644,12 @@
             <filtered>true</filtered>
             <fileMode>755</fileMode>
         </file>
+        <file>
+            <source>src/main/conf/terminatedependency.drl</source>
+            
<outputDirectory>${pom.artifactId}-${pom.version}/repository/conf</outputDirectory>
+            <filtered>true</filtered>
+            <fileMode>755</fileMode>
+        </file>
                <!-- autoscaler -->
         <file>
             <source>${project.basedir}/INSTALL.txt</source>

http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/products/stratos/modules/distribution/src/main/conf/mincheck.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/mincheck.drl 
b/products/stratos/modules/distribution/src/main/conf/mincheck.drl
index b1c0f7c..b29e991 100755
--- a/products/stratos/modules/distribution/src/main/conf/mincheck.drl
+++ b/products/stratos/modules/distribution/src/main/conf/mincheck.drl
@@ -48,6 +48,10 @@ global org.apache.stratos.messaging.domain.topology.Topology 
$topology;
 global java.util.Map partitionCtxts;
 global java.lang.String clusterId;
 global java.lang.String lbRef;
+global java.lang.String serviceId;
+
+global org.apache.stratos.autoscaler.policy.model.AutoscalePolicy 
autoscalePolicy;
+
 
 rule "Minimum Rule"
 dialect "mvel"
@@ -57,6 +61,9 @@ dialect "mvel"
               eval(log.debug("[min-check] [network-partition] " + 
$ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() + " 
Non terminated member count: " + $ctxt.getNonTerminatedMemberCount()))
               eval(log.debug("[min-check] [network-partition] " + 
$ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() + " 
Minimum member count: " + $ctxt.getMinimumMemberCount()))
               eval($ctxt.getNonTerminatedMemberCount() < 
$ctxt.getMinimumMemberCount())
+              eval(log.debug("Grouping ... checking startup dependencies for " 
+ clusterId))
+           eval($ctxt.checkStartupDependencies(serviceId, clusterId))
+           eval(log.debug("startup dependencies successfully checked for" + 
clusterId))
 
        then
               $delegator.delegateSpawn($ctxt, clusterId, lbRef);

http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/products/stratos/modules/distribution/src/main/conf/terminatedependency.drl
----------------------------------------------------------------------
diff --git 
a/products/stratos/modules/distribution/src/main/conf/terminatedependency.drl 
b/products/stratos/modules/distribution/src/main/conf/terminatedependency.drl
new file mode 100644
index 0000000..9ea243c
--- /dev/null
+++ 
b/products/stratos/modules/distribution/src/main/conf/terminatedependency.drl
@@ -0,0 +1,52 @@
+/*
+ * 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 org.apache.stratos.autoscaler.rule;
+
+import org.apache.stratos.messaging.domain.topology.Cluster;
+import org.apache.stratos.autoscaler.PartitionContext;
+
+global org.apache.stratos.autoscaler.rule.RuleLog log;
+global org.apache.stratos.autoscaler.rule.RuleTasksDelegator $delegator;
+global java.util.Map partitionCtxts;
+global java.lang.String clusterId;
+global java.lang.String lbRef;
+global java.lang.String serviceId;
+
+global org.apache.stratos.autoscaler.policy.model.AutoscalePolicy 
autoscalePolicy;
+
+rule "Terminate Dependency Rule"
+
+dialect "mvel"
+        when
+            $ctxt : PartitionContext ()
+            eval(log.debug("Running terminate dependency rule: [partition] " + 
$ctxt.getPartitionId() + " [network-partition] " + 
$ctxt.getNetworkPartitionId()))
+            eval(log.debug("[terminate dependency] [network-partition] " + 
$ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() +" 
Member count: " + $ctxt.getMemberStatsContexts().size()))
+            eval(log.debug("Grouping ... in terminatedependency rule 
terminating all members " + $ctxt.getAllMemberForTerminationCount()))
+            eval(!$ctxt.checkKillDependencies(serviceId, clusterId))
+            eval(log.debug("[terminate dependency] [network-partition] " + 
$ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() + " 
successfully terminated members"))
+ 
+            eval(log.debug("Grouping:terminatedependency:terminating all"))
+
+        then
+           $delegator.delegateTerminateAll(clusterId);
+end
+
+
+

Reply via email to