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/10 05:16:11 UTC

[1/5] registry based persistence and caching initial implementation

Updated Branches:
  refs/heads/master 522db6033 -> aebdb0879


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba14b09f/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
index c28f265..1e8936a 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
@@ -19,10 +19,7 @@
 
 package org.apache.stratos.adc.mgt.persistence;
 
-import org.apache.stratos.adc.mgt.dao.Cluster;
-import org.apache.stratos.adc.mgt.dao.DataCartridge;
 import org.apache.stratos.adc.mgt.exception.PersistenceManagerException;
-import org.apache.stratos.adc.mgt.repository.Repository;
 import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
 
 import java.util.List;
@@ -41,7 +38,10 @@ public abstract class PersistenceManager {
     public abstract List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId)
             throws PersistenceManagerException;
 
-    public abstract List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId, String cartridgeType)
+    public abstract CartridgeSubscription getCartridgeSubscription (String clusterDomain)
+            throws PersistenceManagerException;
+
+    /*public abstract List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId, String cartridgeType)
             throws PersistenceManagerException;
 
     public abstract Repository getRepository (int tenantId, String alias)
@@ -75,5 +75,5 @@ public abstract class PersistenceManager {
             throws PersistenceManagerException;
 
     public abstract void updateServiceStatus (int tenantId, String cartridgeAlias, String newStatus)
-            throws PersistenceManagerException;
+            throws PersistenceManagerException;   */
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba14b09f/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java
new file mode 100644
index 0000000..e69585c
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java
@@ -0,0 +1,53 @@
+/*
+ * 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.persistence;
+
+import org.apache.stratos.adc.mgt.exception.PersistenceManagerException;
+import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
+
+import java.util.List;
+
+public class RegistryBasedPersistenceManager extends PersistenceManager {
+
+    @Override
+    public void persistCartridgeSubscription(CartridgeSubscription cartridgeSubscription) throws PersistenceManagerException {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public void removeCartridgeSubscription(int tenantId, String alias) throws PersistenceManagerException {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public CartridgeSubscription getCartridgeSubscription(int tenantId, String alias) throws PersistenceManagerException {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId) throws PersistenceManagerException {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public CartridgeSubscription getCartridgeSubscription(String clusterDomain) throws PersistenceManagerException {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba14b09f/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/repository/Repository.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/repository/Repository.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/repository/Repository.java
index dbd532e..82dc818 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/repository/Repository.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/repository/Repository.java
@@ -19,7 +19,9 @@
 
 package org.apache.stratos.adc.mgt.repository;
 
-public class Repository {
+import java.io.Serializable;
+
+public class Repository implements Serializable {
 
     private int id;
     private String url;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba14b09f/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataRetrievalManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataRetrievalManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataRetrievalManager.java
new file mode 100644
index 0000000..11093d3
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataRetrievalManager.java
@@ -0,0 +1,157 @@
+/*
+ * 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.retriever;
+
+import org.apache.stratos.adc.mgt.exception.PersistenceManagerException;
+import org.apache.stratos.adc.mgt.lookup.LookupDataHolder;
+import org.apache.stratos.adc.mgt.persistence.PersistenceManager;
+import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
+import org.jgroups.logging.Log;
+import org.jgroups.logging.LogFactory;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+public class DataRetrievalManager {
+
+    private static final Log log = LogFactory.getLog(DataRetrievalManager.class);
+
+    private PersistenceManager persistenceManager;
+    private LookupDataHolder lookupDataHolder;
+    private ExecutorService cartridgeSubscriptionUpdateThreadPool = null;
+
+    public DataRetrievalManager (PersistenceManager persistenceManager, LookupDataHolder lookupDataHolder) {
+        this.persistenceManager = persistenceManager;
+        this.lookupDataHolder = lookupDataHolder;
+        cartridgeSubscriptionUpdateThreadPool = Executors.newCachedThreadPool();
+    }
+
+    public CartridgeSubscription getCartridgeSubscription (int tenantId, String subscriptionAlias)
+            throws PersistenceManagerException {
+
+        CartridgeSubscription cartridgeSubscription = null;
+
+        if(lookupDataHolder != null) {
+            //look in the local cache
+            cartridgeSubscription = lookupDataHolder.getCartridgeSubscription(tenantId, subscriptionAlias);
+        }
+        //if not found in the local cache, look in the Persistence Manager
+        if (cartridgeSubscription == null) {
+            persistenceManager.getCartridgeSubscription(tenantId, subscriptionAlias);
+        } else {
+            if(log.isDebugEnabled()) {
+                log.debug("Cartridge subscription entry for tenant Id " + tenantId + ", subscription alias " +
+                        subscriptionAlias + " found in the local cache");
+            }
+        }
+
+        return cartridgeSubscription;
+    }
+
+    public CartridgeSubscription getCartridgeSubscription (String clusterId)
+            throws PersistenceManagerException {
+
+        CartridgeSubscription cartridgeSubscription = null;
+
+        if(lookupDataHolder != null) {
+            //look in the local cache
+            cartridgeSubscription = lookupDataHolder.getCartridgeSubscription(clusterId);
+        }
+        //if not found in the local cache, look in the Persistence Manager
+        if (cartridgeSubscription == null) {
+            persistenceManager.getCartridgeSubscription(clusterId);
+
+        } else {
+            if(log.isDebugEnabled()) {
+                log.debug("Cartridge subscription entry for cluster domain " + clusterId +
+                        " found in the local cache");
+            }
+        }
+
+        return cartridgeSubscription;
+    }
+
+    public List<CartridgeSubscription> getCartridgeSubscriptions (int tenantId) throws PersistenceManagerException {
+
+        Collection<CartridgeSubscription> cartridgeSubscriptionCollection = null;
+
+        if(lookupDataHolder != null) {
+            //look in the local cache
+            cartridgeSubscriptionCollection = lookupDataHolder.getCartridgeSubscriptions(tenantId);
+        }
+        //if not found in the local cache, look in the Persistence Manager
+        if (cartridgeSubscriptionCollection == null) {
+            persistenceManager.getCartridgeSubscriptions(tenantId);
+
+        } else {
+            if(log.isDebugEnabled()) {
+                log.debug("Cartridge subscription entries for tenant " + tenantId +
+                        " found in the local cache");
+            }
+        }
+
+        List<CartridgeSubscription> cartridgeSubscriptionList = new ArrayList<CartridgeSubscription>();
+        for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptionCollection) {
+            cartridgeSubscriptionList.add(cartridgeSubscription);
+        }
+
+        return cartridgeSubscriptionList;
+    }
+
+    public void putCartridgeSubscription (CartridgeSubscription cartridgeSubscription) {
+
+        cartridgeSubscriptionUpdateThreadPool.submit(new CartridgeSubscriptionUpdater(cartridgeSubscription,
+                lookupDataHolder, persistenceManager));
+    }
+
+    private class CartridgeSubscriptionUpdater implements Runnable {
+
+        CartridgeSubscription cartridgeSubscription;
+        LookupDataHolder lookupDataHolder;
+        PersistenceManager persistenceManager;
+
+        public CartridgeSubscriptionUpdater (CartridgeSubscription cartridgeSubscription, LookupDataHolder
+                lookupDataHolder, PersistenceManager persistenceManager) {
+
+            this.cartridgeSubscription = cartridgeSubscription;
+            this.lookupDataHolder = lookupDataHolder;
+            this.persistenceManager = persistenceManager;
+        }
+
+        public void run() {
+
+            if(lookupDataHolder != null) {
+                lookupDataHolder.addCartridgeSubscription(cartridgeSubscription.getSubscriber().getTenantId(),
+                        cartridgeSubscription.getAlias(), cartridgeSubscription);
+            }
+            try {
+                persistenceManager.persistCartridgeSubscription(cartridgeSubscription);
+
+            } catch (PersistenceManagerException e) {
+                String errorMsg = "Error in persisting Cartridge Subscription instance";
+                log.error(errorMsg, e);
+            }
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba14b09f/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscriber/Subscriber.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscriber/Subscriber.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscriber/Subscriber.java
index 54a636b..2145b6a 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscriber/Subscriber.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscriber/Subscriber.java
@@ -19,7 +19,9 @@
 
 package org.apache.stratos.adc.mgt.subscriber;
 
-public class Subscriber {
+import java.io.Serializable;
+
+public class Subscriber implements Serializable {
 
     private String adminUserName;
     private int tenantId;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba14b09f/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..dae407e 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
@@ -39,11 +39,12 @@ 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.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
 
-public abstract class CartridgeSubscription {
+public abstract class CartridgeSubscription implements Serializable {
 
     private static Log log = LogFactory.getLog(CartridgeSubscription.class);
     private int subscriptionId;
@@ -57,6 +58,7 @@ public abstract class CartridgeSubscription {
     private Payload payload;
     private Cluster cluster;
     private String subscriptionStatus;
+    private String serviceStatus;
     private String mappedDomain;
     private List<String> connectedSubscriptionAliases;
     private String subscriptionKey;
@@ -447,4 +449,12 @@ public abstract class CartridgeSubscription {
     public void setDeploymentPolicyName(String deploymentPolicyName) {
         this.deploymentPolicyName = deploymentPolicyName;
     }
+
+    public String getServiceStatus() {
+        return serviceStatus;
+    }
+
+    public void setServiceStatus(String serviceStatus) {
+        this.serviceStatus = serviceStatus;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba14b09f/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java
index 633a05d..3533fc1 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java
@@ -26,9 +26,10 @@ import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
 import org.apache.stratos.adc.mgt.payload.PayloadArg;
 import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
 
+import java.io.Serializable;
 import java.util.Properties;
 
-public abstract class SubscriptionTenancyBehaviour {
+public abstract class SubscriptionTenancyBehaviour implements Serializable {
 
     protected CartridgeSubscription cartridgeSubscription;
 


[4/5] git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-stratos into persistence

Posted by is...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-stratos into persistence


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

Branch: refs/heads/master
Commit: 1c2f93c391309ce3c45a575ab81c988aad7c9b3d
Parents: ba14b09 522db60
Author: Isuru <is...@wso2.com>
Authored: Mon Dec 9 21:14:38 2013 +0530
Committer: Isuru <is...@wso2.com>
Committed: Mon Dec 9 21:14:38 2013 +0530

----------------------------------------------------------------------
 .../adc/mgt/client/AutoscalerServiceClient.java |  63 ++-
 .../autoscaler/policy/PolicyManager.java        |  10 +-
 .../autoscaler/registry/RegistryManager.java    |   2 +-
 .../rule/AutoscalerRuleEvaluator.java           |  36 +-
 .../messaging/domain/topology/Cloud.java        |  84 ----
 .../messaging/domain/topology/Cluster.java      |  27 --
 .../messaging/domain/topology/Region.java       |  79 ----
 .../stratos/messaging/domain/topology/Zone.java |  55 ---
 .../autoscaler/partition/PartitionGroup.java    |   2 +-
 .../policy/deployment/DeploymentPolicy.java     |   4 +
 .../bean/util/converter/PojoConverter.java      | 149 +++++-
 .../rest/endpoint/services/ServiceUtils.java    |  84 +++-
 .../rest/endpoint/services/StratosAdmin.java    |  57 ++-
 .../ec2/load-balancer/start-load-balancer.sh    |  70 +++
 .../templates/loadbalancer.conf.template        | 126 +++++
 .../pom.xml                                     |   2 +-
 .../src/main/resources/AutoScalerService.wsdl   | 455 ++++++++++++++++++-
 17 files changed, 974 insertions(+), 331 deletions(-)
----------------------------------------------------------------------



[3/5] git commit: registry based persistence and caching initial implementation

Posted by is...@apache.org.
registry based persistence and caching initial implementation


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

Branch: refs/heads/master
Commit: ba14b09ffc9a2a6d0a4ec05de9973ed59bfa10ea
Parents: 57cccfb
Author: Isuru <is...@wso2.com>
Authored: Mon Dec 9 09:43:07 2013 +0530
Committer: Isuru <is...@wso2.com>
Committed: Mon Dec 9 09:43:07 2013 +0530

----------------------------------------------------------------------
 .../org/apache/stratos/adc/mgt/dao/Cluster.java |    4 +-
 .../adc/mgt/listener/TenantStatusListner.java   |   42 +
 .../adc/mgt/lookup/LookupDataHolder.java        |  238 ++
 .../apache/stratos/adc/mgt/payload/Payload.java |    7 +-
 .../DatabaseBasedPersistenceManager.java        | 2816 +++++++++---------
 .../adc/mgt/persistence/PersistenceManager.java |   10 +-
 .../RegistryBasedPersistenceManager.java        |   53 +
 .../stratos/adc/mgt/repository/Repository.java  |    4 +-
 .../adc/mgt/retriever/DataRetrievalManager.java |  157 +
 .../stratos/adc/mgt/subscriber/Subscriber.java  |    4 +-
 .../mgt/subscription/CartridgeSubscription.java |   12 +-
 .../tenancy/SubscriptionTenancyBehaviour.java   |    3 +-
 12 files changed, 1927 insertions(+), 1423 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba14b09f/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Cluster.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Cluster.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Cluster.java
index df926fd..6120a80 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Cluster.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Cluster.java
@@ -1,6 +1,8 @@
 package org.apache.stratos.adc.mgt.dao;
 
-public class Cluster {
+import java.io.Serializable;
+
+public class Cluster implements Serializable {
 
     private int id;
     private String clusterDomain;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba14b09f/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/listener/TenantStatusListner.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/listener/TenantStatusListner.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/listener/TenantStatusListner.java
new file mode 100644
index 0000000..959cf85
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/listener/TenantStatusListner.java
@@ -0,0 +1,42 @@
+/*
+ * 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.listener;
+
+import org.apache.axis2.context.ConfigurationContext;
+import org.wso2.carbon.utils.Axis2ConfigurationContextObserver;
+
+public class TenantStatusListner implements Axis2ConfigurationContextObserver {
+
+    public void creatingConfigurationContext(int i) {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public void createdConfigurationContext(ConfigurationContext configurationContext) {
+
+    }
+
+    public void terminatingConfigurationContext(ConfigurationContext configurationContext) {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public void terminatedConfigurationContext(ConfigurationContext configurationContext) {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba14b09f/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java
new file mode 100644
index 0000000..f283753
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java
@@ -0,0 +1,238 @@
+/*
+ * 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.lookup;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
+
+import java.util.*;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+public class LookupDataHolder {
+
+    private static final Log log = LogFactory.getLog(LookupDataHolder.class);
+
+    private Map<Integer, SubscriptionAliasToCartridgeSubscriptionMap> tenantIdToCartridgeSubscriptionCache;
+    private Map<String, CartridgeSubscription> clusterItToCartridgeSubscrptionMatch;
+    //private static LookupDataHolder lookupDataHolder;
+
+    //locks
+    private static volatile ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
+    private static volatile ReentrantReadWriteLock.ReadLock readLock = lock.readLock();
+    private static volatile ReentrantReadWriteLock.WriteLock writeLock = lock.writeLock();
+
+    public LookupDataHolder () {
+        tenantIdToCartridgeSubscriptionCache = new HashMap<Integer, SubscriptionAliasToCartridgeSubscriptionMap>();
+        clusterItToCartridgeSubscrptionMatch = new HashMap<String, CartridgeSubscription>();
+    }
+
+    /*public static LookupDataHolder getInstance ()  {
+
+        if (lookupDataHolder == null) {
+            synchronized(LookupDataHolder.class) {
+                if (lookupDataHolder == null)  {
+                    lookupDataHolder = new LookupDataHolder();
+                }
+            }
+        }
+        return lookupDataHolder;
+    }*/
+
+    public void addCartridgeSubscription (int tenantId, String subscriptionAlias, CartridgeSubscription
+            cartridgeSubscription) {
+        addSubscription(tenantId, subscriptionAlias, cartridgeSubscription);
+    }
+
+    private void addSubscription (int tenantId, String subscriptionAlias, CartridgeSubscription cartridgeSubscription) {
+
+        writeLock.lock();
+
+        try {
+            SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap = tenantIdToCartridgeSubscriptionCache.
+                    get(tenantId);
+
+            if(aliasToSubscriptionMap != null) {
+                aliasToSubscriptionMap.addSubscription(subscriptionAlias, cartridgeSubscription);
+
+            } else {
+                aliasToSubscriptionMap = new SubscriptionAliasToCartridgeSubscriptionMap();
+                aliasToSubscriptionMap.addSubscription(subscriptionAlias, cartridgeSubscription);
+            }
+
+            if(clusterItToCartridgeSubscrptionMatch.put(cartridgeSubscription.getClusterDomain(), cartridgeSubscription)
+                    != null) {
+                log.info("Overwrote the CartridgeSubscription value for cluster Id " +
+                        cartridgeSubscription.getClusterDomain());
+            }
+
+        } finally {
+            writeLock.unlock();
+        }
+    }
+
+    public void removeCartridgeSubscription (int tenantId, String subscriptionAlias, String clusterId) {
+        removeSubscription(tenantId, subscriptionAlias, clusterId);
+    }
+
+    private void removeSubscription (int tenantId, String subscriptionAlias, String clusterId) {
+
+        writeLock.lock();
+
+        try {
+            SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap = tenantIdToCartridgeSubscriptionCache.
+                    get(tenantId);
+
+            if(aliasToSubscriptionMap != null) {
+                aliasToSubscriptionMap.removeSubscription(subscriptionAlias);
+                if(aliasToSubscriptionMap.isEmpty()){
+                    tenantIdToCartridgeSubscriptionCache.remove(tenantId);
+                }
+
+            } else {
+                log.info("No SubscriptionAliasToCartridgeSubscriptionMap entry found for tenant Id " + tenantId);
+            }
+
+            if(clusterItToCartridgeSubscrptionMatch.remove(clusterId) != null) {
+                log.info("No CartridgeSubscription entry found for cluster Id " + clusterId);
+            }
+
+        } finally {
+            writeLock.unlock();
+        }
+    }
+
+    public CartridgeSubscription getCartridgeSubscription (int tenantId, String subscriptionAlias) {
+        return getSubscription(tenantId, subscriptionAlias);
+    }
+
+    public Collection<CartridgeSubscription> getCartridgeSubscriptions (int tenantId) {
+        return getSubscriptions(tenantId);
+    }
+
+    private Collection<CartridgeSubscription> getSubscriptions (int tenantId) {
+
+        readLock.lock();
+
+        try {
+            SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap = tenantIdToCartridgeSubscriptionCache.
+                    get(tenantId);
+
+            if(aliasToSubscriptionMap != null) {
+                aliasToSubscriptionMap.getCartridgeSubscriptions();
+            }
+
+        } finally {
+            readLock.unlock();
+        }
+
+        return null;
+    }
+
+    public CartridgeSubscription getCartridgeSubscription (String clusterId) {
+        return getCartridgeSubscription(clusterId);
+    }
+
+    private CartridgeSubscription getSubscription (String clusterId) {
+
+        readLock.lock();
+        try {
+            return clusterItToCartridgeSubscrptionMatch.get(clusterId);
+
+        } finally {
+            readLock.unlock();
+        }
+    }
+
+    private CartridgeSubscription getSubscription(int tenantId, String subscriptionAlias) {
+
+        readLock.lock();
+
+        try {
+            SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap = tenantIdToCartridgeSubscriptionCache.
+                    get(tenantId);
+
+            if(aliasToSubscriptionMap != null) {
+                CartridgeSubscription cartridgeSubscription = aliasToSubscriptionMap.
+                        getCartridgeSubscription(subscriptionAlias);
+
+                if(cartridgeSubscription != null){
+                    return cartridgeSubscription;
+
+                } else {
+                    log.info("No CartridgeSubscription entry found for subscription alias "
+                            + subscriptionAlias);
+                    //if(log.isDebugEnabled()) {
+                    //    log.debug("No entry found for subscription alias " + subscriptionAlias);
+                    //}
+                }
+            } else {
+                log.info("No SubscriptionAliasToCartridgeSubscriptionMap entry found for tenant id " + tenantId);
+                //if(log.isDebugEnabled()) {
+                //    log.debug("No entry found for tenant id " + tenantId);
+                //}
+            }
+
+            return null;
+
+        } finally {
+             readLock.unlock();
+        }
+    }
+
+    private class SubscriptionAliasToCartridgeSubscriptionMap {
+
+        private Map<String, CartridgeSubscription> subscriptionAliasToCartridgeSubscriptionMap;
+
+        public SubscriptionAliasToCartridgeSubscriptionMap () {
+            subscriptionAliasToCartridgeSubscriptionMap = new HashMap<String, CartridgeSubscription>();
+        }
+
+        public Map<String, CartridgeSubscription> getSubscriptionAliasToCartridgeSubscriptionMap() {
+            return subscriptionAliasToCartridgeSubscriptionMap;
+        }
+
+        public void addSubscription(String subscriptionAlias, CartridgeSubscription cartridgeSubscription) {
+
+            if(subscriptionAliasToCartridgeSubscriptionMap.put(subscriptionAlias, cartridgeSubscription) != null) {
+                log.info("Overwrote the previous CartridgeSubscription value for subscription alias" + subscriptionAlias);
+            }
+        }
+
+        public boolean isEmpty () {
+            return subscriptionAliasToCartridgeSubscriptionMap.isEmpty();
+        }
+
+        public void removeSubscription (String subscriptionAlias) {
+
+            if(subscriptionAliasToCartridgeSubscriptionMap.remove(subscriptionAlias) == null) {
+                log.info("No CartridgeSubscription entry found for subscription alias " + subscriptionAlias);
+            }
+        }
+
+        public CartridgeSubscription getCartridgeSubscription (String cartridgeSubscriptionAlias) {
+            return subscriptionAliasToCartridgeSubscriptionMap.get(cartridgeSubscriptionAlias);
+        }
+
+        public Collection<CartridgeSubscription> getCartridgeSubscriptions () {
+            return subscriptionAliasToCartridgeSubscriptionMap.values();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba14b09f/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..8c332db 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
@@ -24,14 +24,11 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.adc.mgt.exception.ADCException;
 import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
+import java.io.*;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
-public abstract class Payload {
+public abstract class Payload implements Serializable {
 
     private static Log log = LogFactory.getLog(Payload.class);
 


[2/5] registry based persistence and caching initial implementation

Posted by is...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba14b09f/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 d8981e5..d73c029 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
@@ -1,1408 +1,1408 @@
-/*
- * 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.persistence;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.adc.mgt.client.CloudControllerServiceClient;
-import org.apache.stratos.adc.mgt.dao.Cluster;
-import org.apache.stratos.adc.mgt.dao.DataCartridge;
-import org.apache.stratos.adc.mgt.exception.ADCException;
-import org.apache.stratos.adc.mgt.exception.PersistenceManagerException;
-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.factory.CartridgeSubscriptionFactory;
-import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
-import org.apache.stratos.adc.mgt.utils.RepoPasswordMgtUtil;
-import org.apache.stratos.adc.mgt.utils.StratosDBUtils;
-import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
-import org.wso2.carbon.context.CarbonContext;
-
-import java.sql.*;
-import java.util.ArrayList;
-import java.util.List;
-
-//import org.apache.stratos.adc.mgt.subscription.SingleTenantCartridgeSubscription;
-
-public class DatabaseBasedPersistenceManager extends PersistenceManager {
-
-    private static final Log log = LogFactory.getLog(DatabaseBasedPersistenceManager.class);
-
-    @Override
-    public void persistCartridgeSubscription(CartridgeSubscription cartridgeSubscription)
-            throws PersistenceManagerException {
-
-        Connection connection = null;
-        try {
-             connection = StratosDBUtils.getConnection();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to obtain a DB connection";
-            log.error(errorMsg);
-            StratosDBUtils.closeConnection(connection);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        int repositoryId = -1;
-        //persist Repository if available
-        if(cartridgeSubscription.getRepository() != null) {
-            repositoryId = persistRepository(connection, cartridgeSubscription.getRepository());
-        }
-
-        int dataCartridgeInfoId = -1;
-        //persist Data Cartridge Subscription specific details if available
-        if(cartridgeSubscription.getCartridgeInfo().getProvider().equals(CartridgeConstants.DATA_CARTRIDGE_PROVIDER) &&
-                cartridgeSubscription instanceof DataCartridgeSubscription) {
-            DataCartridgeSubscription dataCartridgeSubscription = (DataCartridgeSubscription) cartridgeSubscription;
-            dataCartridgeInfoId = persistDataCartridgeInformation(connection, dataCartridgeSubscription.getHost(),
-                    dataCartridgeSubscription.getUsername(), dataCartridgeSubscription.getPassword());
-        }
-
-        PreparedStatement persistSubscriptionStmt = null;
-
-        String insertSubscription = "INSERT INTO SUBSCRIPTION (CARTRIDGE_TYPE,CARTRIDGE_ALIAS,MAPPED_DOMAIN," +
-                "SUBSCRIPTION_STATUS,MULTITENANT,PROVIDER,AUTOSCALING_POLICY,HOSTNAME,DOMAIN,SUBDOMAIN,MGT_DOMAIN," +
-                "MGT_SUBDOMAIN,SERVICE_STATUS,DATA_CARTRIDGE_ID,REPOSITORY_ID)"
-                + " VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
-
-        try {
-            persistSubscriptionStmt = connection.prepareStatement(insertSubscription);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for persisting Subscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistSubscriptionStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            persistSubscriptionStmt.setString(1, cartridgeSubscription.getType());
-            persistSubscriptionStmt.setString(2, cartridgeSubscription.getAlias());
-            persistSubscriptionStmt.setString(3, cartridgeSubscription.getMappedDomain());
-            persistSubscriptionStmt.setString(4, cartridgeSubscription.getSubscriptionStatus());
-            persistSubscriptionStmt.setBoolean(5, cartridgeSubscription.getCartridgeInfo().getMultiTenant());
-            persistSubscriptionStmt.setString(6, cartridgeSubscription.getCartridgeInfo().getProvider());
-            persistSubscriptionStmt.setString(7, cartridgeSubscription.getAutoscalingPolicyName());
-            persistSubscriptionStmt.setString(8, cartridgeSubscription.getHostName());
-            persistSubscriptionStmt.setString(9, cartridgeSubscription.getClusterDomain());
-            persistSubscriptionStmt.setString(10, cartridgeSubscription.getClusterSubDomain());
-            persistSubscriptionStmt.setString(11, cartridgeSubscription.getMgtClusterDomain());
-            persistSubscriptionStmt.setString(12, cartridgeSubscription.getMgtClusterSubDomain());
-            persistSubscriptionStmt.setString(13, "CLUSTER_CREATED");//TODO: fix properly
-            persistSubscriptionStmt.setInt(14, dataCartridgeInfoId);
-            persistSubscriptionStmt.setInt(15, repositoryId);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for persisting Subscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistSubscriptionStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            persistSubscriptionStmt.executeUpdate();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for persisting Subscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistSubscriptionStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            connection.commit();
-
-        } catch (SQLException e) {
-            try {
-                connection.rollback();
-
-            } catch (SQLException e1) {
-                log.error("Failed to rollback", e);
-            }
-            String errorMsg = "Failed to commit the changes for persisting Subscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistSubscriptionStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeAllConnections(connection, persistSubscriptionStmt);
-        }
-    }
-
-    private int persistRepository (Connection connection, Repository repository) throws PersistenceManagerException{
-
-        PreparedStatement persistRepoStmt = null;
-        ResultSet resultSet = null;
-        int repoId = -1;
-
-        String insertRepo = "INSERT INTO REPOSITORY (URL,USERNAME,PASSWORD,IS_PRIVATE)"
-                + " VALUES (?,?,?,?)";
-
-        try {
-            persistRepoStmt = connection.prepareStatement(insertRepo, Statement.RETURN_GENERATED_KEYS);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for persisting Repository";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistRepoStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            persistRepoStmt.setString(1, repository.getUrl());
-            persistRepoStmt.setString(2, repository.getUserName());
-            persistRepoStmt.setString(3, RepoPasswordMgtUtil.encryptPassword(repository.getPassword()));
-            persistRepoStmt.setBoolean(4, repository.isPrivateRepository());
-
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for persisting Repository";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistRepoStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            persistRepoStmt.executeUpdate();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for persisting Repository";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistRepoStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-        try {
-            resultSet = persistRepoStmt.getGeneratedKeys();
-            if (resultSet.next()) {
-                repoId = resultSet.getInt(1);
-            }
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to get the generated keys for the Result Set of persisting Repository";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistRepoStmt, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeStatement(persistRepoStmt);
-            StratosDBUtils.closeResultSet(resultSet);
-        }
-
-        return repoId;
-    }
-
-    /*private int persistCluster (Connection connection, Cluster cluster) throws PersistenceManagerException {
-
-        PreparedStatement persistClusterStmt = null;
-        ResultSet resultSet = null;
-        int clusterId = -1;
-
-        String insertCluster = "INSERT INTO CLUSTER (HOSTNAME,DOMAIN,SUBDOMAIN,MGT_DOMAIN,MGT_SUBDOMAIN,SERVICE_STATUS)"
-                + " VALUES (?,?,?,?,?,?,?)";
-
-        try {
-            persistClusterStmt = connection.prepareStatement(insertCluster, Statement.RETURN_GENERATED_KEYS);
-
-        } catch (SQLException e) {
-            StratosDBUtils.closeAllConnections(connection, persistClusterStmt);
-            throw new PersistenceManagerException("Failed create a Prepared Statement for persisting Cluster", e);
-        }
-
-        try {
-            persistClusterStmt.setString(1, cluster.getHostName());
-            persistClusterStmt.setString(2, cluster.getClusterDomain());
-            persistClusterStmt.setString(3, cluster.getClusterSubDomain());
-            persistClusterStmt.setString(4, cluster.getMgtClusterDomain());
-            persistClusterStmt.setString(5, cluster.getMgtClusterSubDomain());
-            persistClusterStmt.setString(6, "CREATED");//TODO:refactor
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for persisting Cluster";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistClusterStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            persistClusterStmt.executeUpdate();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for persisting Cluster";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistClusterStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-        try {
-            resultSet = persistClusterStmt.getGeneratedKeys();
-            if (resultSet.next()) {
-                clusterId = resultSet.getInt(1);
-            }
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to get the generated keys for the Result Set of persisting Repository";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistClusterStmt, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeStatement(persistClusterStmt);
-            StratosDBUtils.closeResultSet(resultSet);
-        }
-
-        return clusterId;
-    } */
-
-    private int persistDataCartridgeInformation (Connection connection, String host, String adminUserName,
-                                                 String adminPassword) throws PersistenceManagerException {
-
-        PreparedStatement persistDataCartridgeInformationStmt = null;
-        ResultSet resultSet = null;
-        int dataCartridgeInfoId = -1;
-
-        String insertDataCartridgeInfo = "INSERT INTO DATA_CARTRIDGE (HOST,ADMIN_USERNAME,ADMIN_PASSWORD)"
-                + " VALUES (?,?,?)";
-
-        try {
-            persistDataCartridgeInformationStmt = connection.prepareStatement(insertDataCartridgeInfo,
-                    Statement.RETURN_GENERATED_KEYS);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for persisting Data Cartridge Information";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistDataCartridgeInformationStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            persistDataCartridgeInformationStmt.setString(1, host);
-            persistDataCartridgeInformationStmt.setString(2, adminUserName);
-            persistDataCartridgeInformationStmt.setString(3, RepoPasswordMgtUtil.encryptPassword(adminPassword));
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for persisting Data Cartridge Information";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistDataCartridgeInformationStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            persistDataCartridgeInformationStmt.executeUpdate();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for persisting Data Cartridge Information";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistDataCartridgeInformationStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-        try {
-            resultSet = persistDataCartridgeInformationStmt.getGeneratedKeys();
-            if (resultSet.next()) {
-                dataCartridgeInfoId = resultSet.getInt(1);
-            }
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to get the generated keys for the Result Set of persisting Data Cartridge " +
-                    "Information";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistDataCartridgeInformationStmt, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeStatement(persistDataCartridgeInformationStmt);
-            StratosDBUtils.closeResultSet(resultSet);
-        }
-
-        return dataCartridgeInfoId;
-    }
-
-    /*private int persistSubscriber (Connection connection, Subscriber subscriber) throws PersistenceManagerException {
-
-        PreparedStatement persistSubscriberStmt = null;
-
-        String insertSubscriber = "INSERT INTO TENANT (TENANT_ID,USERNAME,PASSWORD) VALUES (?,?,?)";
-
-        try {
-            persistSubscriberStmt = connection.prepareStatement(insertSubscriber);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for persisting Subscriber";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistSubscriberStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            persistSubscriberStmt.setInt(1, subscriber.getTenantId());
-            persistSubscriberStmt.setString(2, subscriber.getAdminUserName());
-            persistSubscriberStmt.setString(3, subscriber.getTenantDomain());
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for persisting Subscriber";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistSubscriberStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            persistSubscriberStmt.executeUpdate();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for persisting Subscriber";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, persistSubscriberStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeStatement(persistSubscriberStmt);
-        }
-
-        return subscriber.getTenantId();
-    }*/
-
-    @Override
-    public void removeCartridgeSubscription(int tenantId, String alias) throws PersistenceManagerException {
-        //TODO
-    }
-
-    @Override
-    public CartridgeSubscription getCartridgeSubscription(int tenantId, String alias) throws PersistenceManagerException {
-
-        Connection connection = null;
-        try {
-            connection = StratosDBUtils.getConnection();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to obtain a DB connection";
-            log.error(errorMsg);
-            StratosDBUtils.closeConnection(connection);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
-                "WHERE S.CARTRIDGE_ALIAS=? AND S.TENANT_ID=? AND S.STATE != 'UNSUBSCRIBED' " +
-                "inner join REPOSITORY R on S.REPOSITORY_ID=R.REPOSITORY_ID " +
-                "inner join DATA_CARTRIDGE D on S.DATA_CARTRIDGE_ID=D.DATA_CARTRIDGE_ID ";
-
-        PreparedStatement getSubscriptionStatement = null;
-        try {
-            getSubscriptionStatement = connection.prepareStatement(sqlQuery);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for retreiving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getSubscriptionStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            getSubscriptionStatement.setString(1, alias);
-            getSubscriptionStatement.setInt(2, tenantId);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getSubscriptionStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        ResultSet resultSet = null;
-
-        try {
-            resultSet = getSubscriptionStatement.executeQuery();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getSubscriptionStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        CartridgeSubscription cartridgeSubscription = null;
-        try {
-            while (resultSet.next()) {
-                cartridgeSubscription = populateCartridgeSubscription(resultSet);
-            }
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to populate CartridgeSubscription instance";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getSubscriptionStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeAllConnections(connection, getSubscriptionStatement, resultSet);
-        }
-
-        return cartridgeSubscription;
-    }
-
-    private CartridgeSubscription populateCartridgeSubscription (ResultSet resultSet)
-            throws PersistenceManagerException, SQLException {
-
-        String cartridgeType = resultSet.getString("CARTRIDGE_TYPE");
-
-        CartridgeInfo cartridgeInfo = null;
-        try {
-            cartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(cartridgeType);
-
-        } catch (Exception e) {
-            //Cannot happen, but can continue
-            String message = "Error getting Cartridge Definition for " + cartridgeType;
-            log.error(message, e);
-        }
-
-        //If an error occurred while getting the CartridgeInfo instance, create an instance with a minimal data set
-        if(cartridgeInfo == null) {
-            cartridgeInfo = new CartridgeInfo();
-            cartridgeInfo.setMultiTenant(resultSet.getBoolean("MULTITENANT"));
-            cartridgeInfo.setProvider(resultSet.getString("PROVIDER"));
-        }
-
-        CartridgeSubscription cartridgeSubscription = null;
-        try {
-            cartridgeSubscription = CartridgeSubscriptionFactory.getCartridgeSubscriptionInstance(cartridgeInfo);
-
-        } catch (ADCException e) {
-            throw new PersistenceManagerException(e);
-        }
-
-        /*Policy autoScalingPolicy = PolicyHolder.getInstance().getPolicy(resultSet.getString("AUTOSCALING_POLICY"));
-        if(autoScalingPolicy == null) {
-            //get the default AutoScaling policy
-            autoScalingPolicy = PolicyHolder.getInstance().getDefaultPolicy();
-        }*/
-
-        //populate data
-        cartridgeSubscription.setSubscriptionId(resultSet.getInt("SUBSCRIPTION_ID"));
-        cartridgeSubscription.setType(cartridgeType);
-        cartridgeSubscription.setAlias(resultSet.getString("CARTRIDGE_ALIAS"));
-        cartridgeSubscription.setMappedDomain(resultSet.getString("MAPPED_DOMAIN"));
-        cartridgeSubscription.setSubscriptionStatus(resultSet.getString("SUBSCRIPTION_STATUS"));
-        cartridgeSubscription.setAutoscalingPolicyName(resultSet.getString("AUTOSCALING_POLICY"));
-
-        //Repository related data
-        if (resultSet.getInt("REPOSITORY_ID") != -1) {
-            Repository repository = new Repository();
-            repository.setId(resultSet.getInt("REPOSITORY_ID"));
-            repository.setUrl(resultSet.getString("URL"));
-            repository.setUserName(resultSet.getString("USERNAME"));
-            repository.setPassword(RepoPasswordMgtUtil.decryptPassword(resultSet.getString("PASSWORD")));
-            repository.setPrivateRepository(resultSet.getBoolean("IS_PRIVATE"));
-            cartridgeSubscription.setRepository(repository);
-        }
-
-        //Cluster related data
-        Cluster cluster = new Cluster();
-        cluster.setId(resultSet.getInt("CLUSTER_ID"));
-        cluster.setHostName(resultSet.getString("HOSTNAME"));
-        cluster.setClusterDomain(resultSet.getString("DOMAIN"));
-        cluster.setClusterSubDomain(resultSet.getString("SUBDOMAIN"));
-        cluster.setMgtClusterDomain(resultSet.getString("MGT_DOMAIN"));
-        cluster.setMgtClusterSubDomain(resultSet.getString("MGT_SUBDOMAIN"));
-        cluster.setServiceStatus(resultSet.getString("SERVICE_STATUS"));
-        cartridgeSubscription.setCluster(cluster);
-
-        //data cartridge specific information
-        //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();
-        Subscriber subscriber = new Subscriber(carbonContext.getUsername(), carbonContext.getTenantId(),
-                carbonContext.getTenantDomain());
-        cartridgeSubscription.setSubscriber(subscriber);
-
-        return cartridgeSubscription;
-    }
-
-    @Override
-    public List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId) throws PersistenceManagerException {
-
-        Connection connection = null;
-        try {
-            connection = StratosDBUtils.getConnection();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to obtain a DB connection";
-            log.error(errorMsg);
-            StratosDBUtils.closeConnection(connection);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
-                "WHERE S.TENANT_ID=? AND S.STATE != 'UNSUBSCRIBED' " +
-                "inner join REPOSITORY R on S.REPOSITORY_ID=R.REPOSITORY_ID " +
-                "inner join DATA_CARTRIDGE D on S.DATA_CARTRIDGE_ID=D.DATA_CARTRIDGE_ID ";
-
-        PreparedStatement getSubscriptionsStatement = null;
-        try {
-            getSubscriptionsStatement = connection.prepareStatement(sqlQuery);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for retreiving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            getSubscriptionsStatement.setInt(1, tenantId);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        ResultSet resultSet = null;
-
-        try {
-            resultSet = getSubscriptionsStatement.executeQuery();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        List<CartridgeSubscription> cartridgeSubscriptions = new ArrayList<CartridgeSubscription>();
-        try {
-            while(resultSet.next()) {
-                CartridgeSubscription cartridgeSubscription = populateCartridgeSubscription(resultSet);
-                cartridgeSubscriptions.add(cartridgeSubscription);
-            }
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to populate CartridgeSubscription instance";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement, resultSet);
-        }
-
-        return cartridgeSubscriptions;
-    }
-
-    @Override
-    public List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId, String cartridgeType)
-            throws PersistenceManagerException {
-
-        Connection connection = null;
-        try {
-            connection = StratosDBUtils.getConnection();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to obtain a DB connection";
-            log.error(errorMsg);
-            StratosDBUtils.closeConnection(connection);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
-                "WHERE S.CARTRIDGE_TYPE=? AND S.TENANT_ID=? AND S.STATE != 'UNSUBSCRIBED' " +
-                "inner join REPOSITORY R on S.REPOSITORY_ID=R.REPOSITORY_ID " +
-                "inner join DATA_CARTRIDGE D on S.DATA_CARTRIDGE_ID=D.DATA_CARTRIDGE_ID ";
-
-        PreparedStatement getSubscriptionsStatement = null;
-        try {
-            getSubscriptionsStatement = connection.prepareStatement(sqlQuery);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            getSubscriptionsStatement.setString(1, cartridgeType);
-            getSubscriptionsStatement.setInt(2, tenantId);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        ResultSet resultSet = null;
-
-        try {
-            resultSet = getSubscriptionsStatement.executeQuery();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        List<CartridgeSubscription> cartridgeSubscriptions = new ArrayList<CartridgeSubscription>();
-        try {
-            while(resultSet.next()) {
-                CartridgeSubscription cartridgeSubscription = populateCartridgeSubscription(resultSet);
-                cartridgeSubscriptions.add(cartridgeSubscription);
-            }
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to populate CartridgeSubscription instance";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement, resultSet);
-        }
-
-        return cartridgeSubscriptions;
-    }
-
-    @Override
-    public Repository getRepository(int tenantId, String alias) throws PersistenceManagerException {
-
-        Connection connection = null;
-        try {
-            connection = StratosDBUtils.getConnection();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to obtain a DB connection";
-            log.error(errorMsg);
-            StratosDBUtils.closeConnection(connection);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
-                "WHERE S.TENANT_ID=? AND S.CARTRIDGE_ALIAS=? AND S.STATE != 'UNSUBSCRIBED' " +
-                "inner join REPOSITORY R on S.REPOSITORY_ID=R.REPOSITORY_ID ";
-
-        PreparedStatement getRepositoryStatement = null;
-        try {
-            getRepositoryStatement = connection.prepareStatement(sqlQuery);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for retreiving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getRepositoryStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            getRepositoryStatement.setInt(1, tenantId);
-            getRepositoryStatement.setString(2, alias);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getRepositoryStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        ResultSet resultSet = null;
-
-        try {
-            resultSet = getRepositoryStatement.executeQuery();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getRepositoryStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        Repository repository = null;
-        try {
-            while(resultSet.next()) {
-                repository = populateRepository(resultSet);
-            }
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to populate CartridgeSubscription instance";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getRepositoryStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeAllConnections(connection, getRepositoryStatement, resultSet);
-        }
-
-        return repository;
-    }
-
-    private Repository populateRepository (ResultSet resultSet) throws SQLException {
-
-        if(resultSet.getInt("REPOSITORY_ID") == -1) {
-            return null;
-        }
-
-        Repository repository = new Repository();
-        repository.setId(resultSet.getInt("REPOSITORY_ID"));
-        repository.setUrl(resultSet.getString("URL"));
-        repository.setUserName(resultSet.getString("USERNAME"));
-        repository.setPassword(RepoPasswordMgtUtil.decryptPassword(resultSet.getString("PASSWORD")));
-        repository.setPrivateRepository(resultSet.getBoolean("IS_PRIVATE"));
-
-        return repository;
-    }
-
-    @Override
-    public Repository getRepository(String clusterDomain) throws PersistenceManagerException {
-
-        Connection connection = null;
-        try {
-            connection = StratosDBUtils.getConnection();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to obtain a DB connection";
-            log.error(errorMsg);
-            StratosDBUtils.closeConnection(connection);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
-                "WHERE S.DOMAIN=? AND S.STATE != 'UNSUBSCRIBED' " +
-                "inner join REPOSITORY R on S.REPOSITORY_ID=R.REPOSITORY_ID ";
-
-        PreparedStatement getRepositoryStatement = null;
-        try {
-            getRepositoryStatement = connection.prepareStatement(sqlQuery);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for retreiving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getRepositoryStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            getRepositoryStatement.setString(1, clusterDomain);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getRepositoryStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        ResultSet resultSet = null;
-
-        try {
-            resultSet = getRepositoryStatement.executeQuery();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getRepositoryStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        Repository repository = null;
-        try {
-            while(resultSet.next()) {
-                repository = populateRepository(resultSet);
-            }
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to populate CartridgeSubscription instance";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getRepositoryStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeAllConnections(connection, getRepositoryStatement, resultSet);
-        }
-
-        return repository;
-    }
-
-    @Override
-    public DataCartridge getDataCartridgeSubscriptionInfo(int tenantId, String alias)
-            throws PersistenceManagerException {
-
-        Connection connection = null;
-        try {
-            connection = StratosDBUtils.getConnection();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to obtain a DB connection";
-            log.error(errorMsg);
-            StratosDBUtils.closeConnection(connection);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
-                "WHERE S.CARTRIDGE_ALIAS=? AND S.TENANT_ID=? AND S.STATE != 'UNSUBSCRIBED' " +
-                "inner join DATA_CARTRIDGE D on S.DATA_CARTRIDGE_ID=D.DATA_CARTRIDGE_ID ";
-
-        PreparedStatement getDataCartridgeSubscriptionInfoStatement = null;
-        try {
-            getDataCartridgeSubscriptionInfoStatement = connection.prepareStatement(sqlQuery);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for retreiving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getDataCartridgeSubscriptionInfoStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            getDataCartridgeSubscriptionInfoStatement.setString(1, alias);
-            getDataCartridgeSubscriptionInfoStatement.setInt(2, tenantId);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getDataCartridgeSubscriptionInfoStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        ResultSet resultSet = null;
-
-        try {
-            resultSet = getDataCartridgeSubscriptionInfoStatement.executeQuery();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getDataCartridgeSubscriptionInfoStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        DataCartridge dataCartridge = null;
-        try {
-            while (resultSet.next()) {
-                dataCartridge = populateDataCartridgeInfo(resultSet);
-            }
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to populate CartridgeSubscription instance";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getDataCartridgeSubscriptionInfoStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeAllConnections(connection, getDataCartridgeSubscriptionInfoStatement, resultSet);
-        }
-
-        return dataCartridge;
-    }
-
-    private DataCartridge populateDataCartridgeInfo (ResultSet resultSet) throws SQLException {
-
-        if(resultSet.getInt("DATA_CARTRIDGE_ID") == -1) {
-            return null;
-        }
-
-        DataCartridge dataCartridge = new DataCartridge();
-        dataCartridge.setId(resultSet.getInt("DATA_CARTRIDGE_ID"));
-        dataCartridge.setDataCartridgeType(resultSet.getString("CARTRIDGE_TYPE"));
-        dataCartridge.setHost(resultSet.getString("HOST"));
-        dataCartridge.setUserName(resultSet.getString("ADMIN_USERNAME"));
-        dataCartridge.setPassword(resultSet.getString("ADMIN_PASSWORD"));
-
-        return dataCartridge;
-    }
-
-    @Override
-    public boolean isAliasTaken(int tenantId, String alias) throws PersistenceManagerException {
-
-        boolean isAliasTaken = false;
-        Connection connection = null;
-        try {
-            connection = StratosDBUtils.getConnection();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to obtain a DB connection";
-            log.error(errorMsg);
-            StratosDBUtils.closeConnection(connection);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
-                "WHERE S.CARTRIDGE_ALIAS=? AND S.TENANT_ID=? AND S.STATE != 'UNSUBSCRIBED'";
-
-        PreparedStatement isAliasTakenStatement = null;
-        try {
-            isAliasTakenStatement = connection.prepareStatement(sqlQuery);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for retreiving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, isAliasTakenStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            isAliasTakenStatement.setString(1, alias);
-            isAliasTakenStatement.setInt(2, tenantId);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, isAliasTakenStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        ResultSet resultSet = null;
-
-        try {
-            resultSet = isAliasTakenStatement.executeQuery();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, isAliasTakenStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            if(resultSet.next()) {
-                log.info("Alias " + alias + " has been already used for tenant " + tenantId);
-                isAliasTaken = true;
-            }
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to populate CartridgeSubscription instance";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, isAliasTakenStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeAllConnections(connection, isAliasTakenStatement, resultSet);
-        }
-
-        return isAliasTaken;
-    }
-
-    @Override
-    public boolean hasSubscribed(int tenantId, String cartridgeType) throws PersistenceManagerException {
-
-        boolean hasSubscribed = false;
-        Connection connection = null;
-        try {
-            connection = StratosDBUtils.getConnection();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to obtain a DB connection";
-            log.error(errorMsg);
-            StratosDBUtils.closeConnection(connection);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
-                "WHERE S.CARTRIDGE_TYPE=? AND S.TENANT_ID=? AND S.STATE != 'UNSUBSCRIBED'";
-
-        PreparedStatement hasSubscribedStatement = null;
-        try {
-            hasSubscribedStatement = connection.prepareStatement(sqlQuery);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, hasSubscribedStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            hasSubscribedStatement.setString(1, cartridgeType);
-            hasSubscribedStatement.setInt(2, tenantId);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, hasSubscribedStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        ResultSet resultSet = null;
-
-        try {
-            resultSet = hasSubscribedStatement.executeQuery();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, hasSubscribedStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            if(resultSet.next()) {
-                log.info("Tenant " + tenantId + " has already subscribed for the Cartridge Type " + cartridgeType);
-                hasSubscribed = true;
-            }
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to populate CartridgeSubscription instance";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, hasSubscribedStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeAllConnections(connection, hasSubscribedStatement, resultSet);
-        }
-
-        return hasSubscribed;
-    }
-
-    @Override
-    public void updateDomianMapping(int tenantId, String cartridgeAlias, String newDomain)
-            throws PersistenceManagerException {
-
-        Connection connection = null;
-        try {
-            connection = StratosDBUtils.getConnection();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to obtain a DB connection";
-            log.error(errorMsg);
-            StratosDBUtils.closeConnection(connection);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        PreparedStatement updateDomainMappingStmt = null;
-
-        String insertDataCartridgeInfo = "UPDATE CARTRIDGE_SUBSCRIPTION SET MAPPED_DOMAIN = ? " +
-                "WHERE TENANT_ID = ? AND ALIAS = ?";
-
-        try {
-            updateDomainMappingStmt = connection.prepareStatement(insertDataCartridgeInfo);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for updating Domain Mapping";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, updateDomainMappingStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            updateDomainMappingStmt.setString(1, newDomain);
-            updateDomainMappingStmt.setInt(2, tenantId);
-            updateDomainMappingStmt.setString(3, cartridgeAlias);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for updating Domain Mapping";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, updateDomainMappingStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            updateDomainMappingStmt.executeUpdate();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for updating Domain Mapping";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, updateDomainMappingStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeAllConnections(connection, updateDomainMappingStmt);
-        }
-    }
-
-    @Override
-    public String getMappedDomain(int tenantId, String cartridgeAlias) throws PersistenceManagerException {
-
-        String mappedDomain = null;
-
-        Connection connection = null;
-        try {
-            connection = StratosDBUtils.getConnection();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to obtain a DB connection";
-            log.error(errorMsg);
-            StratosDBUtils.closeConnection(connection);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        String sqlQuery = "SELECT MAPPED_DOMAIN FROM SUBSCRIPTION S " +
-                "WHERE S.TENANT_ID=? AND S.CARTRIDGE_ALIAS=? AND S.STATE != 'UNSUBSCRIBED'";
-
-        PreparedStatement getMappedDomainStatement = null;
-        try {
-            getMappedDomainStatement = connection.prepareStatement(sqlQuery);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getMappedDomainStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            getMappedDomainStatement.setInt(1, tenantId);
-            getMappedDomainStatement.setString(2, cartridgeAlias);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getMappedDomainStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        ResultSet resultSet = null;
-
-        try {
-            resultSet = getMappedDomainStatement.executeQuery();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getMappedDomainStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            if(resultSet.next()) {
-                mappedDomain = resultSet.getString("MAPPED_DOMAIN");
-            }
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to populate CartridgeSubscription instance";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getMappedDomainStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeAllConnections(connection, getMappedDomainStatement, resultSet);
-        }
-
-        return mappedDomain;
-    }
-
-    @Override
-    public Cluster getCluster(int tenantId, String cartridgeAlias) throws PersistenceManagerException {
-
-        Connection connection = null;
-        try {
-            connection = StratosDBUtils.getConnection();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to obtain a DB connection";
-            log.error(errorMsg);
-            StratosDBUtils.closeConnection(connection);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        String sqlQuery = "SELECT HOSTNAME,DOMAIN,SUBDOMAIN,MGT_DOMAIN,MGT_SUBDOMAIN,SERVICE_STATUS FROM SUBSCRIPTION S " +
-                "WHERE S.CARTRIDGE_ALIAS=? AND S.TENANT_ID=? AND S.STATE != 'UNSUBSCRIBED'";
-
-        PreparedStatement getClusterStatement = null;
-        try {
-            getClusterStatement = connection.prepareStatement(sqlQuery);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for retreiving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getClusterStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            getClusterStatement.setString(1, cartridgeAlias);
-            getClusterStatement.setInt(2, tenantId);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getClusterStatement);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        ResultSet resultSet = null;
-
-        try {
-            resultSet = getClusterStatement.executeQuery();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getClusterStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        Cluster cluster = null;
-        try {
-            if(resultSet.next()) {
-                cluster = populateCluster(resultSet);
-            }
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to populate CartridgeSubscription instance";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, getClusterStatement, resultSet);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeAllConnections(connection, getClusterStatement, resultSet);
-        }
-
-        return cluster;
-    }
-
-    @Override
-    public void updateSubscriptionStatus(int tenantId, String cartridgeAlias, String newStatus)
-            throws PersistenceManagerException {
-
-        Connection connection = null;
-        try {
-            connection = StratosDBUtils.getConnection();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to obtain a DB connection";
-            log.error(errorMsg);
-            StratosDBUtils.closeConnection(connection);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        PreparedStatement updateSubscriptionStatusStmt = null;
-
-        String insertDataCartridgeInfo = "UPDATE CARTRIDGE_SUBSCRIPTION SET SUBSCRIPTION_STATUS = ? " +
-                "WHERE TENANT_ID = ? AND ALIAS = ?";
-
-        try {
-            updateSubscriptionStatusStmt = connection.prepareStatement(insertDataCartridgeInfo);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for updating Domain Mapping";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, updateSubscriptionStatusStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            updateSubscriptionStatusStmt.setString(1, newStatus);
-            updateSubscriptionStatusStmt.setInt(2, tenantId);
-            updateSubscriptionStatusStmt.setString(3, cartridgeAlias);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for updating Domain Mapping";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, updateSubscriptionStatusStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            updateSubscriptionStatusStmt.executeUpdate();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for updating Domain Mapping";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, updateSubscriptionStatusStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeAllConnections(connection, updateSubscriptionStatusStmt);
-        }
-
-    }
-
-    @Override
-    public void updateServiceStatus(int tenantId, String cartridgeAlias, String newStatus)
-            throws PersistenceManagerException {
-
-        Connection connection = null;
-        try {
-            connection = StratosDBUtils.getConnection();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to obtain a DB connection";
-            log.error(errorMsg);
-            StratosDBUtils.closeConnection(connection);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        PreparedStatement updateServiceStatusStmt = null;
-
-        String insertDataCartridgeInfo = "UPDATE CARTRIDGE_SUBSCRIPTION SET SUBSCRIPTION_STATUS = ? " +
-                "WHERE TENANT_ID = ? AND ALIAS = ?";
-
-        try {
-            updateServiceStatusStmt = connection.prepareStatement(insertDataCartridgeInfo);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed create a Prepared Statement for updating Domain Mapping";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, updateServiceStatusStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            updateServiceStatusStmt.setString(1, newStatus);
-            updateServiceStatusStmt.setInt(2, tenantId);
-            updateServiceStatusStmt.setString(3, cartridgeAlias);
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to add data to Prepared Statement for updating Domain Mapping";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, updateServiceStatusStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-        }
-
-        try {
-            updateServiceStatusStmt.executeUpdate();
-
-        } catch (SQLException e) {
-            String errorMsg = "Failed to execute the Prepared Statement for updating Domain Mapping";
-            log.error(errorMsg);
-            StratosDBUtils.closeAllConnections(connection, updateServiceStatusStmt);
-            throw new PersistenceManagerException(errorMsg, e);
-
-        } finally {
-            StratosDBUtils.closeAllConnections(connection, updateServiceStatusStmt);
-        }
-    }
-
-    private Cluster populateCluster (ResultSet resultSet) throws SQLException {
-
-        Cluster cluster = new Cluster();
-        cluster.setHostName(resultSet.getString("HOSTNAME"));
-        cluster.setClusterDomain(resultSet.getString("DOMAIN"));
-        cluster.setClusterSubDomain(resultSet.getString("SUBDOMAIN"));
-        cluster.setMgtClusterDomain(resultSet.getString("MGT_DOMAIN"));
-        cluster.setMgtClusterSubDomain(resultSet.getString("MGT_SUBDOMAIN"));
-        cluster.setServiceStatus(resultSet.getString("SERVICE_STATUS"));
-
-        return cluster;
-    }
-
-    @Override
-    public void removeDomainMapping(int tenantId, String cartridgeAlias)
-            throws PersistenceManagerException {
-
-        updateDomianMapping(tenantId, cartridgeAlias, 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.persistence;
+//
+//import org.apache.commons.logging.Log;
+//import org.apache.commons.logging.LogFactory;
+//import org.apache.stratos.adc.mgt.client.CloudControllerServiceClient;
+//import org.apache.stratos.adc.mgt.dao.Cluster;
+//import org.apache.stratos.adc.mgt.dao.DataCartridge;
+//import org.apache.stratos.adc.mgt.exception.ADCException;
+//import org.apache.stratos.adc.mgt.exception.PersistenceManagerException;
+//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.factory.CartridgeSubscriptionFactory;
+//import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+//import org.apache.stratos.adc.mgt.utils.RepoPasswordMgtUtil;
+//import org.apache.stratos.adc.mgt.utils.StratosDBUtils;
+//import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+//import org.wso2.carbon.context.CarbonContext;
+//
+//import java.sql.*;
+//import java.util.ArrayList;
+//import java.util.List;
+//
+////import org.apache.stratos.adc.mgt.subscription.SingleTenantCartridgeSubscription;
+//
+//public class DatabaseBasedPersistenceManager extends PersistenceManager {
+//
+//    private static final Log log = LogFactory.getLog(DatabaseBasedPersistenceManager.class);
+//
+//    @Override
+//    public void persistCartridgeSubscription(CartridgeSubscription cartridgeSubscription)
+//            throws PersistenceManagerException {
+//
+//        Connection connection = null;
+//        try {
+//             connection = StratosDBUtils.getConnection();
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to obtain a DB connection";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeConnection(connection);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        int repositoryId = -1;
+//        //persist Repository if available
+//        if(cartridgeSubscription.getRepository() != null) {
+//            repositoryId = persistRepository(connection, cartridgeSubscription.getRepository());
+//        }
+//
+//        int dataCartridgeInfoId = -1;
+//        //persist Data Cartridge Subscription specific details if available
+//        if(cartridgeSubscription.getCartridgeInfo().getProvider().equals(CartridgeConstants.DATA_CARTRIDGE_PROVIDER) &&
+//                cartridgeSubscription instanceof DataCartridgeSubscription) {
+//            DataCartridgeSubscription dataCartridgeSubscription = (DataCartridgeSubscription) cartridgeSubscription;
+//            dataCartridgeInfoId = persistDataCartridgeInformation(connection, dataCartridgeSubscription.getHost(),
+//                    dataCartridgeSubscription.getUsername(), dataCartridgeSubscription.getPassword());
+//        }
+//
+//        PreparedStatement persistSubscriptionStmt = null;
+//
+//        String insertSubscription = "INSERT INTO SUBSCRIPTION (CARTRIDGE_TYPE,CARTRIDGE_ALIAS,MAPPED_DOMAIN," +
+//                "SUBSCRIPTION_STATUS,MULTITENANT,PROVIDER,AUTOSCALING_POLICY,HOSTNAME,DOMAIN,SUBDOMAIN,MGT_DOMAIN," +
+//                "MGT_SUBDOMAIN,SERVICE_STATUS,DATA_CARTRIDGE_ID,REPOSITORY_ID)"
+//                + " VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
+//
+//        try {
+//            persistSubscriptionStmt = connection.prepareStatement(insertSubscription);
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed create a Prepared Statement for persisting Subscription";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistSubscriptionStmt);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        try {
+//            persistSubscriptionStmt.setString(1, cartridgeSubscription.getType());
+//            persistSubscriptionStmt.setString(2, cartridgeSubscription.getAlias());
+//            persistSubscriptionStmt.setString(3, cartridgeSubscription.getMappedDomain());
+//            persistSubscriptionStmt.setString(4, cartridgeSubscription.getSubscriptionStatus());
+//            persistSubscriptionStmt.setBoolean(5, cartridgeSubscription.getCartridgeInfo().getMultiTenant());
+//            persistSubscriptionStmt.setString(6, cartridgeSubscription.getCartridgeInfo().getProvider());
+//            persistSubscriptionStmt.setString(7, cartridgeSubscription.getAutoscalingPolicyName());
+//            persistSubscriptionStmt.setString(8, cartridgeSubscription.getHostName());
+//            persistSubscriptionStmt.setString(9, cartridgeSubscription.getClusterDomain());
+//            persistSubscriptionStmt.setString(10, cartridgeSubscription.getClusterSubDomain());
+//            persistSubscriptionStmt.setString(11, cartridgeSubscription.getMgtClusterDomain());
+//            persistSubscriptionStmt.setString(12, cartridgeSubscription.getMgtClusterSubDomain());
+//            persistSubscriptionStmt.setString(13, "CLUSTER_CREATED");//TODO: fix properly
+//            persistSubscriptionStmt.setInt(14, dataCartridgeInfoId);
+//            persistSubscriptionStmt.setInt(15, repositoryId);
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to add data to Prepared Statement for persisting Subscription";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistSubscriptionStmt);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        try {
+//            persistSubscriptionStmt.executeUpdate();
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to execute the Prepared Statement for persisting Subscription";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistSubscriptionStmt);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        try {
+//            connection.commit();
+//
+//        } catch (SQLException e) {
+//            try {
+//                connection.rollback();
+//
+//            } catch (SQLException e1) {
+//                log.error("Failed to rollback", e);
+//            }
+//            String errorMsg = "Failed to commit the changes for persisting Subscription";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistSubscriptionStmt);
+//            throw new PersistenceManagerException(errorMsg, e);
+//
+//        } finally {
+//            StratosDBUtils.closeAllConnections(connection, persistSubscriptionStmt);
+//        }
+//    }
+//
+//    private int persistRepository (Connection connection, Repository repository) throws PersistenceManagerException{
+//
+//        PreparedStatement persistRepoStmt = null;
+//        ResultSet resultSet = null;
+//        int repoId = -1;
+//
+//        String insertRepo = "INSERT INTO REPOSITORY (URL,USERNAME,PASSWORD,IS_PRIVATE)"
+//                + " VALUES (?,?,?,?)";
+//
+//        try {
+//            persistRepoStmt = connection.prepareStatement(insertRepo, Statement.RETURN_GENERATED_KEYS);
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed create a Prepared Statement for persisting Repository";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistRepoStmt);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        try {
+//            persistRepoStmt.setString(1, repository.getUrl());
+//            persistRepoStmt.setString(2, repository.getUserName());
+//            persistRepoStmt.setString(3, RepoPasswordMgtUtil.encryptPassword(repository.getPassword()));
+//            persistRepoStmt.setBoolean(4, repository.isPrivateRepository());
+//
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to add data to Prepared Statement for persisting Repository";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistRepoStmt);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        try {
+//            persistRepoStmt.executeUpdate();
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to execute the Prepared Statement for persisting Repository";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistRepoStmt);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//        try {
+//            resultSet = persistRepoStmt.getGeneratedKeys();
+//            if (resultSet.next()) {
+//                repoId = resultSet.getInt(1);
+//            }
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to get the generated keys for the Result Set of persisting Repository";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistRepoStmt, resultSet);
+//            throw new PersistenceManagerException(errorMsg, e);
+//
+//        } finally {
+//            StratosDBUtils.closeStatement(persistRepoStmt);
+//            StratosDBUtils.closeResultSet(resultSet);
+//        }
+//
+//        return repoId;
+//    }
+//
+//    /*private int persistCluster (Connection connection, Cluster cluster) throws PersistenceManagerException {
+//
+//        PreparedStatement persistClusterStmt = null;
+//        ResultSet resultSet = null;
+//        int clusterId = -1;
+//
+//        String insertCluster = "INSERT INTO CLUSTER (HOSTNAME,DOMAIN,SUBDOMAIN,MGT_DOMAIN,MGT_SUBDOMAIN,SERVICE_STATUS)"
+//                + " VALUES (?,?,?,?,?,?,?)";
+//
+//        try {
+//            persistClusterStmt = connection.prepareStatement(insertCluster, Statement.RETURN_GENERATED_KEYS);
+//
+//        } catch (SQLException e) {
+//            StratosDBUtils.closeAllConnections(connection, persistClusterStmt);
+//            throw new PersistenceManagerException("Failed create a Prepared Statement for persisting Cluster", e);
+//        }
+//
+//        try {
+//            persistClusterStmt.setString(1, cluster.getHostName());
+//            persistClusterStmt.setString(2, cluster.getClusterDomain());
+//            persistClusterStmt.setString(3, cluster.getClusterSubDomain());
+//            persistClusterStmt.setString(4, cluster.getMgtClusterDomain());
+//            persistClusterStmt.setString(5, cluster.getMgtClusterSubDomain());
+//            persistClusterStmt.setString(6, "CREATED");//TODO:refactor
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to add data to Prepared Statement for persisting Cluster";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistClusterStmt);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        try {
+//            persistClusterStmt.executeUpdate();
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to execute the Prepared Statement for persisting Cluster";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistClusterStmt);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//        try {
+//            resultSet = persistClusterStmt.getGeneratedKeys();
+//            if (resultSet.next()) {
+//                clusterId = resultSet.getInt(1);
+//            }
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to get the generated keys for the Result Set of persisting Repository";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistClusterStmt, resultSet);
+//            throw new PersistenceManagerException(errorMsg, e);
+//
+//        } finally {
+//            StratosDBUtils.closeStatement(persistClusterStmt);
+//            StratosDBUtils.closeResultSet(resultSet);
+//        }
+//
+//        return clusterId;
+//    } */
+//
+//    private int persistDataCartridgeInformation (Connection connection, String host, String adminUserName,
+//                                                 String adminPassword) throws PersistenceManagerException {
+//
+//        PreparedStatement persistDataCartridgeInformationStmt = null;
+//        ResultSet resultSet = null;
+//        int dataCartridgeInfoId = -1;
+//
+//        String insertDataCartridgeInfo = "INSERT INTO DATA_CARTRIDGE (HOST,ADMIN_USERNAME,ADMIN_PASSWORD)"
+//                + " VALUES (?,?,?)";
+//
+//        try {
+//            persistDataCartridgeInformationStmt = connection.prepareStatement(insertDataCartridgeInfo,
+//                    Statement.RETURN_GENERATED_KEYS);
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed create a Prepared Statement for persisting Data Cartridge Information";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistDataCartridgeInformationStmt);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        try {
+//            persistDataCartridgeInformationStmt.setString(1, host);
+//            persistDataCartridgeInformationStmt.setString(2, adminUserName);
+//            persistDataCartridgeInformationStmt.setString(3, RepoPasswordMgtUtil.encryptPassword(adminPassword));
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to add data to Prepared Statement for persisting Data Cartridge Information";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistDataCartridgeInformationStmt);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        try {
+//            persistDataCartridgeInformationStmt.executeUpdate();
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to execute the Prepared Statement for persisting Data Cartridge Information";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistDataCartridgeInformationStmt);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//        try {
+//            resultSet = persistDataCartridgeInformationStmt.getGeneratedKeys();
+//            if (resultSet.next()) {
+//                dataCartridgeInfoId = resultSet.getInt(1);
+//            }
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to get the generated keys for the Result Set of persisting Data Cartridge " +
+//                    "Information";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistDataCartridgeInformationStmt, resultSet);
+//            throw new PersistenceManagerException(errorMsg, e);
+//
+//        } finally {
+//            StratosDBUtils.closeStatement(persistDataCartridgeInformationStmt);
+//            StratosDBUtils.closeResultSet(resultSet);
+//        }
+//
+//        return dataCartridgeInfoId;
+//    }
+//
+//    /*private int persistSubscriber (Connection connection, Subscriber subscriber) throws PersistenceManagerException {
+//
+//        PreparedStatement persistSubscriberStmt = null;
+//
+//        String insertSubscriber = "INSERT INTO TENANT (TENANT_ID,USERNAME,PASSWORD) VALUES (?,?,?)";
+//
+//        try {
+//            persistSubscriberStmt = connection.prepareStatement(insertSubscriber);
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed create a Prepared Statement for persisting Subscriber";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistSubscriberStmt);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        try {
+//            persistSubscriberStmt.setInt(1, subscriber.getTenantId());
+//            persistSubscriberStmt.setString(2, subscriber.getAdminUserName());
+//            persistSubscriberStmt.setString(3, subscriber.getTenantDomain());
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to add data to Prepared Statement for persisting Subscriber";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistSubscriberStmt);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        try {
+//            persistSubscriberStmt.executeUpdate();
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to execute the Prepared Statement for persisting Subscriber";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, persistSubscriberStmt);
+//            throw new PersistenceManagerException(errorMsg, e);
+//
+//        } finally {
+//            StratosDBUtils.closeStatement(persistSubscriberStmt);
+//        }
+//
+//        return subscriber.getTenantId();
+//    }*/
+//
+//    @Override
+//    public void removeCartridgeSubscription(int tenantId, String alias) throws PersistenceManagerException {
+//        //TODO
+//    }
+//
+//    @Override
+//    public CartridgeSubscription getCartridgeSubscription(int tenantId, String alias) throws PersistenceManagerException {
+//
+//        Connection connection = null;
+//        try {
+//            connection = StratosDBUtils.getConnection();
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to obtain a DB connection";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeConnection(connection);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
+//                "WHERE S.CARTRIDGE_ALIAS=? AND S.TENANT_ID=? AND S.STATE != 'UNSUBSCRIBED' " +
+//                "inner join REPOSITORY R on S.REPOSITORY_ID=R.REPOSITORY_ID " +
+//                "inner join DATA_CARTRIDGE D on S.DATA_CARTRIDGE_ID=D.DATA_CARTRIDGE_ID ";
+//
+//        PreparedStatement getSubscriptionStatement = null;
+//        try {
+//            getSubscriptionStatement = connection.prepareStatement(sqlQuery);
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed create a Prepared Statement for retreiving CartridgeSubscription";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, getSubscriptionStatement);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        try {
+//            getSubscriptionStatement.setString(1, alias);
+//            getSubscriptionStatement.setInt(2, tenantId);
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, getSubscriptionStatement);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        ResultSet resultSet = null;
+//
+//        try {
+//            resultSet = getSubscriptionStatement.executeQuery();
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, getSubscriptionStatement, resultSet);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        CartridgeSubscription cartridgeSubscription = null;
+//        try {
+//            while (resultSet.next()) {
+//                cartridgeSubscription = populateCartridgeSubscription(resultSet);
+//            }
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to populate CartridgeSubscription instance";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, getSubscriptionStatement, resultSet);
+//            throw new PersistenceManagerException(errorMsg, e);
+//
+//        } finally {
+//            StratosDBUtils.closeAllConnections(connection, getSubscriptionStatement, resultSet);
+//        }
+//
+//        return cartridgeSubscription;
+//    }
+//
+//    private CartridgeSubscription populateCartridgeSubscription (ResultSet resultSet)
+//            throws PersistenceManagerException, SQLException {
+//
+//        String cartridgeType = resultSet.getString("CARTRIDGE_TYPE");
+//
+//        CartridgeInfo cartridgeInfo = null;
+//        try {
+//            cartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(cartridgeType);
+//
+//        } catch (Exception e) {
+//            //Cannot happen, but can continue
+//            String message = "Error getting Cartridge Definition for " + cartridgeType;
+//            log.error(message, e);
+//        }
+//
+//        //If an error occurred while getting the CartridgeInfo instance, create an instance with a minimal data set
+//        if(cartridgeInfo == null) {
+//            cartridgeInfo = new CartridgeInfo();
+//            cartridgeInfo.setMultiTenant(resultSet.getBoolean("MULTITENANT"));
+//            cartridgeInfo.setProvider(resultSet.getString("PROVIDER"));
+//        }
+//
+//        CartridgeSubscription cartridgeSubscription = null;
+//        try {
+//            cartridgeSubscription = CartridgeSubscriptionFactory.getCartridgeSubscriptionInstance(cartridgeInfo);
+//
+//        } catch (ADCException e) {
+//            throw new PersistenceManagerException(e);
+//        }
+//
+//        /*Policy autoScalingPolicy = PolicyHolder.getInstance().getPolicy(resultSet.getString("AUTOSCALING_POLICY"));
+//        if(autoScalingPolicy == null) {
+//            //get the default AutoScaling policy
+//            autoScalingPolicy = PolicyHolder.getInstance().getDefaultPolicy();
+//        }*/
+//
+//        //populate data
+//        cartridgeSubscription.setSubscriptionId(resultSet.getInt("SUBSCRIPTION_ID"));
+//        cartridgeSubscription.setType(cartridgeType);
+//        cartridgeSubscription.setAlias(resultSet.getString("CARTRIDGE_ALIAS"));
+//        cartridgeSubscription.setMappedDomain(resultSet.getString("MAPPED_DOMAIN"));
+//        cartridgeSubscription.setSubscriptionStatus(resultSet.getString("SUBSCRIPTION_STATUS"));
+//        cartridgeSubscription.setAutoscalingPolicyName(resultSet.getString("AUTOSCALING_POLICY"));
+//
+//        //Repository related data
+//        if (resultSet.getInt("REPOSITORY_ID") != -1) {
+//            Repository repository = new Repository();
+//            repository.setId(resultSet.getInt("REPOSITORY_ID"));
+//            repository.setUrl(resultSet.getString("URL"));
+//            repository.setUserName(resultSet.getString("USERNAME"));
+//            repository.setPassword(RepoPasswordMgtUtil.decryptPassword(resultSet.getString("PASSWORD")));
+//            repository.setPrivateRepository(resultSet.getBoolean("IS_PRIVATE"));
+//            cartridgeSubscription.setRepository(repository);
+//        }
+//
+//        //Cluster related data
+//        Cluster cluster = new Cluster();
+//        cluster.setId(resultSet.getInt("CLUSTER_ID"));
+//        cluster.setHostName(resultSet.getString("HOSTNAME"));
+//        cluster.setClusterDomain(resultSet.getString("DOMAIN"));
+//        cluster.setClusterSubDomain(resultSet.getString("SUBDOMAIN"));
+//        cluster.setMgtClusterDomain(resultSet.getString("MGT_DOMAIN"));
+//        cluster.setMgtClusterSubDomain(resultSet.getString("MGT_SUBDOMAIN"));
+//        cluster.setServiceStatus(resultSet.getString("SERVICE_STATUS"));
+//        cartridgeSubscription.setCluster(cluster);
+//
+//        //data cartridge specific information
+//        //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();
+//        Subscriber subscriber = new Subscriber(carbonContext.getUsername(), carbonContext.getTenantId(),
+//                carbonContext.getTenantDomain());
+//        cartridgeSubscription.setSubscriber(subscriber);
+//
+//        return cartridgeSubscription;
+//    }
+//
+//    @Override
+//    public List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId) throws PersistenceManagerException {
+//
+//        Connection connection = null;
+//        try {
+//            connection = StratosDBUtils.getConnection();
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to obtain a DB connection";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeConnection(connection);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
+//                "WHERE S.TENANT_ID=? AND S.STATE != 'UNSUBSCRIBED' " +
+//                "inner join REPOSITORY R on S.REPOSITORY_ID=R.REPOSITORY_ID " +
+//                "inner join DATA_CARTRIDGE D on S.DATA_CARTRIDGE_ID=D.DATA_CARTRIDGE_ID ";
+//
+//        PreparedStatement getSubscriptionsStatement = null;
+//        try {
+//            getSubscriptionsStatement = connection.prepareStatement(sqlQuery);
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed create a Prepared Statement for retreiving CartridgeSubscription";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        try {
+//            getSubscriptionsStatement.setInt(1, tenantId);
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement);
+//            throw new PersistenceManagerException(errorMsg, e);
+//        }
+//
+//        ResultSet resultSet = null;
+//
+//        try {
+//            resultSet = getSubscriptionsStatement.executeQuery();
+//
+//        } catch (SQLException e) {
+//            String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
+//            log.error(errorMsg);
+//            StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement, 

<TRUNCATED>

[5/5] git commit: registry based persistence

Posted by is...@apache.org.
registry based persistence


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

Branch: refs/heads/master
Commit: aebdb0879b017ab4b722a626521a46a22eaa4bff
Parents: 1c2f93c
Author: Isuru <is...@wso2.com>
Authored: Tue Dec 10 09:44:57 2013 +0530
Committer: Isuru <is...@wso2.com>
Committed: Tue Dec 10 09:44:57 2013 +0530

----------------------------------------------------------------------
 .../ClusterIdToCartridgeSubscriptionMap.java    |  70 ++++++++++
 .../adc/mgt/lookup/LookupDataHolder.java        | 116 +++++++++-------
 ...criptionAliasToCartridgeSubscriptionMap.java |  71 ++++++++++
 .../adc/mgt/persistence/PersistenceManager.java |  22 ++-
 .../RegistryBasedPersistenceManager.java        | 102 ++++++++++++--
 .../adc/mgt/registry/RegistryManager.java       | 138 +++++++++++++++++++
 .../adc/mgt/retriever/DataRetrievalManager.java |  89 +++++++-----
 .../stratos/adc/mgt/utils/Deserializer.java     |  52 +++++++
 .../stratos/adc/mgt/utils/Serializer.java       |  83 +++++++++++
 9 files changed, 642 insertions(+), 101 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/ClusterIdToCartridgeSubscriptionMap.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/ClusterIdToCartridgeSubscriptionMap.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/ClusterIdToCartridgeSubscriptionMap.java
new file mode 100644
index 0000000..864ffb2
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/ClusterIdToCartridgeSubscriptionMap.java
@@ -0,0 +1,70 @@
+/*
+ * 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.lookup;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ClusterIdToCartridgeSubscriptionMap implements Serializable {
+
+    private static final Log log = LogFactory.getLog(ClusterIdToCartridgeSubscriptionMap.class);
+
+    private Map<String, CartridgeSubscription> clusterItToCartridgeSubscrptionMap;
+
+    public ClusterIdToCartridgeSubscriptionMap () {
+        clusterItToCartridgeSubscrptionMap = new HashMap<String, CartridgeSubscription>();
+    }
+
+    public Map<String, CartridgeSubscription> getSubscriptionAliasToCartridgeSubscriptionMap() {
+        return clusterItToCartridgeSubscrptionMap;
+    }
+
+    public void addSubscription(String clusterId, CartridgeSubscription cartridgeSubscription) {
+
+        if(clusterItToCartridgeSubscrptionMap.put(clusterId, cartridgeSubscription) != null) {
+            log.info("Overwrote the previous CartridgeSubscription value for cluster " + clusterId);
+        }
+    }
+
+    public boolean isEmpty () {
+        return clusterItToCartridgeSubscrptionMap.isEmpty();
+    }
+
+    public void removeSubscription (String clusterId) {
+
+        if(clusterItToCartridgeSubscrptionMap.remove(clusterId) == null) {
+            log.info("No CartridgeSubscription entry found for cluster " + clusterId);
+        }
+    }
+
+    public CartridgeSubscription getCartridgeSubscription (String clusterId) {
+        return clusterItToCartridgeSubscrptionMap.get(clusterId);
+    }
+
+    public Collection<CartridgeSubscription> getCartridgeSubscriptions () {
+        return clusterItToCartridgeSubscrptionMap.values();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java
index f283753..5e704db 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java
@@ -23,16 +23,20 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
 
-import java.util.*;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
-public class LookupDataHolder {
+public class LookupDataHolder implements Serializable {
 
     private static final Log log = LogFactory.getLog(LookupDataHolder.class);
 
     private Map<Integer, SubscriptionAliasToCartridgeSubscriptionMap> tenantIdToCartridgeSubscriptionCache;
-    private Map<String, CartridgeSubscription> clusterItToCartridgeSubscrptionMatch;
+    //private Map<String, CartridgeSubscription> clusterItToCartridgeSubscrptionMap;
     //private static LookupDataHolder lookupDataHolder;
+    private ClusterIdToCartridgeSubscriptionMap clusterIdToCartridgeSubscriptionMap;
 
     //locks
     private static volatile ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
@@ -41,7 +45,8 @@ public class LookupDataHolder {
 
     public LookupDataHolder () {
         tenantIdToCartridgeSubscriptionCache = new HashMap<Integer, SubscriptionAliasToCartridgeSubscriptionMap>();
-        clusterItToCartridgeSubscrptionMatch = new HashMap<String, CartridgeSubscription>();
+        //clusterItToCartridgeSubscrptionMap = new HashMap<String, CartridgeSubscription>();
+        clusterIdToCartridgeSubscriptionMap = new ClusterIdToCartridgeSubscriptionMap();
     }
 
     /*public static LookupDataHolder getInstance ()  {
@@ -77,10 +82,31 @@ public class LookupDataHolder {
                 aliasToSubscriptionMap.addSubscription(subscriptionAlias, cartridgeSubscription);
             }
 
-            if(clusterItToCartridgeSubscrptionMatch.put(cartridgeSubscription.getClusterDomain(), cartridgeSubscription)
-                    != null) {
-                log.info("Overwrote the CartridgeSubscription value for cluster Id " +
-                        cartridgeSubscription.getClusterDomain());
+            clusterIdToCartridgeSubscriptionMap.addSubscription(cartridgeSubscription.getClusterDomain(), cartridgeSubscription);
+
+        } finally {
+            writeLock.unlock();
+        }
+    }
+
+    public void addCartridgeSubscriptions (int tenantId, SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap) {
+
+    }
+
+    private void addSubscriptions (int tenantId, SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap) {
+
+        writeLock.lock();
+
+        try {
+            if(tenantIdToCartridgeSubscriptionCache.put(tenantId, aliasToSubscriptionMap) != null) {
+                log.info("Existing SubscriptionAliasToCartridgeSubscriptionMap instance overwritten for tenant " +
+                        tenantId);
+            }
+
+            Collection<CartridgeSubscription> cartridgeSubscriptions = aliasToSubscriptionMap.getCartridgeSubscriptions();
+            for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) {
+                clusterIdToCartridgeSubscriptionMap.addSubscription(cartridgeSubscription.getCluster().getClusterDomain(),
+                        cartridgeSubscription);
             }
 
         } finally {
@@ -110,8 +136,37 @@ public class LookupDataHolder {
                 log.info("No SubscriptionAliasToCartridgeSubscriptionMap entry found for tenant Id " + tenantId);
             }
 
-            if(clusterItToCartridgeSubscrptionMatch.remove(clusterId) != null) {
-                log.info("No CartridgeSubscription entry found for cluster Id " + clusterId);
+            clusterIdToCartridgeSubscriptionMap.removeSubscription(clusterId);
+
+        } finally {
+            writeLock.unlock();
+        }
+    }
+
+    public void removeCartridgeSubscriptions (int tenantId) {
+        removeSubscriptions(tenantId);
+    }
+
+    private void removeSubscriptions (int tenantId) {
+
+        writeLock.lock();
+
+        try {
+            SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap = tenantIdToCartridgeSubscriptionCache.
+                    get(tenantId);
+
+            if(aliasToSubscriptionMap != null) {
+                //remove the subscriptions referenced by cluster domain for this tenant
+                Collection<CartridgeSubscription> cartridgeSubscriptions = aliasToSubscriptionMap.getCartridgeSubscriptions();
+
+                for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) {
+                    clusterIdToCartridgeSubscriptionMap.removeSubscription(cartridgeSubscription.getClusterDomain());
+                }
+                //remove the map for this tenant ID
+                tenantIdToCartridgeSubscriptionCache.remove(tenantId);
+
+            } else {
+                log.info("No SubscriptionAliasToCartridgeSubscriptionMap entry found for tenant Id " + tenantId);
             }
 
         } finally {
@@ -154,7 +209,7 @@ public class LookupDataHolder {
 
         readLock.lock();
         try {
-            return clusterItToCartridgeSubscrptionMatch.get(clusterId);
+            return clusterIdToCartridgeSubscriptionMap.getCartridgeSubscription(clusterId);
 
         } finally {
             readLock.unlock();
@@ -196,43 +251,4 @@ public class LookupDataHolder {
              readLock.unlock();
         }
     }
-
-    private class SubscriptionAliasToCartridgeSubscriptionMap {
-
-        private Map<String, CartridgeSubscription> subscriptionAliasToCartridgeSubscriptionMap;
-
-        public SubscriptionAliasToCartridgeSubscriptionMap () {
-            subscriptionAliasToCartridgeSubscriptionMap = new HashMap<String, CartridgeSubscription>();
-        }
-
-        public Map<String, CartridgeSubscription> getSubscriptionAliasToCartridgeSubscriptionMap() {
-            return subscriptionAliasToCartridgeSubscriptionMap;
-        }
-
-        public void addSubscription(String subscriptionAlias, CartridgeSubscription cartridgeSubscription) {
-
-            if(subscriptionAliasToCartridgeSubscriptionMap.put(subscriptionAlias, cartridgeSubscription) != null) {
-                log.info("Overwrote the previous CartridgeSubscription value for subscription alias" + subscriptionAlias);
-            }
-        }
-
-        public boolean isEmpty () {
-            return subscriptionAliasToCartridgeSubscriptionMap.isEmpty();
-        }
-
-        public void removeSubscription (String subscriptionAlias) {
-
-            if(subscriptionAliasToCartridgeSubscriptionMap.remove(subscriptionAlias) == null) {
-                log.info("No CartridgeSubscription entry found for subscription alias " + subscriptionAlias);
-            }
-        }
-
-        public CartridgeSubscription getCartridgeSubscription (String cartridgeSubscriptionAlias) {
-            return subscriptionAliasToCartridgeSubscriptionMap.get(cartridgeSubscriptionAlias);
-        }
-
-        public Collection<CartridgeSubscription> getCartridgeSubscriptions () {
-            return subscriptionAliasToCartridgeSubscriptionMap.values();
-        }
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionAliasToCartridgeSubscriptionMap.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionAliasToCartridgeSubscriptionMap.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionAliasToCartridgeSubscriptionMap.java
new file mode 100644
index 0000000..56e9d7d
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionAliasToCartridgeSubscriptionMap.java
@@ -0,0 +1,71 @@
+/*
+ * 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.lookup;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+public class SubscriptionAliasToCartridgeSubscriptionMap implements Serializable {
+
+    private static final Log log = LogFactory.getLog(SubscriptionAliasToCartridgeSubscriptionMap.class);
+
+
+    private Map<String, CartridgeSubscription> subscriptionAliasToCartridgeSubscriptionMap;
+
+    public SubscriptionAliasToCartridgeSubscriptionMap () {
+        subscriptionAliasToCartridgeSubscriptionMap = new HashMap<String, CartridgeSubscription>();
+    }
+
+    public Map<String, CartridgeSubscription> getSubscriptionAliasToCartridgeSubscriptionMap() {
+        return subscriptionAliasToCartridgeSubscriptionMap;
+    }
+
+    public void addSubscription(String subscriptionAlias, CartridgeSubscription cartridgeSubscription) {
+
+        if(subscriptionAliasToCartridgeSubscriptionMap.put(subscriptionAlias, cartridgeSubscription) != null) {
+            log.info("Overwrote the previous CartridgeSubscription value for subscription alias" + subscriptionAlias);
+        }
+    }
+
+    public boolean isEmpty () {
+        return subscriptionAliasToCartridgeSubscriptionMap.isEmpty();
+    }
+
+    public void removeSubscription (String subscriptionAlias) {
+
+        if(subscriptionAliasToCartridgeSubscriptionMap.remove(subscriptionAlias) == null) {
+            log.info("No CartridgeSubscription entry found for subscription alias " + subscriptionAlias);
+        }
+    }
+
+    public CartridgeSubscription getCartridgeSubscription (String cartridgeSubscriptionAlias) {
+        return subscriptionAliasToCartridgeSubscriptionMap.get(cartridgeSubscriptionAlias);
+    }
+
+    public Collection<CartridgeSubscription> getCartridgeSubscriptions () {
+        return subscriptionAliasToCartridgeSubscriptionMap.values();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
index 1e8936a..b948e84 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
@@ -20,13 +20,25 @@
 package org.apache.stratos.adc.mgt.persistence;
 
 import org.apache.stratos.adc.mgt.exception.PersistenceManagerException;
-import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
-
-import java.util.List;
+import org.apache.stratos.adc.mgt.lookup.ClusterIdToCartridgeSubscriptionMap;
+import org.apache.stratos.adc.mgt.lookup.SubscriptionAliasToCartridgeSubscriptionMap;
 
 public abstract class PersistenceManager {
 
-    public abstract void persistCartridgeSubscription (CartridgeSubscription cartridgeSubscription)
+    public abstract void persistCartridgeSubscriptions (int tenantId, SubscriptionAliasToCartridgeSubscriptionMap
+                                                                aliasToSubscriptionMap)
+            throws PersistenceManagerException;
+
+    public abstract SubscriptionAliasToCartridgeSubscriptionMap retrieveCartridgeSubscriptions (int tenantId)
+            throws PersistenceManagerException;
+
+    public abstract void persistCartridgeSubscriptions (String clusterId, ClusterIdToCartridgeSubscriptionMap clusterIdToSubscriptionMap)
+            throws PersistenceManagerException;
+
+    public abstract ClusterIdToCartridgeSubscriptionMap retrieveCartridgeSubscriptions (String clusterId)
+            throws PersistenceManagerException;
+
+    /*public abstract void persistCartridgeSubscription (CartridgeSubscription cartridgeSubscription)
             throws PersistenceManagerException;
 
     public abstract void removeCartridgeSubscription (int tenantId, String alias)
@@ -41,7 +53,7 @@ public abstract class PersistenceManager {
     public abstract CartridgeSubscription getCartridgeSubscription (String clusterDomain)
             throws PersistenceManagerException;
 
-    /*public abstract List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId, String cartridgeType)
+    public abstract List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId, String cartridgeType)
             throws PersistenceManagerException;
 
     public abstract Repository getRepository (int tenantId, String alias)

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java
index e69585c..c796767 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java
@@ -19,35 +19,107 @@
 
 package org.apache.stratos.adc.mgt.persistence;
 
+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.PersistenceManagerException;
-import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
-
-import java.util.List;
+import org.apache.stratos.adc.mgt.lookup.ClusterIdToCartridgeSubscriptionMap;
+import org.apache.stratos.adc.mgt.lookup.SubscriptionAliasToCartridgeSubscriptionMap;
+import org.apache.stratos.adc.mgt.registry.RegistryManager;
+import org.apache.stratos.adc.mgt.utils.Deserializer;
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
 
 public class RegistryBasedPersistenceManager extends PersistenceManager {
 
-    @Override
-    public void persistCartridgeSubscription(CartridgeSubscription cartridgeSubscription) throws PersistenceManagerException {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
+    private static final Log log = LogFactory.getLog(RegistryBasedPersistenceManager.class);
 
     @Override
-    public void removeCartridgeSubscription(int tenantId, String alias) throws PersistenceManagerException {
-        //To change body of implemented methods use File | Settings | File Templates.
+    public void persistCartridgeSubscriptions(int tenantId, SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap) throws PersistenceManagerException {
+
+        try {
+            RegistryManager.getInstance().persistAliastoSubscriptionMap(tenantId, aliasToSubscriptionMap);
+
+        } catch (RegistryException e) {
+            throw new PersistenceManagerException(e);
+
+        } catch (ADCException e) {
+            throw new PersistenceManagerException(e);
+        }
     }
 
     @Override
-    public CartridgeSubscription getCartridgeSubscription(int tenantId, String alias) throws PersistenceManagerException {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    public SubscriptionAliasToCartridgeSubscriptionMap retrieveCartridgeSubscriptions(int tenantId) throws PersistenceManagerException {
+
+        Object aliasToSubscriptionMapObj;
+
+        try {
+            aliasToSubscriptionMapObj = RegistryManager.getInstance().getAliastoSubscriptionMap(tenantId);
+
+        } catch (ADCException e) {
+            throw new PersistenceManagerException(e);
+        }
+
+        if (aliasToSubscriptionMapObj != null) {
+            try {
+                Object dataObj = Deserializer
+                        .deserializeFromByteArray((byte[]) aliasToSubscriptionMapObj);
+                if(dataObj instanceof SubscriptionAliasToCartridgeSubscriptionMap) {
+                    return (SubscriptionAliasToCartridgeSubscriptionMap) dataObj;
+                } else {
+                    return null;
+                }
+
+            } catch (Exception e) {
+                String errorMsg = "Unable to retrieve data from Registry. Hence, any historical data will not get reflected.";
+                log.warn(errorMsg, e);
+            }
+        }
+
+        return null;
     }
 
     @Override
-    public List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId) throws PersistenceManagerException {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    public void persistCartridgeSubscriptions(String clusterId, ClusterIdToCartridgeSubscriptionMap clusterIdToSubscriptionMap) throws PersistenceManagerException {
+
+        try {
+            RegistryManager.getInstance().persistClusterIdToSubscriptionMap(clusterIdToSubscriptionMap);
+
+        } catch (RegistryException e) {
+            throw new PersistenceManagerException(e);
+
+        } catch (ADCException e) {
+            throw new PersistenceManagerException(e);
+        }
     }
 
     @Override
-    public CartridgeSubscription getCartridgeSubscription(String clusterDomain) throws PersistenceManagerException {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    public ClusterIdToCartridgeSubscriptionMap retrieveCartridgeSubscriptions(String clusterId) throws PersistenceManagerException {
+
+        Object clusterIdToSubscriptionMapObj;
+
+        try {
+            clusterIdToSubscriptionMapObj = RegistryManager.getInstance().getClusterIdtoSubscriptionMap();
+
+        } catch (ADCException e) {
+            throw new PersistenceManagerException(e);
+        }
+
+        if (clusterIdToSubscriptionMapObj != null) {
+            try {
+                Object dataObj = Deserializer
+                        .deserializeFromByteArray((byte[]) clusterIdToSubscriptionMapObj);
+                if(dataObj instanceof ClusterIdToCartridgeSubscriptionMap) {
+                    return (ClusterIdToCartridgeSubscriptionMap) dataObj;
+                } else {
+                    return null;
+                }
+
+            } catch (Exception e) {
+                String errorMsg = "Unable to retrieve data from Registry. Hence, any historical data will not get reflected.";
+                log.warn(errorMsg, e);
+            }
+        }
+
+        return null;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/registry/RegistryManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/registry/RegistryManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/registry/RegistryManager.java
new file mode 100644
index 0000000..da7fdec
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/registry/RegistryManager.java
@@ -0,0 +1,138 @@
+/*
+ * 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.registry;
+
+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.internal.DataHolder;
+import org.apache.stratos.adc.mgt.lookup.ClusterIdToCartridgeSubscriptionMap;
+import org.apache.stratos.adc.mgt.lookup.SubscriptionAliasToCartridgeSubscriptionMap;
+import org.apache.stratos.adc.mgt.utils.Serializer;
+import org.wso2.carbon.registry.core.Registry;
+import org.wso2.carbon.registry.core.Resource;
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
+import org.wso2.carbon.registry.core.exceptions.ResourceNotFoundException;
+
+public class RegistryManager {
+
+    private final static Log log = LogFactory.getLog(RegistryManager.class);
+    private final static String STRATOS_MANAGER_REOSURCE = "/stratos.manager";
+    private static Registry registryService;
+    private static RegistryManager registryManager;
+
+    public static RegistryManager getInstance() {
+
+        registryService = DataHolder.getRegistry();
+
+        if (registryManager == null) {
+            synchronized (RegistryManager.class) {
+                if (registryService == null) {
+                    return registryManager;
+                }
+                registryManager = new RegistryManager();
+            }
+        }
+        return registryManager;
+    }
+
+    private RegistryManager() {
+        try {
+            if (!registryService.resourceExists(STRATOS_MANAGER_REOSURCE)) {
+                registryService.put(STRATOS_MANAGER_REOSURCE, registryService.newCollection());
+            }
+        } catch (RegistryException e) {
+            String errorMsg = "Failed to create the registry resource " + STRATOS_MANAGER_REOSURCE;
+            log.error(errorMsg, e);;
+        }
+    }
+
+    public void persistAliastoSubscriptionMap (int tenantId,
+                                               SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap)
+            throws RegistryException, ADCException {
+
+        try {
+            registryService.beginTransaction();
+            Resource nodeResource = registryService.newResource();
+            nodeResource.setContent(Serializer.serializeAliasToSubscriptionMapToByteArray(aliasToSubscriptionMap));
+            registryService.put(STRATOS_MANAGER_REOSURCE + "/subscription/tenant" + Integer.toString(tenantId),
+                    nodeResource);
+            registryService.commitTransaction();
+
+        } catch (Exception e) {
+            String errorMsg = "Failed to persist SubscriptionAliasToCartridgeSubscriptionMap in registry.";
+            registryService.rollbackTransaction();
+            log.error(errorMsg, e);
+            throw new ADCException(errorMsg, e);
+        }
+    }
+
+    public Object getAliastoSubscriptionMap (int tenantId) throws ADCException {
+
+        try {
+            Resource resource = registryService.get(STRATOS_MANAGER_REOSURCE + "/subscription/tenant" +
+                    Integer.toString(tenantId));
+            return resource.getContent();
+
+        } catch (ResourceNotFoundException ignore) {
+            return null;
+
+        } catch (RegistryException e) {
+            String errorMsg = "Failed to retrieve SubscriptionAliasToCartridgeSubscriptionMap from registry.";
+            log.error(errorMsg, e);
+            throw new ADCException(errorMsg, e);
+        }
+    }
+
+    public void persistClusterIdToSubscriptionMap (ClusterIdToCartridgeSubscriptionMap clusterIdToSubscriptionMap)
+            throws RegistryException, ADCException {
+
+        try {
+            registryService.beginTransaction();
+            Resource nodeResource = registryService.newResource();
+            nodeResource.setContent(Serializer.serializeClusterIdToSubscriptionMapToByteArray(clusterIdToSubscriptionMap));
+            registryService.put(STRATOS_MANAGER_REOSURCE + "/subscription/cluster",
+                    nodeResource);
+            registryService.commitTransaction();
+
+        } catch (Exception e) {
+            String errorMsg = "Failed to persist ClusterIdToCartridgeSubscriptionMap in registry.";
+            registryService.rollbackTransaction();
+            log.error(errorMsg, e);
+            throw new ADCException(errorMsg, e);
+        }
+    }
+
+    public Object getClusterIdtoSubscriptionMap () throws ADCException {
+
+        try {
+            Resource resource = registryService.get(STRATOS_MANAGER_REOSURCE + "/subscription/cluster");
+            return resource.getContent();
+
+        } catch (ResourceNotFoundException ignore) {
+            return null;
+
+        } catch (RegistryException e) {
+            String errorMsg = "Failed to retrieve ClusterIdToCartridgeSubscriptionMap from registry.";
+            log.error(errorMsg, e);
+            throw new ADCException(errorMsg, e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataRetrievalManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataRetrievalManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataRetrievalManager.java
index 11093d3..27022c5 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataRetrievalManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataRetrievalManager.java
@@ -19,8 +19,11 @@
 
 package org.apache.stratos.adc.mgt.retriever;
 
+import org.apache.stratos.adc.mgt.exception.ADCException;
 import org.apache.stratos.adc.mgt.exception.PersistenceManagerException;
+import org.apache.stratos.adc.mgt.lookup.ClusterIdToCartridgeSubscriptionMap;
 import org.apache.stratos.adc.mgt.lookup.LookupDataHolder;
+import org.apache.stratos.adc.mgt.lookup.SubscriptionAliasToCartridgeSubscriptionMap;
 import org.apache.stratos.adc.mgt.persistence.PersistenceManager;
 import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
 import org.jgroups.logging.Log;
@@ -46,46 +49,45 @@ public class DataRetrievalManager {
         cartridgeSubscriptionUpdateThreadPool = Executors.newCachedThreadPool();
     }
 
-    public CartridgeSubscription getCartridgeSubscription (int tenantId, String subscriptionAlias)
-            throws PersistenceManagerException {
+    public CartridgeSubscription getCartridgeSubscriptionByAlias (int tenantId, String subscriptionAlias)
+            throws PersistenceManagerException, ADCException {
 
         CartridgeSubscription cartridgeSubscription = null;
 
         if(lookupDataHolder != null) {
-            //look in the local cache
-            cartridgeSubscription = lookupDataHolder.getCartridgeSubscription(tenantId, subscriptionAlias);
+            cartridgeSubscription = lookupDataHolder.getCartridgeSubscription(subscriptionAlias);
         }
-        //if not found in the local cache, look in the Persistence Manager
-        if (cartridgeSubscription == null) {
-            persistenceManager.getCartridgeSubscription(tenantId, subscriptionAlias);
-        } else {
-            if(log.isDebugEnabled()) {
-                log.debug("Cartridge subscription entry for tenant Id " + tenantId + ", subscription alias " +
-                        subscriptionAlias + " found in the local cache");
+        else {
+            //look in the persistence manager
+            SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap =
+                    persistenceManager.retrieveCartridgeSubscriptions(tenantId);
+
+            if(aliasToSubscriptionMap != null) {
+                cartridgeSubscription = aliasToSubscriptionMap.getCartridgeSubscription(subscriptionAlias);
+                populateLookupDataHolder(aliasToSubscriptionMap);
             }
         }
 
         return cartridgeSubscription;
     }
 
-    public CartridgeSubscription getCartridgeSubscription (String clusterId)
-            throws PersistenceManagerException {
+    public CartridgeSubscription getCartridgeSubscriptionByClusterId (String clusterId)
+            throws PersistenceManagerException, ADCException {
 
         CartridgeSubscription cartridgeSubscription = null;
 
         if(lookupDataHolder != null) {
-            //look in the local cache
             cartridgeSubscription = lookupDataHolder.getCartridgeSubscription(clusterId);
         }
-        //if not found in the local cache, look in the Persistence Manager
-        if (cartridgeSubscription == null) {
-            persistenceManager.getCartridgeSubscription(clusterId);
-
-        } else {
-            if(log.isDebugEnabled()) {
-                log.debug("Cartridge subscription entry for cluster domain " + clusterId +
-                        " found in the local cache");
+        else {
+            //look in the persistence manager
+            ClusterIdToCartridgeSubscriptionMap clusterIdToSubscriptionMap =
+                    persistenceManager.retrieveCartridgeSubscriptions(clusterId);
+            if(clusterIdToSubscriptionMap != null) {
+                cartridgeSubscription = clusterIdToSubscriptionMap.getCartridgeSubscription(clusterId);
+                populateLookupDataHolder(clusterIdToSubscriptionMap);
             }
+
         }
 
         return cartridgeSubscription;
@@ -101,7 +103,10 @@ public class DataRetrievalManager {
         }
         //if not found in the local cache, look in the Persistence Manager
         if (cartridgeSubscriptionCollection == null) {
-            persistenceManager.getCartridgeSubscriptions(tenantId);
+            SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap = persistenceManager.
+                    retrieveCartridgeSubscriptions(tenantId);
+            //populate the LookupDataHolder
+            populateLookupDataHolder(aliasToSubscriptionMap);
 
         } else {
             if(log.isDebugEnabled()) {
@@ -118,29 +123,51 @@ public class DataRetrievalManager {
         return cartridgeSubscriptionList;
     }
 
-    public void putCartridgeSubscription (CartridgeSubscription cartridgeSubscription) {
+    private void populateLookupDataHolder (SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap) {
+
+        //populate the cache
+        Collection<CartridgeSubscription> cartridgeSubscriptions = aliasToSubscriptionMap.getCartridgeSubscriptions();
+        for (CartridgeSubscription subscription : cartridgeSubscriptions) {
+            lookupDataHolder.addCartridgeSubscription(subscription.getSubscriber().getTenantId(),
+                    subscription.getAlias(),
+                    subscription);
+        }
+    }
+
+    private void populateLookupDataHolder (ClusterIdToCartridgeSubscriptionMap clusterIdToSubscriptionMap) {
 
-        cartridgeSubscriptionUpdateThreadPool.submit(new CartridgeSubscriptionUpdater(cartridgeSubscription,
+        //populate the cache
+        Collection<CartridgeSubscription> cartridgeSubscriptions = clusterIdToSubscriptionMap.getCartridgeSubscriptions();
+        for (CartridgeSubscription subscription : cartridgeSubscriptions) {
+            lookupDataHolder.addCartridgeSubscription(subscription.getSubscriber().getTenantId(),
+                    subscription.getAlias(),
+                    subscription);
+        }
+    }
+
+    public void putCartridgeSubscriptions (SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap) {
+
+        cartridgeSubscriptionUpdateThreadPool.submit(new CartridgeSubscriptionUpdater(aliasToSubscriptionMap,
                 lookupDataHolder, persistenceManager));
     }
 
     private class CartridgeSubscriptionUpdater implements Runnable {
 
-        CartridgeSubscription cartridgeSubscription;
+        SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap;
         LookupDataHolder lookupDataHolder;
         PersistenceManager persistenceManager;
 
-        public CartridgeSubscriptionUpdater (CartridgeSubscription cartridgeSubscription, LookupDataHolder
-                lookupDataHolder, PersistenceManager persistenceManager) {
+        public CartridgeSubscriptionUpdater (SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap,
+                                             LookupDataHolder lookupDataHolder, PersistenceManager persistenceManager) {
 
-            this.cartridgeSubscription = cartridgeSubscription;
+            this.aliasToSubscriptionMap = aliasToSubscriptionMap;
             this.lookupDataHolder = lookupDataHolder;
             this.persistenceManager = persistenceManager;
         }
 
         public void run() {
 
-            if(lookupDataHolder != null) {
+            /*if(lookupDataHolder != null) {
                 lookupDataHolder.addCartridgeSubscription(cartridgeSubscription.getSubscriber().getTenantId(),
                         cartridgeSubscription.getAlias(), cartridgeSubscription);
             }
@@ -150,7 +177,7 @@ public class DataRetrievalManager {
             } catch (PersistenceManagerException e) {
                 String errorMsg = "Error in persisting Cartridge Subscription instance";
                 log.error(errorMsg, e);
-            }
+            }*/
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Deserializer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Deserializer.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Deserializer.java
new file mode 100644
index 0000000..95edaf1
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Deserializer.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.adc.mgt.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.ObjectInput;
+import java.io.ObjectInputStream;
+
+public class Deserializer {
+
+
+    /**
+     * Deserialize a byte array and retrieve the object.
+     * @param bytes bytes to be deserialized
+     * @return the deserialized {@link Object}
+     * @throws Exception if the deserialization is failed.
+     */
+    public static Object deserializeFromByteArray(byte[] bytes) throws Exception {
+
+        ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
+        ObjectInput in = null;
+        try {
+            in = new ObjectInputStream(bis);
+            Object o = in.readObject();
+
+            return o;
+
+        } finally {
+            bis.close();
+            if (in != null) {
+                in.close();
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Serializer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Serializer.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Serializer.java
new file mode 100644
index 0000000..b0b0b77
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Serializer.java
@@ -0,0 +1,83 @@
+/*
+ * 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.utils;
+
+import org.apache.stratos.adc.mgt.lookup.ClusterIdToCartridgeSubscriptionMap;
+import org.apache.stratos.adc.mgt.lookup.SubscriptionAliasToCartridgeSubscriptionMap;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+
+public class Serializer {
+
+    /**
+     * Serialize a SubscriptionAliasToCartridgeSubscriptionMap to a byte array.
+     * @param aliasToSubscriptionMap
+     * @return byte[]
+     * @throws java.io.IOException
+     */
+    public static byte[] serializeAliasToSubscriptionMapToByteArray (SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap)
+            throws IOException {
+
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        ObjectOutput out = null;
+        try {
+            out = new ObjectOutputStream(bos);
+            out.writeObject(aliasToSubscriptionMap);
+
+            return bos.toByteArray();
+
+        } finally {
+            if (out != null) {
+                out.close();
+            }
+            bos.close();
+        }
+
+    }
+
+    /**
+     * Serialize a ClusterIdToCartridgeSubscriptionMap to a byte array.
+     * @param clusterIdToSubscriptionMap
+     * @return byte[]
+     * @throws java.io.IOException
+     */
+    public static byte[] serializeClusterIdToSubscriptionMapToByteArray (ClusterIdToCartridgeSubscriptionMap clusterIdToSubscriptionMap)
+            throws IOException {
+
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        ObjectOutput out = null;
+        try {
+            out = new ObjectOutputStream(bos);
+            out.writeObject(clusterIdToSubscriptionMap);
+
+            return bos.toByteArray();
+
+        } finally {
+            if (out != null) {
+                out.close();
+            }
+            bos.close();
+        }
+
+    }
+}