You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ud...@apache.org on 2014/05/22 21:50:10 UTC

[2/3] git commit: adding capability to provide persistence mapping at the subscription time

adding capability to provide persistence mapping at the subscription time


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

Branch: refs/heads/master
Commit: 8717b3185a4190da326e84c5f73b56937f983914
Parents: ab383d8
Author: Udara Liyanage <ud...@wso2.com>
Authored: Fri May 23 00:59:57 2014 +0530
Committer: Udara Liyanage <ud...@wso2.com>
Committed: Fri May 23 00:59:57 2014 +0530

----------------------------------------------------------------------
 .../impl/CloudControllerServiceImpl.java        |  48 +-
 .../cloud/controller/pojo/Registrant.java       |   9 +
 .../behaviour/CartridgeMgtBehaviour.java        |   6 +-
 .../client/CloudControllerServiceClient.java    |   5 +-
 .../stratos/manager/deploy/service/Service.java |   2 +-
 .../multitenant/lb/MultiTenantLBService.java    |   2 +-
 .../category/DefaultLoadBalancerCategory.java   |   5 +-
 .../category/ExistingLoadBalancerCategory.java  |   3 +-
 .../ServiceLevelLoadBalancerCategory.java       |   5 +-
 .../manager/CartridgeSubscriptionManager.java   |  13 +-
 .../subscription/CartridgeSubscription.java     |   6 +-
 .../subscription/DataCartridgeSubscription.java |   5 +-
 .../subscription/LBCartridgeSubscription.java   |   5 +-
 .../manager/subscription/SubscriptionData.java  |  11 +
 .../SubscriptionMultiTenantBehaviour.java       |   5 +-
 .../utils/ApplicationManagementUtil.java        |   9 +-
 .../rest/endpoint/bean/CartridgeInfoBean.java   |  41 +-
 .../bean/cartridge/definition/VolumeBean.java   |   2 +
 .../bean/util/converter/PojoConverter.java      |  12 +-
 .../rest/endpoint/services/ServiceUtils.java    |   9 +-
 .../main/resources/CloudControllerService.wsdl  | 675 ++++++++++---------
 21 files changed, 457 insertions(+), 421 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
index c40c8f0..2bc8f78 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
@@ -859,7 +859,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         boolean isLb = property != null ? Boolean.parseBoolean(property) : false;
 
         ClusterContext ctxt = buildClusterContext(cartridge, clusterId,
-				payload, hostName, props, isLb);
+				payload, hostName, props, isLb, registrant.getPersistence());
 
 
 		dataHolder.addClusterContext(ctxt);
@@ -873,8 +873,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 	}
 
 	private ClusterContext buildClusterContext(Cartridge cartridge,
-			String clusterId, String payload, String hostName,
-			Properties props, boolean isLb) {
+                                               String clusterId, String payload, String hostName,
+                                               Properties props, boolean isLb, Persistence persistence) {
 
 
 		// initialize ClusterContext
@@ -884,16 +884,27 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 		String property;
 		property = props.getProperty(Constants.GRACEFUL_SHUTDOWN_TIMEOUT);
 		long timeout = property != null ? Long.parseLong(property) : 30000;
-		
-		property = props.getProperty(Constants.IS_VOLUME_REQUIRED);
-        boolean isVolumeRequired = property != null ? Boolean.parseBoolean(property) : false;
-        
-        if(isVolumeRequired) {
+
+        boolean persistanceRequired = false;
+        if(persistence != null){
+              persistanceRequired = persistence.isPersistanceRequired();
+        }
+
+        if(persistanceRequired){
+            ctxt.setVolumes(persistence.getVolumes());
+            ctxt.setVolumeRequired(true);
+        }else{
+            ctxt.setVolumeRequired(false);
+        }
+        /*
+        if(persistanceRequired) {
         	Persistence persistenceData = cartridge.getPersistence();
-        	
+
         	if(persistenceData != null) {
         		Volume[] cartridge_volumes = persistenceData.getVolumes();
-        		
+
+
+                Volume[] volumestoCreate = overideVolumes(cartridge_volumes, persistence.getVolumes());
         		property = props.getProperty(Constants.SHOULD_DELETE_VOLUME);
         		String property_volume_zize = props.getProperty(Constants.VOLUME_SIZE);
                 String property_volume_id = props.getProperty(Constants.VOLUME_ID);
@@ -914,21 +925,24 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                     volume_cluster.setVolumeId(volumeID);
                     cluster_volume_list.add(volume_cluster);
 				}
-        		ctxt.setVolumes(cluster_volume_list.toArray(new Volume[cluster_volume_list.size()]));
+        		//ctxt.setVolumes(cluster_volume_list.toArray(new Volume[cluster_volume_list.size()]));
+                ctxt.setVolumes(persistence.getVolumes());
+                ctxt.setVolumeRequired(true);
         	} else {
         		// if we cannot find necessary data, we would not consider 
         		// this as a volume required instance.
-        		isVolumeRequired = false;
-        	}
-        	
-        	ctxt.setVolumeRequired(isVolumeRequired);
+        		//isVolumeRequired = false;
+                ctxt.setVolumeRequired(false);
+       	}
+
+        	//ctxt.setVolumeRequired(isVolumeRequired);
         }
-        
+        */
 	    ctxt.setTimeoutInMillis(timeout);
 		return ctxt;
 	}
 
-	@Override
+    @Override
 	public String[] getRegisteredCartridges() {
 		// get the list of cartridges registered
 		List<Cartridge> cartridges = dataHolder

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Registrant.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Registrant.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Registrant.java
index fe7a7e9..2c3458a 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Registrant.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Registrant.java
@@ -33,6 +33,7 @@ public class Registrant {
     private Properties properties;
     private String autoScalerPolicyName;
     private String deploymentPolicyName;
+    private Persistence persistence;
     
     public String getTenantRange() {
         return tenantRange;
@@ -91,4 +92,12 @@ public class Registrant {
                properties + ", autoScalerPolicyName=" + autoScalerPolicyName +
                ", deploymentPolicyName=" + deploymentPolicyName + "]";
     }
+
+    public Persistence getPersistence() {
+        return persistence;
+    }
+
+    public void setPersistence(Persistence persistence) {
+        this.persistence = persistence;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/behaviour/CartridgeMgtBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/behaviour/CartridgeMgtBehaviour.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/behaviour/CartridgeMgtBehaviour.java
index 56f7e10..40f61b2 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/behaviour/CartridgeMgtBehaviour.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/behaviour/CartridgeMgtBehaviour.java
@@ -21,6 +21,7 @@ package org.apache.stratos.manager.behaviour;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.stub.pojo.CartridgeInfo;
+import org.apache.stratos.cloud.controller.stub.pojo.Persistence;
 import org.apache.stratos.cloud.controller.stub.pojo.Properties;
 import org.apache.stratos.cloud.controller.stub.pojo.Property;
 import org.apache.stratos.manager.client.CloudControllerServiceClient;
@@ -114,7 +115,7 @@ public abstract class CartridgeMgtBehaviour implements Serializable {
         return payloadData;
     }
 
-    public void register(CartridgeInfo cartridgeInfo, Cluster cluster, PayloadData payloadData, String autoscalePolicyName, String deploymentPolicyName, Properties properties) throws ADCException, UnregisteredCartridgeException {
+    public void register(CartridgeInfo cartridgeInfo, Cluster cluster, PayloadData payloadData, String autoscalePolicyName, String deploymentPolicyName, Properties properties, Persistence persistence) throws ADCException, UnregisteredCartridgeException {
     	if(payloadData != null) {
         log.info("Payload: " + payloadData.getCompletePayloadData().toString());
     	}else {
@@ -129,7 +130,8 @@ public abstract class CartridgeMgtBehaviour implements Serializable {
                 cluster.getHostName(),
                 autoscalePolicyName,
                 deploymentPolicyName,
-                properties);
+                properties,
+                persistence);
     }
 
     public void remove(String clusterId, String alias) throws ADCException, NotSubscribedException {

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java
index df6625e..1cc2338 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java
@@ -93,9 +93,9 @@ public class CloudControllerServiceClient {
 	}
 
 	public boolean register(String clusterId, String cartridgeType,
-	                        String payload, String tenantRange,
+                            String payload, String tenantRange,
                             String hostName, Properties properties,
-                            String autoscalorPolicyName, String deploymentPolicyName) throws RemoteException, 
+                            String autoscalorPolicyName, String deploymentPolicyName, Persistence persistence) throws RemoteException,
                             CloudControllerServiceUnregisteredCartridgeExceptionException {		
 	    Registrant registrant = new Registrant();
 	    registrant.setClusterId(clusterId);
@@ -106,6 +106,7 @@ public class CloudControllerServiceClient {
 	    registrant.setPayload(payload);
 	    registrant.setAutoScalerPolicyName(autoscalorPolicyName);
         registrant.setDeploymentPolicyName(deploymentPolicyName);
+        registrant.setPersistence(persistence);
 		return stub.registerService(registrant);
 
 	}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java
index adfe60f..b73ccf6 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java
@@ -81,7 +81,7 @@ public abstract class Service extends CartridgeMgtBehaviour {
 
     public void deploy (Properties properties) throws ADCException, UnregisteredCartridgeException {
 
-        register(getCartridgeInfo(), getCluster(), getPayloadData(), getAutoscalingPolicyName(), getDeploymentPolicyName(), properties);
+        register(getCartridgeInfo(), getCluster(), getPayloadData(), getAutoscalingPolicyName(), getDeploymentPolicyName(), properties, null);
     }
 
     public void undeploy () throws ADCException, NotSubscribedException {

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java
index 5a16fc5..ec200f3 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java
@@ -46,6 +46,6 @@ public class MultiTenantLBService extends Service {
 
         //register the service
         loadBalancerCategory.register(getCartridgeInfo(), getCluster(), getPayloadData(), getAutoscalingPolicyName(), getDeploymentPolicyName(),
-                properties);
+                properties, null);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/DefaultLoadBalancerCategory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/DefaultLoadBalancerCategory.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/DefaultLoadBalancerCategory.java
index e49dbde..e124883 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/DefaultLoadBalancerCategory.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/DefaultLoadBalancerCategory.java
@@ -23,6 +23,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.stub.pojo.CartridgeInfo;
 import org.apache.stratos.cloud.controller.stub.pojo.ClusterContext;
+import org.apache.stratos.cloud.controller.stub.pojo.Persistence;
 import org.apache.stratos.cloud.controller.stub.pojo.Properties;
 import org.apache.stratos.manager.client.AutoscalerServiceClient;
 import org.apache.stratos.manager.client.CloudControllerServiceClient;
@@ -94,13 +95,13 @@ public class DefaultLoadBalancerCategory extends LoadBalancerCategory {
         }
     }
 
-    public void register(CartridgeInfo cartridgeInfo, Cluster cluster, PayloadData payloadData, String autoscalePolicyName, String deploymentPolicyName, Properties properties) throws ADCException, UnregisteredCartridgeException {
+    public void register(CartridgeInfo cartridgeInfo, Cluster cluster, PayloadData payloadData, String autoscalePolicyName, String deploymentPolicyName, Properties properties, Persistence persistence) throws ADCException, UnregisteredCartridgeException {
     	log.info("Register service with payload data ["+payloadData+"] ");
         if (!isDefaultLBExists()) {
         	if(payloadData != null) {
         		log.info("Payload: " + payloadData.getCompletePayloadData().toString());
         	}
-            super.register(cartridgeInfo, cluster, payloadData, autoscalePolicyName, deploymentPolicyName, properties);
+            super.register(cartridgeInfo, cluster, payloadData, autoscalePolicyName, deploymentPolicyName, properties, persistence);
         }else {
         	log.info(" Default LB exists... Not registering...");
         }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/ExistingLoadBalancerCategory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/ExistingLoadBalancerCategory.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/ExistingLoadBalancerCategory.java
index b6ecfac..594ad4c 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/ExistingLoadBalancerCategory.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/ExistingLoadBalancerCategory.java
@@ -20,6 +20,7 @@
 package org.apache.stratos.manager.lb.category;
 
 import org.apache.stratos.cloud.controller.stub.pojo.CartridgeInfo;
+import org.apache.stratos.cloud.controller.stub.pojo.Persistence;
 import org.apache.stratos.cloud.controller.stub.pojo.Properties;
 import org.apache.stratos.manager.dao.Cluster;
 import org.apache.stratos.manager.exception.ADCException;
@@ -41,7 +42,7 @@ public class ExistingLoadBalancerCategory extends LoadBalancerCategory {
         return null;
     }
 
-    public void register (CartridgeInfo cartridgeInfo, Cluster cluster, PayloadData payloadData, String autoscalePolicyName, String deploymentPolicyName, Properties properties) throws ADCException, UnregisteredCartridgeException {
+    public void register(CartridgeInfo cartridgeInfo, Cluster cluster, PayloadData payloadData, String autoscalePolicyName, String deploymentPolicyName, Properties properties, Persistence persistence) throws ADCException, UnregisteredCartridgeException {
 
         //TODO
     }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/ServiceLevelLoadBalancerCategory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/ServiceLevelLoadBalancerCategory.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/ServiceLevelLoadBalancerCategory.java
index fc47261..e713d7d 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/ServiceLevelLoadBalancerCategory.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/ServiceLevelLoadBalancerCategory.java
@@ -23,6 +23,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.stub.pojo.CartridgeInfo;
 import org.apache.stratos.cloud.controller.stub.pojo.ClusterContext;
+import org.apache.stratos.cloud.controller.stub.pojo.Persistence;
 import org.apache.stratos.cloud.controller.stub.pojo.Properties;
 import org.apache.stratos.manager.client.AutoscalerServiceClient;
 import org.apache.stratos.manager.client.CloudControllerServiceClient;
@@ -102,7 +103,7 @@ public class ServiceLevelLoadBalancerCategory extends LoadBalancerCategory {
         }
     }
 
-    public void register(CartridgeInfo cartridgeInfo, Cluster cluster, PayloadData payloadData, String autoscalePolicyName, String deploymentPolicyName, Properties properties) throws ADCException, UnregisteredCartridgeException {
+    public void register(CartridgeInfo cartridgeInfo, Cluster cluster, PayloadData payloadData, String autoscalePolicyName, String deploymentPolicyName, Properties properties, Persistence persistence) throws ADCException, UnregisteredCartridgeException {
 
         if (!serviceLbExists) {
 
@@ -110,7 +111,7 @@ public class ServiceLevelLoadBalancerCategory extends LoadBalancerCategory {
                 log.info("Payload: " + payloadData.getCompletePayloadData().toString());
             }
 
-            super.register(cartridgeInfo, cluster, payloadData, autoscalePolicyName, deploymentPolicyName, properties);
+            super.register(cartridgeInfo, cluster, payloadData, autoscalePolicyName, deploymentPolicyName, properties, persistence);
         }else {
             log.info("Service LB already exists for cartridge type: " + getLoadBalancedServiceType() + ", deployment policy: " + getDeploymentPolicyName());
         }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java
index 01a972c..9d1ae68 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java
@@ -23,10 +23,8 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.openjpa.util.java$util$ArrayList$proxy;
 import org.apache.stratos.cloud.controller.stub.CloudControllerServiceUnregisteredCartridgeExceptionException;
-import org.apache.stratos.cloud.controller.stub.pojo.CartridgeInfo;
-import org.apache.stratos.cloud.controller.stub.pojo.LoadbalancerConfig;
+import org.apache.stratos.cloud.controller.stub.pojo.*;
 import org.apache.stratos.cloud.controller.stub.pojo.Properties;
-import org.apache.stratos.cloud.controller.stub.pojo.Property;
 import org.apache.stratos.manager.client.CloudControllerServiceClient;
 import org.apache.stratos.manager.dao.CartridgeSubscriptionInfo;
 import org.apache.stratos.manager.dto.SubscriptionInfo;
@@ -168,11 +166,11 @@ public class CartridgeSubscriptionManager {
         	if(log.isDebugEnabled()) {
         		log.debug(" Registering LB Cartridge subscription ");
         	}
-            registerCartridgeSubscription(lbCartridgeSubscription, lbCartridgeSubscriptionProperties);
+            registerCartridgeSubscription(lbCartridgeSubscription, lbCartridgeSubscriptionProperties, subscriptionData.getPersistence());
         }
 
         // register service cartridge subscription
-        return registerCartridgeSubscription(serviceCartridgeSubscription, serviceCartridgeSubscriptionProperties);
+        return registerCartridgeSubscription(serviceCartridgeSubscription, serviceCartridgeSubscriptionProperties, subscriptionData.getPersistence());
     }
 
     private boolean activeInstancesAvailable(SubscriptionData subscriptionData) {
@@ -356,14 +354,15 @@ public class CartridgeSubscriptionManager {
      *
      * @param cartridgeSubscription CartridgeSubscription subscription
      *
+     * @param persistence
      * @return SubscriptionInfo object populated with relevant information
      * @throws ADCException
      * @throws UnregisteredCartridgeException
      */
-    private SubscriptionInfo registerCartridgeSubscription(CartridgeSubscription cartridgeSubscription, Properties properties)
+    private SubscriptionInfo registerCartridgeSubscription(CartridgeSubscription cartridgeSubscription, Properties properties, Persistence persistence)
             throws ADCException, UnregisteredCartridgeException {
 
-        CartridgeSubscriptionInfo cartridgeSubscriptionInfo = cartridgeSubscription.registerSubscription(properties);
+        CartridgeSubscriptionInfo cartridgeSubscriptionInfo = cartridgeSubscription.registerSubscription(properties, persistence);
 
         //set status as 'SUBSCRIBED'
         cartridgeSubscription.setSubscriptionStatus(CartridgeConstants.SUBSCRIBED);

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/CartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/CartridgeSubscription.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/CartridgeSubscription.java
index ebf7276..a5d901d 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/CartridgeSubscription.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/CartridgeSubscription.java
@@ -22,6 +22,7 @@ package org.apache.stratos.manager.subscription;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.stub.pojo.CartridgeInfo;
+import org.apache.stratos.cloud.controller.stub.pojo.Persistence;
 import org.apache.stratos.cloud.controller.stub.pojo.Properties;
 import org.apache.stratos.manager.dao.CartridgeSubscriptionInfo;
 import org.apache.stratos.manager.dao.Cluster;
@@ -162,18 +163,19 @@ public abstract class CartridgeSubscription implements Serializable {
      *
      * @param properties Any additional properties needed
      *
+     * @param persistence
      * @return CartridgeSubscriptionInfo subscription populated with relevant data
      * @throws ADCException
      * @throws UnregisteredCartridgeException
      */
-    public CartridgeSubscriptionInfo registerSubscription(Properties properties)
+    public CartridgeSubscriptionInfo registerSubscription(Properties properties, Persistence persistence)
             throws ADCException, UnregisteredCartridgeException {
 
         // Properties props = new Properties();
         //props.setProperties(getCartridgeInfo().getProperties());
 
         getSubscriptionTenancyBehaviour().register (getCartridgeInfo(), getCluster(), getPayloadData(), getAutoscalingPolicyName(),
-                getDeploymentPolicyName(), properties);
+                getDeploymentPolicyName(), properties, persistence);
 
         return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicyName(),
                 getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/DataCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/DataCartridgeSubscription.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/DataCartridgeSubscription.java
index 4cefa45..c97bcd3 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/DataCartridgeSubscription.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/DataCartridgeSubscription.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.manager.subscription;
 
+import org.apache.stratos.cloud.controller.stub.pojo.Persistence;
 import org.apache.stratos.manager.dao.CartridgeSubscriptionInfo;
 import org.apache.stratos.manager.dao.DataCartridge;
 import org.apache.stratos.manager.exception.ADCException;
@@ -54,11 +55,11 @@ public class DataCartridgeSubscription extends CartridgeSubscription {
     }
 
     @Override
-    public CartridgeSubscriptionInfo registerSubscription(Properties properties) throws ADCException,
+    public CartridgeSubscriptionInfo registerSubscription(Properties properties, Persistence persistence) throws ADCException,
             UnregisteredCartridgeException {
 
         getSubscriptionTenancyBehaviour().register (getCartridgeInfo(), getCluster(), getPayloadData(), getAutoscalingPolicyName(),
-                getDeploymentPolicyName(), properties);
+                getDeploymentPolicyName(), properties, persistence);
 
         DataCartridge dataCartridge = new DataCartridge();
         dataCartridge.setUserName(getDBUsername());

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/LBCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/LBCartridgeSubscription.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/LBCartridgeSubscription.java
index 3bad5fd..f6555f8 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/LBCartridgeSubscription.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/LBCartridgeSubscription.java
@@ -22,6 +22,7 @@ package org.apache.stratos.manager.subscription;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.stub.pojo.CartridgeInfo;
+import org.apache.stratos.cloud.controller.stub.pojo.Persistence;
 import org.apache.stratos.cloud.controller.stub.pojo.Properties;
 import org.apache.stratos.manager.dao.CartridgeSubscriptionInfo;
 import org.apache.stratos.manager.exception.ADCException;
@@ -80,13 +81,13 @@ public class LBCartridgeSubscription extends CartridgeSubscription {
 
     
     @Override
-    public CartridgeSubscriptionInfo registerSubscription(Properties properties) throws ADCException, UnregisteredCartridgeException {    	
+    public CartridgeSubscriptionInfo registerSubscription(Properties properties, Persistence persistence) throws ADCException, UnregisteredCartridgeException {
     	if(!loadBalancerCategory.isLoadBalancedServiceMultiTenant()) {
     		if(log.isDebugEnabled()) {
     		 log.debug("Loadbalanced service is single tenant.");
     		}
     		getLoadBalancerCategory().register (getCartridgeInfo(), getCluster(), getPayloadData(), getAutoscalingPolicyName(),
-    	                getDeploymentPolicyName(), properties);
+    	                getDeploymentPolicyName(), properties, persistence);
     	}
        
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/SubscriptionData.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/SubscriptionData.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/SubscriptionData.java
index cf4d91b..7b26063 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/SubscriptionData.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/SubscriptionData.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.manager.subscription;
 
+import org.apache.stratos.cloud.controller.stub.pojo.Persistence;
 import org.apache.stratos.cloud.controller.stub.pojo.Property;
 
 import java.util.Collections;
@@ -46,6 +47,7 @@ public class SubscriptionData {
     private boolean isCommitsEnabled;
     private String serviceGroup;
     private Set<String> domains;
+    private Persistence persistence;
 
     public SubscriptionData() {
         this.domains = new HashSet<String>();
@@ -194,4 +196,13 @@ public class SubscriptionData {
     public Set<String> getDomains() {
         return Collections.unmodifiableSet(domains);
     }
+
+    public Persistence getPersistence() {
+        return persistence;
+    }
+
+     public void setPersistence(Persistence persistence) {
+        this.persistence = persistence;
+     }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionMultiTenantBehaviour.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
index 1b96734..664a2b3 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
@@ -22,6 +22,7 @@ package org.apache.stratos.manager.subscription.tenancy;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.stub.pojo.CartridgeInfo;
+import org.apache.stratos.cloud.controller.stub.pojo.Persistence;
 import org.apache.stratos.cloud.controller.stub.pojo.Properties;
 import org.apache.stratos.manager.dao.Cluster;
 import org.apache.stratos.manager.deploy.service.Service;
@@ -111,8 +112,8 @@ public class SubscriptionMultiTenantBehaviour extends SubscriptionTenancyBehavio
         return null;
     }
 
-    public void register (CartridgeInfo cartridgeInfo, Cluster cluster, PayloadData payloadData, String autoscalePolicyName,
-                          String deploymentPolicyName, Properties properties)
+    public void register(CartridgeInfo cartridgeInfo, Cluster cluster, PayloadData payloadData, String autoscalePolicyName,
+                         String deploymentPolicyName, Properties properties, Persistence persistence)
             throws ADCException, UnregisteredCartridgeException {
 
         //nothing to do

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/ApplicationManagementUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/ApplicationManagementUtil.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/ApplicationManagementUtil.java
index d0136f5..7282253 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/ApplicationManagementUtil.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/ApplicationManagementUtil.java
@@ -36,6 +36,7 @@ import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.stub.pojo.CartridgeInfo;
+import org.apache.stratos.cloud.controller.stub.pojo.Persistence;
 import org.apache.stratos.cloud.controller.stub.pojo.Properties;
 import org.apache.stratos.cloud.controller.stub.pojo.Property;
 import org.apache.stratos.cloud.controller.stub.CloudControllerServiceUnregisteredCartridgeExceptionException;
@@ -247,14 +248,14 @@ public class ApplicationManagementUtil {
     
     
     public static void registerService(String cartridgeType, String domain, String subDomain,
-                                        StringBuilder payload, String tenantRange, String hostName,
-                                        String autoscalingPoliyName, String deploymentPolicyName,
-                                        Properties properties)
+                                       StringBuilder payload, String tenantRange, String hostName,
+                                       String autoscalingPoliyName, String deploymentPolicyName,
+                                       Properties properties, Persistence persistence)
             throws ADCException, UnregisteredCartridgeException {
         log.info("Register service..");
         try {
             CloudControllerServiceClient.getServiceClient().register(domain, cartridgeType, payload.toString(), tenantRange,
-                    hostName, properties, autoscalingPoliyName, deploymentPolicyName );
+                    hostName, properties, autoscalingPoliyName, deploymentPolicyName, persistence );
         } catch (CloudControllerServiceUnregisteredCartridgeExceptionException e) {
             String msg = "Exception is occurred in register service operation. Reason :" + e.getMessage();
             log.error(msg, e);

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/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 0f971c5..e011edc 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,6 +18,7 @@
  */
 package org.apache.stratos.rest.endpoint.bean;
 
+import org.apache.stratos.rest.endpoint.bean.cartridge.definition.PersistenceBean;
 import javax.xml.bind.annotation.XmlRootElement;
 import java.util.ArrayList;
 import java.util.List;
@@ -35,12 +36,8 @@ public class CartridgeInfoBean {
     String dataCartridgeType;
     String dataCartridgeAlias;
     boolean commitsEnabled;
-
-    private boolean persistanceRequired;
-    private String size;
-    private String volumeId;
-    private boolean removeOnTermination;
     private String serviceGroup;
+    private PersistenceBean persistence;
 
     public CartridgeInfoBean() {
     }
@@ -125,31 +122,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;
 	}
 
@@ -165,7 +138,11 @@ public class CartridgeInfoBean {
 		this.serviceGroup = serviceGroup;
 	}
 
-    public String getVolumeId() {return volumeId;}
+    public PersistenceBean getPersistence() {
+        return persistence;
+    }
 
-    public void setVolumeId(String volumeId) {this.volumeId = volumeId;}
+    public void setPersistence(PersistenceBean persistence) {
+        this.persistence = persistence;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/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 a3a985a..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;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/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 91f7aa7..0a0fec7 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,6 +19,7 @@
 
 package org.apache.stratos.rest.endpoint.bean.util.converter;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.stratos.cloud.controller.stub.pojo.*;
 import org.apache.stratos.manager.deploy.service.Service;
 import org.apache.stratos.manager.subscription.SubscriptionDomain;
@@ -147,7 +148,7 @@ 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()];
@@ -155,12 +156,17 @@ public class PojoConverter {
         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);
-            volume.setVolumeId(volumeBean[i].volumeId);
+
             volumes[i] = volume;
         }
         persistence.setVolumes(volumes);

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8717b318/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 424304a..a0f7f76 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
@@ -42,7 +42,6 @@ import org.apache.stratos.manager.manager.CartridgeSubscriptionManager;
 import org.apache.stratos.manager.repository.RepositoryNotification;
 import org.apache.stratos.manager.subscription.CartridgeSubscription;
 import org.apache.stratos.manager.subscription.DataCartridgeSubscription;
-import org.apache.stratos.manager.subscription.PersistenceContext;
 import org.apache.stratos.manager.subscription.SubscriptionData;
 import org.apache.stratos.manager.subscription.SubscriptionDomain;
 import org.apache.stratos.manager.topology.model.TopologyClusterInformationModel;
@@ -60,11 +59,13 @@ 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.repositoryNotificationInfoBean.Payload;
 import org.apache.stratos.rest.endpoint.bean.subscription.domain.SubscriptionDomainBean;
 import org.apache.stratos.rest.endpoint.bean.util.converter.PojoConverter;
 import org.apache.stratos.rest.endpoint.exception.RestAPIException;
+import org.apache.stratos.cloud.controller.stub.pojo.*;
 
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
@@ -984,6 +985,10 @@ public class ServiceUtils {
         subscriptionData.setCommitsEnabled(cartridgeInfoBean.isCommitsEnabled());
         subscriptionData.setServiceGroup(cartridgeInfoBean.getServiceGroup());
 
+        PersistenceBean persistenceBean = cartridgeInfoBean.getPersistence();
+        subscriptionData.setPersistence(PojoConverter.getPersistence(persistenceBean));
+
+        /*
         if (cartridgeInfoBean.isPersistanceRequired()) {
             // Add persistence related properties to PersistenceContext
             PersistenceContext persistenceContext = new PersistenceContext();
@@ -995,7 +1000,7 @@ public class ServiceUtils {
             }
             subscriptionData.setPersistanceCtxt(persistenceContext);
         }
-
+        */
         //subscribe
         SubscriptionInfo subscriptionInfo = null;
         try{