You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2014/12/02 02:53:00 UTC

[1/2] stratos git commit: Fixing distributed lock object serialization issue and adding unit tests for verifying clustered mode

Repository: stratos
Updated Branches:
  refs/heads/master e29ce9d3e -> fdb84e7c1


Fixing distributed lock object serialization issue and adding unit tests for verifying clustered mode


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

Branch: refs/heads/master
Commit: a2b64fa9421e71f007fbb8712bd066342cbb24a7
Parents: e29ce9d
Author: Imesh Gunaratne <im...@apache.org>
Authored: Mon Dec 1 21:04:12 2014 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Tue Dec 2 07:20:42 2014 +0530

----------------------------------------------------------------------
 .../clustering/DistributedObjectProvider.java   | 24 ++++++---
 .../test/DistributedObjectProviderTest.java     | 57 ++++++++++++++++++--
 2 files changed, 69 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/a2b64fa9/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/clustering/DistributedObjectProvider.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/clustering/DistributedObjectProvider.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/clustering/DistributedObjectProvider.java
index 428d3da..328f67d 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/clustering/DistributedObjectProvider.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/clustering/DistributedObjectProvider.java
@@ -58,6 +58,10 @@ public class DistributedObjectProvider implements Serializable {
     }
 
     private void releaseDistributedLock(ILock lock) {
+        if(lock == null) {
+            return;
+        }
+
         if (log.isDebugEnabled()) {
             log.debug(String.format("Releasing distributed lock for %s...", lock.getKey()));
         }
@@ -105,8 +109,9 @@ public class DistributedObjectProvider implements Serializable {
          if(clustered) {
              ILock lock = null;
              try {
-                 lock = acquireDistributedLock(map);
-                 ((IMap)map).set(key, value);
+                 IMap imap = (IMap) map;
+                 lock = acquireDistributedLock(imap.getName());
+                 imap.set(key, value);
              } finally {
                  releaseDistributedLock(lock);
              }
@@ -124,8 +129,9 @@ public class DistributedObjectProvider implements Serializable {
         if(clustered) {
             ILock lock = null;
             try {
-                lock = acquireDistributedLock(map);
-                ((IMap)map).delete(key);
+                IMap imap = (IMap) map;
+                lock = acquireDistributedLock(imap.getName());
+                imap.delete(key);
             } finally {
                 releaseDistributedLock(lock);
             }
@@ -143,8 +149,9 @@ public class DistributedObjectProvider implements Serializable {
         if(clustered) {
             ILock lock = null;
             try {
-                lock = acquireDistributedLock(list);
-                ((IList)list).add(value);
+                IList ilist = (IList) list;
+                lock = acquireDistributedLock(ilist.getName());
+                ilist.add(value);
             } finally {
                 releaseDistributedLock(lock);
             }
@@ -162,8 +169,9 @@ public class DistributedObjectProvider implements Serializable {
         if(clustered) {
             ILock lock = null;
             try {
-                lock = acquireDistributedLock(list);
-                ((IList)list).remove(value);
+                IList ilist = (IList) list;
+                lock = acquireDistributedLock(ilist.getName());
+                ilist.remove(value);
             } finally {
                 releaseDistributedLock(lock);
             }

http://git-wip-us.apache.org/repos/asf/stratos/blob/a2b64fa9/components/org.apache.stratos.common/src/test/java/org/apache/stratos/common/test/DistributedObjectProviderTest.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/test/java/org/apache/stratos/common/test/DistributedObjectProviderTest.java b/components/org.apache.stratos.common/src/test/java/org/apache/stratos/common/test/DistributedObjectProviderTest.java
index 048680d..9d31923 100644
--- a/components/org.apache.stratos.common/src/test/java/org/apache/stratos/common/test/DistributedObjectProviderTest.java
+++ b/components/org.apache.stratos.common/src/test/java/org/apache/stratos/common/test/DistributedObjectProviderTest.java
@@ -19,7 +19,10 @@
 
 package org.apache.stratos.common.test;
 
+import com.hazelcast.core.Hazelcast;
+import com.hazelcast.core.HazelcastInstance;
 import org.apache.stratos.common.clustering.DistributedObjectProvider;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import java.util.List;
@@ -30,13 +33,32 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+/**
+ * Distributed object provider unit tests.
+ */
 public class DistributedObjectProviderTest {
 
+    private static HazelcastInstance hazelcastInstance;
+
+    @BeforeClass
+    public static void setUpClass() {
+        hazelcastInstance = Hazelcast.newHazelcastInstance();
+    }
+
     @Test
     public void testPutToMapLocal() {
         DistributedObjectProvider provider = new DistributedObjectProvider(false, null);
-        Map<String, String> map = provider.getMap("MAP1");
+        testPutToMap(provider);
+    }
+
+    @Test
+    public void testPutToMapDistributed() {
+        DistributedObjectProvider provider = new DistributedObjectProvider(true, hazelcastInstance);
+        testPutToMap(provider);
+    }
 
+    private void testPutToMap(DistributedObjectProvider provider) {
+        Map<String, String> map = provider.getMap("MAP1");
         provider.putToMap(map, "key1", "value1");
         assertEquals(map.get("key1"), "value1");
     }
@@ -44,8 +66,17 @@ public class DistributedObjectProviderTest {
     @Test
     public void testRemoveFromMapLocal() {
         DistributedObjectProvider provider = new DistributedObjectProvider(false, null);
-        Map<String, String> map = provider.getMap("MAP1");
+        testRemoveFromMap(provider);
+    }
+
+    @Test
+    public void testRemoveFromMapDistributed() {
+        DistributedObjectProvider provider = new DistributedObjectProvider(true, hazelcastInstance);
+        testRemoveFromMap(provider);
+    }
 
+    private void testRemoveFromMap(DistributedObjectProvider provider) {
+        Map<String, String> map = provider.getMap("MAP1");
         provider.putToMap(map, "key1", "value1");
         assertEquals(map.get("key1"), "value1");
         provider.removeFromMap(map, "key1");
@@ -55,8 +86,17 @@ public class DistributedObjectProviderTest {
     @Test
     public void testAddToListLocal() {
         DistributedObjectProvider provider = new DistributedObjectProvider(false, null);
-        List list = provider.getList("LIST1");
+        testAddToList(provider);
+    }
+
+    @Test
+    public void testAddToListDistributed() {
+        DistributedObjectProvider provider = new DistributedObjectProvider(true, hazelcastInstance);
+        testAddToList(provider);
+    }
 
+    private void testAddToList(DistributedObjectProvider provider) {
+        List list = provider.getList("LIST1");
         String value1 = "value1";
         provider.addToList(list, value1);
         assertTrue(list.contains(value1));
@@ -65,8 +105,17 @@ public class DistributedObjectProviderTest {
     @Test
     public void testRemoveFromListLocal() {
         DistributedObjectProvider provider = new DistributedObjectProvider(false, null);
-        List list = provider.getList("LIST1");
+        testRemovalFromList(provider);
+    }
 
+    @Test
+    public void testRemoveFromListDistributed() {
+        DistributedObjectProvider provider = new DistributedObjectProvider(true, hazelcastInstance);
+        testRemovalFromList(provider);
+    }
+
+    private void testRemovalFromList(DistributedObjectProvider provider) {
+        List list = provider.getList("LIST1");
         String value1 = "value1";
         provider.addToList(list, value1);
         assertTrue(list.contains(value1));


[2/2] stratos git commit: Converting distributed object provider to an osgi service

Posted by im...@apache.org.
Converting distributed object provider to an osgi service


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

Branch: refs/heads/master
Commit: fdb84e7c13d6d4e994185d8b84d0f65c97497864
Parents: a2b64fa
Author: Imesh Gunaratne <im...@apache.org>
Authored: Tue Dec 2 07:08:45 2014 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Tue Dec 2 07:21:14 2014 +0530

----------------------------------------------------------------------
 .../context/CloudControllerContext.java         |   5 +-
 .../CloudControllerServiceComponent.java        |  26 +--
 .../internal/ServiceReferenceHolder.java        |  22 +-
 .../axiom/CloudControllerContextTest.java       |   3 +
 .../clustering/DistributedObjectProvider.java   | 158 +--------------
 .../HazelcastDistributedObjectProvider.java     | 199 +++++++++++++++++++
 .../internal/CloudCommonServiceComponent.java   | 139 -------------
 .../common/internal/ServiceReferenceHolder.java |  78 ++++++++
 .../internal/StratosCommonServiceComponent.java | 135 +++++++++++++
 .../common/services/PackageInfoService.java     |  14 +-
 .../stratos/common/util/CloudServicesUtil.java  |  10 +-
 .../apache/stratos/common/util/CommonUtil.java  |   7 +-
 .../test/DistributedObjectProviderTest.java     |  35 ++--
 13 files changed, 477 insertions(+), 354 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/fdb84e7c/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
index 969c3c0..eeee5d5 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
@@ -130,9 +130,8 @@ public class CloudControllerContext implements Serializable {
             clustered = true;
         }
 
-        // Initialize distributed object handler
-        distributedObjectProvider = new DistributedObjectProvider(isClustered(),
-                ServiceReferenceHolder.getInstance().getHazelcastInstance());
+        // Initialize distributed object provider
+        distributedObjectProvider = ServiceReferenceHolder.getInstance().getDistributedObjectProvider();
 
         // Initialize objects
         clusterIdToMemberContextListMap = distributedObjectProvider.getMap(CC_CLUSTER_ID_TO_MEMBER_CTX);

http://git-wip-us.apache.org/repos/asf/stratos/blob/fdb84e7c/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java
index 7337813..7f2c150 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java
@@ -33,6 +33,7 @@ import org.apache.stratos.cloud.controller.services.CloudControllerService;
 import org.apache.stratos.cloud.controller.services.impl.CloudControllerServiceImpl;
 import org.apache.stratos.cloud.controller.messaging.publisher.TopologySynchronizerTaskScheduler;
 import org.apache.stratos.cloud.controller.messaging.receiver.instance.status.InstanceStatusTopicReceiver;
+import org.apache.stratos.common.clustering.DistributedObjectProvider;
 import org.apache.stratos.messaging.broker.publish.EventPublisherPool;
 import org.apache.stratos.messaging.util.Util;
 import org.osgi.framework.BundleContext;
@@ -48,10 +49,8 @@ import org.wso2.carbon.utils.ConfigurationContextService;
  * Registering Cloud Controller Service.
  *
  * @scr.component name="org.apache.stratos.cloud.controller" immediate="true"
- * @scr.reference name="hazelcast.instance.service" interface="com.hazelcast.core.HazelcastInstance"
- *                cardinality="0..1"policy="dynamic" bind="setHazelcastInstance" unbind="unsetHazelcastInstance"
- * @scr.reference name="distributedMapProvider" interface="org.wso2.carbon.caching.impl.DistributedMapProvider"
- *                cardinality="0..1" policy="dynamic" bind="setDistributedMapProvider" unbind="unsetDistributedMapProvider"
+ * @scr.reference name="distributedObjectProvider" interface="org.apache.stratos.common.clustering.DistributedObjectProvider"
+ *                cardinality="1..1" policy="dynamic" bind="setDistributedObjectProvider" unbind="unsetDistributedObjectProvider"
  * @scr.reference name="ntask.component" interface="org.wso2.carbon.ntask.core.service.TaskService"
  *                cardinality="1..1" policy="dynamic" bind="setTaskService" unbind="unsetTaskService"
  * @scr.reference name="registry.service" interface="org.wso2.carbon.registry.core.service.RegistryService"
@@ -133,8 +132,7 @@ public class CloudControllerServiceComponent {
 		
 		try {			
 			UserRegistry registry = registryService.getGovernanceSystemRegistry();
-	        ServiceReferenceHolder.getInstance()
-	                                             .setRegistry(registry);
+	        ServiceReferenceHolder.getInstance().setRegistry(registry);
         } catch (RegistryException e) {
         	String msg = "Failed when retrieving Governance System Registry.";
         	log.error(msg, e);
@@ -158,20 +156,12 @@ public class CloudControllerServiceComponent {
         ServiceReferenceHolder.getInstance().setAxisConfiguration(null);
     }
 
-    protected void setHazelcastInstance(HazelcastInstance hazelcastInstance) {
-        ServiceReferenceHolder.getInstance().setHazelcastInstance(hazelcastInstance);
+    protected void setDistributedObjectProvider(DistributedObjectProvider distributedObjectProvider) {
+        ServiceReferenceHolder.getInstance().setDistributedObjectProvider(distributedObjectProvider);
     }
 
-    protected void unsetHazelcastInstance(HazelcastInstance hazelcastInstance) {
-        ServiceReferenceHolder.getInstance().setHazelcastInstance(null);
-    }
-
-    protected void setDistributedMapProvider(DistributedMapProvider mapProvider) {
-        ServiceReferenceHolder.getInstance().setDistributedMapProvider(mapProvider);
-    }
-
-    protected void unsetDistributedMapProvider(DistributedMapProvider mapProvider) {
-        ServiceReferenceHolder.getInstance().setDistributedMapProvider(null);
+    protected void unsetDistributedObjectProvider(DistributedObjectProvider distributedObjectProvider) {
+        ServiceReferenceHolder.getInstance().setDistributedObjectProvider(null);
     }
 	
 	protected void deactivate(ComponentContext ctx) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/fdb84e7c/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/ServiceReferenceHolder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/ServiceReferenceHolder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/ServiceReferenceHolder.java
index 609e1a9..9ac0a19 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/ServiceReferenceHolder.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/ServiceReferenceHolder.java
@@ -18,9 +18,8 @@
  */
 package org.apache.stratos.cloud.controller.internal;
 
-import com.hazelcast.core.HazelcastInstance;
 import org.apache.axis2.engine.AxisConfiguration;
-import org.wso2.carbon.caching.impl.DistributedMapProvider;
+import org.apache.stratos.common.clustering.DistributedObjectProvider;
 import org.wso2.carbon.ntask.core.service.TaskService;
 import org.wso2.carbon.registry.core.Registry;
 import org.wso2.carbon.registry.core.session.UserRegistry;
@@ -34,8 +33,7 @@ public class ServiceReferenceHolder {
     private TaskService taskService;
     private Registry registry;
     private AxisConfiguration axisConfiguration;
-    private DistributedMapProvider distributedMapProvider;
-    private HazelcastInstance hazelcastInstance;
+    private DistributedObjectProvider distributedObjectProvider;
 
     private ServiceReferenceHolder() {
     }
@@ -71,19 +69,11 @@ public class ServiceReferenceHolder {
 	    return registry;
     }
 
-    public void setDistributedMapProvider(DistributedMapProvider distributedMapProvider) {
-        this.distributedMapProvider = distributedMapProvider;
+    public void setDistributedObjectProvider(DistributedObjectProvider distributedObjectProvider) {
+        this.distributedObjectProvider = distributedObjectProvider;
     }
 
-    public DistributedMapProvider getDistributedMapProvider() {
-        return distributedMapProvider;
-    }
-
-    public void setHazelcastInstance(HazelcastInstance hazelcastInstance) {
-        this.hazelcastInstance = hazelcastInstance;
-    }
-
-    public HazelcastInstance getHazelcastInstance() {
-        return hazelcastInstance;
+    public DistributedObjectProvider getDistributedObjectProvider() {
+        return distributedObjectProvider;
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/fdb84e7c/components/org.apache.stratos.cloud.controller/src/test/java/org/apache/cartridge/autoscaler/service/axiom/CloudControllerContextTest.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/test/java/org/apache/cartridge/autoscaler/service/axiom/CloudControllerContextTest.java b/components/org.apache.stratos.cloud.controller/src/test/java/org/apache/cartridge/autoscaler/service/axiom/CloudControllerContextTest.java
index cb1aaee..cc7919a 100644
--- a/components/org.apache.stratos.cloud.controller/src/test/java/org/apache/cartridge/autoscaler/service/axiom/CloudControllerContextTest.java
+++ b/components/org.apache.stratos.cloud.controller/src/test/java/org/apache/cartridge/autoscaler/service/axiom/CloudControllerContextTest.java
@@ -23,6 +23,7 @@ import org.apache.stratos.cloud.controller.context.CloudControllerContext;
 import org.apache.stratos.cloud.controller.domain.MemberContext;
 import junit.framework.TestCase;
 import org.apache.stratos.cloud.controller.internal.ServiceReferenceHolder;
+import org.apache.stratos.common.clustering.impl.HazelcastDistributedObjectProvider;
 
 public class CloudControllerContextTest extends TestCase {
 
@@ -37,6 +38,8 @@ public class CloudControllerContextTest extends TestCase {
     public final void testMemberContextOperations() throws Exception {
         AxisConfiguration axisConfiguration = new AxisConfiguration();
         axisConfiguration.setClusteringAgent(null);
+
+        ServiceReferenceHolder.getInstance().setDistributedObjectProvider(new HazelcastDistributedObjectProvider());
         ServiceReferenceHolder.getInstance().setAxisConfiguration(axisConfiguration);
 
     	CloudControllerContext context = CloudControllerContext.getInstance();

http://git-wip-us.apache.org/repos/asf/stratos/blob/fdb84e7c/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/clustering/DistributedObjectProvider.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/clustering/DistributedObjectProvider.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/clustering/DistributedObjectProvider.java
index 328f67d..c9fa5ec 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/clustering/DistributedObjectProvider.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/clustering/DistributedObjectProvider.java
@@ -19,164 +19,22 @@
 
 package org.apache.stratos.common.clustering;
 
-import com.hazelcast.core.HazelcastInstance;
-import com.hazelcast.core.IList;
-import com.hazelcast.core.ILock;
-import com.hazelcast.core.IMap;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.io.Serializable;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 /**
- * Provides objects to be managed in distributed and non-distributed environments.
+ * Distributed object provider service interface.
  */
-public class DistributedObjectProvider implements Serializable {
-    private static final Log log = LogFactory.getLog(DistributedObjectProvider.class);
-
-    private final boolean clustered;
-    private final HazelcastInstance hazelcastInstance;
-
-    public DistributedObjectProvider(boolean clustered, HazelcastInstance hazelcastInstance) {
-        this.clustered = clustered;
-        this.hazelcastInstance = hazelcastInstance;
-    }
-
-    private com.hazelcast.core.ILock acquireDistributedLock(Object object) {
-        if (log.isDebugEnabled()) {
-            log.debug(String.format("Acquiring distributed lock for %s...", object.getClass().getSimpleName()));
-        }
-        ILock lock = hazelcastInstance.getLock(object);
-        if (log.isDebugEnabled()) {
-            log.debug(String.format("Distributed lock acquired for %s", object.getClass().getSimpleName()));
-        }
-        return lock;
-    }
-
-    private void releaseDistributedLock(ILock lock) {
-        if(lock == null) {
-            return;
-        }
-
-        if (log.isDebugEnabled()) {
-            log.debug(String.format("Releasing distributed lock for %s...", lock.getKey()));
-        }
-        lock.forceUnlock();
-        if (log.isDebugEnabled()) {
-            log.debug(String.format("Distributed lock released for %s", lock.getKey()));
-        }
-    }
-
-    /**
-     * If clustering is enabled returns a distributed map object, otherwise returns a
-     * concurrent local map object.
-     * @param key
-     * @return
-     */
-    public Map getMap(String key) {
-        if(clustered) {
-            return hazelcastInstance.getMap(key);
-        } else {
-            return new ConcurrentHashMap<Object, Object>();
-        }
-    }
+public interface DistributedObjectProvider {
+    Map getMap(String key);
 
-    /**
-     * If clustering is enabled returns a distributed list, otherwise returns
-     * a local array list.
-     * @param name
-     * @return
-     */
-    public List getList(String name) {
-        if(clustered) {
-            return hazelcastInstance.getList(name);
-        } else {
-            return new ArrayList();
-        }
-    }
+    List getList(String name);
 
-    /**
-     * Put a key value pair to a map, if clustered use a distributed lock.
-     * @param map
-     * @param key
-     * @param value
-     */
-    public void putToMap(Map map, Object key, Object value) {
-         if(clustered) {
-             ILock lock = null;
-             try {
-                 IMap imap = (IMap) map;
-                 lock = acquireDistributedLock(imap.getName());
-                 imap.set(key, value);
-             } finally {
-                 releaseDistributedLock(lock);
-             }
-         } else {
-            map.put(key, value);
-         }
-    }
+    void putToMap(Map map, Object key, Object value);
 
-    /**
-     * Remove an object from a map, if clustered use a distributed lock.
-     * @param map
-     * @param key
-     */
-    public void removeFromMap(Map map, Object key) {
-        if(clustered) {
-            ILock lock = null;
-            try {
-                IMap imap = (IMap) map;
-                lock = acquireDistributedLock(imap.getName());
-                imap.delete(key);
-            } finally {
-                releaseDistributedLock(lock);
-            }
-        } else {
-            map.remove(key);
-        }
-    }
+    void removeFromMap(Map map, Object key);
 
-    /**
-     * Add an object to a list, if clustered use a distributed lock.
-     * @param list
-     * @param value
-     */
-    public void addToList(List list, Object value) {
-        if(clustered) {
-            ILock lock = null;
-            try {
-                IList ilist = (IList) list;
-                lock = acquireDistributedLock(ilist.getName());
-                ilist.add(value);
-            } finally {
-                releaseDistributedLock(lock);
-            }
-        } else {
-            list.add(value);
-        }
-    }
+    void addToList(List list, Object value);
 
-    /**
-     * Remove an object from a list, if clustered use a distributed lock.
-     * @param list
-     * @param value
-     */
-    public void removeFromList(List list, Object value) {
-        if(clustered) {
-            ILock lock = null;
-            try {
-                IList ilist = (IList) list;
-                lock = acquireDistributedLock(ilist.getName());
-                ilist.remove(value);
-            } finally {
-                releaseDistributedLock(lock);
-            }
-        } else {
-            list.remove(value);
-        }
-    }
+    void removeFromList(List list, Object value);
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/fdb84e7c/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/clustering/impl/HazelcastDistributedObjectProvider.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/clustering/impl/HazelcastDistributedObjectProvider.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/clustering/impl/HazelcastDistributedObjectProvider.java
new file mode 100644
index 0000000..55d765e
--- /dev/null
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/clustering/impl/HazelcastDistributedObjectProvider.java
@@ -0,0 +1,199 @@
+/*
+ * 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.common.clustering.impl;
+
+import com.hazelcast.core.HazelcastInstance;
+import com.hazelcast.core.IList;
+import com.hazelcast.core.ILock;
+import com.hazelcast.core.IMap;
+import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.common.clustering.DistributedObjectProvider;
+import org.apache.stratos.common.internal.ServiceReferenceHolder;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Provides objects to be managed in distributed and non-distributed environments.
+ */
+public class HazelcastDistributedObjectProvider implements DistributedObjectProvider {
+    private static final Log log = LogFactory.getLog(HazelcastDistributedObjectProvider.class);
+
+    public HazelcastDistributedObjectProvider() {
+    }
+
+    private boolean isClustered() {
+        AxisConfiguration axisConfiguration = ServiceReferenceHolder.getInstance().getAxisConfiguration();
+        return ((axisConfiguration != null) && (axisConfiguration.getClusteringAgent() != null)
+                && (getHazelcastInstance() != null));
+    }
+
+    private HazelcastInstance getHazelcastInstance() {
+        return ServiceReferenceHolder.getInstance().getHazelcastInstance();
+    }
+
+    private com.hazelcast.core.ILock acquireDistributedLock(Object object) {
+        if((!isClustered()) || (object == null)) {
+            return null;
+        }
+
+        if (log.isDebugEnabled()) {
+            log.debug(String.format("Acquiring distributed lock for %s...", object.getClass().getSimpleName()));
+        }
+        ILock lock = getHazelcastInstance().getLock(object);
+        if (log.isDebugEnabled()) {
+            log.debug(String.format("Distributed lock acquired for %s", object.getClass().getSimpleName()));
+        }
+        return lock;
+    }
+
+    private void releaseDistributedLock(ILock lock) {
+        if(lock == null) {
+            return;
+        }
+
+        if (log.isDebugEnabled()) {
+            log.debug(String.format("Releasing distributed lock for %s...", lock.getKey()));
+        }
+        lock.forceUnlock();
+        if (log.isDebugEnabled()) {
+            log.debug(String.format("Distributed lock released for %s", lock.getKey()));
+        }
+    }
+
+    /**
+     * If clustering is enabled returns a distributed map object, otherwise returns a
+     * concurrent local map object.
+     * @param key
+     * @return
+     */
+    @Override
+    public Map getMap(String key) {
+        if(isClustered()) {
+            return getHazelcastInstance().getMap(key);
+        } else {
+            return new ConcurrentHashMap<Object, Object>();
+        }
+    }
+
+    /**
+     * If clustering is enabled returns a distributed list, otherwise returns
+     * a local array list.
+     * @param name
+     * @return
+     */
+    @Override
+    public List getList(String name) {
+        if(isClustered()) {
+            return getHazelcastInstance().getList(name);
+        } else {
+            return new ArrayList();
+        }
+    }
+
+    /**
+     * Put a key value pair to a map, if clustered use a distributed lock.
+     * @param map
+     * @param key
+     * @param value
+     */
+    @Override
+    public void putToMap(Map map, Object key, Object value) {
+         if(isClustered()) {
+             ILock lock = null;
+             try {
+                 IMap imap = (IMap) map;
+                 lock = acquireDistributedLock(imap.getName());
+                 imap.set(key, value);
+             } finally {
+                 releaseDistributedLock(lock);
+             }
+         } else {
+            map.put(key, value);
+         }
+    }
+
+    /**
+     * Remove an object from a map, if clustered use a distributed lock.
+     * @param map
+     * @param key
+     */
+    @Override
+    public void removeFromMap(Map map, Object key) {
+        if(isClustered()) {
+            ILock lock = null;
+            try {
+                IMap imap = (IMap) map;
+                lock = acquireDistributedLock(imap.getName());
+                imap.delete(key);
+            } finally {
+                releaseDistributedLock(lock);
+            }
+        } else {
+            map.remove(key);
+        }
+    }
+
+    /**
+     * Add an object to a list, if clustered use a distributed lock.
+     * @param list
+     * @param value
+     */
+    @Override
+    public void addToList(List list, Object value) {
+        if(isClustered()) {
+            ILock lock = null;
+            try {
+                IList ilist = (IList) list;
+                lock = acquireDistributedLock(ilist.getName());
+                ilist.add(value);
+            } finally {
+                releaseDistributedLock(lock);
+            }
+        } else {
+            list.add(value);
+        }
+    }
+
+    /**
+     * Remove an object from a list, if clustered use a distributed lock.
+     * @param list
+     * @param value
+     */
+    @Override
+    public void removeFromList(List list, Object value) {
+        if(isClustered()) {
+            ILock lock = null;
+            try {
+                IList ilist = (IList) list;
+                lock = acquireDistributedLock(ilist.getName());
+                ilist.remove(value);
+            } finally {
+                releaseDistributedLock(lock);
+            }
+        } else {
+            list.remove(value);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/fdb84e7c/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/CloudCommonServiceComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/CloudCommonServiceComponent.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/CloudCommonServiceComponent.java
deleted file mode 100644
index 2400631..0000000
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/CloudCommonServiceComponent.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.stratos.common.internal;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.common.packages.PackageInfoHolder;
-import org.apache.stratos.common.util.CommonUtil;
-import org.apache.stratos.common.util.StratosConfiguration;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.component.ComponentContext;
-import org.wso2.carbon.registry.core.exceptions.RegistryException;
-import org.wso2.carbon.registry.core.service.RegistryService;
-import org.wso2.carbon.registry.core.session.UserRegistry;
-import org.wso2.carbon.user.core.service.RealmService;
-import org.wso2.carbon.user.core.tenant.TenantManager;
-
-/**
- * @scr.component name="apache.stratos.common" immediate="true"
- * @scr.reference name="registry.service"
- *                interface="org.wso2.carbon.registry.core.service.RegistryService"
- *                cardinality="1..1" policy="dynamic" bind="setRegistryService"
- *                unbind="unsetRegistryService"
- * @scr.reference name="user.realmservice.default"
- *                interface="org.wso2.carbon.user.core.service.RealmService"
- *                cardinality="1..1" policy="dynamic" bind="setRealmService"
- *                unbind="unsetRealmService"
- */
-public class CloudCommonServiceComponent {
-
-    private static Log log = LogFactory.getLog(CloudCommonServiceComponent.class);
-
-    private static BundleContext bundleContext;
-    private static RealmService realmService;
-    private static RegistryService registryService;
-    private static PackageInfoHolder packageInfos;
-
-    protected void activate(ComponentContext context) {
-        try {
-            bundleContext = context.getBundleContext();
-            if (CommonUtil.getStratosConfig() == null) {
-                StratosConfiguration stratosConfig = CommonUtil.loadStratosConfiguration();
-                CommonUtil.setStratosConfig(stratosConfig);
-            }
-
-            // Loading the EULA
-            if (CommonUtil.getEula() == null) {
-                String eula = CommonUtil.loadTermsOfUsage();
-                CommonUtil.setEula(eula);
-            }
-            
-			//packageInfos = new PackageInfoHolder();
-			//context.getBundleContext().registerService(
-			//		PackageInfoHolder.class.getName(), packageInfos, null);
-
-            //Register manager configuration OSGI service
-            try {
-                StratosConfiguration stratosConfiguration = CommonUtil.loadStratosConfiguration();
-                bundleContext.registerService(StratosConfiguration.class.getName(), stratosConfiguration, null);
-                if (log.isDebugEnabled()) {
-                    log.debug("******* Cloud Common Service bundle is activated ******* ");
-                }
-            } catch (Exception ex) {
-                String msg = "An error occurred while initializing Cloud Common Service as an OSGi Service";
-                log.error(msg, ex);
-            }
-        } catch (Throwable e) {
-            log.error("Error in activating Cloud Common Service Component" + e.toString());
-        }
-    }
-
-    protected void deactivate(ComponentContext context) {
-        log.debug("******* Tenant Core bundle is deactivated ******* ");
-    }
-
-    protected void setRegistryService(RegistryService registryService) {
-        CloudCommonServiceComponent.registryService = registryService;
-    }
-
-    protected void unsetRegistryService(RegistryService registryService) {
-        setRegistryService(null);
-    }
-
-    protected void setRealmService(RealmService realmService) {
-        CloudCommonServiceComponent.realmService = realmService;
-    }
-
-    protected void unsetRealmService(RealmService realmService) {
-        setRealmService(null);
-    }
-
-    public static BundleContext getBundleContext() {
-        return bundleContext;
-    }
-
-    public static RegistryService getRegistryService() {
-        return registryService;
-    }
-
-
-    public static RealmService getRealmService() {
-        return realmService;
-    }
-
-    public static TenantManager getTenantManager() {
-        return realmService.getTenantManager();
-    }
-
-    public static UserRegistry getGovernanceSystemRegistry(int tenantId) throws RegistryException {
-        return registryService.getGovernanceSystemRegistry(tenantId);
-    }
-
-    public static UserRegistry getConfigSystemRegistry(int tenantId) throws RegistryException {
-        return registryService.getConfigSystemRegistry(tenantId);
-    }
-
-	public static PackageInfoHolder getPackageInfos() {
-		return packageInfos;
-	}
-
-    
-
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/fdb84e7c/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/ServiceReferenceHolder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/ServiceReferenceHolder.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/ServiceReferenceHolder.java
new file mode 100644
index 0000000..7308f82
--- /dev/null
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/ServiceReferenceHolder.java
@@ -0,0 +1,78 @@
+package org.apache.stratos.common.internal;
+
+import com.hazelcast.core.HazelcastInstance;
+import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.caching.impl.DistributedMapProvider;
+import org.wso2.carbon.registry.core.service.RegistryService;
+import org.wso2.carbon.user.core.service.RealmService;
+
+/**
+ * Created by imesh on 12/1/14.
+ */
+public class ServiceReferenceHolder {
+
+    private static final Log log = LogFactory.getLog(ServiceReferenceHolder.class);
+    private static volatile ServiceReferenceHolder instance;
+    private HazelcastInstance hazelcastInstance;
+    private DistributedMapProvider distributedMapProvider;
+    private RealmService realmService;
+    private RegistryService registryService;
+    private AxisConfiguration axisConfiguration;
+
+    private ServiceReferenceHolder() {
+    }
+
+    public static ServiceReferenceHolder getInstance() {
+        if (instance == null) {
+            synchronized (ServiceReferenceHolder.class) {
+                if (instance == null) {
+                    instance = new ServiceReferenceHolder();
+                }
+            }
+        }
+        return instance;
+    }
+
+    public void setHazelcastInstance(HazelcastInstance hazelcastInstance) {
+        this.hazelcastInstance = hazelcastInstance;
+    }
+
+    public HazelcastInstance getHazelcastInstance() {
+        return hazelcastInstance;
+    }
+
+
+    public void setDistributedMapProvider(DistributedMapProvider distributedMapProvider) {
+        this.distributedMapProvider = distributedMapProvider;
+    }
+
+    public DistributedMapProvider getDistributedMapProvider() {
+        return distributedMapProvider;
+    }
+
+    public void setRealmService(RealmService realmService) {
+        this.realmService = realmService;
+    }
+
+    public RealmService getRealmService() {
+        return realmService;
+    }
+
+    public void setRegistryService(RegistryService registryService) {
+        this.registryService = registryService;
+    }
+
+    public RegistryService getRegistryService() {
+        return registryService;
+    }
+
+    public void setAxisConfiguration(AxisConfiguration axisConfiguration) {
+        this.axisConfiguration = axisConfiguration;
+    }
+
+    public AxisConfiguration getAxisConfiguration() {
+        return axisConfiguration;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/fdb84e7c/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/StratosCommonServiceComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/StratosCommonServiceComponent.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/StratosCommonServiceComponent.java
new file mode 100644
index 0000000..2ea1cd7
--- /dev/null
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/StratosCommonServiceComponent.java
@@ -0,0 +1,135 @@
+/*
+ * 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.common.internal;
+
+import com.hazelcast.core.HazelcastInstance;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.common.clustering.DistributedObjectProvider;
+import org.apache.stratos.common.clustering.impl.HazelcastDistributedObjectProvider;
+import org.apache.stratos.common.util.CommonUtil;
+import org.apache.stratos.common.util.StratosConfiguration;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.component.ComponentContext;
+import org.wso2.carbon.caching.impl.DistributedMapProvider;
+import org.wso2.carbon.registry.core.service.RegistryService;
+import org.wso2.carbon.user.core.service.RealmService;
+import org.wso2.carbon.utils.ConfigurationContextService;
+
+/**
+ * @scr.component name="apache.stratos.common" immediate="true"
+ * @scr.reference name="hazelcast.instance.service" interface="com.hazelcast.core.HazelcastInstance"
+ *                cardinality="0..1"policy="dynamic" bind="setHazelcastInstance" unbind="unsetHazelcastInstance"
+ * @scr.reference name="distributedMapProvider" interface="org.wso2.carbon.caching.impl.DistributedMapProvider"
+ *                cardinality="0..1" policy="dynamic" bind="setDistributedMapProvider" unbind="unsetDistributedMapProvider"
+ * @scr.reference name="registry.service"
+ *                interface="org.wso2.carbon.registry.core.service.RegistryService"
+ *                cardinality="1..1" policy="dynamic" bind="setRegistryService"
+ *                unbind="unsetRegistryService"
+ * @scr.reference name="user.realmservice.default"
+ *                interface="org.wso2.carbon.user.core.service.RealmService"
+ *                cardinality="1..1" policy="dynamic" bind="setRealmService"
+ *                unbind="unsetRealmService"
+ * @scr.reference name="configuration.context.service" interface="org.wso2.carbon.utils.ConfigurationContextService"
+ *                cardinality="1..1" policy="dynamic" bind="setConfigurationContextService" unbind="unsetConfigurationContextService"
+
+ */
+public class StratosCommonServiceComponent {
+
+    private static Log log = LogFactory.getLog(StratosCommonServiceComponent.class);
+
+    protected void activate(ComponentContext context) {
+        try {
+            BundleContext bundleContext = context.getBundleContext();
+            if (CommonUtil.getStratosConfig() == null) {
+                StratosConfiguration stratosConfig = CommonUtil.loadStratosConfiguration();
+                CommonUtil.setStratosConfig(stratosConfig);
+            }
+
+            // Loading the EULA
+            if (CommonUtil.getEula() == null) {
+                String eula = CommonUtil.loadTermsOfUsage();
+                CommonUtil.setEula(eula);
+            }
+
+            // Register distributed object provider service
+            DistributedObjectProvider distributedObjectProvider = new HazelcastDistributedObjectProvider();
+            bundleContext.registerService(DistributedObjectProvider.class, distributedObjectProvider, null);
+
+            // Register manager configuration OSGI service
+            try {
+                StratosConfiguration stratosConfiguration = CommonUtil.loadStratosConfiguration();
+                bundleContext.registerService(StratosConfiguration.class.getName(), stratosConfiguration, null);
+            } catch (Exception ex) {
+                String msg = "An error occurred while registering stratos configuration service";
+                log.error(msg, ex);
+            }
+
+            if (log.isInfoEnabled()) {
+                log.info("Stratos common service bundle is activated");
+            }
+        } catch (Throwable e) {
+            log.error("Error in activating stratos common service component" + e.toString());
+        }
+    }
+
+    protected void deactivate(ComponentContext context) {
+        log.debug("Stratos common service is deactivated");
+    }
+
+    protected void setRegistryService(RegistryService registryService) {
+        ServiceReferenceHolder.getInstance().setRegistryService(registryService);
+    }
+
+    protected void unsetRegistryService(RegistryService registryService) {
+        setRegistryService(null);
+    }
+
+    protected void setRealmService(RealmService realmService) {
+        ServiceReferenceHolder.getInstance().setRealmService(realmService);
+    }
+
+    protected void unsetRealmService(RealmService realmService) {
+        ServiceReferenceHolder.getInstance().setRealmService(null);
+    }
+
+    public void setHazelcastInstance(HazelcastInstance hazelcastInstance) {
+        ServiceReferenceHolder.getInstance().setHazelcastInstance(hazelcastInstance);
+    }
+
+    public void unsetHazelcastInstance(HazelcastInstance hazelcastInstance) {
+        ServiceReferenceHolder.getInstance().setHazelcastInstance(null);
+    }
+
+    protected void setDistributedMapProvider(DistributedMapProvider mapProvider) {
+        ServiceReferenceHolder.getInstance().setDistributedMapProvider(mapProvider);
+    }
+
+    protected void unsetDistributedMapProvider(DistributedMapProvider mapProvider) {
+        ServiceReferenceHolder.getInstance().setDistributedMapProvider(null);
+    }
+
+    protected void setConfigurationContextService(ConfigurationContextService cfgCtxService) {
+        ServiceReferenceHolder.getInstance().setAxisConfiguration(cfgCtxService.getServerConfigContext().getAxisConfiguration());
+    }
+
+    protected void unsetConfigurationContextService(ConfigurationContextService cfgCtxService) {
+        ServiceReferenceHolder.getInstance().setAxisConfiguration(null);
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/fdb84e7c/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/services/PackageInfoService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/services/PackageInfoService.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/services/PackageInfoService.java
index 6ace99f..82c0e86 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/services/PackageInfoService.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/services/PackageInfoService.java
@@ -18,7 +18,7 @@
  */
 package org.apache.stratos.common.services;
 
-import org.apache.stratos.common.internal.CloudCommonServiceComponent;
+import org.apache.stratos.common.internal.StratosCommonServiceComponent;
 import org.apache.stratos.common.packages.PackageInfo;
 
 import java.util.List;
@@ -26,10 +26,10 @@ import java.util.List;
 
 public class PackageInfoService {
 
-	public PackageInfo[] getPackageInfos() throws Exception {
-		List<PackageInfo> list = CloudCommonServiceComponent.getPackageInfos().
-		                                                     getMultitenancyPackages();
-		PackageInfo[] packageInfos = list.toArray(new PackageInfo[list.size()]);
-		return packageInfos;
-	}
+//	public PackageInfo[] getPackageInfos() throws Exception {
+//		List<PackageInfo> list = StratosCommonServiceComponent.getPackageInfos().
+//		                                                     getMultitenancyPackages();
+//		PackageInfo[] packageInfos = list.toArray(new PackageInfo[list.size()]);
+//		return packageInfos;
+//	}
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/fdb84e7c/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/util/CloudServicesUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/util/CloudServicesUtil.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/util/CloudServicesUtil.java
index 4108973..dc51039 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/util/CloudServicesUtil.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/util/CloudServicesUtil.java
@@ -27,7 +27,7 @@ import org.apache.stratos.common.config.CloudServiceConfig;
 import org.apache.stratos.common.config.CloudServicesDescConfig;
 import org.apache.stratos.common.config.PermissionConfig;
 import org.apache.stratos.common.constants.StratosConstants;
-import org.apache.stratos.common.internal.CloudCommonServiceComponent;
+import org.apache.stratos.common.internal.ServiceReferenceHolder;
 import org.wso2.carbon.registry.core.Collection;
 import org.wso2.carbon.registry.core.RegistryConstants;
 import org.wso2.carbon.registry.core.Resource;
@@ -115,9 +115,9 @@ public class CloudServicesUtil {
         }
 
         UserRegistry govRegistry =
-                CloudCommonServiceComponent.getGovernanceSystemRegistry(
+                ServiceReferenceHolder.getInstance().getRegistryService().getGovernanceSystemRegistry(
                         MultitenantConstants.SUPER_TENANT_ID);
-        UserRegistry configRegistry = CloudCommonServiceComponent.getConfigSystemRegistry(tenantId);
+        UserRegistry configRegistry = ServiceReferenceHolder.getInstance().getRegistryService().getConfigSystemRegistry(tenantId);
         String cloudServiceInfoPath = StratosConstants.CLOUD_SERVICE_INFO_STORE_PATH +
                                       RegistryConstants.PATH_SEPARATOR + tenantId +
                                       RegistryConstants.PATH_SEPARATOR + cloudServiceName;
@@ -153,8 +153,8 @@ public class CloudServicesUtil {
 
     public static boolean isCloudServiceActive(String cloudServiceName,
                                                int tenantId) throws Exception {
-        UserRegistry govRegistry = CloudCommonServiceComponent.getGovernanceSystemRegistry(
-                                                                                           MultitenantConstants.SUPER_TENANT_ID);
+        UserRegistry govRegistry = ServiceReferenceHolder.getInstance().getRegistryService().getGovernanceSystemRegistry(
+                MultitenantConstants.SUPER_TENANT_ID);
         return isCloudServiceActive(cloudServiceName, tenantId, govRegistry);
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/fdb84e7c/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/util/CommonUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/util/CommonUtil.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/util/CommonUtil.java
index bac8f64..9f806f1 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/util/CommonUtil.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/util/CommonUtil.java
@@ -23,7 +23,8 @@ import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.common.constants.StratosConstants;
-import org.apache.stratos.common.internal.CloudCommonServiceComponent;
+import org.apache.stratos.common.internal.ServiceReferenceHolder;
+import org.apache.stratos.common.internal.StratosCommonServiceComponent;
 import org.wso2.carbon.CarbonConstants;
 import org.wso2.carbon.registry.core.ActionConstants;
 import org.wso2.carbon.registry.core.RegistryConstants;
@@ -504,7 +505,7 @@ public class CommonUtil {
 			log.debug("Unable to locate the stratos configurations file. "
 					+ "Default Settings will be used.");
 		}
-        return config; // return the default configuratiosn, if the file not found.
+        return config; // return the default configuration, if the file not found.
     }
     
     
@@ -587,7 +588,7 @@ public class CommonUtil {
      */
     public static boolean isDomainNameAvailable(String tenantDomain) throws Exception {
 
-        TenantManager tenantManager = CloudCommonServiceComponent.getTenantManager();
+        TenantManager tenantManager = ServiceReferenceHolder.getInstance().getRealmService().getTenantManager();
           // The registry reserved words are checked first.
           if (tenantDomain.equals("atom") || tenantDomain.equals("registry")
                   || tenantDomain.equals("resource")) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/fdb84e7c/components/org.apache.stratos.common/src/test/java/org/apache/stratos/common/test/DistributedObjectProviderTest.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/test/java/org/apache/stratos/common/test/DistributedObjectProviderTest.java b/components/org.apache.stratos.common/src/test/java/org/apache/stratos/common/test/DistributedObjectProviderTest.java
index 9d31923..afb0c83 100644
--- a/components/org.apache.stratos.common/src/test/java/org/apache/stratos/common/test/DistributedObjectProviderTest.java
+++ b/components/org.apache.stratos.common/src/test/java/org/apache/stratos/common/test/DistributedObjectProviderTest.java
@@ -21,7 +21,8 @@ package org.apache.stratos.common.test;
 
 import com.hazelcast.core.Hazelcast;
 import com.hazelcast.core.HazelcastInstance;
-import org.apache.stratos.common.clustering.DistributedObjectProvider;
+import org.apache.stratos.common.clustering.impl.HazelcastDistributedObjectProvider;
+import org.apache.stratos.common.internal.ServiceReferenceHolder;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -47,17 +48,19 @@ public class DistributedObjectProviderTest {
 
     @Test
     public void testPutToMapLocal() {
-        DistributedObjectProvider provider = new DistributedObjectProvider(false, null);
+        ServiceReferenceHolder.getInstance().setHazelcastInstance(null);
+        HazelcastDistributedObjectProvider provider = new HazelcastDistributedObjectProvider();
         testPutToMap(provider);
     }
 
     @Test
     public void testPutToMapDistributed() {
-        DistributedObjectProvider provider = new DistributedObjectProvider(true, hazelcastInstance);
+        ServiceReferenceHolder.getInstance().setHazelcastInstance(hazelcastInstance);
+        HazelcastDistributedObjectProvider provider = new HazelcastDistributedObjectProvider();
         testPutToMap(provider);
     }
 
-    private void testPutToMap(DistributedObjectProvider provider) {
+    private void testPutToMap(HazelcastDistributedObjectProvider provider) {
         Map<String, String> map = provider.getMap("MAP1");
         provider.putToMap(map, "key1", "value1");
         assertEquals(map.get("key1"), "value1");
@@ -65,17 +68,19 @@ public class DistributedObjectProviderTest {
 
     @Test
     public void testRemoveFromMapLocal() {
-        DistributedObjectProvider provider = new DistributedObjectProvider(false, null);
+        ServiceReferenceHolder.getInstance().setHazelcastInstance(null);
+        HazelcastDistributedObjectProvider provider = new HazelcastDistributedObjectProvider();
         testRemoveFromMap(provider);
     }
 
     @Test
     public void testRemoveFromMapDistributed() {
-        DistributedObjectProvider provider = new DistributedObjectProvider(true, hazelcastInstance);
+        ServiceReferenceHolder.getInstance().setHazelcastInstance(hazelcastInstance);
+        HazelcastDistributedObjectProvider provider = new HazelcastDistributedObjectProvider();
         testRemoveFromMap(provider);
     }
 
-    private void testRemoveFromMap(DistributedObjectProvider provider) {
+    private void testRemoveFromMap(HazelcastDistributedObjectProvider provider) {
         Map<String, String> map = provider.getMap("MAP1");
         provider.putToMap(map, "key1", "value1");
         assertEquals(map.get("key1"), "value1");
@@ -85,17 +90,19 @@ public class DistributedObjectProviderTest {
 
     @Test
     public void testAddToListLocal() {
-        DistributedObjectProvider provider = new DistributedObjectProvider(false, null);
+        ServiceReferenceHolder.getInstance().setHazelcastInstance(null);
+        HazelcastDistributedObjectProvider provider = new HazelcastDistributedObjectProvider();
         testAddToList(provider);
     }
 
     @Test
     public void testAddToListDistributed() {
-        DistributedObjectProvider provider = new DistributedObjectProvider(true, hazelcastInstance);
+        ServiceReferenceHolder.getInstance().setHazelcastInstance(hazelcastInstance);
+        HazelcastDistributedObjectProvider provider = new HazelcastDistributedObjectProvider();
         testAddToList(provider);
     }
 
-    private void testAddToList(DistributedObjectProvider provider) {
+    private void testAddToList(HazelcastDistributedObjectProvider provider) {
         List list = provider.getList("LIST1");
         String value1 = "value1";
         provider.addToList(list, value1);
@@ -104,17 +111,19 @@ public class DistributedObjectProviderTest {
 
     @Test
     public void testRemoveFromListLocal() {
-        DistributedObjectProvider provider = new DistributedObjectProvider(false, null);
+        ServiceReferenceHolder.getInstance().setHazelcastInstance(null);
+        HazelcastDistributedObjectProvider provider = new HazelcastDistributedObjectProvider();
         testRemovalFromList(provider);
     }
 
     @Test
     public void testRemoveFromListDistributed() {
-        DistributedObjectProvider provider = new DistributedObjectProvider(true, hazelcastInstance);
+        ServiceReferenceHolder.getInstance().setHazelcastInstance(hazelcastInstance);
+        HazelcastDistributedObjectProvider provider = new HazelcastDistributedObjectProvider();
         testRemovalFromList(provider);
     }
 
-    private void testRemovalFromList(DistributedObjectProvider provider) {
+    private void testRemovalFromList(HazelcastDistributedObjectProvider provider) {
         List list = provider.getList("LIST1");
         String value1 = "value1";
         provider.addToList(list, value1);