You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by sa...@apache.org on 2013/12/11 14:17:30 UTC

[1/2] git commit: Implementing a service operation to deploy services for super tenant, STRATOS-267

Updated Branches:
  refs/heads/master a10d95fb0 -> 0bfb3bea7


Implementing a service operation to deploy services for super tenant, STRATOS-267


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

Branch: refs/heads/master
Commit: 75493a807a536e697156d671e1be9a5cd77475fc
Parents: b62ed0c
Author: Sajith Kariyawasam <sa...@wso2.com>
Authored: Wed Dec 11 18:02:01 2013 +0530
Committer: Sajith Kariyawasam <sa...@wso2.com>
Committed: Wed Dec 11 18:02:01 2013 +0530

----------------------------------------------------------------------
 .../manager/CartridgeSubscriptionManager.java   | 114 +++++++++++++++++
 .../apache/stratos/adc/mgt/payload/Payload.java |  12 +-
 .../ApplicationCartridgeSubscription.java       |   7 +-
 .../mgt/subscription/CartridgeSubscription.java |  25 ++--
 .../subscription/DataCartridgeSubscription.java |   5 +-
 .../FrameworkCartridgeSubscription.java         |  10 +-
 .../subscription/LBCartridgeSubscription.java   |   5 +-
 .../factory/CartridgeSubscriptionFactory.java   |   6 +-
 .../ServiceDeploymentMultiTenantBehaviour.java  | 125 +++++++++++++++++++
 .../SubscriptionMultiTenantBehaviour.java       |   2 +-
 .../definition/ServiceDefinitionBean.java       |  78 ++++++++++++
 .../rest/endpoint/services/AbstractAdmin.java   |   4 +
 .../rest/endpoint/services/ServiceUtils.java    |  30 +++++
 .../rest/endpoint/services/StratosAdmin.java    |  19 +++
 .../src/main/resources/addTenantRequest.txt     |   2 +-
 .../src/main/resources/getTenantList.txt        |   2 +-
 16 files changed, 417 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/75493a80/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java
index 04daa0e..5cdeb06 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java
@@ -35,6 +35,7 @@ import org.apache.stratos.adc.mgt.payload.PayloadFactory;
 import org.apache.stratos.adc.mgt.repository.Repository;
 import org.apache.stratos.adc.mgt.subscriber.Subscriber;
 import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
+import org.apache.stratos.adc.mgt.subscription.FrameworkCartridgeSubscription;
 import org.apache.stratos.adc.mgt.subscription.factory.CartridgeSubscriptionFactory;
 import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
 import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
@@ -367,6 +368,119 @@ public class CartridgeSubscriptionManager {
 
         return populateCartridgeSubscriptionInformation(cartridgeInfo, cartridgeSubscriptionInfo);
     }
+    
+    
+    /****
+     *  TODO - complete method...
+     * 
+     * 
+     * @param cartridgeType
+     * @param cartridgeAlias
+     * @param autoscalingPolicyName
+     * @param deploymentPolicyName
+     * @param tenantDomain
+     * @param tenantId
+     * @param tenantAdminUsername
+     * @param repositoryType
+     * @param repositoryURL
+     * @param isPrivateRepository
+     * @param repositoryUsername
+     * @param repositoryPassword
+     */
+    
+    public CartridgeSubscription deployMultitenantService(String cartridgeType, String cartridgeAlias,
+            String autoscalingPolicyName, String deploymentPolicyName,
+            String tenantDomain, int tenantId,
+            String tenantAdminUsername,
+            String clusterDomain, String clusterSubdomain,
+            String repositoryURL, boolean isPrivateRepository,
+            String repositoryUsername, String repositoryPassword, String tenantRange) throws ADCException, InvalidCartridgeAliasException, DuplicateCartridgeAliasException, PolicyException,
+            UnregisteredCartridgeException, RepositoryRequiredException, RepositoryCredentialsRequiredException,
+            RepositoryTransportException, AlreadySubscribedException, InvalidRepositoryException {
+    	
+    	log.info(" ---- in deploy multitenant service ---- ");
+    	//validate cartridge alias
+        ApplicationManagementUtil.validateCartridgeAlias(cartridgeAlias, cartridgeType);
+
+        CartridgeInfo cartridgeInfo;
+        try {
+            cartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(cartridgeType);
+
+        } catch (UnregisteredCartridgeException e) {
+            String message = cartridgeType
+                    + " is not a valid cartridgeSubscription type. Please try again with a valid cartridgeSubscription type.";
+            log.error(message);
+            throw e;
+
+        } catch (Exception e) {
+            String message = "Error getting info for " + cartridgeType;
+            log.error(message, e);
+            throw new ADCException(message, e);
+        }
+
+        Subscriber subscriber = new Subscriber(tenantAdminUsername, tenantId, tenantDomain);
+
+        CartridgeSubscription cartridgeSubscription = new FrameworkCartridgeSubscription(cartridgeInfo,true);
+        log.info("-- Cartridge subscription is created --- ");
+        Repository repository = cartridgeSubscription.manageRepository(repositoryURL, repositoryUsername,
+                repositoryPassword, isPrivateRepository, cartridgeAlias, cartridgeInfo, tenantDomain);
+        log.info("-- Repository creation is done --- ");
+        cartridgeSubscription.createSubscription(subscriber, cartridgeAlias, autoscalingPolicyName, deploymentPolicyName, repository);
+        cartridgeSubscription.setSubscriptionKey(generateSubscriptionKey());
+        
+        //cartridgeSubscription.setClusterDomain(clusterDomain);
+        //cartridgeSubscription.setClusterSubDomain(clusterDomain);        
+        
+        log.info("-- subscription key is generated --- ");
+        log.info("Tenant [" + tenantId + "] with username [" + tenantAdminUsername +
+                " subscribed to " + "] Cartridge Alias " + cartridgeAlias + ", Cartridge Type: " + cartridgeType +
+                ", Repo URL: " + repositoryURL + ", Policy: " + autoscalingPolicyName);
+        
+        // TODO -- payload would need some additional params - like Puppet master IP .. etc
+        
+        Payload payload = PayloadFactory.getPayloadInstance(cartridgeInfo.getProvider(), cartridgeType,
+                "/tmp/" + tenantDomain + "-" + cartridgeAlias + ".zip");
+        PayloadArg payloadArg = cartridgeSubscription.createPayloadParameters();
+
+        if (payloadArg != null) {
+            //populate the payload
+            payload.populatePayload(payloadArg);
+            
+            // populate payload from UI here
+            payloadArg.setTenantRange(tenantRange);
+            payloadArg.setDeployment("default");   
+            payloadArg.setServiceDomain(cartridgeAlias+"."+cartridgeInfo.getHostName()+".domain"); // This is cluster id
+            cartridgeSubscription.setPayload(payload);
+        }
+
+        //get the payload parameters defined in the cartridge definition file for this cartridge type
+        if (cartridgeInfo.getProperties() != null && cartridgeInfo.getProperties().length != 0) {
+
+            StringBuilder customPayloadParamsBuilder = new StringBuilder();
+            for(Property property : cartridgeInfo.getProperties()) {
+                //check if a property is related to the payload. Currently this is done by checking if the
+                //property name starts with 'payload_parameter.' suffix. If so the payload param name will
+                //be taken as the substring from the index of '.' to the end of the property name.
+                if(property.getName().startsWith(CartridgeConstants.CUSTOM_PAYLOAD_PARAM_NAME_PREFIX)) {
+                    String payloadParamName = property.getName();
+                    customPayloadParamsBuilder.append(",");
+                    customPayloadParamsBuilder.append(payloadParamName.
+                            substring(payloadParamName.indexOf(".") + 1));
+                    customPayloadParamsBuilder.append("=");
+                    customPayloadParamsBuilder.append(property.getValue());
+                }
+            }
+            //if valid payload related parameters are found in the cartridge definition file, add them to the payload
+            String customPayloadParamString = customPayloadParamsBuilder.toString();
+            if(!customPayloadParamString.isEmpty()) {
+                payload.populatePayload(customPayloadParamString);
+                cartridgeSubscription.setPayload(payload);
+            }
+        }
+        
+        return cartridgeSubscription;
+    	
+    }
 
     private CartridgeSubscriptionInfo getCartridgeSubscriptionInfo(String tenantDomain, String alias)
             throws ADCException, NotSubscribedException {

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/75493a80/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/Payload.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/Payload.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/Payload.java
index 724c32d..bb587f4 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/Payload.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/Payload.java
@@ -63,17 +63,17 @@ public abstract class Payload {
         payloadBuilder.append(",");
         payloadBuilder.append("TENANT_RANGE=" + payloadArg.getTenantRange());
         payloadBuilder.append(",");
-        payloadBuilder.append("TENANT_CONTEXT=" + payloadArg.getTenantDomain());
+        payloadBuilder.append("TENANT_CONTEXT=" + payloadArg.getTenantDomain()); // No need to send those now
         payloadBuilder.append(",");
         payloadBuilder.append("CARTRIDGE_ALIAS=" + payloadArg.getCartridgeAlias());
         payloadBuilder.append(",");
-        payloadBuilder.append("MB_IP=" + System.getProperty(CartridgeConstants.MB_IP));
+        payloadBuilder.append("MB_IP=" + System.getProperty(CartridgeConstants.MB_IP));  // No need to send those now, will get from Puppet
         payloadBuilder.append(",");
-        payloadBuilder.append("MB_PORT=" + System.getProperty(CartridgeConstants.MB_PORT));
+        payloadBuilder.append("MB_PORT=" + System.getProperty(CartridgeConstants.MB_PORT)); // No need to send those now, will get from Puppet
         payloadBuilder.append(",");
-        payloadBuilder.append("CEP_IP=" + System.getProperty(CartridgeConstants.CEP_IP));
+        payloadBuilder.append("CEP_IP=" + System.getProperty(CartridgeConstants.CEP_IP)); // No need to send those now, will get from Puppet
         payloadBuilder.append(",");
-        payloadBuilder.append("CEP_PORT=" + System.getProperty(CartridgeConstants.CEP_PORT));
+        payloadBuilder.append("CEP_PORT=" + System.getProperty(CartridgeConstants.CEP_PORT)); // No need to send those now, will get from Puppet
         payloadBuilder.append(",");
         payloadBuilder.append("CLUSTER_ID=" + payloadArg.getServiceDomain());
         payloadBuilder.append(",");
@@ -81,7 +81,7 @@ public abstract class Payload {
         
         if(payloadArg.getCartridgeInfo() != null) {
             payloadBuilder.append(",");
-            payloadBuilder.append("SERVICE_NAME=" + payloadArg.getCartridgeInfo().getType());
+            payloadBuilder.append("SERVICE=" + payloadArg.getCartridgeInfo().getType());  // TODO -- rename to SERVICE_NAME and rename puppet agent too
         }
 
         //add the user defined payload String (if any)

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/75493a80/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
index 8ed62c6..d63e13a 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
@@ -24,6 +24,7 @@ import org.apache.stratos.adc.mgt.exception.*;
 import org.apache.stratos.adc.mgt.payload.PayloadArg;
 import org.apache.stratos.adc.mgt.repository.Repository;
 import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionTenancyBehaviour;
 import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
 import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 
@@ -37,8 +38,8 @@ public class ApplicationCartridgeSubscription extends CartridgeSubscription {
      *
      * @param cartridgeInfo CartridgeInfo subscription
      */
-    public ApplicationCartridgeSubscription(CartridgeInfo cartridgeInfo) {
-        super(cartridgeInfo);
+    public ApplicationCartridgeSubscription(CartridgeInfo cartridgeInfo, boolean isServiceDeployment) {
+        super(cartridgeInfo, isServiceDeployment);
     }
 
     public void createSubscription(Subscriber subscriber, String alias, String autoscalingPolicyName,
@@ -82,4 +83,6 @@ public class ApplicationCartridgeSubscription extends CartridgeSubscription {
         PayloadArg payloadArg = super.createPayloadParameters();
         return subscriptionTenancyBehaviour.createPayloadParameters(payloadArg);
     }
+
+	
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/75493a80/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java
index 567ffb7..d868745 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java
@@ -32,6 +32,7 @@ import org.apache.stratos.adc.mgt.payload.PayloadArg;
 import org.apache.stratos.adc.mgt.repository.Repository;
 import org.apache.stratos.adc.mgt.service.RepositoryInfoBean;
 import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+import org.apache.stratos.adc.mgt.subscription.tenancy.ServiceDeploymentMultiTenantBehaviour;
 import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionMultiTenantBehaviour;
 import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionSingleTenantBehaviour;
 import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionTenancyBehaviour;
@@ -43,7 +44,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
 
-public abstract class CartridgeSubscription {
+public abstract class CartridgeSubscription /*implements TempBehaviourInterface*/ {
 
     private static Log log = LogFactory.getLog(CartridgeSubscription.class);
     private int subscriptionId;
@@ -67,7 +68,8 @@ public abstract class CartridgeSubscription {
      *
      * @param cartridgeInfo CartridgeInfo subscription
      */
-    public CartridgeSubscription(CartridgeInfo cartridgeInfo) {
+    // TODO - temp fix to identify service deployment
+    public CartridgeSubscription(CartridgeInfo cartridgeInfo, boolean isServiceDeployment) {
 
         this.setCartridgeInfo(cartridgeInfo);
         this.setType(cartridgeInfo.getType());
@@ -79,12 +81,14 @@ public abstract class CartridgeSubscription {
         getCluster().setHostName(cartridgeInfo.getHostName());
         this.setSubscriptionStatus(CartridgeConstants.SUBSCRIBED);
         this.connectedSubscriptionAliases = new ArrayList<String>();
-        if(getCartridgeInfo().getMultiTenant()) {
+        if(isServiceDeployment) {
+        	subscriptionTenancyBehaviour = new ServiceDeploymentMultiTenantBehaviour(this);
+        } else if(getCartridgeInfo().getMultiTenant()) {
             subscriptionTenancyBehaviour = new SubscriptionMultiTenantBehaviour(this);
         }
         else {
             subscriptionTenancyBehaviour = new SubscriptionSingleTenantBehaviour(this);
-        }
+        } 
     }
 
     /**
@@ -113,11 +117,14 @@ public abstract class CartridgeSubscription {
             DuplicateCartridgeAliasException, RepositoryRequiredException, AlreadySubscribedException,
             RepositoryCredentialsRequiredException, InvalidRepositoryException, RepositoryTransportException {
 
+    	log.info(" ---- in super type cartridge subscription --");
         setSubscriber(subscriber);
         setAlias(alias);
         setAutoscalingPolicyName(autoscalingPolicy);
         setDeploymentPolicyName(deploymentPolicyName);
         setRepository(repository);
+        // TODOOO... remove followig
+        //subscriptionTenancyBehaviour.createSubscription(this);
     }
 
     /**
@@ -210,8 +217,9 @@ public abstract class CartridgeSubscription {
             }
         }
 
-        Repository repository = new Repository();
+        Repository repository = null;
         if (repoURL != null && repoURL.trim().length() > 0) {
+        	repository = new Repository();
             log.info("External REPO URL is provided as [" + repoURL +
                     "]. Therefore not creating a new repo.");
             //repository.setRepoName(repoURL.substring(0, repoURL.length()-4)); // remove .git part
@@ -220,12 +228,13 @@ public abstract class CartridgeSubscription {
             repository.setPassword(repoUserPassword);
             repository.setPrivateRepository(privateRepo);
 
-        } else {
+        } 
+        // Commenting out, since internal git repos are no longer used
+        /*else {
 
             log.info("External git repo url not provided for tenant "
                     + tenantDomain + ", creating an git internal repository");
 
-            // for internal repos  internal git server username and password is used.
             repository.setUserName(System.getProperty(CartridgeConstants.INTERNAL_GIT_USERNAME));
             repository.setPassword(System.getProperty(CartridgeConstants.INTERNAL_GIT_PASSWORD));
             try {
@@ -239,7 +248,7 @@ public abstract class CartridgeSubscription {
             String repoName = tenantDomain + "/" + cartridgeAlias;
             repository.setUrl("https://" + System.getProperty(CartridgeConstants.GIT_HOST_NAME) + ":8443/git/" +
                     repoName);
-        }
+        }*/
 
         // Validate Remote Repository.
         ApplicationManagementUtil.validateRepository(repoURL, repoUserName, repoUserPassword, privateRepo,

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/75493a80/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java
index 5ec5fd3..821f078 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java
@@ -25,6 +25,7 @@ import org.apache.stratos.adc.mgt.exception.*;
 import org.apache.stratos.adc.mgt.payload.PayloadArg;
 import org.apache.stratos.adc.mgt.repository.Repository;
 import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionTenancyBehaviour;
 import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
 import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
 import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
@@ -42,9 +43,9 @@ public class DataCartridgeSubscription extends CartridgeSubscription {
      *
      * @param cartridgeInfo CartridgeInfo subscription
      */
-    public DataCartridgeSubscription(CartridgeInfo cartridgeInfo) {
+    public DataCartridgeSubscription(CartridgeInfo cartridgeInfo, boolean isServiceDeployment) {
 
-        super(cartridgeInfo);
+        super(cartridgeInfo, isServiceDeployment);
         this.setHost("localhost");
         this.setUsername(CartridgeConstants.MYSQL_DEFAULT_USER);
         this.setPassword(ApplicationManagementUtil.generatePassword());

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/75493a80/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
index 640aa9f..637c83f 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
@@ -19,25 +19,28 @@
 
 package org.apache.stratos.adc.mgt.subscription;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
 import org.apache.stratos.adc.mgt.exception.*;
 import org.apache.stratos.adc.mgt.payload.PayloadArg;
 import org.apache.stratos.adc.mgt.repository.Repository;
 import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionTenancyBehaviour;
 import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
 import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 
 import java.util.Properties;
 
 public class FrameworkCartridgeSubscription extends CartridgeSubscription {
-
+	private static Log log = LogFactory.getLog(FrameworkCartridgeSubscription.class);
     /**
      * Constructor
      *
      * @param cartridgeInfo CartridgeInfo subscription
      */
-    public FrameworkCartridgeSubscription(CartridgeInfo cartridgeInfo) {
-        super(cartridgeInfo);
+    public FrameworkCartridgeSubscription(CartridgeInfo cartridgeInfo, boolean isServiceDeployment) {
+        super(cartridgeInfo, isServiceDeployment);
     }
 
     @Override
@@ -47,6 +50,7 @@ public class FrameworkCartridgeSubscription extends CartridgeSubscription {
             RepositoryCredentialsRequiredException, RepositoryTransportException, UnregisteredCartridgeException,
             AlreadySubscribedException, RepositoryRequiredException, InvalidRepositoryException, PolicyException {
 
+    	log.info(" -- in create Subscription ---");
         super.createSubscription(subscriber, alias, autoscalingPolicyName, deploymentPolicyName, repository);
         subscriptionTenancyBehaviour.createSubscription();
     }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/75493a80/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/LBCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/LBCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/LBCartridgeSubscription.java
index 151f157..37455c2 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/LBCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/LBCartridgeSubscription.java
@@ -23,6 +23,7 @@ import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
 import org.apache.stratos.adc.mgt.exception.ADCException;
 import org.apache.stratos.adc.mgt.exception.NotSubscribedException;
 import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
+import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionTenancyBehaviour;
 import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 
 import java.util.Properties;
@@ -34,8 +35,8 @@ public class LBCartridgeSubscription extends CartridgeSubscription {
      *
      * @param cartridgeInfo CartridgeInfo subscription
      */
-    public LBCartridgeSubscription(CartridgeInfo cartridgeInfo) {
-        super(cartridgeInfo);
+    public LBCartridgeSubscription(CartridgeInfo cartridgeInfo, boolean isServiceDeployment) {
+        super(cartridgeInfo, isServiceDeployment);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/75493a80/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/factory/CartridgeSubscriptionFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/factory/CartridgeSubscriptionFactory.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/factory/CartridgeSubscriptionFactory.java
index 395d8bd..b6f0202 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/factory/CartridgeSubscriptionFactory.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/factory/CartridgeSubscriptionFactory.java
@@ -65,15 +65,15 @@ public class CartridgeSubscriptionFactory {
         //TODO: fix the logic properly
         CartridgeSubscription cartridgeSubscription = null;
         if(cartridgeInfo.getMultiTenant()) {
-            cartridgeSubscription = new FrameworkCartridgeSubscription(cartridgeInfo);
+            cartridgeSubscription = new FrameworkCartridgeSubscription(cartridgeInfo, false);
 
         } else {
             if(cartridgeInfo.getProvider().equals(CartridgeConstants.DATA_CARTRIDGE_PROVIDER)) {
-                cartridgeSubscription = new DataCartridgeSubscription(cartridgeInfo);
+                cartridgeSubscription = new DataCartridgeSubscription(cartridgeInfo, false);
             }
             else {
                 //cartridgeSubscription = new SingleTenantCartridgeSubscription(cartridgeInfo);
-                cartridgeSubscription = new FrameworkCartridgeSubscription(cartridgeInfo);
+                cartridgeSubscription = new FrameworkCartridgeSubscription(cartridgeInfo, false);
             }
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/75493a80/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/ServiceDeploymentMultiTenantBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/ServiceDeploymentMultiTenantBehaviour.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/ServiceDeploymentMultiTenantBehaviour.java
new file mode 100644
index 0000000..4e0b08e
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/ServiceDeploymentMultiTenantBehaviour.java
@@ -0,0 +1,125 @@
+/*
+ * 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.adc.mgt.subscription.tenancy;
+
+import java.util.Properties;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.exception.ADCException;
+import org.apache.stratos.adc.mgt.exception.AlreadySubscribedException;
+import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
+import org.apache.stratos.adc.mgt.internal.DataHolder;
+import org.apache.stratos.adc.mgt.payload.PayloadArg;
+import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
+import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
+import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+import org.apache.stratos.adc.mgt.utils.PersistenceManager;
+import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
+import org.apache.stratos.adc.topology.mgt.serviceobjects.DomainContext;
+
+public class ServiceDeploymentMultiTenantBehaviour extends
+		SubscriptionMultiTenantBehaviour {
+
+	private static Log log = LogFactory.getLog(ServiceDeploymentMultiTenantBehaviour.class);
+	
+	public ServiceDeploymentMultiTenantBehaviour(
+			CartridgeSubscription cartridgeSubscription) {
+		super(cartridgeSubscription);
+	}
+	
+	@Override
+	public void createSubscription() throws ADCException,
+			AlreadySubscribedException {
+	
+		log.info(" --- in Service Deployment Multitenant Behaviour create subscription ---- ");
+		
+		boolean allowMultipleSubscription = Boolean.
+        valueOf(System.getProperty(CartridgeConstants.FEATURE_MULTI_TENANT_MULTIPLE_SUBSCRIPTION_ENABLED));
+
+		if (!allowMultipleSubscription) {
+			// If the cartridge is multi-tenant. We should not let users
+			// createSubscription twice.
+			boolean subscribed;
+			try {
+				subscribed = PersistenceManager.isAlreadySubscribed(
+						cartridgeSubscription.getType(), cartridgeSubscription
+								.getSubscriber().getTenantId());
+			} catch (Exception e) {
+				String msg = "Error checking whether the cartridge type "
+						+ cartridgeSubscription.getType()
+						+ " is already subscribed";
+				log.error(msg, e);
+				throw new ADCException(msg, e);
+			}
+
+			if (subscribed) {
+				String msg = "Already subscribed to "
+						+ cartridgeSubscription.getType()
+						+ ". This multi-tenant cartridge will not be available to createSubscription";
+				if (log.isDebugEnabled()) {
+					log.debug(msg);
+				}
+				throw new AlreadySubscribedException(msg,
+						cartridgeSubscription.getType());
+			}
+		}
+	
+				/*if (domainContext.getSubDomain().equalsIgnoreCase("mgt")) {
+					cartridgeSubscription.getCluster().setMgtClusterDomain(
+							domainContext.getDomain());
+					cartridgeSubscription.getCluster().setMgtClusterSubDomain(
+							domainContext.getSubDomain());
+				} else {
+					cartridgeSubscription.getCluster().setClusterDomain(
+							domainContext.getDomain());
+					cartridgeSubscription.getCluster().setClusterSubDomain(
+							domainContext.getSubDomain());
+				}*/
+				
+	}
+	
+	
+	@Override
+	public void registerSubscription(Properties properties)
+			throws ADCException, UnregisteredCartridgeException {
+		
+		// register subscription to start up the cartridge instances
+		ApplicationManagementUtil.registerService(cartridgeSubscription.getType(),
+                cartridgeSubscription.getCluster().getClusterDomain(),
+                cartridgeSubscription.getCluster().getClusterSubDomain(),
+                cartridgeSubscription.getPayload().createPayload(),
+                cartridgeSubscription.getPayload().getPayloadArg().getTenantRange(),
+                cartridgeSubscription.getCluster().getHostName(),
+                cartridgeSubscription.getAutoscalingPolicyName(),
+                cartridgeSubscription.getDeploymentPolicyName(),
+                properties);
+		// TODO -- Commented out for testing. Uncomment for release. 
+        //cartridgeSubscription.getPayload().delete();
+	}
+	
+	@Override
+	public PayloadArg createPayloadParameters(PayloadArg payloadArg)
+			throws ADCException {
+				
+		return payloadArg;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/75493a80/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
index 7d7122c..2ca93ed 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
@@ -115,5 +115,5 @@ public class SubscriptionMultiTenantBehaviour extends SubscriptionTenancyBehavio
 
         //payload not used
         return null;
-    }
+    }	
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/75493a80/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/ServiceDefinitionBean.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/ServiceDefinitionBean.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/ServiceDefinitionBean.java
new file mode 100644
index 0000000..3766b3c
--- /dev/null
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/ServiceDefinitionBean.java
@@ -0,0 +1,78 @@
+/*
+ * 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.rest.endpoint.bean.cartridge.definition;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "serviceDefinitionBean")
+public class ServiceDefinitionBean {
+
+	private String serviceName;
+	private String cartridgeType;
+	private String deploymentPolicyName;
+	private String autoscalingPolicyName;
+	private String clusterDomain;
+	private String clusterSubDomain;
+	private String tenantRange;
+	
+	public String getServiceName() {
+		return serviceName;
+	}
+	public void setServiceName(String serviceName) {
+		this.serviceName = serviceName;
+	}
+	public String getCartridgeType() {
+		return cartridgeType;
+	}
+	public void setCartridgeType(String cartridgeType) {
+		this.cartridgeType = cartridgeType;
+	}
+	public String getDeploymentPolicyName() {
+		return deploymentPolicyName;
+	}
+	public void setDeploymentPolicyName(String deploymentPolicyName) {
+		this.deploymentPolicyName = deploymentPolicyName;
+	}
+	public String getAutoscalingPolicyName() {
+		return autoscalingPolicyName;
+	}
+	public void setAutoscalingPolicyName(String autoscalingPolicyName) {
+		this.autoscalingPolicyName = autoscalingPolicyName;
+	}
+	public String getClusterDomain() {
+		return clusterDomain;
+	}
+	public void setClusterDomain(String clusterDomain) {
+		this.clusterDomain = clusterDomain;
+	}
+	public String getClusterSubDomain() {
+		return clusterSubDomain;
+	}
+	public void setClusterSubDomain(String clusterSubDomain) {
+		this.clusterSubDomain = clusterSubDomain;
+	}
+	public String getTenantRange() {
+		return tenantRange;
+	}
+	public void setTenantRange(String tenantRange) {
+		this.tenantRange = tenantRange;
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/75493a80/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/AbstractAdmin.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/AbstractAdmin.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/AbstractAdmin.java
index bbe39b3..37b1905 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/AbstractAdmin.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/AbstractAdmin.java
@@ -61,4 +61,8 @@ public class AbstractAdmin {
     protected String getUsername(){
         return CarbonContext.getThreadLocalCarbonContext().getUsername();
     }
+    
+    protected int getTenantId(){
+        return CarbonContext.getThreadLocalCarbonContext().getTenantId();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/75493a80/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 f99a16d..194945b 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
@@ -531,5 +531,35 @@ public class ServiceUtils {
 
         cartridgeSubsciptionManager.unsubscribeFromCartridge(tenantDomain, alias);
     }
+    
+    /**
+     * 
+     * Super tenant will deploy multitenant service. 
+     * 
+     * get domain , subdomain as well..
+     * @param clusterDomain 
+     * @param clusterSubdomain 
+     * 
+     */
+    static void deployService (String cartridgeType, String alias, String autoscalingPolicy, String deploymentPolicy, 
+    		String tenantDomain, int tenantId, String clusterDomain, String clusterSubdomain, String tenantRange) {
+    	
+    	// create the subscription and persist. 
+    	CartridgeSubscription cartridgeSubscription = null;
+    	try {
+    		cartridgeSubscription = cartridgeSubsciptionManager.deployMultitenantService(cartridgeType, alias, autoscalingPolicy,
+					deploymentPolicy, tenantDomain, tenantId, "tenant-admin-user-name", clusterDomain, clusterSubdomain, null, false, null, null,
+					tenantRange);
+    		cartridgeSubsciptionManager.registerCartridgeSubscription(cartridgeSubscription);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+    	
+    	/*CartridgeSubscription cartridgeSubscription = cartridgeSubsciptionManager.subscribeToCartridge(cartridgeType,
+                alias.trim(), autoscalingPolicy, deploymentPolicy ,tenantDomain, tenantId,
+                userName, "git", repoURL, privateRepo, repoUsername, repoPassword);*/
+    	
+    	// 
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/75493a80/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 67a48be..3bfeb97 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
@@ -36,6 +36,7 @@ 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.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.exception.RestAPIException;
 import org.apache.stratos.tenant.mgt.util.TenantMgtUtil;
 import org.wso2.carbon.context.PrivilegedCarbonContext;
@@ -52,6 +53,7 @@ import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
 import javax.ws.rs.*;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.UUID;
 
 @Path("/admin/")
 public class StratosAdmin extends AbstractAdmin {
@@ -596,6 +598,23 @@ public class StratosAdmin extends AbstractAdmin {
     }
 
 
+    @POST
+    @Path("/service/definition")
+    @Produces("application/json")
+    @Consumes("application/json")
+    @AuthorizationAction("/permission/protected/manage/monitor/tenants")
+    @SuperTenantService(true)
+    public void deployService (ServiceDefinitionBean serviceDefinitionBean)
+            throws RestAPIException {
+
+    	log.info("Service definition request.. : " + serviceDefinitionBean.getServiceName());
+    	// super tenant Deploying service (MT) 
+    	// -- note -- here an alias is generated
+       ServiceUtils.deployService(serviceDefinitionBean.getCartridgeType(), UUID.randomUUID().toString(), serviceDefinitionBean.getAutoscalingPolicyName(),
+    		   serviceDefinitionBean.getDeploymentPolicyName(), getTenantDomain(), getTenantId(),
+    		   serviceDefinitionBean.getClusterDomain(), serviceDefinitionBean.getClusterSubDomain(),
+    		   serviceDefinitionBean.getTenantRange());
+    }
 
 
     private List<TenantInfoBean> getAllTenants() throws Exception {

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/75493a80/components/org.apache.stratos.rest.endpoint/src/main/resources/addTenantRequest.txt
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/resources/addTenantRequest.txt b/components/org.apache.stratos.rest.endpoint/src/main/resources/addTenantRequest.txt
index 644bea3..8bccb12 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/resources/addTenantRequest.txt
+++ b/components/org.apache.stratos.rest.endpoint/src/main/resources/addTenantRequest.txt
@@ -1,4 +1,4 @@
 {"tenantInfo":{"admin":"admin","firstname":"Frank","lastname":"Myers","adminPassword":"admin123","email":"foo@bar.com","tenantDomain":"frank.com"}}
 
 
-curl -X POST -H "Content-Type: application/json" -d '{"tenantInfo":{"admin":"admin","firstname":"Frank","lastname":"Myers","adminPassword":"admin123","email":"foo@bar.com","tenantDomain":"frank.com"}}'  -v -u admin:admin http://localhost:9763/stratos/admin/tenant/create
\ No newline at end of file
+curl -X POST -H "Content-Type: application/json" -d '{"tenantInfo":{"admin":"admin","firstname":"Frank","lastname":"Myers","adminPassword":"admin123","email":"foo@bar.com","tenantDomain":"frank.com"}}'  -v -u admin:admin http://localhost:9763/stratos/admin/tenant

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/75493a80/components/org.apache.stratos.rest.endpoint/src/main/resources/getTenantList.txt
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/resources/getTenantList.txt b/components/org.apache.stratos.rest.endpoint/src/main/resources/getTenantList.txt
index 3d0cc29..136eaf6 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/resources/getTenantList.txt
+++ b/components/org.apache.stratos.rest.endpoint/src/main/resources/getTenantList.txt
@@ -1 +1 @@
-curl -v -u admin:admin http://localhost:9763/stratos/admin/tenant/list
\ No newline at end of file
+curl -X GET -v -u admin:admin http://ec2-54-251-211-89.ap-southeast-1.compute.amazonaws.com:9765/stratos/admin/tenant/list


[2/2] git commit: Resolving conflicts

Posted by sa...@apache.org.
Resolving conflicts


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

Branch: refs/heads/master
Commit: 0bfb3bea75733917e71d3d2072d415eb044e9732
Parents: 75493a8 a10d95f
Author: Sajith Kariyawasam <sa...@wso2.com>
Authored: Wed Dec 11 18:46:55 2013 +0530
Committer: Sajith Kariyawasam <sa...@wso2.com>
Committed: Wed Dec 11 18:46:55 2013 +0530

----------------------------------------------------------------------
 .../adc/mgt/client/AutoscalerServiceClient.java |  119 +-
 .../client/CloudControllerServiceClient.java    |   11 +-
 .../org/apache/stratos/adc/mgt/dao/Cluster.java |    4 +-
 .../internal/ADCManagementServerComponent.java  |   13 +
 .../mgt/listener/InstanceStatusListener.java    |    6 +-
 .../adc/mgt/listener/TenantStatusListner.java   |   42 +
 .../adc/mgt/listener/TopologyEventListner.java  |   40 +
 .../ClusterIdToCartridgeSubscriptionMap.java    |   70 +
 .../adc/mgt/lookup/LookupDataHolder.java        |  254 ++
 ...criptionAliasToCartridgeSubscriptionMap.java |   71 +
 .../apache/stratos/adc/mgt/payload/Payload.java |    7 +-
 .../DatabaseBasedPersistenceManager.java        | 2816 +++++++++---------
 .../adc/mgt/persistence/PersistenceManager.java |   28 +-
 .../RegistryBasedPersistenceManager.java        |  125 +
 .../adc/mgt/registry/RegistryManager.java       |  138 +
 .../stratos/adc/mgt/repository/Repository.java  |    4 +-
 .../adc/mgt/retriever/DataRetrievalManager.java |  184 ++
 .../stratos/adc/mgt/subscriber/Subscriber.java  |    4 +-
 .../ApplicationCartridgeSubscription.java       |    8 +-
 .../mgt/subscription/CartridgeSubscription.java |   23 +-
 .../subscription/DataCartridgeSubscription.java |    7 +-
 .../FrameworkCartridgeSubscription.java         |   11 +-
 .../subscription/LBCartridgeSubscription.java   |    3 +-
 .../ServiceDeploymentMultiTenantBehaviour.java  |   10 +-
 .../SubscriptionMultiTenantBehaviour.java       |   27 +-
 .../SubscriptionSingleTenantBehaviour.java      |    2 +-
 .../tenancy/SubscriptionTenancyBehaviour.java   |    6 +-
 .../processor/ClusterStatusEventProcessor.java  |  113 +
 .../CompleteTopologyEventProcessor.java         |  122 +
 .../processor/InstanceStatusEventProcessor.java |  412 +++
 .../event/processor/TopologyEventProcessor.java |   33 +
 .../processor/TopologyEventProcessorChain.java  |   65 +
 .../model/TopologyClusterInformationModel.java  |  477 +++
 .../mgt/utils/ApplicationManagementUtil.java    |   16 +-
 .../stratos/adc/mgt/utils/Deserializer.java     |   52 +
 .../stratos/adc/mgt/utils/Serializer.java       |   83 +
 .../apache/stratos/autoscaler/Constants.java    |    3 +
 .../autoscaler/NetworkPartitionContext.java     |  201 ++
 .../autoscaler/api/AutoScalerServiceImpl.java   |  169 +-
 .../deployment/policy/DeploymentPolicy.java     |   22 +-
 .../exception/NonExistingLBException.java       |   43 +
 .../interfaces/AutoScalerServiceInterface.java  |   42 +-
 .../internal/AutoscalerServerComponent.java     |  217 +-
 .../autoscaler/partition/PartitionManager.java  |   89 +-
 .../partition/deployers/PartitionDeployer.java  |    2 +-
 .../autoscaler/policy/PolicyManager.java        |  132 +-
 .../deployers/AutoscalerPolicyDeployer.java     |    7 +-
 .../deployers/DeploymentPolicyDeployer.java     |    6 +-
 .../policy/model/AutoscalePolicy.java           |    5 +-
 .../autoscaler/policy/model/LoadAverage.java    |    7 +-
 .../autoscaler/policy/model/LoadThresholds.java |    5 +-
 .../policy/model/MemoryConsumption.java         |    7 +-
 .../policy/model/RequestsInFlight.java          |    7 +-
 .../autoscaler/registry/RegistryManager.java    |   23 +-
 .../rule/AutoscalerRuleEvaluator.java           |   36 +-
 .../autoscaler/util/AutoScalerConstants.java    |    2 +
 .../stratos/autoscaler/util/AutoscalerUtil.java |    2 +
 .../stratos/autoscaler/util/Deserializer.java   |   96 +
 .../cartridge/mgt/ui/CartridgeAdminClient.java  |    8 +-
 .../web/cartridge-mgt/available_cartridges.jsp  |    4 +-
 .../cartridge-mgt/map_domain_ajaxprocessor.jsp  |    2 +-
 .../remove_domain_ajaxprocessor.jsp             |    2 +-
 .../resources/web/cartridge-mgt/subscribe.jsp   |    2 +-
 .../cartridge-mgt/subscribe_ajaxprocessor.jsp   |    4 +-
 .../web/cartridge-mgt/subscribed_cartridges.jsp |    4 +-
 .../subscribed_cartridges_ajaxprocessor.jsp     |    4 +-
 .../cartridge-mgt/sync_repo_ajaxprocessor.jsp   |    2 +-
 .../cartridge-mgt/test_git_ajaxprocessor.jsp    |    2 +-
 .../cartridge-mgt/unsubscribe_ajaxprocessor.jsp |    2 +-
 components/org.apache.stratos.cli/pom.xml       |    5 +
 .../java/org/apache/stratos/cli/Cartridge.java  |  202 ++
 .../apache/stratos/cli/CartridgeInfoBean.java   |  106 +
 .../apache/stratos/cli/CommandLineService.java  |   14 +-
 .../apache/stratos/cli/GenericRestClient.java   |   58 +
 .../java/org/apache/stratos/cli/RestClient.java |  189 ++
 .../stratos/cli/RestCommandLineService.java     |  563 ++++
 .../apache/stratos/cli/StratosApplication.java  |   50 +-
 .../apache/stratos/cli/SubscriptionInfo.java    |   44 +
 .../org/apache/stratos/cli/TenantInfoBean.java  |   85 +
 .../apache/stratos/cli/WebClientWrapper.java    |   63 +
 .../stratos/cli/commands/AddTenantCommand.java  |  188 ++
 .../AutoscalingPolicyDeploymentCommand.java     |  138 +
 .../commands/CartridgeDeploymentCommand.java    |  140 +
 .../stratos/cli/commands/CartridgesCommand.java |   10 +-
 .../DeploymentPolicyDeploymentCommand.java      |  138 +
 .../stratos/cli/commands/ListCommand.java       |   13 +-
 .../commands/PartitionDeploymentCommand.java    |  138 +
 .../stratos/cli/commands/SubscribeCommand.java  |   10 +-
 .../cli/commands/UnsubscribeCommand.java        |    5 +-
 .../apache/stratos/cli/utils/CliConstants.java  |   48 +
 .../cloud/controller/iaases/AWSEC2Iaas.java     |   10 -
 .../controller/iaases/OpenstackNovaIaas.java    |   26 +-
 .../impl/CloudControllerServiceImpl.java        |    4 -
 .../cloud/controller/pojo/Cartridge.java        |   20 +
 .../cloud/controller/pojo/CartridgeConfig.java  |   20 +
 .../cloud/controller/pojo/CartridgeInfo.java    |   20 +
 .../controller/pojo/LoadbalancerConfig.java     |   70 +
 .../cloud/controller/pojo/MemberContext.java    |   10 +
 .../controller/topology/TopologyBuilder.java    |    6 +
 .../topology/TopologyEventSender.java           |    6 +-
 .../controller/topology/TopologyManager.java    |    1 -
 .../util/CloudControllerConstants.java          |    2 +-
 .../controller/util/CloudControllerUtil.java    |    9 +
 .../LoadBalancerCommonServiceComponent.java     |    2 +-
 .../statistics/LoadBalancerStatsPublisher.java  |    4 +-
 .../WSO2CEPFaultyMemberPublisher.java           |    6 +-
 .../WSO2CEPInFlightRequestPublisher.java        |   18 +-
 .../statistics/WSO2CEPStatsPublisher.java       |    3 -
 ...oadBalancerInFlightRequestCountNotifier.java |   25 +-
 .../extension/api/LoadBalancerStatsReader.java  |    3 +-
 .../TenantAwareLoadBalanceEndpoint.java         |   31 +-
 .../balancer/mediators/ResponseInterceptor.java |   26 +-
 ...adBalancerInFlightRequestCountCollector.java |   71 +-
 .../WSO2CEPInFlightRequestCountObserver.java    |   36 +-
 .../stratos/load/balancer/util/Constants.java   |    3 +
 .../messaging/domain/topology/Cloud.java        |   84 -
 .../messaging/domain/topology/Cluster.java      |   64 +-
 .../messaging/domain/topology/Member.java       |    7 +
 .../messaging/domain/topology/MemberStatus.java |    3 +
 .../messaging/domain/topology/Region.java       |   79 -
 .../stratos/messaging/domain/topology/Zone.java |   55 -
 .../instance/status/InstanceActivatedEvent.java |   60 +
 .../instance/status/InstanceStartedEvent.java   |   59 +
 .../instance/status/MemberActivatedEvent.java   |   59 -
 .../instance/status/MemberStartedEvent.java     |   59 -
 .../event/topology/ClusterCreatedEvent.java     |   12 +-
 .../event/topology/ClusterRemovedEvent.java     |   13 +-
 .../event/topology/CompleteTopologyEvent.java   |   11 +-
 .../event/topology/InstanceSpawnedEvent.java    |   24 +-
 .../event/topology/MemberActivatedEvent.java    |   26 +-
 .../event/topology/MemberStartedEvent.java      |    7 +-
 .../event/topology/MemberSuspendedEvent.java    |    7 +-
 .../event/topology/MemberTerminatedEvent.java   |    7 +-
 .../event/topology/PartitionCreatedEvent.java   |   39 -
 .../event/topology/PartitionRemovedEvent.java   |   37 -
 .../event/topology/PartitionUpdatedEvent.java   |   81 -
 .../event/topology/ServiceCreatedEvent.java     |    2 +-
 .../event/topology/ServiceRemovedEvent.java     |   11 +-
 .../util/bean/type/map/MapAdapter.java          |   52 +
 .../util/bean/type/map/MapEntryType.java        |   32 +
 .../messaging/util/bean/type/map/MapType.java   |   28 +
 .../apache/stratos/rest/endpoint/Constants.java |    6 +-
 .../autoscaler/partition/PartitionGroup.java    |    2 +-
 .../policy/deployment/DeploymentPolicy.java     |    4 +
 .../definition/CartridgeDefinitionBean.java     |    3 +
 .../cartridge/definition/LoadBalancerBean.java  |    4 +
 .../bean/util/converter/PojoConverter.java      |  165 +-
 .../endpoint/bean/util/type/map/MapAdapter.java |   52 +
 .../bean/util/type/map/MapEntryType.java        |   32 +
 .../endpoint/bean/util/type/map/MapType.java    |   28 +
 .../rest/endpoint/services/ServiceUtils.java    |  377 ++-
 .../rest/endpoint/services/StratosAdmin.java    |  107 +-
 .../LoadBalancerStatisticsEventBuilder.xml      |    4 +-
 .../AverageRequestsInflightFinder.xml           |    4 +-
 .../GradientOfRequestsInFlightFinder.xml        |    6 +-
 ...SecondDerivativeOfRequestsInFlightFinder.xml |    6 +-
 .../stream-manager-config.xml                   |    9 +-
 .../haproxy/extension/HAProxyStatsReader.java   |   34 +-
 .../ec2/load-balancer/start-load-balancer.sh    |   70 +
 .../templates/loadbalancer.conf.template        |  126 +
 .../event/subscriber/ArtifactListener.java      |   13 +-
 .../subscriber/CartridgeAgentConstants.java     |    7 +-
 .../cartridge/agent/event/subscriber/Main.java  |   11 +-
 .../org.apache.stratos.adc.mgt.stub/pom.xml     |    9 +-
 .../pom.xml                                     |    2 +-
 .../pom.xml                                     |    9 +-
 .../src/main/resources/AutoScalerService.wsdl   |  278 +-
 .../main/resources/CloudControllerService.wsdl  |   22 +-
 tools/stratos-installer/conf/setup.conf         |  173 +-
 .../stratos-installer/config/sc/bin/stratos.sh  |  301 --
 .../config/sc/repository/conf/axis2/axis2.xml   |  724 -----
 .../config/sc/repository/conf/carbon.xml        |  586 ----
 .../repository/conf/cartridge-config.properties |   56 -
 .../conf/datasources/master-datasources.xml     |  129 -
 .../conf/datasources/stratos-datasources.xml    |   51 -
 .../sc/repository/conf/etc/logging-config.xml   |   40 -
 .../config/sc/repository/conf/log4j.properties  |  171 --
 .../resources/user-data/ssl-cert-snakeoil.key   |   16 -
 .../resources/user-data/ssl-cert-snakeoil.pem   |   14 -
 .../config/sm/repository/conf/carbon.xml        |  586 ++++
 .../repository/conf/cartridge-config.properties |   51 +
 .../conf/datasources/master-datasources.xml     |  129 +
 .../conf/datasources/stratos-datasources.xml    |   51 +
 .../config/sm/repository/conf/jndi.properties   |    4 +
 tools/stratos-installer/setup.sh                |  633 ++--
 tools/stratos-installer/start-servers.sh        |    2 +-
 186 files changed, 10063 insertions(+), 5166 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0bfb3bea/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/Payload.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0bfb3bea/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
----------------------------------------------------------------------
diff --cc components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
index d63e13a,7192ef0..b406048
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
@@@ -24,11 -24,9 +24,10 @@@ import org.apache.stratos.adc.mgt.excep
  import org.apache.stratos.adc.mgt.payload.PayloadArg;
  import org.apache.stratos.adc.mgt.repository.Repository;
  import org.apache.stratos.adc.mgt.subscriber.Subscriber;
 +import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionTenancyBehaviour;
  import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
  import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
- 
- import java.util.Properties;
+ import org.apache.stratos.cloud.controller.pojo.Properties;
  
  public class ApplicationCartridgeSubscription extends CartridgeSubscription {
  

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0bfb3bea/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java
----------------------------------------------------------------------
diff --cc components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java
index d868745,a379f83..fb08da3
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java
@@@ -39,13 -38,15 +39,16 @@@ import org.apache.stratos.adc.mgt.subsc
  import org.apache.stratos.adc.mgt.utils.*;
  import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
  import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+ import org.apache.stratos.cloud.controller.pojo.Properties;
  
+ import java.io.Serializable;
  import java.util.ArrayList;
  import java.util.List;
- import java.util.Properties;
  
- public abstract class CartridgeSubscription /*implements TempBehaviourInterface*/ {
+ public abstract class CartridgeSubscription implements Serializable {
  
++
+     private static final long serialVersionUID = -5197430500059231924L;
      private static Log log = LogFactory.getLog(CartridgeSubscription.class);
      private int subscriptionId;
      private String type;
@@@ -63,6 -65,6 +67,7 @@@
      private String subscriptionKey;
      protected SubscriptionTenancyBehaviour subscriptionTenancyBehaviour;
  
++    
      /**
       * Constructor
       *
@@@ -81,14 -82,13 +86,14 @@@
          getCluster().setHostName(cartridgeInfo.getHostName());
          this.setSubscriptionStatus(CartridgeConstants.SUBSCRIBED);
          this.connectedSubscriptionAliases = new ArrayList<String>();
+         boolean isMultiTenant = getCartridgeInfo().getMultiTenant();
 -        if(isMultiTenant) {
 +        if(isServiceDeployment) {
 +        	subscriptionTenancyBehaviour = new ServiceDeploymentMultiTenantBehaviour(this);
-         } else if(getCartridgeInfo().getMultiTenant()) {
++        } else if(isMultiTenant) {
              subscriptionTenancyBehaviour = new SubscriptionMultiTenantBehaviour(this);
--        }
--        else {
++        } else {
              subscriptionTenancyBehaviour = new SubscriptionSingleTenantBehaviour(this);
 -        }
 +        } 
      }
  
      /**

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0bfb3bea/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0bfb3bea/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
----------------------------------------------------------------------
diff --cc components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
index 637c83f,25f2063..33a2d84
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
@@@ -26,14 -24,15 +26,18 @@@ import org.apache.stratos.adc.mgt.excep
  import org.apache.stratos.adc.mgt.payload.PayloadArg;
  import org.apache.stratos.adc.mgt.repository.Repository;
  import org.apache.stratos.adc.mgt.subscriber.Subscriber;
 +import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionTenancyBehaviour;
  import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
  import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+ import org.apache.stratos.cloud.controller.pojo.Properties;
  
- import java.util.Properties;
  
  public class FrameworkCartridgeSubscription extends CartridgeSubscription {
+ 
 +	private static Log log = LogFactory.getLog(FrameworkCartridgeSubscription.class);
+     private static final long serialVersionUID = 1633832232416272756L;
+ 
++    
      /**
       * Constructor
       *

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0bfb3bea/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/LBCartridgeSubscription.java
----------------------------------------------------------------------
diff --cc components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/LBCartridgeSubscription.java
index 37455c2,d49ec09..f2f69ae
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/LBCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/LBCartridgeSubscription.java
@@@ -23,10 -23,8 +23,9 @@@ import org.apache.stratos.adc.mgt.dao.C
  import org.apache.stratos.adc.mgt.exception.ADCException;
  import org.apache.stratos.adc.mgt.exception.NotSubscribedException;
  import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
 +import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionTenancyBehaviour;
  import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
- 
- import java.util.Properties;
+ import org.apache.stratos.cloud.controller.pojo.Properties;
  
  public class LBCartridgeSubscription extends CartridgeSubscription {
  

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0bfb3bea/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/ServiceDeploymentMultiTenantBehaviour.java
----------------------------------------------------------------------
diff --cc components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/ServiceDeploymentMultiTenantBehaviour.java
index 4e0b08e,0000000..77ced4e
mode 100644,000000..100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/ServiceDeploymentMultiTenantBehaviour.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/ServiceDeploymentMultiTenantBehaviour.java
@@@ -1,125 -1,0 +1,121 @@@
 +/*
 + * 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.adc.mgt.subscription.tenancy;
 +
- import java.util.Properties;
- 
 +import org.apache.commons.logging.Log;
 +import org.apache.commons.logging.LogFactory;
 +import org.apache.stratos.adc.mgt.exception.ADCException;
 +import org.apache.stratos.adc.mgt.exception.AlreadySubscribedException;
 +import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
- import org.apache.stratos.adc.mgt.internal.DataHolder;
 +import org.apache.stratos.adc.mgt.payload.PayloadArg;
 +import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
 +import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
 +import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
 +import org.apache.stratos.adc.mgt.utils.PersistenceManager;
- import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
- import org.apache.stratos.adc.topology.mgt.serviceobjects.DomainContext;
++import org.apache.stratos.cloud.controller.pojo.Properties;
 +
 +public class ServiceDeploymentMultiTenantBehaviour extends
 +		SubscriptionMultiTenantBehaviour {
 +
 +	private static Log log = LogFactory.getLog(ServiceDeploymentMultiTenantBehaviour.class);
 +	
 +	public ServiceDeploymentMultiTenantBehaviour(
 +			CartridgeSubscription cartridgeSubscription) {
 +		super(cartridgeSubscription);
 +	}
 +	
 +	@Override
 +	public void createSubscription() throws ADCException,
 +			AlreadySubscribedException {
 +	
 +		log.info(" --- in Service Deployment Multitenant Behaviour create subscription ---- ");
 +		
 +		boolean allowMultipleSubscription = Boolean.
 +        valueOf(System.getProperty(CartridgeConstants.FEATURE_MULTI_TENANT_MULTIPLE_SUBSCRIPTION_ENABLED));
 +
 +		if (!allowMultipleSubscription) {
 +			// If the cartridge is multi-tenant. We should not let users
 +			// createSubscription twice.
 +			boolean subscribed;
 +			try {
 +				subscribed = PersistenceManager.isAlreadySubscribed(
 +						cartridgeSubscription.getType(), cartridgeSubscription
 +								.getSubscriber().getTenantId());
 +			} catch (Exception e) {
 +				String msg = "Error checking whether the cartridge type "
 +						+ cartridgeSubscription.getType()
 +						+ " is already subscribed";
 +				log.error(msg, e);
 +				throw new ADCException(msg, e);
 +			}
 +
 +			if (subscribed) {
 +				String msg = "Already subscribed to "
 +						+ cartridgeSubscription.getType()
 +						+ ". This multi-tenant cartridge will not be available to createSubscription";
 +				if (log.isDebugEnabled()) {
 +					log.debug(msg);
 +				}
 +				throw new AlreadySubscribedException(msg,
 +						cartridgeSubscription.getType());
 +			}
 +		}
 +	
 +				/*if (domainContext.getSubDomain().equalsIgnoreCase("mgt")) {
 +					cartridgeSubscription.getCluster().setMgtClusterDomain(
 +							domainContext.getDomain());
 +					cartridgeSubscription.getCluster().setMgtClusterSubDomain(
 +							domainContext.getSubDomain());
 +				} else {
 +					cartridgeSubscription.getCluster().setClusterDomain(
 +							domainContext.getDomain());
 +					cartridgeSubscription.getCluster().setClusterSubDomain(
 +							domainContext.getSubDomain());
 +				}*/
 +				
 +	}
 +	
 +	
 +	@Override
 +	public void registerSubscription(Properties properties)
 +			throws ADCException, UnregisteredCartridgeException {
 +		
 +		// register subscription to start up the cartridge instances
 +		ApplicationManagementUtil.registerService(cartridgeSubscription.getType(),
 +                cartridgeSubscription.getCluster().getClusterDomain(),
 +                cartridgeSubscription.getCluster().getClusterSubDomain(),
 +                cartridgeSubscription.getPayload().createPayload(),
 +                cartridgeSubscription.getPayload().getPayloadArg().getTenantRange(),
 +                cartridgeSubscription.getCluster().getHostName(),
 +                cartridgeSubscription.getAutoscalingPolicyName(),
 +                cartridgeSubscription.getDeploymentPolicyName(),
 +                properties);
- 		// TODO -- Commented out for testing. Uncomment for release. 
-         //cartridgeSubscription.getPayload().delete();
++		
++        cartridgeSubscription.getPayload().delete();
 +	}
 +	
 +	@Override
 +	public PayloadArg createPayloadParameters(PayloadArg payloadArg)
 +			throws ADCException {
 +				
 +		return payloadArg;
 +	}
 +
 +}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0bfb3bea/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0bfb3bea/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0bfb3bea/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
----------------------------------------------------------------------
diff --cc components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
index 3bfeb97,e16b2a6..850a8ff
--- 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
@@@ -597,26 -668,6 +670,26 @@@ public class StratosAdmin extends Abstr
          }
      }
  
 +
 +    @POST
 +    @Path("/service/definition")
 +    @Produces("application/json")
 +    @Consumes("application/json")
 +    @AuthorizationAction("/permission/protected/manage/monitor/tenants")
 +    @SuperTenantService(true)
 +    public void deployService (ServiceDefinitionBean serviceDefinitionBean)
 +            throws RestAPIException {
 +
 +    	log.info("Service definition request.. : " + serviceDefinitionBean.getServiceName());
 +    	// super tenant Deploying service (MT) 
-     	// -- note -- here an alias is generated
++    	// here an alias is generated
 +       ServiceUtils.deployService(serviceDefinitionBean.getCartridgeType(), UUID.randomUUID().toString(), serviceDefinitionBean.getAutoscalingPolicyName(),
 +    		   serviceDefinitionBean.getDeploymentPolicyName(), getTenantDomain(), getTenantId(),
 +    		   serviceDefinitionBean.getClusterDomain(), serviceDefinitionBean.getClusterSubDomain(),
 +    		   serviceDefinitionBean.getTenantRange());
 +    }
 +
 +
      private List<TenantInfoBean> getAllTenants() throws Exception {
          TenantManager tenantManager = ServiceHolder.getTenantManager();
          Tenant[] tenants;