You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by is...@apache.org on 2013/12/07 19:18:21 UTC

[5/6] git commit: subscription model changes

subscription model changes


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

Branch: refs/heads/master
Commit: 702d5ca1e62a5b8b96724cb28599071f817b07c2
Parents: f7c8c0b
Author: Isuru <is...@wso2.com>
Authored: Sat Dec 7 23:46:58 2013 +0530
Committer: Isuru <is...@wso2.com>
Committed: Sat Dec 7 23:46:58 2013 +0530

----------------------------------------------------------------------
 .../DatabaseBasedPersistenceManager.java        |  19 +-
 .../AbstractCartridgeSubscription.java          | 441 -------------------
 .../ApplicationCartridgeSubscription.java       |   2 +-
 .../mgt/subscription/CartridgeSubscription.java |  46 +-
 .../subscription/CartridgeSubscription_old.java | 431 ++++++++++++++++++
 .../subscription/DataCartridgeSubscription.java |  49 ++-
 .../DataCartridgeSubscription1.java             | 132 ------
 .../DataCartridgeSubscription_old.java          | 127 ++++++
 .../FrameworkCartridgeSubscription.java         |   2 +-
 .../subscription/LBCartridgeSubscription.java   |  51 +++
 .../MultiTenantCartridgeSubscription.java       | 268 +++++------
 .../SingleTenantCartridgeSubscription.java      | 272 ++++++------
 .../factory/CartridgeSubscriptionFactory.java   |  33 +-
 .../SubscriptionMultiTenantBehaviour.java       |   4 +-
 .../SubscriptionSingleTenantBehaviour.java      |   4 +-
 .../tenancy/SubscriptionTenancyBehaviour.java   |  14 +-
 .../adc/mgt/test/CartridgeSubscriptionTest.java |   1 -
 17 files changed, 989 insertions(+), 907 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/DatabaseBasedPersistenceManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/DatabaseBasedPersistenceManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/DatabaseBasedPersistenceManager.java
index 3059df2..b672332 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/DatabaseBasedPersistenceManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/DatabaseBasedPersistenceManager.java
@@ -31,7 +31,7 @@ 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.DataCartridgeSubscription;
-import org.apache.stratos.adc.mgt.subscription.SingleTenantCartridgeSubscription;
+//import org.apache.stratos.adc.mgt.subscription.SingleTenantCartridgeSubscription;
 import org.apache.stratos.adc.mgt.subscription.factory.CartridgeSubscriptionFactory;
 import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
 import org.apache.stratos.adc.mgt.utils.PolicyHolder;
@@ -523,14 +523,15 @@ public class DatabaseBasedPersistenceManager extends PersistenceManager {
         cartridgeSubscription.setCluster(cluster);
 
         //data cartridge specific information
-        if (resultSet.getInt("DATA_CARTRIDGE_ID") != -1 && cartridgeSubscription instanceof
-                SingleTenantCartridgeSubscription) {
-            DataCartridgeSubscription dataCartridgeSubscription = (DataCartridgeSubscription)cartridgeSubscription;
-            dataCartridgeSubscription.setHost(resultSet.getString("HOST"));
-            dataCartridgeSubscription.setUsername(resultSet.getString("ADMIN_USERNAME"));
-            dataCartridgeSubscription.setPassword(RepoPasswordMgtUtil.decryptPassword(resultSet.
-                    getString("ADMIN_PASSWORD")));
-        }
+        //TODO: temporarily removed
+//        if (resultSet.getInt("DATA_CARTRIDGE_ID") != -1 && cartridgeSubscription instanceof
+//                SingleTenantCartridgeSubscription) {
+//            DataCartridgeSubscription dataCartridgeSubscription = (DataCartridgeSubscription)cartridgeSubscription;
+//            dataCartridgeSubscription.setHost(resultSet.getString("HOST"));
+//            dataCartridgeSubscription.setUsername(resultSet.getString("ADMIN_USERNAME"));
+//            dataCartridgeSubscription.setPassword(RepoPasswordMgtUtil.decryptPassword(resultSet.
+//                    getString("ADMIN_PASSWORD")));
+//        }
 
         //Subscriber related data
         CarbonContext carbonContext = CarbonContext.getThreadLocalCarbonContext();

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/AbstractCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/AbstractCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/AbstractCartridgeSubscription.java
deleted file mode 100644
index 3b7a2c7..0000000
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/AbstractCartridgeSubscription.java
+++ /dev/null
@@ -1,441 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.adc.mgt.subscription;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.adc.mgt.custom.domain.RegistryManager;
-import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
-import org.apache.stratos.adc.mgt.dao.Cluster;
-import org.apache.stratos.adc.mgt.dns.DNSManager;
-import org.apache.stratos.adc.mgt.dto.Policy;
-import org.apache.stratos.adc.mgt.exception.*;
-import org.apache.stratos.adc.mgt.internal.DataHolder;
-import org.apache.stratos.adc.mgt.payload.Payload;
-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.SubscriptionMultiTenantBehaviour;
-import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionSingleTenantBehaviour;
-import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionTenancyBehaviour;
-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 java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
-public abstract class AbstractCartridgeSubscription {
-
-    private static Log log = LogFactory.getLog(AbstractCartridgeSubscription.class);
-    private int subscriptionId;
-    private String type;
-    private String alias;
-    private Policy autoscalingPolicy;
-    private Subscriber subscriber;
-    private Repository repository;
-    private CartridgeInfo cartridgeInfo;
-    private Payload payload;
-    private Cluster cluster;
-    private String subscriptionStatus;
-    private String mappedDomain;
-    private List<String> connectedSubscriptionAliases;
-    private String subscriptionKey;
-    protected SubscriptionTenancyBehaviour subscriptionTenancyBehaviour;
-
-    /**
-     * Constructor
-     *
-     * @param cartridgeInfo CartridgeInfo subscription
-     */
-    public AbstractCartridgeSubscription(CartridgeInfo cartridgeInfo) {
-
-        this.setCartridgeInfo(cartridgeInfo);
-        this.setType(cartridgeInfo.getType());
-        this.setCluster(new Cluster());
-        getCluster().setClusterDomain("");
-        getCluster().setClusterSubDomain(CartridgeConstants.DEFAULT_SUBDOMAIN);
-        getCluster().setMgtClusterDomain("");
-        getCluster().setMgtClusterSubDomain(CartridgeConstants.DEFAULT_MGT_SUBDOMAIN);
-        getCluster().setHostName(cartridgeInfo.getHostName());
-        this.setSubscriptionStatus(CartridgeConstants.SUBSCRIBED);
-        this.connectedSubscriptionAliases = new ArrayList<String>();
-        if(getCartridgeInfo().getMultiTenant()) {
-            subscriptionTenancyBehaviour = new SubscriptionMultiTenantBehaviour(this);
-        }
-        else {
-            subscriptionTenancyBehaviour = new SubscriptionSingleTenantBehaviour(this);
-        }
-    }
-
-    /**
-     * Subscribes to this cartridge subscription
-     *
-     * @param subscriber Subscriber subscription
-     * @param alias Alias of the cartridge subscription
-     * @param autoscalingPolicy Auto scaling policy
-     * @param repository Relevenat Repository subscription
-     *
-     * @throws org.apache.stratos.adc.mgt.exception.ADCException
-     * @throws org.apache.stratos.adc.mgt.exception.PolicyException
-     * @throws org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException
-     * @throws org.apache.stratos.adc.mgt.exception.InvalidCartridgeAliasException
-     * @throws org.apache.stratos.adc.mgt.exception.DuplicateCartridgeAliasException
-     * @throws org.apache.stratos.adc.mgt.exception.RepositoryRequiredException
-     * @throws org.apache.stratos.adc.mgt.exception.AlreadySubscribedException
-     * @throws org.apache.stratos.adc.mgt.exception.RepositoryCredentialsRequiredException
-     * @throws org.apache.stratos.adc.mgt.exception.InvalidRepositoryException
-     * @throws org.apache.stratos.adc.mgt.exception.RepositoryTransportException
-     */
-    public void createSubscription (Subscriber subscriber, String alias, Policy autoscalingPolicy,
-                                    Repository repository)
-            throws ADCException, PolicyException, UnregisteredCartridgeException, InvalidCartridgeAliasException,
-            DuplicateCartridgeAliasException, RepositoryRequiredException, AlreadySubscribedException,
-            RepositoryCredentialsRequiredException, InvalidRepositoryException, RepositoryTransportException {
-
-        setSubscriber(subscriber);
-        setAlias(alias);
-        setAutoscalingPolicy(autoscalingPolicy);
-        setRepository(repository);
-    }
-
-    /**
-     * Unsubscribe from this cartridge subscription
-     *
-     * @throws ADCException
-     * @throws NotSubscribedException
-     */
-    public abstract void removeSubscription() throws ADCException, NotSubscribedException;
-
-    /**
-     * Registers the subscription
-     *
-     * @param properties Any additional properties needed
-     *
-     * @return CartridgeSubscriptionInfo subscription populated with relevant data
-     * @throws ADCException
-     * @throws UnregisteredCartridgeException
-     */
-    public abstract CartridgeSubscriptionInfo registerSubscription(Properties properties)
-            throws ADCException, UnregisteredCartridgeException;
-
-    /**
-     * Connect cartridges
-     *
-     * @param connectingCartridgeAlias Alias of connecting cartridge
-     */
-    public void connect (String connectingCartridgeAlias) {
-        connectedSubscriptionAliases.add(connectingCartridgeAlias);
-    }
-
-    /**
-     * Disconnect from the cartridge subscription given by disconnectingCartridgeAlias
-     *
-     * @param disconnectingCartridgeAlias Alias of the cartridge subscription to disconnect
-     */
-    public void disconnect (String disconnectingCartridgeAlias) {
-        connectedSubscriptionAliases.remove(disconnectingCartridgeAlias);
-    }
-
-    /**
-     * Creates the relevant payload parameters for this cartridge subscription
-     *
-     * @return PayloadArg subscription
-     * @throws ADCException in an errpr
-     */
-    public PayloadArg createPayloadParameters() throws ADCException {
-
-        PayloadArg payloadArg = new PayloadArg();
-        payloadArg.setCartridgeInfo(getCartridgeInfo());
-        payloadArg.setPolicy(getAutoscalingPolicy());
-        payloadArg.setMultitenant(getCartridgeInfo().getMultiTenant());
-        payloadArg.setTenantId(getSubscriber().getTenantId());
-        payloadArg.setTenantDomain(getSubscriber().getTenantDomain());
-        payloadArg.setCartridgeAlias(getAlias());
-        payloadArg.setServiceName(getCartridgeInfo().getType());
-        payloadArg.setSubscriptionKey(subscriptionKey);
-        return payloadArg;
-    }
-
-    /**
-     * Manages the repository for the cartridge subscription
-     *
-     * @param repoURL Repository URL
-     * @param repoUserName Repository Username
-     * @param repoUserPassword Repository password
-     * @param privateRepo public/private repository
-     * @param cartridgeAlias Alias of the cartridge subscription
-     * @param cartridgeInfo CartridgeInfo subscription
-     * @param tenantDomain Domain of the tenant
-     *
-     * @return Repository populated with relevant information or null of not repository is relevant to this cartridge
-     * subscription
-     * @throws ADCException
-     * @throws RepositoryRequiredException
-     * @throws RepositoryCredentialsRequiredException
-     * @throws RepositoryTransportException
-     * @throws InvalidRepositoryException
-     */
-    public Repository manageRepository (String repoURL, String repoUserName, String repoUserPassword,
-                                        boolean privateRepo, String cartridgeAlias, CartridgeInfo cartridgeInfo,
-                                        String tenantDomain)
-
-            throws ADCException, RepositoryRequiredException, RepositoryCredentialsRequiredException,
-            RepositoryTransportException, InvalidRepositoryException {
-
-        if (!new Boolean(System.getProperty(CartridgeConstants.FEATURE_INTERNAL_REPO_ENABLED))) {
-            if (log.isDebugEnabled()) {
-                log.debug("Internal repo feature is not enabled.");
-            }
-        }
-
-        Repository repository = new Repository();
-        if (repoURL != null && repoURL.trim().length() > 0) {
-            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
-            repository.setUrl(repoURL);
-            repository.setUserName(repoUserName);
-            repository.setPassword(repoUserPassword);
-            repository.setPrivateRepository(privateRepo);
-
-        } 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 {
-                new RepositoryCreator(new RepositoryInfoBean(repoURL, cartridgeAlias, tenantDomain,
-                        repository.getUserName(), repository.getPassword(), cartridgeInfo.getDeploymentDirs(),
-                        cartridgeInfo)).createInternalRepository();
-
-            } catch (Exception e) {
-                throw new ADCException(e.getMessage(), e);
-            }
-            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,
-                new Boolean(System.getProperty(CartridgeConstants.FEATURE_EXTERNAL_REPO_VAIDATION_ENABLED)));
-
-        return repository;
-    }
-
-    /**
-     * Cleans up the subscription information after unsubscribing
-     *
-     * @throws ADCException
-     */
-    protected void cleanupSubscription () throws ADCException {
-
-        try {
-            new RepositoryFactory().destroyRepository(alias, subscriber.getTenantDomain(),
-                    subscriber.getAdminUserName());
-            log.info("Repo is destroyed successfully.. ");
-
-        } catch (Exception e) {
-            String errorMsg = "Error in destroying repository for tenant " + subscriber.getTenantDomain() +
-                    "cartridge type " + type;
-            log.error(errorMsg);
-        }
-
-        try {
-            PersistenceManager.updateSubscriptionState(subscriptionId, "UNSUBSCRIBED");
-
-        } catch (Exception e) {
-            String errorMsg = "Error in unscubscribing from cartridge, alias " + alias + ", tenant " +
-                    subscriber.getTenantDomain();
-            throw new ADCException(errorMsg, e);
-        }
-
-        //TODO: FIXME: do we need this?
-        new DNSManager().removeSubDomain(getCluster().getHostName());
-
-        try {
-            new RegistryManager().removeDomainMappingFromRegistry(getCluster().getHostName());
-
-        } catch (Exception e) {
-            String errorMsg = "Error in removing domain mapping, alias " + alias + ", tenant " +
-                    subscriber.getTenantDomain();
-            log.error(errorMsg, e);
-        }
-
-        TopologyManagementService topologyMgtService = DataHolder.getTopologyMgtService();
-        String[] ips = topologyMgtService.getActiveIPs(type, getCluster().getClusterDomain(), getCluster().getClusterSubDomain());
-        try {
-            PersistenceManager.updateInstanceState("INACTIVE", ips, getCluster().getClusterDomain(), getCluster().getClusterSubDomain(), type);
-
-        } catch (Exception e) {
-            String errorMsg = "Error in updating state to INACTIVE";
-            log.error(errorMsg, e);
-        }
-
-        this.setSubscriptionStatus(CartridgeConstants.UNSUBSCRIBED);
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public String getAlias() {
-        return alias;
-    }
-
-    public Subscriber getSubscriber() {
-        return subscriber;
-    }
-
-    public Repository getRepository() {
-        return repository;
-    }
-
-    public List<String> getConnectedSubscriptionAliases() {
-        return connectedSubscriptionAliases;
-    }
-
-    public CartridgeInfo getCartridgeInfo() {
-        return cartridgeInfo;
-    }
-
-    public String getHostName() {
-        return getCluster().getHostName();
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public void setAlias(String alias) {
-        this.alias = alias;
-    }
-
-    public String getClusterDomain() {
-        return getCluster().getClusterDomain();
-    }
-
-    public void setClusterDomain(String clusterDomain) {
-        getCluster().setClusterDomain(clusterDomain);
-    }
-
-    public String getClusterSubDomain() {
-        return getCluster().getClusterSubDomain();
-    }
-
-    public void setClusterSubDomain(String clusterSubDomain) {
-        getCluster().setClusterSubDomain(clusterSubDomain);
-    }
-
-    public String getMgtClusterDomain() {
-        return getCluster().getMgtClusterDomain();
-    }
-
-    public void setMgtClusterDomain(String mgtClusterDomain) {
-        getCluster().setMgtClusterDomain(mgtClusterDomain);
-    }
-
-    public String getMgtClusterSubDomain() {
-        return getCluster().getMgtClusterSubDomain();
-    }
-
-    public void setMgtClusterSubDomain(String mgtClusterSubDomain) {
-        getCluster().setMgtClusterSubDomain(mgtClusterSubDomain);
-    }
-
-    public void setHostName(String hostName) {
-        getCluster().setHostName(hostName);
-    }
-
-    public Policy getAutoscalingPolicy() {
-        return autoscalingPolicy;
-    }
-
-    public void setAutoscalingPolicy(Policy autoscalingPolicy) {
-        this.autoscalingPolicy = autoscalingPolicy;
-    }
-
-    public void setSubscriber(Subscriber subscriber) {
-        this.subscriber = subscriber;
-    }
-
-    public void setRepository(Repository repository) {
-        this.repository = repository;
-    }
-
-    public void setCartridgeInfo(CartridgeInfo cartridgeInfo) {
-        this.cartridgeInfo = cartridgeInfo;
-    }
-
-    public Payload getPayload() {
-        return payload;
-    }
-
-    public void setPayload(Payload payload) {
-        this.payload = payload;
-    }
-
-    public int getSubscriptionId() {
-        return subscriptionId;
-    }
-
-    public void setSubscriptionId(int subscriptionId) {
-        this.subscriptionId = subscriptionId;
-    }
-
-    public String getMappedDomain() {
-        return mappedDomain;
-    }
-
-    public void setMappedDomain(String mappedDomain) {
-        this.mappedDomain = mappedDomain;
-    }
-
-    public String getSubscriptionStatus() {
-        return subscriptionStatus;
-    }
-
-    public void setSubscriptionStatus(String subscriptionStatus) {
-        this.subscriptionStatus = subscriptionStatus;
-    }
-
-    public String getSubscriptionKey() {
-        return subscriptionKey;
-    }
-
-    public void setSubscriptionKey(String subscriptionKey) {
-        this.subscriptionKey = subscriptionKey;
-    }
-
-    public Cluster getCluster() {
-        return cluster;
-    }
-
-    public void setCluster(Cluster cluster) {
-        this.cluster = cluster;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/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 4a6c0e5..63fc6b1 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
@@ -30,7 +30,7 @@ import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 
 import java.util.Properties;
 
-public class ApplicationCartridgeSubscription extends AbstractCartridgeSubscription {
+public class ApplicationCartridgeSubscription extends CartridgeSubscription {
 
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/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 e1a48ce..76f0739 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
@@ -33,6 +33,9 @@ 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.SubscriptionMultiTenantBehaviour;
+import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionSingleTenantBehaviour;
+import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionTenancyBehaviour;
 import org.apache.stratos.adc.mgt.utils.*;
 import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
 import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
@@ -57,6 +60,7 @@ public abstract class CartridgeSubscription {
     private String mappedDomain;
     private List<String> connectedSubscriptionAliases;
     private String subscriptionKey;
+    protected SubscriptionTenancyBehaviour subscriptionTenancyBehaviour;
 
     /**
      * Constructor
@@ -75,6 +79,12 @@ public abstract class CartridgeSubscription {
         getCluster().setHostName(cartridgeInfo.getHostName());
         this.setSubscriptionStatus(CartridgeConstants.SUBSCRIBED);
         this.connectedSubscriptionAliases = new ArrayList<String>();
+        if(getCartridgeInfo().getMultiTenant()) {
+            subscriptionTenancyBehaviour = new SubscriptionMultiTenantBehaviour(this);
+        }
+        else {
+            subscriptionTenancyBehaviour = new SubscriptionSingleTenantBehaviour(this);
+        }
     }
 
     /**
@@ -85,19 +95,19 @@ public abstract class CartridgeSubscription {
      * @param autoscalingPolicy Auto scaling policy
      * @param repository Relevenat Repository subscription
      *
-     * @throws ADCException
-     * @throws PolicyException
-     * @throws UnregisteredCartridgeException
-     * @throws InvalidCartridgeAliasException
-     * @throws DuplicateCartridgeAliasException
-     * @throws RepositoryRequiredException
-     * @throws AlreadySubscribedException
-     * @throws RepositoryCredentialsRequiredException
-     * @throws InvalidRepositoryException
-     * @throws RepositoryTransportException
+     * @throws org.apache.stratos.adc.mgt.exception.ADCException
+     * @throws org.apache.stratos.adc.mgt.exception.PolicyException
+     * @throws org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException
+     * @throws org.apache.stratos.adc.mgt.exception.InvalidCartridgeAliasException
+     * @throws org.apache.stratos.adc.mgt.exception.DuplicateCartridgeAliasException
+     * @throws org.apache.stratos.adc.mgt.exception.RepositoryRequiredException
+     * @throws org.apache.stratos.adc.mgt.exception.AlreadySubscribedException
+     * @throws org.apache.stratos.adc.mgt.exception.RepositoryCredentialsRequiredException
+     * @throws org.apache.stratos.adc.mgt.exception.InvalidRepositoryException
+     * @throws org.apache.stratos.adc.mgt.exception.RepositoryTransportException
      */
     public void createSubscription (Subscriber subscriber, String alias, Policy autoscalingPolicy,
-                                   Repository repository)
+                                    Repository repository)
             throws ADCException, PolicyException, UnregisteredCartridgeException, InvalidCartridgeAliasException,
             DuplicateCartridgeAliasException, RepositoryRequiredException, AlreadySubscribedException,
             RepositoryCredentialsRequiredException, InvalidRepositoryException, RepositoryTransportException {
@@ -412,14 +422,14 @@ public abstract class CartridgeSubscription {
         this.subscriptionStatus = subscriptionStatus;
     }
 
-	public String getSubscriptionKey() {
-		return subscriptionKey;
-	}
+    public String getSubscriptionKey() {
+        return subscriptionKey;
+    }
+
+    public void setSubscriptionKey(String subscriptionKey) {
+        this.subscriptionKey = subscriptionKey;
+    }
 
-	public void setSubscriptionKey(String subscriptionKey) {
-		this.subscriptionKey = subscriptionKey;
-	}
-	
     public Cluster getCluster() {
         return cluster;
     }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription_old.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription_old.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription_old.java
new file mode 100644
index 0000000..cab956d
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription_old.java
@@ -0,0 +1,431 @@
+///*
+// * 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;
+//
+//import org.apache.commons.logging.Log;
+//import org.apache.commons.logging.LogFactory;
+//import org.apache.stratos.adc.mgt.custom.domain.RegistryManager;
+//import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
+//import org.apache.stratos.adc.mgt.dao.Cluster;
+//import org.apache.stratos.adc.mgt.dns.DNSManager;
+//import org.apache.stratos.adc.mgt.dto.Policy;
+//import org.apache.stratos.adc.mgt.exception.*;
+//import org.apache.stratos.adc.mgt.internal.DataHolder;
+//import org.apache.stratos.adc.mgt.payload.Payload;
+//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.utils.*;
+//import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
+//import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+//
+//import java.util.ArrayList;
+//import java.util.List;
+//import java.util.Properties;
+//
+//public abstract class CartridgeSubscription {
+//
+//    private static Log log = LogFactory.getLog(CartridgeSubscription.class);
+//    private int subscriptionId;
+//    private String type;
+//    private String alias;
+//    private Policy autoscalingPolicy;
+//    private Subscriber subscriber;
+//    private Repository repository;
+//    private CartridgeInfo cartridgeInfo;
+//    private Payload payload;
+//    private Cluster cluster;
+//    private String subscriptionStatus;
+//    private String mappedDomain;
+//    private List<String> connectedSubscriptionAliases;
+//    private String subscriptionKey;
+//
+//    /**
+//     * Constructor
+//     *
+//     * @param cartridgeInfo CartridgeInfo subscription
+//     */
+//    public CartridgeSubscription(CartridgeInfo cartridgeInfo) {
+//
+//        this.setCartridgeInfo(cartridgeInfo);
+//        this.setType(cartridgeInfo.getType());
+//        this.setCluster(new Cluster());
+//        getCluster().setClusterDomain("");
+//        getCluster().setClusterSubDomain(CartridgeConstants.DEFAULT_SUBDOMAIN);
+//        getCluster().setMgtClusterDomain("");
+//        getCluster().setMgtClusterSubDomain(CartridgeConstants.DEFAULT_MGT_SUBDOMAIN);
+//        getCluster().setHostName(cartridgeInfo.getHostName());
+//        this.setSubscriptionStatus(CartridgeConstants.SUBSCRIBED);
+//        this.connectedSubscriptionAliases = new ArrayList<String>();
+//    }
+//
+//    /**
+//     * Subscribes to this cartridge subscription
+//     *
+//     * @param subscriber Subscriber subscription
+//     * @param alias Alias of the cartridge subscription
+//     * @param autoscalingPolicy Auto scaling policy
+//     * @param repository Relevenat Repository subscription
+//     *
+//     * @throws ADCException
+//     * @throws PolicyException
+//     * @throws UnregisteredCartridgeException
+//     * @throws InvalidCartridgeAliasException
+//     * @throws DuplicateCartridgeAliasException
+//     * @throws RepositoryRequiredException
+//     * @throws AlreadySubscribedException
+//     * @throws RepositoryCredentialsRequiredException
+//     * @throws InvalidRepositoryException
+//     * @throws RepositoryTransportException
+//     */
+//    public void createSubscription (Subscriber subscriber, String alias, Policy autoscalingPolicy,
+//                                   Repository repository)
+//            throws ADCException, PolicyException, UnregisteredCartridgeException, InvalidCartridgeAliasException,
+//            DuplicateCartridgeAliasException, RepositoryRequiredException, AlreadySubscribedException,
+//            RepositoryCredentialsRequiredException, InvalidRepositoryException, RepositoryTransportException {
+//
+//        setSubscriber(subscriber);
+//        setAlias(alias);
+//        setAutoscalingPolicy(autoscalingPolicy);
+//        setRepository(repository);
+//    }
+//
+//    /**
+//     * Unsubscribe from this cartridge subscription
+//     *
+//     * @throws ADCException
+//     * @throws NotSubscribedException
+//     */
+//    public abstract void removeSubscription() throws ADCException, NotSubscribedException;
+//
+//    /**
+//     * Registers the subscription
+//     *
+//     * @param properties Any additional properties needed
+//     *
+//     * @return CartridgeSubscriptionInfo subscription populated with relevant data
+//     * @throws ADCException
+//     * @throws UnregisteredCartridgeException
+//     */
+//    public abstract CartridgeSubscriptionInfo registerSubscription(Properties properties)
+//            throws ADCException, UnregisteredCartridgeException;
+//
+//    /**
+//     * Connect cartridges
+//     *
+//     * @param connectingCartridgeAlias Alias of connecting cartridge
+//     */
+//    public void connect (String connectingCartridgeAlias) {
+//        connectedSubscriptionAliases.add(connectingCartridgeAlias);
+//    }
+//
+//    /**
+//     * Disconnect from the cartridge subscription given by disconnectingCartridgeAlias
+//     *
+//     * @param disconnectingCartridgeAlias Alias of the cartridge subscription to disconnect
+//     */
+//    public void disconnect (String disconnectingCartridgeAlias) {
+//        connectedSubscriptionAliases.remove(disconnectingCartridgeAlias);
+//    }
+//
+//    /**
+//     * Creates the relevant payload parameters for this cartridge subscription
+//     *
+//     * @return PayloadArg subscription
+//     * @throws ADCException in an errpr
+//     */
+//    public PayloadArg createPayloadParameters() throws ADCException {
+//
+//        PayloadArg payloadArg = new PayloadArg();
+//        payloadArg.setCartridgeInfo(getCartridgeInfo());
+//        payloadArg.setPolicy(getAutoscalingPolicy());
+//        payloadArg.setMultitenant(getCartridgeInfo().getMultiTenant());
+//        payloadArg.setTenantId(getSubscriber().getTenantId());
+//        payloadArg.setTenantDomain(getSubscriber().getTenantDomain());
+//        payloadArg.setCartridgeAlias(getAlias());
+//        payloadArg.setServiceName(getCartridgeInfo().getType());
+//        payloadArg.setSubscriptionKey(subscriptionKey);
+//        return payloadArg;
+//    }
+//
+//    /**
+//     * Manages the repository for the cartridge subscription
+//     *
+//     * @param repoURL Repository URL
+//     * @param repoUserName Repository Username
+//     * @param repoUserPassword Repository password
+//     * @param privateRepo public/private repository
+//     * @param cartridgeAlias Alias of the cartridge subscription
+//     * @param cartridgeInfo CartridgeInfo subscription
+//     * @param tenantDomain Domain of the tenant
+//     *
+//     * @return Repository populated with relevant information or null of not repository is relevant to this cartridge
+//     * subscription
+//     * @throws ADCException
+//     * @throws RepositoryRequiredException
+//     * @throws RepositoryCredentialsRequiredException
+//     * @throws RepositoryTransportException
+//     * @throws InvalidRepositoryException
+//     */
+//    public Repository manageRepository (String repoURL, String repoUserName, String repoUserPassword,
+//                                        boolean privateRepo, String cartridgeAlias, CartridgeInfo cartridgeInfo,
+//                                        String tenantDomain)
+//
+//            throws ADCException, RepositoryRequiredException, RepositoryCredentialsRequiredException,
+//            RepositoryTransportException, InvalidRepositoryException {
+//
+//        if (!new Boolean(System.getProperty(CartridgeConstants.FEATURE_INTERNAL_REPO_ENABLED))) {
+//            if (log.isDebugEnabled()) {
+//                log.debug("Internal repo feature is not enabled.");
+//            }
+//        }
+//
+//        Repository repository = new Repository();
+//        if (repoURL != null && repoURL.trim().length() > 0) {
+//            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
+//            repository.setUrl(repoURL);
+//            repository.setUserName(repoUserName);
+//            repository.setPassword(repoUserPassword);
+//            repository.setPrivateRepository(privateRepo);
+//
+//        } 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 {
+//                new RepositoryCreator(new RepositoryInfoBean(repoURL, cartridgeAlias, tenantDomain,
+//                        repository.getUserName(), repository.getPassword(), cartridgeInfo.getDeploymentDirs(),
+//                        cartridgeInfo)).createInternalRepository();
+//
+//            } catch (Exception e) {
+//                throw new ADCException(e.getMessage(), e);
+//            }
+//            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,
+//                new Boolean(System.getProperty(CartridgeConstants.FEATURE_EXTERNAL_REPO_VAIDATION_ENABLED)));
+//
+//        return repository;
+//    }
+//
+//    /**
+//     * Cleans up the subscription information after unsubscribing
+//     *
+//     * @throws ADCException
+//     */
+//    protected void cleanupSubscription () throws ADCException {
+//
+//        try {
+//            new RepositoryFactory().destroyRepository(alias, subscriber.getTenantDomain(),
+//                    subscriber.getAdminUserName());
+//            log.info("Repo is destroyed successfully.. ");
+//
+//        } catch (Exception e) {
+//            String errorMsg = "Error in destroying repository for tenant " + subscriber.getTenantDomain() +
+//                    "cartridge type " + type;
+//            log.error(errorMsg);
+//        }
+//
+//        try {
+//            PersistenceManager.updateSubscriptionState(subscriptionId, "UNSUBSCRIBED");
+//
+//        } catch (Exception e) {
+//            String errorMsg = "Error in unscubscribing from cartridge, alias " + alias + ", tenant " +
+//                    subscriber.getTenantDomain();
+//            throw new ADCException(errorMsg, e);
+//        }
+//
+//        //TODO: FIXME: do we need this?
+//        new DNSManager().removeSubDomain(getCluster().getHostName());
+//
+//        try {
+//            new RegistryManager().removeDomainMappingFromRegistry(getCluster().getHostName());
+//
+//        } catch (Exception e) {
+//            String errorMsg = "Error in removing domain mapping, alias " + alias + ", tenant " +
+//                    subscriber.getTenantDomain();
+//            log.error(errorMsg, e);
+//        }
+//
+//        TopologyManagementService topologyMgtService = DataHolder.getTopologyMgtService();
+//        String[] ips = topologyMgtService.getActiveIPs(type, getCluster().getClusterDomain(), getCluster().getClusterSubDomain());
+//        try {
+//            PersistenceManager.updateInstanceState("INACTIVE", ips, getCluster().getClusterDomain(), getCluster().getClusterSubDomain(), type);
+//
+//        } catch (Exception e) {
+//            String errorMsg = "Error in updating state to INACTIVE";
+//            log.error(errorMsg, e);
+//        }
+//
+//        this.setSubscriptionStatus(CartridgeConstants.UNSUBSCRIBED);
+//    }
+//
+//    public String getType() {
+//        return type;
+//    }
+//
+//    public String getAlias() {
+//        return alias;
+//    }
+//
+//    public Subscriber getSubscriber() {
+//        return subscriber;
+//    }
+//
+//    public Repository getRepository() {
+//        return repository;
+//    }
+//
+//    public List<String> getConnectedSubscriptionAliases() {
+//        return connectedSubscriptionAliases;
+//    }
+//
+//    public CartridgeInfo getCartridgeInfo() {
+//        return cartridgeInfo;
+//    }
+//
+//    public String getHostName() {
+//        return getCluster().getHostName();
+//    }
+//
+//    public void setType(String type) {
+//        this.type = type;
+//    }
+//
+//    public void setAlias(String alias) {
+//        this.alias = alias;
+//    }
+//
+//    public String getClusterDomain() {
+//        return getCluster().getClusterDomain();
+//    }
+//
+//    public void setClusterDomain(String clusterDomain) {
+//        getCluster().setClusterDomain(clusterDomain);
+//    }
+//
+//    public String getClusterSubDomain() {
+//        return getCluster().getClusterSubDomain();
+//    }
+//
+//    public void setClusterSubDomain(String clusterSubDomain) {
+//        getCluster().setClusterSubDomain(clusterSubDomain);
+//    }
+//
+//    public String getMgtClusterDomain() {
+//        return getCluster().getMgtClusterDomain();
+//    }
+//
+//    public void setMgtClusterDomain(String mgtClusterDomain) {
+//        getCluster().setMgtClusterDomain(mgtClusterDomain);
+//    }
+//
+//    public String getMgtClusterSubDomain() {
+//        return getCluster().getMgtClusterSubDomain();
+//    }
+//
+//    public void setMgtClusterSubDomain(String mgtClusterSubDomain) {
+//        getCluster().setMgtClusterSubDomain(mgtClusterSubDomain);
+//    }
+//
+//    public void setHostName(String hostName) {
+//        getCluster().setHostName(hostName);
+//    }
+//
+//    public Policy getAutoscalingPolicy() {
+//        return autoscalingPolicy;
+//    }
+//
+//    public void setAutoscalingPolicy(Policy autoscalingPolicy) {
+//        this.autoscalingPolicy = autoscalingPolicy;
+//    }
+//
+//    public void setSubscriber(Subscriber subscriber) {
+//        this.subscriber = subscriber;
+//    }
+//
+//    public void setRepository(Repository repository) {
+//        this.repository = repository;
+//    }
+//
+//    public void setCartridgeInfo(CartridgeInfo cartridgeInfo) {
+//        this.cartridgeInfo = cartridgeInfo;
+//    }
+//
+//    public Payload getPayload() {
+//        return payload;
+//    }
+//
+//    public void setPayload(Payload payload) {
+//        this.payload = payload;
+//    }
+//
+//    public int getSubscriptionId() {
+//        return subscriptionId;
+//    }
+//
+//    public void setSubscriptionId(int subscriptionId) {
+//        this.subscriptionId = subscriptionId;
+//    }
+//
+//    public String getMappedDomain() {
+//        return mappedDomain;
+//    }
+//
+//    public void setMappedDomain(String mappedDomain) {
+//        this.mappedDomain = mappedDomain;
+//    }
+//
+//    public String getSubscriptionStatus() {
+//        return subscriptionStatus;
+//    }
+//
+//    public void setSubscriptionStatus(String subscriptionStatus) {
+//        this.subscriptionStatus = subscriptionStatus;
+//    }
+//
+//	public String getSubscriptionKey() {
+//		return subscriptionKey;
+//	}
+//
+//	public void setSubscriptionKey(String subscriptionKey) {
+//		this.subscriptionKey = subscriptionKey;
+//	}
+//
+//    public Cluster getCluster() {
+//        return cluster;
+//    }
+//
+//    public void setCluster(Cluster cluster) {
+//        this.cluster = cluster;
+//    }
+//
+//}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/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 786450c..979d467 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
@@ -32,12 +32,17 @@ import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 
 import java.util.Properties;
 
-public class DataCartridgeSubscription extends SingleTenantCartridgeSubscription {
+public class DataCartridgeSubscription extends CartridgeSubscription {
 
     private String host;
     private String username;
     private String password;
 
+    /**
+     * Constructor
+     *
+     * @param cartridgeInfo CartridgeInfo subscription
+     */
     public DataCartridgeSubscription(CartridgeInfo cartridgeInfo) {
 
         super(cartridgeInfo);
@@ -55,14 +60,7 @@ public class DataCartridgeSubscription extends SingleTenantCartridgeSubscription
             RepositoryRequiredException, InvalidRepositoryException, PolicyException {
 
         super.createSubscription(subscriber, alias, autoscalingPolicy, repository);
-    }
-
-    public Repository manageRepository (String repoURL, String repoUserName, String repoUserPassword,
-                                        boolean privateRepo, String cartridgeAlias, CartridgeInfo cartridgeInfo,
-                                        String tenantDomain) {
-
-        //no repository for data cartridge instances
-        return null;
+        subscriptionTenancyBehaviour.createSubscription();
     }
 
     public PayloadArg createPayloadParameters() throws ADCException {
@@ -72,22 +70,15 @@ public class DataCartridgeSubscription extends SingleTenantCartridgeSubscription
         payloadArg.setDataCartridgeAdminUser(getUsername());
         payloadArg.setDataCartridgeAdminPassword(getPassword());
 
-        return payloadArg;
+        return subscriptionTenancyBehaviour.createPayloadParameters(payloadArg);
     }
 
-    public CartridgeSubscriptionInfo registerSubscription(Properties payloadProperties)
-            throws ADCException, UnregisteredCartridgeException {
-
-        ApplicationManagementUtil.registerService(getType(),
-                getCluster().getClusterDomain(),
-                getCluster().getClusterSubDomain(),
-                getPayload().createPayload(),
-                getPayload().getPayloadArg().getTenantRange(),
-                getCluster().getHostName(),
-                ApplicationManagementUtil.setRegisterServiceProperties(getAutoscalingPolicy(),
-                        getSubscriber().getTenantId(), getAlias()));
+    @Override
+    public CartridgeSubscriptionInfo registerSubscription(Properties properties) throws ADCException,
+            UnregisteredCartridgeException {
 
-        getPayload().delete();
+        subscriptionTenancyBehaviour.registerSubscription(ApplicationManagementUtil.
+                setRegisterServiceProperties(getAutoscalingPolicy(), getSubscriber().getTenantId(), getAlias()));
 
         DataCartridge dataCartridge = new DataCartridge();
         dataCartridge.setUserName(getUsername());
@@ -98,7 +89,21 @@ public class DataCartridgeSubscription extends SingleTenantCartridgeSubscription
                 getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
                 getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
                 getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), dataCartridge, "PENDING",getSubscriptionKey());
+    }
+
+    public Repository manageRepository (String repoURL, String repoUserName, String repoUserPassword,
+                                        boolean privateRepo, String cartridgeAlias, CartridgeInfo cartridgeInfo,
+                                        String tenantDomain) {
+
+        //no repository for data cartridge instances
+        return null;
+    }
+
+    @Override
+    public void removeSubscription() throws ADCException, NotSubscribedException {
 
+        subscriptionTenancyBehaviour.removeSubscription();
+        super.cleanupSubscription();
     }
 
     public String getHost() {

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java
deleted file mode 100644
index 6f5401f..0000000
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.adc.mgt.subscription;
-
-import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
-import org.apache.stratos.adc.mgt.dao.DataCartridge;
-import org.apache.stratos.adc.mgt.dto.Policy;
-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.utils.ApplicationManagementUtil;
-import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
-import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
-
-import java.util.Properties;
-
-public class DataCartridgeSubscription1 extends AbstractCartridgeSubscription {
-
-    private String host;
-    private String username;
-    private String password;
-
-    /**
-     * Constructor
-     *
-     * @param cartridgeInfo CartridgeInfo subscription
-     */
-    public DataCartridgeSubscription1(CartridgeInfo cartridgeInfo) {
-
-        super(cartridgeInfo);
-        this.setHost("localhost");
-        this.setUsername(CartridgeConstants.MYSQL_DEFAULT_USER);
-        this.setPassword(ApplicationManagementUtil.generatePassword());
-    }
-
-    @Override
-    public void createSubscription(Subscriber subscriber, String alias, Policy autoscalingPolicy, Repository repository)
-
-            throws InvalidCartridgeAliasException,
-            DuplicateCartridgeAliasException, ADCException, RepositoryCredentialsRequiredException,
-            RepositoryTransportException, UnregisteredCartridgeException, AlreadySubscribedException,
-            RepositoryRequiredException, InvalidRepositoryException, PolicyException {
-
-        super.createSubscription(subscriber, alias, autoscalingPolicy, repository);
-        subscriptionTenancyBehaviour.createSubscription();
-    }
-
-    public PayloadArg createPayloadParameters() throws ADCException {
-
-        PayloadArg payloadArg = super.createPayloadParameters();
-        payloadArg.setDataCartridgeHost(this.getHost());
-        payloadArg.setDataCartridgeAdminUser(getUsername());
-        payloadArg.setDataCartridgeAdminPassword(getPassword());
-
-        return subscriptionTenancyBehaviour.createPayloadParameters(payloadArg);
-    }
-
-    @Override
-    public CartridgeSubscriptionInfo registerSubscription(Properties properties) throws ADCException,
-            UnregisteredCartridgeException {
-
-        subscriptionTenancyBehaviour.registerSubscription(ApplicationManagementUtil.
-                setRegisterServiceProperties(getAutoscalingPolicy(), getSubscriber().getTenantId(), getAlias()));
-
-        DataCartridge dataCartridge = new DataCartridge();
-        dataCartridge.setUserName(getUsername());
-        dataCartridge.setPassword(getPassword());
-        dataCartridge.setDataCartridgeType(getType());
-
-        return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
-                getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
-                getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
-                getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), dataCartridge, "PENDING",getSubscriptionKey());
-    }
-
-    public Repository manageRepository (String repoURL, String repoUserName, String repoUserPassword,
-                                        boolean privateRepo, String cartridgeAlias, CartridgeInfo cartridgeInfo,
-                                        String tenantDomain) {
-
-        //no repository for data cartridge instances
-        return null;
-    }
-
-    @Override
-    public void removeSubscription() throws ADCException, NotSubscribedException {
-
-        subscriptionTenancyBehaviour.removeSubscription();
-        super.cleanupSubscription();
-    }
-
-    public String getHost() {
-        return host;
-    }
-
-    public void setHost(String host) {
-        this.host = host;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription_old.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription_old.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription_old.java
new file mode 100644
index 0000000..2faa986
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription_old.java
@@ -0,0 +1,127 @@
+///*
+// * 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;
+//
+//import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
+//import org.apache.stratos.adc.mgt.dao.DataCartridge;
+//import org.apache.stratos.adc.mgt.dto.Policy;
+//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.utils.ApplicationManagementUtil;
+//import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+//import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+//
+//import java.util.Properties;
+//
+//public class DataCartridgeSubscription extends SingleTenantCartridgeSubscription {
+//
+//    private String host;
+//    private String username;
+//    private String password;
+//
+//    public DataCartridgeSubscription(CartridgeInfo cartridgeInfo) {
+//
+//        super(cartridgeInfo);
+//        this.setHost("localhost");
+//        this.setUsername(CartridgeConstants.MYSQL_DEFAULT_USER);
+//        this.setPassword(ApplicationManagementUtil.generatePassword());
+//    }
+//
+//    @Override
+//    public void createSubscription(Subscriber subscriber, String alias, Policy autoscalingPolicy, Repository repository)
+//
+//            throws InvalidCartridgeAliasException,
+//            DuplicateCartridgeAliasException, ADCException, RepositoryCredentialsRequiredException,
+//            RepositoryTransportException, UnregisteredCartridgeException, AlreadySubscribedException,
+//            RepositoryRequiredException, InvalidRepositoryException, PolicyException {
+//
+//        super.createSubscription(subscriber, alias, autoscalingPolicy, repository);
+//    }
+//
+//    public Repository manageRepository (String repoURL, String repoUserName, String repoUserPassword,
+//                                        boolean privateRepo, String cartridgeAlias, CartridgeInfo cartridgeInfo,
+//                                        String tenantDomain) {
+//
+//        //no repository for data cartridge instances
+//        return null;
+//    }
+//
+//    public PayloadArg createPayloadParameters() throws ADCException {
+//
+//        PayloadArg payloadArg = super.createPayloadParameters();
+//        payloadArg.setDataCartridgeHost(this.getHost());
+//        payloadArg.setDataCartridgeAdminUser(getUsername());
+//        payloadArg.setDataCartridgeAdminPassword(getPassword());
+//
+//        return payloadArg;
+//    }
+//
+//    public CartridgeSubscriptionInfo registerSubscription(Properties payloadProperties)
+//            throws ADCException, UnregisteredCartridgeException {
+//
+//        ApplicationManagementUtil.registerService(getType(),
+//                getCluster().getClusterDomain(),
+//                getCluster().getClusterSubDomain(),
+//                getPayload().createPayload(),
+//                getPayload().getPayloadArg().getTenantRange(),
+//                getCluster().getHostName(),
+//                ApplicationManagementUtil.setRegisterServiceProperties(getAutoscalingPolicy(),
+//                        getSubscriber().getTenantId(), getAlias()));
+//
+//        getPayload().delete();
+//
+//        DataCartridge dataCartridge = new DataCartridge();
+//        dataCartridge.setUserName(getUsername());
+//        dataCartridge.setPassword(getPassword());
+//        dataCartridge.setDataCartridgeType(getType());
+//
+//        return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
+//                getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
+//                getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
+//                getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), dataCartridge, "PENDING",getSubscriptionKey());
+//
+//    }
+//
+//    public String getHost() {
+//        return host;
+//    }
+//
+//    public void setHost(String host) {
+//        this.host = host;
+//    }
+//
+//    public String getUsername() {
+//        return username;
+//    }
+//
+//    public void setUsername(String username) {
+//        this.username = username;
+//    }
+//
+//    public String getPassword() {
+//        return password;
+//    }
+//
+//    public void setPassword(String password) {
+//        this.password = password;
+//    }
+//}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/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 668ff55..c5365ad 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
@@ -30,7 +30,7 @@ import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 
 import java.util.Properties;
 
-public class FrameworkCartridgeSubscription extends AbstractCartridgeSubscription {
+public class FrameworkCartridgeSubscription extends CartridgeSubscription {
 
     /**
      * Constructor

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/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
new file mode 100644
index 0000000..151f157
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/LBCartridgeSubscription.java
@@ -0,0 +1,51 @@
+/*
+ * 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;
+
+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.cloud.controller.pojo.CartridgeInfo;
+
+import java.util.Properties;
+
+public class LBCartridgeSubscription extends CartridgeSubscription {
+
+    /**
+     * Constructor
+     *
+     * @param cartridgeInfo CartridgeInfo subscription
+     */
+    public LBCartridgeSubscription(CartridgeInfo cartridgeInfo) {
+        super(cartridgeInfo);
+    }
+
+    @Override
+    public void removeSubscription() throws ADCException, NotSubscribedException {
+        //TODO
+    }
+
+    @Override
+    public CartridgeSubscriptionInfo registerSubscription(Properties properties) throws ADCException, UnregisteredCartridgeException {
+        //TODO
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/MultiTenantCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/MultiTenantCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/MultiTenantCartridgeSubscription.java
index d14d18b..de9fbcf 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/MultiTenantCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/MultiTenantCartridgeSubscription.java
@@ -1,134 +1,134 @@
-/*
- * 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;
-
-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.dto.Policy;
-import org.apache.stratos.adc.mgt.exception.*;
-import org.apache.stratos.adc.mgt.internal.DataHolder;
-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.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.CartridgeInfo;
-
-import java.util.Properties;
-
-public class MultiTenantCartridgeSubscription extends CartridgeSubscription {
-
-    private static Log log = LogFactory.getLog(MultiTenantCartridgeSubscription.class);
-
-    public MultiTenantCartridgeSubscription(CartridgeInfo cartridgeInfo) {
-        super(cartridgeInfo);
-    }
-
-    @Override
-    public void createSubscription(Subscriber subscriber, String alias, Policy autoscalingPolicy, Repository repository)
-
-            throws InvalidCartridgeAliasException,
-            DuplicateCartridgeAliasException, ADCException, AlreadySubscribedException,
-            RepositoryCredentialsRequiredException, RepositoryTransportException, UnregisteredCartridgeException,
-            InvalidRepositoryException, RepositoryRequiredException, PolicyException {
-
-        super.createSubscription(subscriber, alias, autoscalingPolicy, repository);
-
-        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(getType(), subscriber.getTenantId());
-            } catch (Exception e) {
-                String msg = "Error checking whether the cartridge type " + getType()
-                        + " is already subscribed";
-                log.error(msg, e);
-                throw new ADCException(msg, e);
-            }
-
-            if (subscribed) {
-                String msg = "Already subscribed to " + getType()
-                        + ". This multi-tenant cartridge will not be available to createSubscription";
-                if (log.isDebugEnabled()) {
-                    log.debug(msg);
-                }
-                throw new AlreadySubscribedException(msg, getType());
-            }
-        }
-
-        TopologyManagementService topologyService = DataHolder.getTopologyMgtService();
-        DomainContext[] domainContexts = topologyService.getDomainsAndSubdomains(getType(), subscriber.getTenantId());
-        log.info("Retrieved " + domainContexts.length + " domain and corresponding subdomain pairs");
-
-        if (domainContexts.length > 0) {
-            if(domainContexts.length > 2) {
-                if(log.isDebugEnabled())
-                    log.debug("Too many domain sub domain pairs");
-            }
-
-            for (DomainContext domainContext : domainContexts) {
-                if (domainContext.getSubDomain().equalsIgnoreCase("mgt")) {
-                    getCluster().setMgtClusterDomain(domainContext.getDomain());
-                    getCluster().setMgtClusterSubDomain(domainContext.getSubDomain());
-                } else {
-                    getCluster().setClusterDomain(domainContext.getDomain());
-                    getCluster().setClusterSubDomain(domainContext.getSubDomain());
-                }
-            }
-        } else {
-            String msg = "Domain contexts not found for " + getType() + " and tenant id " + subscriber.getTenantId();
-            log.warn(msg);
-            throw new ADCException(msg);
-        }
-    }
-
-    @Override
-    public void removeSubscription() throws ADCException, NotSubscribedException {
-
-        log.info("Cartridge with alias " + getAlias() + ", and type " + getType() +
-                " is a multi-tenant cartridge and therefore will not terminate all instances and " +
-                "unregister services");
-
-        super.cleanupSubscription();
-    }
-
-    @Override
-    public CartridgeSubscriptionInfo registerSubscription(Properties properties) {
-
-        return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
-                getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
-                getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
-                getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), null, "PENDING",getSubscriptionKey());
-    }
-
-    @Override
-    public PayloadArg createPayloadParameters() {
-
-        return null;
-    }
-
-}
+///*
+// * 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;
+//
+//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.dto.Policy;
+//import org.apache.stratos.adc.mgt.exception.*;
+//import org.apache.stratos.adc.mgt.internal.DataHolder;
+//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.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.CartridgeInfo;
+//
+//import java.util.Properties;
+//
+//public class MultiTenantCartridgeSubscription extends CartridgeSubscription {
+//
+//    private static Log log = LogFactory.getLog(MultiTenantCartridgeSubscription.class);
+//
+//    public MultiTenantCartridgeSubscription(CartridgeInfo cartridgeInfo) {
+//        super(cartridgeInfo);
+//    }
+//
+//    @Override
+//    public void createSubscription(Subscriber subscriber, String alias, Policy autoscalingPolicy, Repository repository)
+//
+//            throws InvalidCartridgeAliasException,
+//            DuplicateCartridgeAliasException, ADCException, AlreadySubscribedException,
+//            RepositoryCredentialsRequiredException, RepositoryTransportException, UnregisteredCartridgeException,
+//            InvalidRepositoryException, RepositoryRequiredException, PolicyException {
+//
+//        super.createSubscription(subscriber, alias, autoscalingPolicy, repository);
+//
+//        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(getType(), subscriber.getTenantId());
+//            } catch (Exception e) {
+//                String msg = "Error checking whether the cartridge type " + getType()
+//                        + " is already subscribed";
+//                log.error(msg, e);
+//                throw new ADCException(msg, e);
+//            }
+//
+//            if (subscribed) {
+//                String msg = "Already subscribed to " + getType()
+//                        + ". This multi-tenant cartridge will not be available to createSubscription";
+//                if (log.isDebugEnabled()) {
+//                    log.debug(msg);
+//                }
+//                throw new AlreadySubscribedException(msg, getType());
+//            }
+//        }
+//
+//        TopologyManagementService topologyService = DataHolder.getTopologyMgtService();
+//        DomainContext[] domainContexts = topologyService.getDomainsAndSubdomains(getType(), subscriber.getTenantId());
+//        log.info("Retrieved " + domainContexts.length + " domain and corresponding subdomain pairs");
+//
+//        if (domainContexts.length > 0) {
+//            if(domainContexts.length > 2) {
+//                if(log.isDebugEnabled())
+//                    log.debug("Too many domain sub domain pairs");
+//            }
+//
+//            for (DomainContext domainContext : domainContexts) {
+//                if (domainContext.getSubDomain().equalsIgnoreCase("mgt")) {
+//                    getCluster().setMgtClusterDomain(domainContext.getDomain());
+//                    getCluster().setMgtClusterSubDomain(domainContext.getSubDomain());
+//                } else {
+//                    getCluster().setClusterDomain(domainContext.getDomain());
+//                    getCluster().setClusterSubDomain(domainContext.getSubDomain());
+//                }
+//            }
+//        } else {
+//            String msg = "Domain contexts not found for " + getType() + " and tenant id " + subscriber.getTenantId();
+//            log.warn(msg);
+//            throw new ADCException(msg);
+//        }
+//    }
+//
+//    @Override
+//    public void removeSubscription() throws ADCException, NotSubscribedException {
+//
+//        log.info("Cartridge with alias " + getAlias() + ", and type " + getType() +
+//                " is a multi-tenant cartridge and therefore will not terminate all instances and " +
+//                "unregister services");
+//
+//        super.cleanupSubscription();
+//    }
+//
+//    @Override
+//    public CartridgeSubscriptionInfo registerSubscription(Properties properties) {
+//
+//        return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
+//                getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
+//                getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
+//                getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), null, "PENDING",getSubscriptionKey());
+//    }
+//
+//    @Override
+//    public PayloadArg createPayloadParameters() {
+//
+//        return null;
+//    }
+//
+//}