Merge branch '4.0.0-grouping' into docker-grouping-merge
Conflicts:
components/org.apache.stratos.autoscaler/pom.xml
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/interfaces/AutoScalerServiceInterface.java
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractClusterMonitor.java
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoScalerConstants.java
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerDSComponent.java
components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/payload/MetaDataHolder.java
components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/AutoscalerServiceClient.java
components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java
components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/applications/ApplicationsEventMessageListener.java
components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/util/Constants.java
components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
service-stubs/org.apache.stratos.autoscaler.service.stub/pom.xml
service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoScalerService.wsdl
service-stubs/org.apache.stratos.cloud.controller.service.stub/pom.xml
service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/89fb37af
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/89fb37af
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/89fb37af
Branch: refs/heads/docker-grouping-merge
Commit: 89fb37afb2e80aabf1aa1d393e2185c34f7a1298
Parents: a61fc9d 14f5fe0
Author: Imesh Gunaratne <[email protected]>
Authored: Mon Nov 3 13:01:54 2014 +0530
Committer: Imesh Gunaratne <[email protected]>
Committed: Mon Nov 3 13:01:54 2014 +0530
----------------------------------------------------------------------
.../org.apache.stratos.autoscaler/pom.xml | 8 +
.../apache/stratos/autoscaler/Constants.java | 10 +-
.../stratos/autoscaler/PartitionContext.java | 106 +-
.../autoscaler/api/AutoScalerServiceImpl.java | 126 +-
.../applications/ApplicationHolder.java | 122 ++
.../ApplicationSynchronizeTask.java | 53 +
.../ApplicationSynchronizerTaskScheduler.java | 87 ++
.../applications/ApplicationUtils.java | 289 +++++
.../applications/ClusterInformation.java | 27 +
.../applications/MTClusterInformation.java | 47 +
.../applications/STClusterInformation.java | 57 +
.../dependency/DependencyBuilder.java | 156 +++
.../applications/dependency/DependencyTree.java | 290 +++++
.../dependency/context/ApplicationContext.java | 113 ++
.../context/ApplicationContextFactory.java | 101 ++
.../dependency/context/ClusterContext.java | 38 +
.../dependency/context/GroupContext.java | 25 +
.../applications/parser/ApplicationParser.java | 53 +
.../parser/DefaultApplicationParser.java | 679 +++++++++++
.../applications/parser/ParserUtils.java | 142 +++
.../ApplicationCartridgePayloadData.java | 27 +
.../applications/payload/BasicPayloadData.java | 311 +++++
.../payload/DataCartridgePayloadData.java | 27 +
.../payload/FrameworkCartridgePayloadData.java | 27 +
.../LoadBalancerCartridgePayloadData.java | 27 +
.../applications/payload/PayloadData.java | 69 ++
.../applications/payload/PayloadFactory.java | 59 +
.../pojo/ApplicationClusterContext.java | 137 +++
.../applications/pojo/ApplicationContext.java | 112 ++
.../applications/pojo/ComponentContext.java | 58 +
.../applications/pojo/DependencyContext.java | 48 +
.../applications/pojo/GroupContext.java | 88 ++
.../applications/pojo/SubscribableContext.java | 47 +
.../pojo/SubscribableInfoContext.java | 107 ++
.../applications/topic/ApplicationBuilder.java | 664 +++++++++++
.../topic/ApplicationsEventPublisher.java | 251 ++++
.../cloud/controller/CloudControllerClient.java | 78 +-
.../ApplicationDefinitionException.java | 48 +
.../CartridgeInformationException.java | 47 +
.../exception/InvalidServiceGroupException.java | 46 +
.../grouping/dependency/DependencyBuilder.java | 158 ---
.../grouping/dependency/DependencyTree.java | 291 -----
.../dependency/context/ApplicationContext.java | 113 --
.../context/ApplicationContextFactory.java | 102 --
.../dependency/context/ClusterContext.java | 38 -
.../dependency/context/GroupContext.java | 25 -
.../topic/ClusterStatusEventPublisher.java | 195 +++
.../grouping/topic/StatusEventPublisher.java | 312 -----
.../interfaces/AutoScalerServiceInterface.java | 26 +-
.../internal/AutoscalerServerComponent.java | 37 +-
.../AutoscalerTopologyEventReceiver.java | 731 ++++++++----
.../monitor/AbstractClusterMonitor.java | 277 +++++
.../monitor/MonitorStatusEventBuilder.java | 4 +-
.../monitor/ParentComponentMonitor.java | 106 +-
.../monitor/application/ApplicationMonitor.java | 24 +-
.../application/ApplicationMonitorFactory.java | 33 +-
.../cluster/VMServiceClusterMonitor.java | 147 ++-
.../monitor/events/ApplicationStatusEvent.java | 2 +-
.../monitor/events/GroupStatusEvent.java | 2 +-
.../autoscaler/monitor/group/GroupMonitor.java | 39 +-
.../stratos/autoscaler/pojo/Dependencies.java | 46 +
.../stratos/autoscaler/pojo/ServiceGroup.java | 67 ++
.../autoscaler/registry/RegistryManager.java | 150 ++-
.../status/checker/StatusChecker.java | 287 +++--
.../autoscaler/util/AutoScalerConstants.java | 5 +-
.../stratos/autoscaler/util/AutoscalerUtil.java | 222 ++++
.../stratos/autoscaler/util/Deserializer.java | 10 +-
.../autoscaler/util/ServiceReferenceHolder.java | 12 +-
.../application/ApplicationUtils.java | 291 -----
.../application/ClusterInformation.java | 27 -
.../application/MTClusterInformation.java | 45 -
.../application/STClusterInformation.java | 55 -
.../parser/DefaultApplicationParser.java | 619 ----------
.../application/parser/ParserUtils.java | 142 ---
.../ApplicationCartridgePayloadData.java | 27 -
.../application/payload/BasicPayloadData.java | 311 -----
.../payload/DataCartridgePayloadData.java | 27 -
.../payload/FrameworkCartridgePayloadData.java | 27 -
.../LoadBalancerCartridgePayloadData.java | 27 -
.../application/payload/PayloadData.java | 69 --
.../application/payload/PayloadFactory.java | 59 -
.../ApplicationStatusTopicReceiver.java | 175 ---
.../receiver/ClusterStatusTopicReceiver.java | 113 ++
.../interfaces/ApplicationParser.java | 53 -
.../interfaces/CloudControllerService.java | 17 -
.../internal/CloudControllerDSComponent.java | 12 +-
.../pojo/application/ApplicationContext.java | 112 --
.../pojo/application/ComponentContext.java | 58 -
.../pojo/application/DependencyContext.java | 48 -
.../pojo/application/GroupContext.java | 88 --
.../pojo/application/SubscribableContext.java | 47 -
.../application/SubscribableInfoContext.java | 107 --
.../controller/pojo/payload/MetaDataHolder.java | 5 +-
.../controller/topology/TopologyBuilder.java | 483 ++------
.../topology/TopologyEventPublisher.java | 28 +
.../CompositeApplicationParseTest.java | 1108 +++++++++---------
.../manager/client/AutoscalerServiceClient.java | 24 +
.../client/CloudControllerServiceClient.java | 16 -
.../DefaultCompositeApplicationParser.java | 6 +-
.../definitions/DependencyDefinitions.java | 10 +-
.../deployer/DefaultServiceGroupDeployer.java | 70 +-
.../StratosManagerTopologyEventReceiver.java | 21 +-
.../domain/applications/Application.java | 124 ++
.../domain/applications/ApplicationStatus.java | 74 ++
.../domain/applications/Applications.java | 73 ++
.../domain/applications/ClusterDataHolder.java | 50 +
.../domain/applications/DependencyOrder.java | 52 +
.../messaging/domain/applications/Group.java | 119 ++
.../domain/applications/GroupStatus.java | 73 ++
.../domain/applications/ParentComponent.java | 212 ++++
.../domain/applications/StartupOrder.java | 40 +
.../applications/locking/ApplicationLock.java | 59 +
.../locking/ApplicationLockHierarchy.java | 91 ++
.../messaging/domain/topology/Application.java | 123 --
.../domain/topology/ApplicationStatus.java | 74 --
.../messaging/domain/topology/Cluster.java | 6 +-
.../domain/topology/ClusterDataHolder.java | 51 -
.../domain/topology/ClusterStatus.java | 2 +-
.../domain/topology/DependencyOrder.java | 54 -
.../messaging/domain/topology/Group.java | 111 --
.../messaging/domain/topology/GroupStatus.java | 73 --
.../domain/topology/ParentComponent.java | 212 ----
.../messaging/domain/topology/StartupOrder.java | 40 -
.../messaging/domain/topology/Topology.java | 112 +-
.../topology/locking/TopologyLockHierarchy.java | 42 -
.../AppStatusApplicationActivatedEvent.java | 38 -
.../AppStatusApplicationCreatedEvent.java | 38 -
.../AppStatusApplicationInactivatedEvent.java | 38 -
.../AppStatusApplicationTerminatedEvent.java | 47 -
.../AppStatusApplicationTerminatingEvent.java | 38 -
.../status/AppStatusClusterActivatedEvent.java | 50 -
.../status/AppStatusClusterInactivateEvent.java | 50 -
.../AppStatusClusterMaintenanceModeEvent.java | 49 -
.../AppStatusClusterReadyToShutdownEvent.java | 47 -
.../status/AppStatusClusterTerminatedEvent.java | 50 -
.../AppStatusClusterTerminatingEvent.java | 50 -
.../status/AppStatusGroupActivatedEvent.java | 44 -
.../status/AppStatusGroupInactivateEvent.java | 44 -
.../AppStatusGroupMaintenanceModeEvent.java | 41 -
.../AppStatusGroupReadyToShutdownEvent.java | 40 -
.../status/AppStatusGroupTerminatedEvent.java | 44 -
.../status/AppStatusGroupTerminatingEvent.java | 44 -
.../event/application/status/StatusEvent.java | 31 -
.../AppStatusGroupInactivateEvent.java | 48 +
.../applications/ApplicationActivatedEvent.java | 40 +
.../applications/ApplicationCreatedEvent.java | 41 +
.../ApplicationInactivatedEvent.java | 40 +
.../ApplicationTerminatedEvent.java | 48 +
.../ApplicationTerminatingEvent.java | 40 +
.../applications/CompleteApplicationsEvent.java | 44 +
.../event/applications/GroupActivatedEvent.java | 48 +
.../applications/GroupMaintenanceModeEvent.java | 45 +
.../applications/GroupReadyToShutdownEvent.java | 44 +
.../event/applications/GroupResetEvent.java | 48 +
.../applications/GroupTerminatedEvent.java | 48 +
.../applications/GroupTerminatingEvent.java | 48 +
.../ClusterStatusClusterActivatedEvent.java | 52 +
.../ClusterStatusClusterCreatedEvent.java | 85 ++
.../ClusterStatusClusterInactivateEvent.java | 52 +
.../status/ClusterStatusClusterResetEvent.java | 52 +
.../ClusterStatusClusterTerminatedEvent.java | 52 +
.../ClusterStatusClusterTerminatingEvent.java | 52 +
.../event/topology/ApplicationCreatedEvent.java | 2 +-
.../topology/ApplicationTerminatedEvent.java | 2 +-
.../topology/ApplicationUndeployedEvent.java | 2 +-
.../event/topology/ClusterCreatedEvent.java | 26 +-
.../event/topology/ClusterResetEvent.java | 56 +
.../event/topology/GroupCreatedEvent.java | 43 +
...StatusApplicationActivatedEventListener.java | 27 -
...ppStatusApplicationCreatedEventListener.java | 27 -
...atusApplicationInactivatedEventListener.java | 27 -
...tatusApplicationTerminatedEventListener.java | 27 -
...atusApplicationTerminatingEventListener.java | 27 -
.../AppStatusClusterActivatedEventListener.java | 24 -
...AppStatusClusterInactivateEventListener.java | 24 -
...AppStatusClusterTerminatedEventListener.java | 24 -
...ppStatusClusterTerminatingEventListener.java | 24 -
.../AppStatusGroupActivatedEventListener.java | 24 -
.../AppStatusGroupInactivateEventListener.java | 24 -
.../AppStatusGroupTerminatedEventListener.java | 24 -
.../AppStatusGroupTerminatingEventListener.java | 24 -
.../ApplicationActivatedEventListener.java | 27 +
.../ApplicationCreatedEventListener.java | 27 +
.../ApplicationInactivatedEventListener.java | 27 +
.../ApplicationTerminatedEventListener.java | 27 +
.../ApplicationTerminatingEventListener.java | 27 +
.../ApplicationUndeployedEventListener.java | 26 +
.../CompleteApplicationsEventListener.java | 26 +
.../GroupActivatedEventListener.java | 24 +
.../GroupInactivateEventListener.java | 24 +
.../applications/GroupResetEventListener.java | 24 +
.../GroupTerminatedEventListener.java | 24 +
.../GroupTerminatingEventListener.java | 24 +
...sterStatusClusterActivatedEventListener.java | 24 +
...lusterStatusClusterCreatedEventListener.java | 24 +
...terStatusClusterInactivateEventListener.java | 24 +
.../ClusterStatusClusterResetEventListener.java | 24 +
...terStatusClusterTerminatedEventListener.java | 24 +
...erStatusClusterTerminatingEventListener.java | 24 +
.../ApplicationActivatedEventListener.java | 27 -
.../ApplicationCreatedEventListener.java | 26 -
.../ApplicationInActivateEventListener.java | 27 -
.../ApplicationTerminatedEventListener.java | 27 -
.../ApplicationTerminatingEventListener.java | 27 -
.../ApplicationUndeployedEventListener.java | 26 -
.../topology/ClusterResetEventListener.java | 24 +
.../topology/GroupActivatedEventListener.java | 27 -
.../topology/GroupInActivateEventListener.java | 27 -
.../topology/GroupTerminatedEventListener.java | 27 -
.../topology/GroupTerminatingEventListener.java | 27 -
...tusApplicationActivatedMessageProcessor.java | 62 -
...tatusApplicationCreatedMessageProcessor.java | 63 -
...sApplicationInactivatedMessageProcessor.java | 63 -
...usApplicationTerminatedMessageProcessor.java | 63 -
...sApplicationTerminatingMessageProcessor.java | 63 -
...pStatusClusterActivatedMessageProcessor.java | 57 -
...StatusClusterInactivateMessageProcessor.java | 58 -
...StatusClusterTerminatedMessageProcessor.java | 58 -
...tatusClusterTerminatingMessageProcessor.java | 58 -
...AppStatusGroupActivatedMessageProcessor.java | 61 -
...pStatusGroupInactivatedMessageProcessor.java | 61 -
...ppStatusGroupTerminatedMessageProcessor.java | 61 -
...pStatusGroupTerminatingMessageProcessor.java | 61 -
.../status/AppStatusMessageProcessorChain.java | 126 --
.../ApplicationActivatedMessageProcessor.java | 104 ++
.../ApplicationCreatedMessageProcessor.java | 101 ++
.../ApplicationInactivatedMessageProcessor.java | 104 ++
.../ApplicationTerminatedMessageProcessor.java | 138 +++
.../ApplicationTerminatingMessageProcessor.java | 104 ++
.../ApplicationUndeployedMessageProcessor.java | 141 +++
.../ApplicationsMessageProcessorChain.java | 115 ++
.../CompleteApplicationsMessageProcessor.java | 98 ++
.../applications/GroupActivatedProcessor.java | 107 ++
.../applications/GroupInActivateProcessor.java | 106 ++
.../applications/GroupResetProcessor.java | 108 ++
.../applications/GroupTerminatedProcessor.java | 107 ++
.../applications/GroupTerminatingProcessor.java | 107 ++
.../updater/ApplicationsUpdater.java | 138 +++
...rStatusClusterActivatedMessageProcessor.java | 58 +
...terStatusClusterCreatedMessageProcessor.java | 58 +
...StatusClusterInactivateMessageProcessor.java | 58 +
...usterStatusClusterResetMessageProcessor.java | 58 +
...StatusClusterTerminatedMessageProcessor.java | 58 +
...tatusClusterTerminatingMessageProcessor.java | 58 +
.../ClusterStatusMessageProcessorChain.java | 84 ++
.../ApplicationActivatedMessageProcessor.java | 104 --
.../ApplicationCreatedMessageProcessor.java | 121 --
.../ApplicationInactivatedMessageProcessor.java | 104 --
.../ApplicationTerminatedMessageProcessor.java | 136 ---
.../ApplicationTerminatingMessageProcessor.java | 104 --
.../ApplicationUndeployedMessageProcessor.java | 136 ---
.../ClusterCreatedMessageProcessor.java | 36 +-
.../topology/ClusterResetMessageProcessor.java | 146 +++
.../CompleteTopologyMessageProcessor.java | 16 +-
.../topology/GroupActivatedProcessor.java | 104 --
.../topology/GroupInActivateProcessor.java | 107 --
.../topology/GroupTerminatedProcessor.java | 107 --
.../topology/GroupTerminatingProcessor.java | 107 --
.../topology/TopologyMessageProcessorChain.java | 69 +-
.../topology/updater/TopologyUpdater.java | 68 +-
.../ApplicationStatusEventMessageDelegator.java | 146 ---
.../ApplicationStatusEventMessageListener.java | 74 --
.../ApplicationStatusEventMessageQueue.java | 26 -
.../status/ApplicationStatusEventReceiver.java | 83 --
.../applications/ApplicationManager.java | 119 ++
.../ApplicationsEventMessageDelegator.java | 146 +++
.../ApplicationsEventMessageListener.java | 74 ++
.../ApplicationsEventMessageQueue.java | 26 +
.../applications/ApplicationsEventReceiver.java | 83 ++
.../ClusterStatusEventMessageDelegator.java | 146 +++
.../ClusterStatusEventMessageListener.java | 54 +
.../status/ClusterStatusEventMessageQueue.java | 26 +
.../status/ClusterStatusEventReceiver.java | 83 ++
.../receiver/topology/TopologyManager.java | 67 +-
.../topology/locking/TopologyLockingTest.java | 6 +-
.../bean/util/converter/PojoConverter.java | 16 +-
.../rest/endpoint/services/ServiceUtils.java | 35 +-
.../webapp/stratos/WEB-INF/schemas/schema.xsd | 2 +-
278 files changed, 13054 insertions(+), 9921 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/pom.xml
----------------------------------------------------------------------
diff --cc components/org.apache.stratos.autoscaler/pom.xml
index 6fcd1f0,5ba1eba..27ef199
--- a/components/org.apache.stratos.autoscaler/pom.xml
+++ b/components/org.apache.stratos.autoscaler/pom.xml
@@@ -149,14 -150,9 +150,15 @@@
<groupId>org.apache.stratos</groupId>
<artifactId>org.apache.stratos.messaging</artifactId>
<version>${project.version}</version>
+ <scope>provided</scope>
</dependency>
<dependency>
+ <groupId>org.apache.stratos</groupId>
+ <artifactId>org.apache.stratos.common</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>org.wso2.carbon</groupId>
<artifactId>org.wso2.carbon.utils</artifactId>
<version>4.2.0</version>
http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
----------------------------------------------------------------------
diff --cc
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
index 520cf86,467bbc2..b008ec4
---
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
+++
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
@@@ -26,26 -26,11 +26,26 @@@ import org.apache.stratos.cloud.control
import org.apache.stratos.cloud.controller.stub.pojo.MemberContext;
import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
+ import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
+import org.apache.commons.configuration.XMLConfiguration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.util.ConfUtil;
+import
org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
+import org.apache.stratos.cloud.controller.stub.pojo.MemberContext;
+import org.apache.stratos.common.constants.StratosConstants;
-
/**
* This is an object that inserted to the rules engine.
* Holds information about a partition.
http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
----------------------------------------------------------------------
diff --cc
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
index 3066034,4938b4c..fda23ca
---
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
@@@ -18,26 -18,29 +18,36 @@@
*/
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.AutoscalerContext;
import org.apache.stratos.autoscaler.NetworkPartitionLbHolder;
+ import org.apache.stratos.autoscaler.applications.parser.ApplicationParser;
+ import
org.apache.stratos.autoscaler.applications.parser.DefaultApplicationParser;
+ import org.apache.stratos.autoscaler.applications.pojo.ApplicationContext;
+ import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
import
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
import org.apache.stratos.autoscaler.exception.*;
import org.apache.stratos.autoscaler.interfaces.AutoScalerServiceInterface;
+import org.apache.stratos.autoscaler.kubernetes.KubernetesManager;
+import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor;
import org.apache.stratos.autoscaler.partition.PartitionGroup;
import org.apache.stratos.autoscaler.partition.PartitionManager;
+ import org.apache.stratos.autoscaler.pojo.Dependencies;
+ import org.apache.stratos.autoscaler.pojo.ServiceGroup;
import org.apache.stratos.autoscaler.policy.PolicyManager;
import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
+ import org.apache.stratos.autoscaler.registry.RegistryManager;
import
org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
+import org.apache.stratos.cloud.controller.stub.pojo.Properties;
+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 java.text.MessageFormat;
import java.util.ArrayList;
/**
@@@ -271,8 -209,8 +281,25 @@@ public class AutoScalerServiceImpl impl
return null;
}
-
- public boolean checkServiceLBExistenceAgainstPolicy(String serviceName,
String deploymentPolicyId) {
++
++ @Override
++ public void deployApplicationDefinition(ApplicationContext
applicationContext)
++ throws ApplicationDefinitionException {
++
++ ApplicationParser applicationParser = new DefaultApplicationParser();
++ Application application = applicationParser.parse(applicationContext);
++ ApplicationBuilder.handleApplicationCreated(application,
++ applicationParser.getApplicationClusterContexts());
++ }
+
++ @Override
++ public void unDeployApplicationDefinition(String applicationId, int
tenantId, String tenantDomain)
++ throws ApplicationDefinitionException {
++
++ ApplicationBuilder.handleApplicationUndeployed(applicationId);
++ }
++
+ public boolean checkServiceLBExistenceAgainstPolicy(String serviceName,
String deploymentPolicyId) {
for (PartitionGroup partitionGroup :
PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId).getPartitionGroups())
{
@@@ -314,42 -252,121 +341,117 @@@
return null;
}
--
- public boolean checkClusterLBExistenceAgainstPolicy(String clusterId,
String deploymentPolicyId) {
- @Override
- public void deployApplicationDefinition(ApplicationContext
applicationContext)
- throws ApplicationDefinitionException {
-
- ApplicationParser applicationParser = new DefaultApplicationParser();
- Application application = applicationParser.parse(applicationContext);
- ApplicationBuilder.handleApplicationCreated(application,
- applicationParser.getApplicationClusterContexts());
- }
-
- @Override
- public void unDeployApplicationDefinition(String applicationId, int
tenantId, String tenantDomain)
- throws ApplicationDefinitionException {
-
- ApplicationBuilder.handleApplicationUndeployed(applicationId);
- }
-
- public boolean checkClusterLBExistenceAgainstPolicy(String clusterId,
String deploymentPolicyId) {
++
++ public boolean checkClusterLBExistenceAgainstPolicy(String clusterId,
String deploymentPolicyId) {
for (PartitionGroup partitionGroup :
PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId).getPartitionGroups())
{
- NetworkPartitionLbHolder nwPartitionLbHolder =
partitionManager.getNetworkPartitionLbHolder(partitionGroup.getId());
+ NetworkPartitionLbHolder nwPartitionLbHolder =
partitionManager.getNetworkPartitionLbHolder(partitionGroup.getId());
- if (!nwPartitionLbHolder.isClusterLBExist(clusterId)) {
- if (log.isDebugEnabled()) {
- log.debug("Cluster LB [cluster id] " + clusterId + " does
not exist in [network partition] " +
- nwPartitionLbHolder.getNetworkPartitionId() + "
of [Deployment Policy] " +
- deploymentPolicyId);
+ if (!nwPartitionLbHolder.isClusterLBExist(clusterId)) {
+ if (log.isDebugEnabled()) {
+ log.debug("Cluster LB [cluster id] "+clusterId+" does
not exist in [network partition] " +
+ nwPartitionLbHolder.getNetworkPartitionId()
+ " of [Deployment Policy] " +
+ deploymentPolicyId);
+ }
+ return false;
}
- return false;
- }
}
-
+
return true;
-
+
}
+ public void updateClusterMonitor(String clusterId, Properties properties)
throws InvalidArgumentException {
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Updating Cluster monitor [Cluster id] %s
", clusterId));
+ }
+ AutoscalerContext asCtx = AutoscalerContext.getInstance();
+ AbstractClusterMonitor monitor = asCtx.getClusterMonitor(clusterId);
+
+ if (monitor != null) {
+ monitor.handleDynamicUpdates(properties);
+ } else {
+ log.debug(String.format("Updating Cluster monitor failed: Cluster
monitor [Cluster id] %s not found.",
+ clusterId));
+ }
+ }
++
+ public void deployServiceGroup(ServiceGroup servicegroup) throws
InvalidServiceGroupException {
+
+ if (servicegroup == null ||
StringUtils.isEmpty(servicegroup.getName())) {
+ String msg = "Service group can not be null service name can not
be empty.";
+ log.error(msg);
+ throw new IllegalArgumentException(msg);
+
+ }
+ String name = servicegroup.getName();
+
+ if(RegistryManager.getInstance().serviceGroupExist(name)){
+ throw new InvalidServiceGroupException("Service group with the
name " + name + " already exist.");
+ }
+
+ if(log.isDebugEnabled()) {
+ log.debug(MessageFormat.format("Deploying service group {0}",
servicegroup.getName()));
+ }
+
+ String [] subGroups = servicegroup.getCartridges();
+
+ if(log.isDebugEnabled()) {
+ log.debug("SubGroups" + subGroups);
+ if (subGroups != null) {
+ log.debug("subGroups:size" + subGroups.length);
+ } else {
+ log.debug("subGroups: are null");
+ }
+ }
+
+
+ Dependencies dependencies = servicegroup.getDependencies();
+
+ if(log.isDebugEnabled()) {
+ log.debug("Dependencies" + dependencies);
+ }
+
+ if (dependencies != null) {
+ String [] startupOrders = dependencies.getStartupOrders();
+
+ if(log.isDebugEnabled()) {
+ log.debug("StartupOrders" + startupOrders);
+
+ if (startupOrders != null) {
+ log.debug("StartupOrder:size" + startupOrders.length);
+ } else {
+ log.debug("StartupOrder: is null");
+ }
+ }
+ }
+
+ RegistryManager.getInstance().persistServiceGroup(servicegroup);
+ }
+
+ public ServiceGroup getServiceGroup(String name) {
+ if(StringUtils.isEmpty(name)){
+ return null;
+ }
+ try {
+ return RegistryManager.getInstance().getServiceGroup(name);
+ } catch (Exception e) {
+ throw new AutoScalerException("Error occurred while retrieving
service groups", e);
+ }
+ }
+ public boolean serviceGroupExist(String serviceName){
+ return false;
+ }
+ public void undeployServiceGroup(String name) throws AutoScalerException {
+ try {
+ RegistryManager.getInstance().removeServiceGroup(name);
+ } catch (Exception e) {
+ throw new AutoScalerException("Error occurred while removing the
service groups", e);
+ }
+
+ }
-
-
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
----------------------------------------------------------------------
diff --cc
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
index 0000000,fa31385..16a14de
mode 000000,100644..100644
---
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
+++
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
@@@ -1,0 -1,655 +1,679 @@@
+ /*
+ * 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.autoscaler.applications.parser;
++package org.apache.stratos.cloud.controller.application.parser;
+
+ import org.apache.commons.lang.StringUtils;
+ import org.apache.commons.logging.Log;
+ import org.apache.commons.logging.LogFactory;
+ import org.apache.stratos.autoscaler.applications.ApplicationUtils;
+ import org.apache.stratos.autoscaler.applications.MTClusterInformation;
+ import org.apache.stratos.autoscaler.applications.STClusterInformation;
+ import org.apache.stratos.autoscaler.applications.pojo.*;
+ import
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+ import org.apache.stratos.autoscaler.exception.ApplicationDefinitionException;
+ import org.apache.stratos.autoscaler.exception.CartridgeInformationException;
+ import org.apache.stratos.autoscaler.pojo.ServiceGroup;
+ import org.apache.stratos.autoscaler.registry.RegistryManager;
+ import org.apache.stratos.cloud.controller.application.ClusterInformation;
++import org.apache.stratos.cloud.controller.application.MTClusterInformation;
++import org.apache.stratos.cloud.controller.application.STClusterInformation;
++import
org.apache.stratos.cloud.controller.exception.ApplicationDefinitionException;
++import org.apache.stratos.cloud.controller.interfaces.ApplicationParser;
++import org.apache.stratos.cloud.controller.pojo.*;
++import org.apache.stratos.cloud.controller.pojo.Cartridge;
++import org.apache.stratos.cloud.controller.pojo.Properties;
++import org.apache.stratos.cloud.controller.pojo.application.*;
++import org.apache.stratos.cloud.controller.pojo.payload.MetaDataHolder;
++import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
++import org.apache.stratos.common.constants.StratosConstants;
++import org.apache.stratos.messaging.domain.topology.*;
+ import org.apache.stratos.cloud.controller.stub.pojo.CartridgeInfo;
+ import org.apache.stratos.messaging.domain.applications.Application;
+ import org.apache.stratos.messaging.domain.applications.ClusterDataHolder;
+ import org.apache.stratos.messaging.domain.applications.DependencyOrder;
+ import org.apache.stratos.messaging.domain.applications.Group;
+
+ import java.util.*;
+
+ /**
+ * Default implementation of the Application Parser. One Application should
be processed by one
+ * instance of the DefaultApplicationParser.
+ */
+ public class DefaultApplicationParser implements ApplicationParser {
+
+ private static Log log =
LogFactory.getLog(DefaultApplicationParser.class);
+
+ private Set<ApplicationClusterContext> applicationClusterContexts;
+
+ public DefaultApplicationParser () {
+
+ this.applicationClusterContexts = new
HashSet<ApplicationClusterContext>();
+ }
+
+ @Override
+ public Application parse(Object obj) throws
ApplicationDefinitionException {
+
+ ApplicationContext applicationCtxt = (ApplicationContext) obj;
+
+ if (applicationCtxt == null) {
+ handleError("Invalid Composite Application Definition");
+ }
+
+ assert applicationCtxt != null;
+ if (applicationCtxt.getAlias() == null ||
applicationCtxt.getAlias().isEmpty()) {
+ handleError("Invalid alias specified");
+ }
+
+ if (applicationCtxt.getApplicationId() == null ||
applicationCtxt.getApplicationId().isEmpty()) {
+ handleError("Invalid Composite App id specified");
+ }
+
+ // get the defined groups
+ Map<String, GroupContext> definedGroups =
getDefinedGroups(applicationCtxt);
+ if (log.isDebugEnabled()) {
+ if (definedGroups != null) {
+ Set<Map.Entry<String, GroupContext>> groupEntries =
definedGroups.entrySet();
+ log.debug("Defined Groups: [ ");
+ for (Map.Entry<String, GroupContext> groupEntry :
groupEntries) {
+ log.debug("Group alias: " + groupEntry.getKey());
+ }
+ log.debug(" ]");
+ } else {
+ log.debug("No Group definitions found in app id " +
applicationCtxt.getApplicationId());
+ }
+ }
+
+ // get the Subscribables Information
+ Map<String, SubscribableInfoContext> subscribablesInfo =
getSubscribableInformation(applicationCtxt);
+ if (log.isDebugEnabled()) {
+ Set<Map.Entry<String, SubscribableInfoContext>>
subscribableInfoCtxtEntries = subscribablesInfo.entrySet();
+ log.debug("Defined Subscribable Information: [ ");
+ for (Map.Entry<String, SubscribableInfoContext>
subscribableInfoCtxtEntry : subscribableInfoCtxtEntries) {
+ log.debug("Subscribable Information alias: " +
subscribableInfoCtxtEntry.getKey());
+ }
+ log.debug(" ]");
+ }
+
+ if (subscribablesInfo == null) {
+ handleError("Invalid Composite Application Definition, no
Subscribable Information specified");
+ }
+
+ return buildCompositeAppStructure (applicationCtxt, definedGroups,
subscribablesInfo);
+ }
+
+ @Override
+ public Set<ApplicationClusterContext> getApplicationClusterContexts()
throws ApplicationDefinitionException {
+ return applicationClusterContexts;
+ }
+
++ @Override
++ public Set<MetaDataHolder> getPayloadData() throws
ApplicationDefinitionException {
++ return metaDataHolders;
++ }
++
+ /**
+ * Extract Group information from Application Definition
+ *
+ * @param appCtxt ApplicationContext object with Application information
+ * @return Map [group alias -> Group]
+ *
+ * @throws ApplicationDefinitionException if the Group information is
invalid
+ */
+ private Map<String, GroupContext> getDefinedGroups (ApplicationContext
appCtxt) throws
+ ApplicationDefinitionException {
+
+ // map [group alias -> Group Definition]
+ Map<String, GroupContext> definedGroups = null;
+
+ if (appCtxt.getComponents() != null) {
+ if (appCtxt.getComponents().getGroupContexts() != null) {
+ definedGroups = new HashMap<String, GroupContext>();
+
+ for (GroupContext groupContext :
appCtxt.getComponents().getGroupContexts()) {
+
+ // check validity of group name
+ if (StringUtils.isEmpty(groupContext.getName())) {
+ handleError("Invalid Group name specified");
+ }
+
+ // check if group is deployed
+ if(!isGroupDeployed(groupContext.getName())) {
+ handleError("Group with name " +
groupContext.getName() + " not deployed");
+ }
+
+ // check validity of group alias
+
+ if (StringUtils.isEmpty(groupContext.getAlias()) ||
!ApplicationUtils.isAliasValid(groupContext.getAlias())) {
+ handleError("Invalid Group alias specified: [ " +
groupContext.getAlias() + " ]");
+ }
+
+ // check if a group is already defined under the same
alias
+ if(definedGroups.get(groupContext.getAlias()) != null) {
+ // a group with same alias already exists, can't
continue
+ handleError("A Group with alias " +
groupContext.getAlias() + " already exists");
+ }
+
+ definedGroups.put(groupContext.getAlias(), groupContext);
+ if (log.isDebugEnabled()) {
+ log.debug("Added Group Definition [ " +
groupContext.getName() +" , " + groupContext.getAlias() + " ] to map [group
alias -> Group Definition]");
+ }
+ }
+ }
+ }
+
+ return definedGroups;
+ }
+
+ /**
+ * Extract Subscription Information from the Application Definition
+ *
+ * @param appCtxt ApplicationContext object with Application information
+ * @return Map [cartridge alias -> Group]
+ *
+ * @throws ApplicationDefinitionException if the Subscription information
is invalid
+ */
+ private Map<String, SubscribableInfoContext> getSubscribableInformation
(ApplicationContext appCtxt) throws
+ ApplicationDefinitionException {
+
+ // map [cartridge alias -> Subscribable Information]
+ Map<String, SubscribableInfoContext> subscribableInformation = null;
+
+ if (appCtxt.getSubscribableInfoContext() != null) {
+ subscribableInformation = new HashMap<String,
SubscribableInfoContext>();
+
+ for (SubscribableInfoContext subscribableInfoCtxt :
appCtxt.getSubscribableInfoContext()) {
+
+ if (StringUtils.isEmpty(subscribableInfoCtxt.getAlias()) ||
+
!ApplicationUtils.isAliasValid(subscribableInfoCtxt.getAlias())) {
+ handleError("Invalid alias specified for Subscribable
Information Obj: [ " + subscribableInfoCtxt.getAlias() + " ]");
+ }
+
+ // check if a group is already defined under the same alias
+
if(subscribableInformation.get(subscribableInfoCtxt.getAlias()) != null) {
+ // a group with same alias already exists, can't continue
+ handleError("A Subscribable Info obj with alias " +
subscribableInfoCtxt.getAlias() + " already exists");
+ }
+
+ subscribableInformation.put(subscribableInfoCtxt.getAlias(),
subscribableInfoCtxt);
+ if (log.isDebugEnabled()) {
+ log.debug("Added Subcribables Info obj [ " +
subscribableInfoCtxt.getAlias() + " ] to map [cartridge alias -> Subscribable
Information]");
+ }
+ }
+ }
+
+ return subscribableInformation;
+ }
+
+ /**
+ * Check if a Group Definition is deployed
+ *
+ * @param serviceGroupName Group name
+ * @return true if the Group is deployed, else false
+ *
+ * @throws ApplicationDefinitionException
+ */
+ private boolean isGroupDeployed (String serviceGroupName) throws
ApplicationDefinitionException {
+
+ try {
+ return
RegistryManager.getInstance().getServiceGroup(serviceGroupName) != null;
+ } catch (Exception e) {
+ String errorMsg = "Error in checking if Service Group Definition
[ " + serviceGroupName
+ + " ] already exists";
+ log.error(errorMsg, e);
+ throw new ApplicationDefinitionException(errorMsg, e);
+ }
+ }
+
+ /**
+ * Builds the Application structure
+ *
+ * @param appCtxt ApplicationContext object with Application information
+ * @param definedGroupCtxts Map [cartridge alias -> Group] with extracted
Group Information
+ * @param subscribableInfoCtxts Map [cartridge alias -> Group] with
extracted Subscription Information
+ * @return Application Application object denoting the Application
structure
+ *
+ * @throws ApplicationDefinitionException If an error occurs in building
the Application structure
+ */
+ private Application buildCompositeAppStructure (ApplicationContext
appCtxt,
+ Map<String,
GroupContext> definedGroupCtxts,
+ Map<String,
SubscribableInfoContext> subscribableInfoCtxts)
+ throws ApplicationDefinitionException {
+
+ Application application = new Application(appCtxt.getApplicationId());
+
+ // set tenant related information
+ application.setTenantId(appCtxt.getTenantId());
+ application.setTenantDomain(appCtxt.getTenantDomain());
+ application.setTenantAdminUserName(appCtxt.getTeantAdminUsername());
+
+ // following keeps track of all Clusters created for this application
+ //Set<Cluster> clusters = new HashSet<Cluster>();
+ //ClusterDataHolder clusterDataHolder = null;
+ Map<String, ClusterDataHolder> clusterDataMap;
+
+ if (appCtxt.getComponents() != null) {
+ // get top level Subscribables
+ if (appCtxt.getComponents().getSubscribableContexts() != null) {
+ clusterDataMap =
parseLeafLevelSubscriptions(appCtxt.getApplicationId(), appCtxt.getTenantId(),
+ application.getKey(), null,
Arrays.asList(appCtxt.getComponents().getSubscribableContexts()),
- subscribableInfoCtxts);
++ subscribableInfoCtxts, appCtxt.getProperties());
+ application.setClusterData(clusterDataMap);
+
//clusters.addAll(clusterDataHolder.getApplicationClusterContexts());
+ }
+
+ // get Groups
+ if (appCtxt.getComponents().getGroupContexts() != null) {
+ application.setGroups(parseGroups(appCtxt.getApplicationId(),
appCtxt.getTenantId(),
+ application.getKey(),
Arrays.asList(appCtxt.getComponents().getGroupContexts()),
- subscribableInfoCtxts, definedGroupCtxts));
++ subscribableInfoCtxts, definedGroupCtxts,
appCtxt.getProperties()));
+ }
+
+ // get top level Dependency definitions
+ if (appCtxt.getComponents().getDependencyContext() != null) {
+ DependencyOrder appDependencyOrder = new DependencyOrder();
+ String [] startupOrders =
appCtxt.getComponents().getDependencyContext().getStartupOrdersContexts();
+ if (startupOrders != null) {
+ if (log.isDebugEnabled()) {
+ log.debug("parsing application ...
buildCompositeAppStructure: startupOrders != null for app alias: " +
+ appCtxt.getAlias() + " #: " +
startupOrders.length);
+ }
+
appDependencyOrder.setStartupOrders(ParserUtils.convert(startupOrders));
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("parsing application ...
buildCompositeAppStructure: startupOrders == null for app alias: " +
appCtxt.getAlias());
+ }
+ }
+ String terminationBehavior =
appCtxt.getComponents().getDependencyContext().getTerminationBehaviour();
+ validateTerminationBehavior(terminationBehavior);
+
appDependencyOrder.setTerminationBehaviour(terminationBehavior);
+
+ application.setDependencyOrder(appDependencyOrder);
+ }
+ }
+
+ log.info("Application with id " + appCtxt.getApplicationId() + "
parsed successfully");
+
+ return application;
+ }
+
+ /**
+ * Validates terminationBehavior. The terminationBehavior should be one
of the following:
+ * 1. terminate-none
+ * 2. terminate-dependents
+ * 3. terminate-all
+ *
+ * @throws ApplicationDefinitionException if terminationBehavior is
different to what is
+ * listed above
+ */
+ private static void validateTerminationBehavior (String
terminationBehavior) throws ApplicationDefinitionException {
+
+ if (!(terminationBehavior == null ||
"terminate-none".equals(terminationBehavior) ||
+ "terminate-dependents".equals(terminationBehavior) ||
"terminate-all".equals(terminationBehavior))) {
+ throw new ApplicationDefinitionException("Invalid Termination
Behaviour specified: [ " +
+ terminationBehavior + " ], should be one of
'terminate-none', 'terminate-dependents', " +
+ " 'terminate-all' ");
+ }
+ }
+
+ /**
+ * Parse Group information
+ *
+ * @param appId Application id
+ * @param tenantId tenant id of tenant which deployed the Application
+ * @param key Generated key for the Application
+ * @param groupCtxts Group information
+ * @param subscribableInformation Subscribable Information
+ * @param definedGroupCtxts Map [group alias -> Group] with extracted
Group Information
+ * @return Map [alias -> Group]
+ *
+ * @throws ApplicationDefinitionException if an error occurs in parsing
Group Information
+ */
+ private Map<String, Group> parseGroups (String appId, int tenantId,
String key, List<GroupContext> groupCtxts,
+ Map<String,
SubscribableInfoContext> subscribableInformation,
- Map<String, GroupContext>
definedGroupCtxts)
++ Map<String, GroupContext>
definedGroupCtxts, Properties properties)
+ throws ApplicationDefinitionException {
+
+ Map<String, Group> groupAliasToGroup = new HashMap<String, Group>();
+
+ for (GroupContext groupCtxt : groupCtxts) {
- Group group = parseGroup(appId, tenantId, key, groupCtxt,
subscribableInformation, definedGroupCtxts);
++ Group group = parseGroup(appId, tenantId, key, groupCtxt,
subscribableInformation, definedGroupCtxts, properties);
+ groupAliasToGroup.put(group.getAlias(), group);
+ }
+
+ //Set<GroupContext> topLevelGroupContexts =
getTopLevelGroupContexts(groupAliasToGroup);
+ Set<Group> nestedGroups = new HashSet<Group>();
+ getNestedGroupContexts(nestedGroups, groupAliasToGroup.values());
+ filterDuplicatedGroupContexts(groupAliasToGroup.values(),
nestedGroups);
+
+ return groupAliasToGroup;
+ }
+
+ /**
+ * Extracts nested Group information recursively
+ *
+ * @param nestedGroups Nested Groups set to be populated recursively
+ * @param groups Collection of Groups
+ */
+ private void getNestedGroupContexts (Set<Group> nestedGroups,
Collection<Group> groups) {
+
+ if (groups != null) {
+ for (Group group : groups) {
+ if (group.getGroups() != null) {
+ nestedGroups.addAll(group.getGroups());
+ getNestedGroupContexts(nestedGroups, group.getGroups());
+ }
+ }
+ }
+ }
+
+ /**
+ * Filters duplicated Groups from top level
+ *
+ * @param topLevelGroups Top level Groups
+ * @param nestedGroups nested Groups
+ */
+ private void filterDuplicatedGroupContexts (Collection<Group>
topLevelGroups, Set<Group> nestedGroups) {
+
+ for (Group nestedGroup : nestedGroups) {
+ filterNestedGroupFromTopLevel(topLevelGroups, nestedGroup);
+ }
+ }
+
+ private void filterNestedGroupFromTopLevel (Collection<Group>
topLevelGroups, Group nestedGroup) {
+
+ Iterator<Group> parentIterator = topLevelGroups.iterator();
+ while (parentIterator.hasNext()) {
+ Group parentGroup = parentIterator.next();
+ // if there is an exactly similar nested Group Context and a top
level Group Context
+ // it implies that they are duplicates. Should be removed from
top level.
+ if (parentGroup.equals(nestedGroup)) {
+ parentIterator.remove();
+ }
+ }
+ }
+
+ /**
+ * Parses an individual Group
+ *
+ * @param appId Application id
+ * @param tenantId tenant id of tenant which deployed the Application
+ * @param key Generated key for the Application
+ * @param groupCtxt Group definition information
+ * @param subscribableInfoCtxts Map [cartridge alias -> Group] with
extracted Subscription Information
+ * @param definedGroupCtxts Map [group alias -> Group] with extracted
Group Information
+ * @return Group object
+ *
+ * @throws ApplicationDefinitionException if unable to parse
+ */
+ private Group parseGroup (String appId, int tenantId, String key,
GroupContext groupCtxt,
+ Map<String, SubscribableInfoContext>
subscribableInfoCtxts,
- Map<String, GroupContext> definedGroupCtxts)
++ Map<String, GroupContext> definedGroupCtxts,
Properties properties)
+ throws ApplicationDefinitionException {
+
+ // check if are in the defined Group set
+ GroupContext definedGroupDef =
definedGroupCtxts.get(groupCtxt.getAlias());
+ if (definedGroupDef == null) {
+ handleError("Group Definition with name: " + groupCtxt.getName()
+ ", alias: " +
+ groupCtxt.getAlias() + " is not found in the all Group
Definitions collection");
+ }
+
+ Group group = new Group(appId, groupCtxt.getName(),
groupCtxt.getAlias());
+
+ group.setAutoscalingPolicy(groupCtxt.getAutoscalingPolicy());
+ group.setDeploymentPolicy(groupCtxt.getDeploymentPolicy());
+ DependencyOrder dependencyOrder = new DependencyOrder();
+ // create the Dependency Ordering
+ String [] startupOrders = getStartupOrderForGroup(groupCtxt);
+ if (startupOrders != null) {
+
dependencyOrder.setStartupOrders(ParserUtils.convert(startupOrders, groupCtxt));
+ }
+
dependencyOrder.setTerminationBehaviour(getKillbehaviour(groupCtxt.getName()));
+ group.setDependencyOrder(dependencyOrder);
+
+ Map<String, ClusterDataHolder> clusterDataMap;
+
+ // get group level Subscribables
+ if (groupCtxt.getSubscribableContexts() != null) {
+ clusterDataMap = parseLeafLevelSubscriptions(appId, tenantId,
key, groupCtxt.getName(),
- Arrays.asList(groupCtxt.getSubscribableContexts()),
subscribableInfoCtxts);
++ Arrays.asList(groupCtxt.getSubscribableContexts()),
subscribableInfoCtxts, properties);
+ group.setClusterData(clusterDataMap);
+ }
+
+ // get nested groups
+ if (groupCtxt.getGroupContexts() != null) {
+ Map<String, Group> nestedGroups = new HashMap<String, Group>();
+ // check sub groups
+ for (GroupContext subGroupCtxt : groupCtxt.getGroupContexts()) {
+ // get the complete Group Definition
+ subGroupCtxt = definedGroupCtxts.get(subGroupCtxt.getAlias());
+ Group nestedGroup = parseGroup(appId, tenantId, key,
subGroupCtxt,
+ subscribableInfoCtxts,
- definedGroupCtxts);
++ definedGroupCtxts, properties);
+ nestedGroups.put(nestedGroup.getAlias(), nestedGroup);
+ }
+
+ group.setGroups(nestedGroups);
+ }
+
+ return group;
+ }
+
+ /**
+ * Find the startup order
+ *
+ * @param groupContext GroupContext with Group defintion information
+ * @return Set of Startup Orders which are defined in the Group
+ *
+ * @throws ApplicationDefinitionException
+ */
+ private String [] getStartupOrderForGroup(GroupContext groupContext)
throws ApplicationDefinitionException {
+
+ ServiceGroup serviceGroup;
+ try {
+ serviceGroup =
RegistryManager.getInstance().getServiceGroup(groupContext.getName());
+ } catch (Exception e) {
+ String errorMsg = "Error in getting Service Group Definition for
[ " + groupContext.getName() +
+ " ] from Registry";
+ log.error(errorMsg, e);
+ throw new ApplicationDefinitionException(errorMsg, e);
+ }
+
+ if (serviceGroup == null) {
+ handleError("Service Group Definition not found for name " +
groupContext.getName());
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("parsing application ... getStartupOrderForGroup: " +
groupContext.getName());
+ }
+
+ assert serviceGroup != null;
+ if (serviceGroup.getDependencies() != null) {
+ if (log.isDebugEnabled()) {
+ log.debug("parsing application ... getStartupOrderForGroup:
dependencies != null " );
+ }
+ if (serviceGroup.getDependencies().getStartupOrders() != null) {
+
+ String [] startupOrders =
serviceGroup.getDependencies().getStartupOrders();
+ if (log.isDebugEnabled()) {
+ log.debug("parsing application ...
getStartupOrderForGroup: startupOrders != null # of: " + startupOrders.length);
+ }
+ return startupOrders;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Get kill behaviour related to a Group
+ *
+ * @param serviceGroupName Group name
+ * @return String indicating the kill behavior
+ *
+ * @throws ApplicationDefinitionException if an error occurs
+ */
+ private String getKillbehaviour (String serviceGroupName) throws
ApplicationDefinitionException {
+
+ ServiceGroup serviceGroup;
+ try {
+ serviceGroup =
RegistryManager.getInstance().getServiceGroup(serviceGroupName);
+ } catch (Exception e) {
+ String errorMsg = "Error in getting Service Group Definition for
[ " + serviceGroupName +
+ " ] from Registry";
+ log.error(errorMsg, e);
+ throw new ApplicationDefinitionException(errorMsg, e);
+ }
+
+ if (serviceGroup == null) {
+ handleError("Service Group Definition not found for name " +
serviceGroupName);
+ }
+
+ assert serviceGroup != null;
+ if (serviceGroup.getDependencies() != null) {
+ return serviceGroup.getDependencies().getKillBehaviour();
+ }
+
+ return null;
+
+ }
+
+ /**
+ * Parse Subscription Information
+ *
+ * @param appId Application id
+ * @param tenantId Tenant id of tenant which deployed the Application
+ * @param key Generated key for the Application
+ * @param groupName Group name (if relevant)
+ * @param subscribableCtxts Subscribable Information
+ * @param subscribableInfoCtxts Map [cartridge alias -> Group] with
extracted Subscription Information
+ * @return Map [subscription alias -> ClusterDataHolder]
+ *
+ * @throws ApplicationDefinitionException
+ */
+ private Map<String, ClusterDataHolder> parseLeafLevelSubscriptions
(String appId, int tenantId, String key, String groupName,
+
List<SubscribableContext> subscribableCtxts,
- Map<String,
SubscribableInfoContext> subscribableInfoCtxts)
++ Map<String,
SubscribableInfoContext> subscribableInfoCtxts,
++ Properties
properties)
+ throws ApplicationDefinitionException {
+
+ Map<String, ClusterDataHolder> clusterDataMap = new HashMap<String,
ClusterDataHolder>();
+
+ for (SubscribableContext subscribableCtxt : subscribableCtxts) {
+
+ // check is there is a related Subscribable Information
+ SubscribableInfoContext subscribableInfoCtxt =
subscribableInfoCtxts.get(subscribableCtxt.getAlias());
+ if (subscribableInfoCtxt == null) {
+ handleError("Related Subscribable Information Ctxt not found
for Subscribable with alias: "
+ + subscribableCtxt.getAlias());
+ }
+
+ // check if Cartridge Type is valid
+ if (StringUtils.isEmpty(subscribableCtxt.getType())) {
+ handleError("Invalid Cartridge Type specified : [ "
+ + subscribableCtxt.getType() + " ]");
+ }
+
+ // check if a cartridgeInfo with relevant type is already
deployed. else, can't continue
+ CartridgeInfo cartridgeInfo =
getCartridge(subscribableCtxt.getType());
+ if (cartridgeInfo == null) {
+ handleError("No deployed Cartridge found with type [ " +
subscribableCtxt.getType() +
+ " ] for Composite Application");
+ }
+
+ // get hostname and cluster id
+ ClusterInformation clusterInfo;
+ assert cartridgeInfo != null;
+ if (cartridgeInfo.getMultiTenant()) {
+ clusterInfo = new MTClusterInformation();
+ } else {
+ clusterInfo = new STClusterInformation();
+ }
+
+ String hostname =
clusterInfo.getHostName(subscribableCtxt.getAlias(),
cartridgeInfo.getHostName());
+ String clusterId =
clusterInfo.getClusterId(subscribableCtxt.getAlias(),
subscribableCtxt.getType());
++ boolean isKubernetesCluster =
StratosConstants.KUBERNETES_DEPLOYER_TYPE.equals(cartridge.getDeployerType());
+
+ // create and collect this cluster's information
+ assert subscribableInfoCtxt != null;
+ ApplicationClusterContext appClusterCtxt =
createApplicationClusterContext(appId, groupName, cartridgeInfo,
+ key, tenantId, subscribableInfoCtxt.getRepoUrl(),
subscribableCtxt.getAlias(),
- clusterId, hostname,
subscribableInfoCtxt.getDeploymentPolicy(), false,
subscribableInfoCtxt.getDependencyAliases());
++ clusterId, hostname,
subscribableInfoCtxt.getDeploymentPolicy(),
++ false, isKubernetesCluster,
subscribableInfoCtxt.getDependencyAliases(), properties);
+
+
appClusterCtxt.setAutoscalePolicyName(subscribableInfoCtxt.getAutoscalingPolicy());
+ this.applicationClusterContexts.add(appClusterCtxt);
+
+ // add relevant information to the map
+ clusterDataMap.put(subscribableCtxt.getAlias(), new
ClusterDataHolder(subscribableCtxt.getType(), clusterId));
+ }
+
+ return clusterDataMap;
+ }
+
+ /**
+ * Creates a ApplicationClusterContext object to keep information related
to a Cluster in this Application
+ *
+ * @param appId Application id
+ * @param groupName Group name
+ * @param cartridgeInfo Cartridge information
+ * @param subscriptionKey Generated key for the Application
+ * @param tenantId Tenant Id of the tenant which deployed the Application
+ * @param repoUrl Repository URL
+ * @param alias alias specified for this Subscribable in the Application
Definition
+ * @param clusterId Cluster id
+ * @param hostname Hostname
+ * @param deploymentPolicy Deployment policy used
- * @param isLB if this cluster is an LB
++ * @param isLBCluster if this cluster is an LB
++ * @param isKubernetesCluster if this cluster is a Kubernetes cluster
+ * @return ApplicationClusterContext object with relevant information
+ *
+ * @throws ApplicationDefinitionException If any error occurs
+ */
+ private ApplicationClusterContext createApplicationClusterContext (String
appId, String groupName, CartridgeInfo cartridgeInfo,
+ String
subscriptionKey, int tenantId, String repoUrl,
+ String
alias, String clusterId, String hostname,
- String
deploymentPolicy, boolean isLB, String[] dependencyAliases)
++ String
deploymentPolicy, boolean isLBCluster,
++
boolean isKubernetesCluster, String[] dependencyAliases,
++
Properties properties)
+ throws ApplicationDefinitionException {
+
+ // Create text payload
+ String textPayload = ApplicationUtils.createPayload(appId, groupName,
cartridgeInfo, subscriptionKey, tenantId, clusterId,
+ hostname, repoUrl, alias, null, dependencyAliases).toString();
+
- return new ApplicationClusterContext(cartridgeInfo.getType(),
clusterId, hostname, textPayload, deploymentPolicy, isLB);
++ return new ApplicationClusterContext(cartridgeInfo.getType(),
clusterId, hostname, textPayload, deploymentPolicy,
++ isLB, isKubernetesCluster, properties);
+ }
+
+ private CartridgeInfo getCartridge (String cartridgeType) throws
ApplicationDefinitionException {
+
+ try {
+ return
CloudControllerClient.getInstance().getCartrdgeInformation(cartridgeType);
+ } catch (CartridgeInformationException e) {
+ throw new ApplicationDefinitionException(e);
+ }
+ }
+
+ private void handleError (String errorMsg) throws
ApplicationDefinitionException {
+ log.error(errorMsg);
+ throw new ApplicationDefinitionException(errorMsg);
+ }
+
+ }
http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ApplicationContext.java
----------------------------------------------------------------------
diff --cc
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ApplicationContext.java
index 0000000,1b9c516..b3560c3
mode 000000,100644..100644
---
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ApplicationContext.java
+++
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ApplicationContext.java
@@@ -1,0 -1,93 +1,112 @@@
+ /*
+ * 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.autoscaler.applications.pojo;
+
-public class ApplicationContext {
++import org.apache.stratos.cloud.controller.pojo.Properties;
++
++import java.io.Serializable;
++
++public class ApplicationContext implements Serializable {
++
++ private static final long serialVersionUID = 6704036501869668646L;
+
+ private int tenantId;
+
+ private String tenantDomain;
+
+ private String teantAdminUsername;
+
+ private String applicationId;
+
+ private String alias;
+
+ private ComponentContext componentContext;
+
+ private SubscribableInfoContext[] subscribableInfoContexts;
+
++ private Properties properties;
++
++ public ApplicationContext() {
++ }
++
+ public String getApplicationId() {
+ return applicationId;
+ }
+
+ public void setApplicationId(String applicationId) {
+ this.applicationId = applicationId;
+ }
+
+ public String getAlias() {
+ return alias;
+ }
+
+ public void setAlias(String alias) {
+ this.alias = alias;
+ }
+
+ public ComponentContext getComponents() {
+ return componentContext;
+ }
+
+ public void setComponents(ComponentContext componentContext) {
+ this.componentContext = componentContext;
+ }
+
+ public SubscribableInfoContext[] getSubscribableInfoContext() {
+ return subscribableInfoContexts;
+ }
+
+ public void setSubscribableInfoContext(SubscribableInfoContext[]
subscribableInfoContexts) {
+ this.subscribableInfoContexts = subscribableInfoContexts;
+ }
+
+ public int getTenantId() {
+ return tenantId;
+ }
+
+ public void setTenantId(int tenantId) {
+ this.tenantId = tenantId;
+ }
+
+ public String getTenantDomain() {
+ return tenantDomain;
+ }
+
+ public void setTenantDomain(String tenantDomain) {
+ this.tenantDomain = tenantDomain;
+ }
+
+ public String getTeantAdminUsername() {
+ return teantAdminUsername;
+ }
+
+ public void setTeantAdminUsername(String teantAdminUsername) {
+ this.teantAdminUsername = teantAdminUsername;
+ }
++
++ public Properties getProperties() {
++ return properties;
++ }
++
++ public void setProperties(Properties properties) {
++ this.properties = properties;
++ }
+ }
http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ComponentContext.java
----------------------------------------------------------------------
diff --cc
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ComponentContext.java
index 0000000,b39b07f..2816f4e
mode 000000,100644..100644
---
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ComponentContext.java
+++
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ComponentContext.java
@@@ -1,0 -1,54 +1,58 @@@
+ /*
+ * 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.autoscaler.applications.pojo;
+
-public class ComponentContext {
++import java.io.Serializable;
++
++public class ComponentContext implements Serializable {
++
++ private static final long serialVersionUID = -3841830873207967496L;
+
+ private GroupContext[] groupContexts;
+
+ private SubscribableContext[] subscribableContexts;
+
+ private DependencyContext dependencyContext;
+
+
+ public GroupContext[] getGroupContexts() {
+ return groupContexts;
+ }
+
+ public void setGroupContexts(GroupContext[] groupContexts) {
+ this.groupContexts = groupContexts;
+ }
+
+ public SubscribableContext[] getSubscribableContexts() {
+ return subscribableContexts;
+ }
+
+ public void setSubscribableContexts(SubscribableContext[]
subscribableContexts) {
+ this.subscribableContexts = subscribableContexts;
+ }
+
+ public DependencyContext getDependencyContext() {
+ return dependencyContext;
+ }
+
+ public void setDependencyContext(DependencyContext dependencyContext) {
+ this.dependencyContext = dependencyContext;
+ }
+ }
http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/DependencyContext.java
----------------------------------------------------------------------
diff --cc
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/DependencyContext.java
index 0000000,ccb17f0..57a57d1
mode 000000,100644..100644
---
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/DependencyContext.java
+++
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/DependencyContext.java
@@@ -1,0 -1,44 +1,48 @@@
+ /*
+ * 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.autoscaler.applications.pojo;
+
+
-public class DependencyContext {
-
++import java.io.Serializable;
++
++public class DependencyContext implements Serializable {
++
++ private static final long serialVersionUID = 6211713487242343226L;
++
+ private String [] startupOrdersContexts;
+
+ private String terminationBehaviour;
+
+ public String getTerminationBehaviour() {
+ return terminationBehaviour;
+ }
+
+ public void setTerminationBehaviour(String terminationBehaviour) {
+ this.terminationBehaviour = terminationBehaviour;
+ }
+
+ public String [] getStartupOrdersContexts() {
+ return startupOrdersContexts;
+ }
+
+ public void setStartupOrdersContexts(String [] startupOrdersContexts) {
+ this.startupOrdersContexts = startupOrdersContexts;
+ }
+ }
http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/GroupContext.java
----------------------------------------------------------------------
diff --cc
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/GroupContext.java
index 0000000,c05a5d5..885cccc
mode 000000,100644..100644
---
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/GroupContext.java
+++
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/GroupContext.java
@@@ -1,0 -1,84 +1,88 @@@
+ /*
+ * 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.autoscaler.applications.pojo;
+
-public class GroupContext {
++import java.io.Serializable;
++
++public class GroupContext implements Serializable{
++
++ private static final long serialVersionUID = 1595266728968445926L;
+
+ private String name;
+
+ private String alias;
+
+ private String deploymentPolicy;
+
+ private String autoscalingPolicy;
+
+ private SubscribableContext[] subscribableContexts;
+
+ private GroupContext[] groupContexts;
+
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getAlias() {
+ return alias;
+ }
+
+ public void setAlias(String alias) {
+ this.alias = alias;
+ }
+
+ public String getDeploymentPolicy() {
+ return deploymentPolicy;
+ }
+
+ public void setDeploymentPolicy(String deploymentPolicy) {
+ this.deploymentPolicy = deploymentPolicy;
+ }
+
+ public String getAutoscalingPolicy() {
+ return autoscalingPolicy;
+ }
+
+ public void setAutoscalingPolicy(String autoscalingPolicy) {
+ this.autoscalingPolicy = autoscalingPolicy;
+ }
+
+ public SubscribableContext[] getSubscribableContexts() {
+ return subscribableContexts;
+ }
+
+ public void setSubscribableContexts(SubscribableContext[]
subscribableContexts) {
+ this.subscribableContexts = subscribableContexts;
+ }
+
+ public GroupContext[] getGroupContexts() {
+ return groupContexts;
+ }
+
+ public void setGroupContexts(GroupContext[] groupContexts) {
+ this.groupContexts = groupContexts;
+ }
+ }
http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableContext.java
----------------------------------------------------------------------
diff --cc
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableContext.java
index 0000000,7ae4864..7a73976
mode 000000,100644..100644
---
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableContext.java
+++
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableContext.java
@@@ -1,0 -1,44 +1,47 @@@
+ /*
+ * 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.autoscaler.applications.pojo;
+
-public class SubscribableContext {
++import java.io.Serializable;
++
++public class SubscribableContext implements Serializable {
++
++ private static final long serialVersionUID = 3853456523070318925L;
+
+ private String type;
+
+ private String alias;
+
-
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getAlias() {
+ return alias;
+ }
+
+ public void setAlias(String alias) {
+ this.alias = alias;
+ }
+ }
http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java
----------------------------------------------------------------------
diff --cc
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java
index 0000000,62d32df..20cf3f8
mode 000000,100644..100644
---
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java
+++
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java
@@@ -1,0 -1,103 +1,107 @@@
+ /*
+ * 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.autoscaler.applications.pojo;
+
-public class SubscribableInfoContext {
++import java.io.Serializable;
++
++public class SubscribableInfoContext implements Serializable {
++
++ private static final long serialVersionUID = -6874644941002783034L;
+
+ private String alias;
+
+ private String deploymentPolicy;
+
+ private String autoscalingPolicy;
+
+ private String repoUrl;
+
+ private boolean privateRepo;
+
+ private String repoUsername;
+
+ private String repoPassword;
+
+ private String[] dependencyAliases;
+
+ public String getAlias() {
+ return alias;
+ }
+
+ public void setAlias(String alias) {
+ this.alias = alias;
+ }
+
+ public String getDeploymentPolicy() {
+ return deploymentPolicy;
+ }
+
+ public void setDeploymentPolicy(String deploymentPolicy) {
+ this.deploymentPolicy = deploymentPolicy;
+ }
+
+ public String getAutoscalingPolicy() {
+ return autoscalingPolicy;
+ }
+
+ public void setAutoscalingPolicy(String autoscalingPolicy) {
+ this.autoscalingPolicy = autoscalingPolicy;
+ }
+
+ public String getRepoUrl() {
+ return repoUrl;
+ }
+
+ public void setRepoUrl(String repoUrl) {
+ this.repoUrl = repoUrl;
+ }
+
+ public boolean isPrivateRepo() {
+ return privateRepo;
+ }
+
+ public void setPrivateRepo(boolean privateRepo) {
+ this.privateRepo = privateRepo;
+ }
+
+ public String getRepoUsername() {
+ return repoUsername;
+ }
+
+ public void setRepoUsername(String repoUsername) {
+ this.repoUsername = repoUsername;
+ }
+
+ public String getRepoPassword() {
+ return repoPassword;
+ }
+
+ public void setRepoPassword(String repoPassword) {
+ this.repoPassword = repoPassword;
+ }
+
+ public String[] getDependencyAliases() {
+ return dependencyAliases;
+ }
+
+ public void setDependencyAliases(String[] dependencyAliases) {
+ this.dependencyAliases = dependencyAliases;
+ }
+ }