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 <[email protected]>
Authored: Tue Dec 10 09:44:57 2013 +0530
Committer: Isuru <[email protected]>
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();
+        }
+
+    }
+}

Reply via email to