You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by re...@apache.org on 2014/12/01 17:51:42 UTC
[2/3] stratos git commit: fixing cartridge deployment issues and
global deployment policy deployment issues
fixing cartridge deployment issues and global deployment policy deployment issues
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/2c07846c
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/2c07846c
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/2c07846c
Branch: refs/heads/master
Commit: 2c07846c3b8ef6c66446908fce427e827af281d4
Parents: f6c912b
Author: reka <rt...@gmail.com>
Authored: Mon Dec 1 22:21:04 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Mon Dec 1 22:21:27 2014 +0530
----------------------------------------------------------------------
.../autoscaler/api/AutoScalerServiceImpl.java | 27 +
.../AutoscalerTopologyEventReceiver.java | 169 +-
.../autoscaler/pojo/policy/PolicyManager.java | 9 +
.../pojo/policy/deployment/ChildPolicy.java | 4 +-
.../partition/network/ChildLevelPartition.java | 22 +-
.../stratos/autoscaler/util/AutoscalerUtil.java | 54 +-
.../org.apache.stratos.cloud.controller/pom.xml | 2 -
.../src/main/resources/META-INF/services.xml | 2 +-
.../clustering/DistributedObjectProvider.java | 3 +-
.../src/main/resources/AutoScalerService.wsdl | 1490 +++++++++---------
10 files changed, 982 insertions(+), 800 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/2c07846c/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
index 739ae9d..91745d8 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
@@ -21,6 +21,7 @@ package org.apache.stratos.autoscaler.api;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.applications.ApplicationHolder;
import org.apache.stratos.autoscaler.context.AutoscalerContext;
//import org.apache.stratos.autoscaler.NetworkPartitionLbHolder;
import org.apache.stratos.autoscaler.applications.parser.ApplicationParser;
@@ -45,12 +46,14 @@ import org.apache.stratos.autoscaler.pojo.policy.autoscale.AutoscalePolicy;
import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.Partition;
import org.apache.stratos.autoscaler.registry.RegistryManager;
+import org.apache.stratos.autoscaler.util.AutoscalerUtil;
import org.apache.stratos.common.Properties;
import org.apache.stratos.common.Property;
import org.apache.stratos.common.kubernetes.KubernetesGroup;
import org.apache.stratos.common.kubernetes.KubernetesHost;
import org.apache.stratos.common.kubernetes.KubernetesMaster;
import org.apache.stratos.messaging.domain.applications.Application;
+import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
import org.apache.stratos.metadata.client.defaults.DefaultMetaDataServiceClient;
import org.apache.stratos.metadata.client.defaults.MetaDataServiceClient;
import org.apache.stratos.metadata.client.exception.MetaDataServiceClientException;
@@ -112,6 +115,30 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
boolean hasDeployed = PolicyManager.getInstance().deployDeploymentPolicy(deploymentPolicy);
//Need to start the application Monitor after validation of the deployment policies.
+ //Check whether all the clusters are there
+ ApplicationHolder.acquireReadLock();
+ boolean allClusterInitialized = false;
+
+ try {
+ Application application = ApplicationHolder.getApplications().
+ getApplication(deploymentPolicy.getApplicationId());
+ if(application != null) {
+ allClusterInitialized = AutoscalerUtil.allClustersInitialized(application);
+ }
+
+ } finally {
+ ApplicationHolder.releaseReadLock();
+ }
+
+ if(allClusterInitialized) {
+ AutoscalerUtil.getInstance().
+ startApplicationMonitor(deploymentPolicy.getApplicationId());
+
+ } else {
+ log.info("The application clusters are not yet created. " +
+ "Waiting for them to be created");
+ }
+
return hasDeployed;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/2c07846c/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
index 73bd6db..98c0afa 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -27,14 +27,14 @@ import org.apache.stratos.autoscaler.context.cluster.ClusterContextFactory;
import org.apache.stratos.autoscaler.context.cluster.VMClusterContext;
import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
import org.apache.stratos.autoscaler.event.publisher.InstanceNotificationPublisher;
-import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
-import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException;
import org.apache.stratos.autoscaler.exception.partition.PartitionValidationException;
import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException;
-import org.apache.stratos.autoscaler.monitor.MonitorFactory;
import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor;
import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor;
import org.apache.stratos.autoscaler.monitor.events.ClusterStatusEvent;
+import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
+import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
+import org.apache.stratos.autoscaler.util.AutoscalerUtil;
import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
import org.apache.stratos.messaging.domain.applications.Application;
import org.apache.stratos.messaging.domain.applications.Applications;
@@ -143,7 +143,17 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
if (applications != null) {
for (Application application : applications.getApplications().values()) {
if (allClustersInitialized(application)) {
- startApplicationMonitor(application.getUniqueIdentifier());
+ DeploymentPolicy policy = PolicyManager.getInstance().
+ getDeploymentPolicyByApplication(
+ application.getUniqueIdentifier());
+ if(policy != null) {
+ AutoscalerUtil.getInstance().
+ startApplicationMonitor(application.getUniqueIdentifier());
+ } else {
+ log.info("The relevant application policy is not yet " +
+ "deployed for this [application] " +
+ application.getUniqueIdentifier());
+ }
} else {
log.error("Complete Topology is not consistent with the applications " +
"which got persisted");
@@ -175,7 +185,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
//acquire read lock
ApplicationHolder.acquireReadLock();
//start the application monitor
- startApplicationMonitor(appId);
+ //startApplicationMonitor(appId);
} catch (Exception e) {
String msg = "Error processing event " + e.getLocalizedMessage();
log.error(msg, e);
@@ -432,81 +442,81 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
});
topologyEventReceiver.addEventListener(new ClusterInstanceCreatedEventListener() {
- @Override
- protected void onEvent(Event event) {
-
- ClusterInstanceCreatedEvent clusterInstanceCreatedEvent =
- (ClusterInstanceCreatedEvent) event;
- AbstractClusterMonitor clusterMonitor = AutoscalerContext.getInstance().
- getClusterMonitor(clusterInstanceCreatedEvent.getClusterId());
- String instanceId = ((ClusterInstanceCreatedEvent) event).getInstanceId();
- //FIXME to take lock when clusterMonitor is running
- if (clusterMonitor != null) {
- TopologyManager.acquireReadLockForCluster(clusterInstanceCreatedEvent.getServiceName(),
- clusterInstanceCreatedEvent.getClusterId());
-
- try {
- Service service = TopologyManager.getTopology().
- getService(clusterInstanceCreatedEvent.getServiceName());
-
- if (service != null) {
- Cluster cluster = service.getCluster(clusterInstanceCreatedEvent.getClusterId());
- if (cluster != null) {
- try {
- if (cluster.isKubernetesCluster()) {
- clusterMonitor.setClusterContext(
- ClusterContextFactory.getKubernetesClusterContext(
- instanceId,
- cluster));
- } else {
- VMClusterContext clusterContext =
- (VMClusterContext) clusterMonitor.getClusterContext();
- if (clusterContext == null) {
- clusterMonitor.setClusterContext(
- ClusterContextFactory.
- getVMServiceClusterContext(instanceId,
- cluster));
- } else {
- clusterContext.addInstanceContext(instanceId, cluster);
- }
-
- }
- if (clusterMonitor.hasMonitoringStarted().compareAndSet(false, true)) {
- clusterMonitor.startScheduler();
- log.info("Monitoring task for Cluster Monitor with cluster id " +
- clusterInstanceCreatedEvent.getClusterId() + " started successfully");
- }
- } catch (PolicyValidationException e) {
- log.error(e.getMessage(), e);
- } catch (PartitionValidationException e) {
- log.error(e.getMessage(), e);
- }
- }
-
- } else {
- log.error("Service " + clusterInstanceCreatedEvent.getServiceName() +
- " not found, no cluster instance added to ClusterMonitor " +
- clusterInstanceCreatedEvent.getClusterId());
- }
-
- }finally{
- TopologyManager.releaseReadLockForCluster(clusterInstanceCreatedEvent.getServiceName(),
- clusterInstanceCreatedEvent.getClusterId());
- }
-
- }else{
- log.error("No Cluster Monitor found for cluster id " +
- clusterInstanceCreatedEvent.getClusterId());
- }
- }
- }
-
- );
- }
+ @Override
+ protected void onEvent(Event event) {
+
+ ClusterInstanceCreatedEvent clusterInstanceCreatedEvent =
+ (ClusterInstanceCreatedEvent) event;
+ AbstractClusterMonitor clusterMonitor = AutoscalerContext.getInstance().
+ getClusterMonitor(clusterInstanceCreatedEvent.getClusterId());
+ String instanceId = ((ClusterInstanceCreatedEvent) event).getInstanceId();
+ //FIXME to take lock when clusterMonitor is running
+ if (clusterMonitor != null) {
+ TopologyManager.acquireReadLockForCluster(clusterInstanceCreatedEvent.getServiceName(),
+ clusterInstanceCreatedEvent.getClusterId());
+
+ try {
+ Service service = TopologyManager.getTopology().
+ getService(clusterInstanceCreatedEvent.getServiceName());
+
+ if (service != null) {
+ Cluster cluster = service.getCluster(clusterInstanceCreatedEvent.getClusterId());
+ if (cluster != null) {
+ try {
+ if (cluster.isKubernetesCluster()) {
+ clusterMonitor.setClusterContext(
+ ClusterContextFactory.getKubernetesClusterContext(
+ instanceId,
+ cluster));
+ } else {
+ VMClusterContext clusterContext =
+ (VMClusterContext) clusterMonitor.getClusterContext();
+ if (clusterContext == null) {
+ clusterMonitor.setClusterContext(
+ ClusterContextFactory.
+ getVMServiceClusterContext(instanceId,
+ cluster));
+ } else {
+ clusterContext.addInstanceContext(instanceId, cluster);
+ }
+
+ }
+ if (clusterMonitor.hasMonitoringStarted().compareAndSet(false, true)) {
+ clusterMonitor.startScheduler();
+ log.info("Monitoring task for Cluster Monitor with cluster id " +
+ clusterInstanceCreatedEvent.getClusterId() + " started successfully");
+ }
+ } catch (PolicyValidationException e) {
+ log.error(e.getMessage(), e);
+ } catch (PartitionValidationException e) {
+ log.error(e.getMessage(), e);
+ }
+ }
+
+ } else {
+ log.error("Service " + clusterInstanceCreatedEvent.getServiceName() +
+ " not found, no cluster instance added to ClusterMonitor " +
+ clusterInstanceCreatedEvent.getClusterId());
+ }
+
+ } finally {
+ TopologyManager.releaseReadLockForCluster(clusterInstanceCreatedEvent.getServiceName(),
+ clusterInstanceCreatedEvent.getClusterId());
+ }
+
+ } else {
+ log.error("No Cluster Monitor found for cluster id " +
+ clusterInstanceCreatedEvent.getClusterId());
+ }
+ }
+ }
+
+ );
+ }
- /**
- * Terminate load balancer topology receiver thread.
- */
+ /**
+ * Terminate load balancer topology receiver thread.
+ */
public void terminate() {
topologyEventReceiver.terminate();
@@ -514,5 +524,4 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
}
-
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/2c07846c/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
index 31a1f74..ca9a4a7 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
@@ -286,4 +286,13 @@ public class PolicyManager {
return deploymentPolicyListMap.get(id);
}
+ public DeploymentPolicy getDeploymentPolicyByApplication(String appId) {
+ for(DeploymentPolicy deploymentPolicy : deploymentPolicyListMap.values()) {
+ if(deploymentPolicy.getApplicationId().equals(appId)) {
+ return deploymentPolicy;
+ }
+ }
+ return null;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/2c07846c/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/ChildPolicy.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/ChildPolicy.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/ChildPolicy.java
index 1f4a8b4..9d78dcf 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/ChildPolicy.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/ChildPolicy.java
@@ -20,10 +20,12 @@ package org.apache.stratos.autoscaler.pojo.policy.deployment;
import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelNetworkPartition;
+import java.io.Serializable;
+
/**
* This will keep the Children's policy in an application
*/
-public class ChildPolicy {
+public class ChildPolicy implements Serializable {
private String id;
private ChildLevelNetworkPartition[] childLevelNetworkPartitions;
http://git-wip-us.apache.org/repos/asf/stratos/blob/2c07846c/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/partition/network/ChildLevelPartition.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/partition/network/ChildLevelPartition.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/partition/network/ChildLevelPartition.java
index 691cb07..8c3b140 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/partition/network/ChildLevelPartition.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/partition/network/ChildLevelPartition.java
@@ -19,17 +19,13 @@
package org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network;
-public class ChildLevelPartition {
+import java.io.Serializable;
+
+public class ChildLevelPartition implements Serializable {
private String partitionId;
private String networkPartitionId;
private int max;
- public ChildLevelPartition(String partitionId, String networkPartitionId, int max) {
- this.partitionId = partitionId;
- this.networkPartitionId = networkPartitionId;
- this.max = max;
- }
-
public int getMax() {
return max;
}
@@ -41,4 +37,16 @@ public class ChildLevelPartition {
public String getPartitionId() {
return partitionId;
}
+
+ public void setPartitionId(String partitionId) {
+ this.partitionId = partitionId;
+ }
+
+ public void setNetworkPartitionId(String networkPartitionId) {
+ this.networkPartitionId = networkPartitionId;
+ }
+
+ public void setMax(int max) {
+ this.max = max;
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/2c07846c/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
index 077a1a4..476e8bb 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
@@ -38,6 +38,10 @@ import org.apache.stratos.common.Properties;
import org.apache.stratos.common.Property;
import org.apache.stratos.messaging.domain.applications.Application;
import org.apache.stratos.messaging.domain.applications.Applications;
+import org.apache.stratos.messaging.domain.applications.ClusterDataHolder;
+import org.apache.stratos.messaging.domain.topology.Service;
+import org.apache.stratos.messaging.domain.topology.Topology;
+import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
/**
@@ -51,6 +55,13 @@ public class AutoscalerUtil {
}
+ public static AutoscalerUtil getInstance() {
+ return Holder.INSTANCE;
+ }
+ private static class Holder {
+ private static final AutoscalerUtil INSTANCE = new AutoscalerUtil();
+ }
+
public static Applications getApplications () {
Applications applications;
@@ -88,6 +99,47 @@ public class AutoscalerUtil {
return clusterId.substring(0, clusterId.indexOf("."));
}
+ public static boolean allClustersInitialized(Application application) {
+ boolean allClustersInitialized = false;
+ for (ClusterDataHolder holder : application.getClusterDataRecursively()) {
+ TopologyManager.acquireReadLockForCluster(holder.getServiceType(),
+ holder.getClusterId());
+
+ try {
+ Topology topology = TopologyManager.getTopology();
+ if (topology != null) {
+ Service service = topology.getService(holder.getServiceType());
+ if (service != null) {
+ if (service.clusterExists(holder.getClusterId())) {
+ allClustersInitialized = true;
+ return allClustersInitialized;
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("[Cluster] " + holder.getClusterId() + " is not found in " +
+ "the Topology");
+ }
+ allClustersInitialized = false;
+ }
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Service is null in the CompleteTopologyEvent");
+ }
+ }
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Topology is null in the CompleteTopologyEvent");
+ }
+ }
+ } finally {
+ TopologyManager.releaseReadLockForCluster(holder.getServiceType(),
+ holder.getClusterId());
+ }
+ }
+ return allClustersInitialized;
+ }
+
+
+
/*public static LbClusterMonitor getLBClusterMonitor(Cluster cluster) throws PolicyValidationException, PartitionValidationException {
// FIXME fix the following code to correctly update
// AutoscalerContext context = AutoscalerContext.getInstance();
@@ -297,7 +349,7 @@ public class AutoscalerUtil {
return toCommonProperties(properties);
}
- protected synchronized void startApplicationMonitor(String applicationId) {
+ public synchronized void startApplicationMonitor(String applicationId) {
Thread th = null;
if (AutoscalerContext.getInstance().getAppMonitor(applicationId) == null) {
th = new Thread(new ApplicationMonitorAdder(applicationId));
http://git-wip-us.apache.org/repos/asf/stratos/blob/2c07846c/components/org.apache.stratos.cloud.controller/pom.xml
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/pom.xml b/components/org.apache.stratos.cloud.controller/pom.xml
index 5889c1d..1a9445a 100644
--- a/components/org.apache.stratos.cloud.controller/pom.xml
+++ b/components/org.apache.stratos.cloud.controller/pom.xml
@@ -49,12 +49,10 @@
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Name>${project.artifactId}</Bundle-Name>
<Export-Package>
- !org.apache.stratos.cloud.controller.services.impl.*,
!org.apache.stratos.cloud.controller.internal.*,
org.apache.stratos.cloud.controller.*,
</Export-Package>
<Private-Package>
- org.apache.stratos.cloud.controller.services.impl.*,
org.apache.stratos.cloud.controller.internal.*,
</Private-Package>
<Import-Package>
http://git-wip-us.apache.org/repos/asf/stratos/blob/2c07846c/components/org.apache.stratos.cloud.controller/src/main/resources/META-INF/services.xml
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/resources/META-INF/services.xml b/components/org.apache.stratos.cloud.controller/src/main/resources/META-INF/services.xml
index f0283f5..3f365e7 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/resources/META-INF/services.xml
+++ b/components/org.apache.stratos.cloud.controller/src/main/resources/META-INF/services.xml
@@ -22,7 +22,7 @@
<serviceGroup>
<service name="CloudControllerService" scope="application">
- <parameter name="ServiceClass">org.apache.stratos.cloud.controller.services.CloudControllerServiceImpl</parameter>
+ <parameter name="ServiceClass">org.apache.stratos.cloud.controller.services.impl.CloudControllerServiceImpl</parameter>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/ns/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver mep="http://www.w3.org/ns/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
http://git-wip-us.apache.org/repos/asf/stratos/blob/2c07846c/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 fe47ca4..428d3da 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
@@ -26,6 +26,7 @@ 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;
@@ -34,7 +35,7 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* Provides objects to be managed in distributed and non-distributed environments.
*/
-public class DistributedObjectProvider {
+public class DistributedObjectProvider implements Serializable {
private static final Log log = LogFactory.getLog(DistributedObjectProvider.class);
private final boolean clustered;