Repository: stratos
Updated Branches:
  refs/heads/master de9b62bb1 -> 159f1c766


refactoring the Applications hierarchy to contain Instance Context info. for 
group based scaling


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

Branch: refs/heads/master
Commit: 159f1c766283b95c0e9d2a792e69e6acb5ae7570
Parents: de9b62b
Author: Isuru Haththotuwa <[email protected]>
Authored: Fri Nov 21 15:55:15 2014 +0530
Committer: Isuru Haththotuwa <[email protected]>
Committed: Fri Nov 21 15:55:51 2014 +0530

----------------------------------------------------------------------
 .../dependency/DependencyBuilder.java           |  7 ++-
 .../context/ApplicationChildContextFactory.java |  2 +-
 .../applications/topic/ApplicationBuilder.java  | 61 ++++++++++----------
 .../monitor/application/ApplicationMonitor.java |  2 +-
 .../application/ApplicationMonitorFactory.java  |  4 +-
 .../autoscaler/monitor/group/GroupMonitor.java  |  2 +-
 .../status/checker/StatusChecker.java           | 20 +++----
 .../domain/applications/Application.java        | 34 +++++------
 .../messaging/domain/applications/Group.java    | 39 ++++++-------
 .../domain/applications/ParentComponent.java    | 39 ++++++++-----
 .../context/ApplicationInstanceContext.java     | 56 ++++++++++++++++++
 .../context/ClusterInstanceContext.java         | 33 ++++++++++-
 .../instance/context/GroupInstanceContext.java  | 33 ++++++++++-
 .../instance/context/InstanceContext.java       | 20 ++-----
 .../ApplicationActivatedMessageProcessor.java   |  6 +-
 .../ApplicationInactivatedMessageProcessor.java |  6 +-
 .../ApplicationTerminatingMessageProcessor.java |  6 +-
 .../applications/GroupActivatedProcessor.java   |  6 +-
 .../applications/GroupInActivateProcessor.java  |  2 +-
 .../applications/GroupResetProcessor.java       |  6 +-
 .../applications/GroupTerminatedProcessor.java  |  6 +-
 .../applications/GroupTerminatingProcessor.java |  6 +-
 .../bean/util/converter/PojoConverter.java      |  2 +-
 23 files changed, 256 insertions(+), 142 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java
index ef26c13..6b26247 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java
@@ -26,6 +26,7 @@ import 
org.apache.stratos.autoscaler.applications.dependency.context.Application
 import org.apache.stratos.autoscaler.exception.DependencyBuilderException;
 import org.apache.stratos.messaging.domain.applications.*;
 
+import java.util.Collection;
 import java.util.Set;
 
 /**
@@ -197,13 +198,15 @@ public class DependencyBuilder {
 
         //adding the rest of the children who are independent to the top level
         // as they can start in parallel.
-        for (Group group1 : component.getAliasToGroupMap().values()) {
+        Collection<Group> groups = component.getAliasToGroupMap().values();
+        for (Group group1 : groups) {
             if 
(dependencyTree.findApplicationContextWithIdInPrimaryTree(group1.getAlias()) == 
null) {
                 ApplicationChildContext context = 
ApplicationChildContextFactory.getGroupChildContext(group1.getAlias(), 
dependencyTree.isTerminateDependent());
                 dependencyTree.addPrimaryApplicationContext(context);
             }
         }
-        for (ClusterDataHolder dataHolder : 
component.getClusterDataMap().values()) {
+        Collection<ClusterDataHolder> clusterData = 
component.getClusterDataMap().values();
+        for (ClusterDataHolder dataHolder : clusterData) {
             if 
(dependencyTree.findApplicationContextWithIdInPrimaryTree(dataHolder.getClusterId())
 == null) {
                 ApplicationChildContext context = 
ApplicationChildContextFactory.getClusterChildContext(dataHolder,
                         dependencyTree.isTerminateDependent());

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/context/ApplicationChildContextFactory.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/context/ApplicationChildContextFactory.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/context/ApplicationChildContextFactory.java
index c08d190..679a57c 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/context/ApplicationChildContextFactory.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/context/ApplicationChildContextFactory.java
@@ -53,7 +53,7 @@ public class ApplicationChildContextFactory {
             //getting the cluster alias
             id = getClusterFromStartupOrder(order);
             //getting the cluster-id from cluster alias
-            ClusterDataHolder clusterDataHolder = 
component.getClusterDataMap().get(id);
+            ClusterDataHolder clusterDataHolder = (ClusterDataHolder) 
component.getClusterDataMap().get(id);
             applicationContext = getClusterChildContext(clusterDataHolder, 
hasDependents);
 
         } else {

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
index 14707c8..de45f62 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
@@ -28,7 +28,6 @@ import 
org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher
 import org.apache.stratos.autoscaler.monitor.application.ApplicationMonitor;
 import org.apache.stratos.autoscaler.monitor.group.GroupMonitor;
 import org.apache.stratos.messaging.domain.applications.*;
-import org.apache.stratos.messaging.domain.topology.Cluster;
 
 import java.util.Collection;
 import java.util.Set;
@@ -90,15 +89,15 @@ public class ApplicationBuilder {
         }
 
         ApplicationStatus status = ApplicationStatus.Active;
-        if (application.isStateTransitionValid(status)) {
+        if (application.isStateTransitionValid(status, null)) {
             //setting the status, persist and publish
-            application.setStatus(status);
+            application.setStatus(status, null);
             updateApplicationMonitor(appId, status);
             ApplicationHolder.persistApplication(application);
             ApplicationsEventPublisher.sendApplicationActivatedEvent(appId);
         } else {
             log.warn(String.format("Application state transition is not valid: 
[application-id] %s " +
-                    " [current-status] %s [status-requested] %s", appId, 
application.getStatus(), status));
+                    " [current-status] %s [status-requested] %s", appId, 
application.getStatus(null), status));
         }
     }
 
@@ -121,16 +120,16 @@ public class ApplicationBuilder {
         try {
             ApplicationHolder.acquireWriteLock();
             ApplicationStatus status = ApplicationStatus.Terminating;
-            if (application.isStateTransitionValid(status)) {
+            if (application.isStateTransitionValid(status, null)) {
                 //setting the status, persist and publish
-                application.setStatus(status);
+                application.setStatus(status, null);
                 updateApplicationMonitor(appId, status);
 
                 ApplicationHolder.persistApplication(application);
                 
//ApplicationsEventPublisher.sendApplicationTerminatingEvent(appId);
             } else {
                 log.warn(String.format("Application state transition is not 
valid: [application-id] %s " +
-                        " [current-status] %s [status-requested] %s", appId, 
application.getStatus(), status));
+                        " [current-status] %s [status-requested] %s", appId, 
application.getStatus(null), status));
             }
         } finally {
             ApplicationHolder.releaseWriteLock();
@@ -161,9 +160,9 @@ public class ApplicationBuilder {
             Set<ClusterDataHolder> clusterData = 
application.getClusterDataRecursively();
 
             ApplicationStatus status = ApplicationStatus.Terminated;
-            if (application.isStateTransitionValid(status)) {
+            if (application.isStateTransitionValid(status, null)) {
                 //setting the status, persist and publish
-                application.setStatus(status);
+                application.setStatus(status, null);
                 updateApplicationMonitor(appId, status);
                 //removing the monitor
                 AutoscalerContext.getInstance().removeAppMonitor(appId);
@@ -174,7 +173,7 @@ public class ApplicationBuilder {
                 
ApplicationsEventPublisher.sendApplicationTerminatedEvent(appId, clusterData);
             } else {
                 log.warn(String.format("Application state transition is not 
valid: [application-id] %s " +
-                        " [current-status] %s [status-requested] %s", appId, 
application.getStatus(), status));
+                        " [current-status] %s [status-requested] %s", appId, 
application.getStatus(null), status));
             }
         }
     }
@@ -196,16 +195,16 @@ public class ApplicationBuilder {
             Application application = 
applications.getApplication(applicationId);
             // check and update application status to 'Terminating'
             ApplicationStatus status = ApplicationStatus.Terminating;
-            if (application.isStateTransitionValid(status)) {
+            if (application.isStateTransitionValid(status, null)) {
                 // for now anyway update the status forcefully
                 //setting the status, persist and publish
-                application.setStatus(status);
+                application.setStatus(status, null);
                 updateApplicationMonitor(applicationId, status);
                 ApplicationHolder.persistApplication(application);
                 
ApplicationsEventPublisher.sendApplicationTerminatingEvent(applicationId);
             } else {
                 log.warn(String.format("Application state transition is not 
valid: [application-id] %s " +
-                        " [current-status] %s [status-requested] %s", 
applicationId, application.getStatus(), status));
+                        " [current-status] %s [status-requested] %s", 
applicationId, application.getStatus(null), status));
             }
         } finally {
             ApplicationHolder.releaseWriteLock();
@@ -235,15 +234,15 @@ public class ApplicationBuilder {
         }
 
         GroupStatus status = GroupStatus.Terminated;
-        if (group.isStateTransitionValid(status)) {
+        if (group.isStateTransitionValid(status, null)) {
             //setting the status, persist and publish
-            group.setStatus(status);
+            group.setStatus(status, null);
             updateGroupMonitor(appId, groupId, status);
             ApplicationHolder.persistApplication(application);
             ApplicationsEventPublisher.sendGroupTerminatedEvent(appId, 
groupId);
         } else {
             log.warn(String.format("Group state transition is not valid: 
[group-id] %s [current-status] %s " +
-                    " [requested-status] %s", groupId, group.getStatus(), 
status));
+                    " [requested-status] %s", groupId, group.getStatus(null), 
status));
         }
 
     }
@@ -271,15 +270,15 @@ public class ApplicationBuilder {
         }
 
         GroupStatus status = GroupStatus.Active;
-        if (group.isStateTransitionValid(status)) {
+        if (group.isStateTransitionValid(status, null)) {
             //setting the status, persist and publish
-            group.setStatus(status);
+            group.setStatus(status, null);
             updateGroupMonitor(appId, groupId, status);
             ApplicationHolder.persistApplication(application);
             ApplicationsEventPublisher.sendGroupActivatedEvent(appId, groupId);
         } else {
             log.warn(String.format("Group state transition is not valid: 
[group-id] %s [current-status] %s " +
-                    " [requested-status] %s", groupId, group.getStatus(), 
status));
+                    " [requested-status] %s", groupId, group.getStatus(null), 
status));
         }
     }
 
@@ -306,14 +305,14 @@ public class ApplicationBuilder {
         }
 
         GroupStatus status = GroupStatus.Created;
-        if (group.isStateTransitionValid(status)) {
+        if (group.isStateTransitionValid(status, null)) {
             //setting the status, persist and publish
-            group.setStatus(status);
+            group.setStatus(status, null);
             updateGroupMonitor(appId, groupId, status);
             ApplicationHolder.persistApplication(application);
             ApplicationsEventPublisher.sendGroupCreatedEvent(appId, groupId);
         } else {
-            log.warn("Group state transition is not valid: [group-id] " + 
groupId + " [current-state] " + group.getStatus()
+            log.warn("Group state transition is not valid: [group-id] " + 
groupId + " [current-state] " + group.getStatus(null)
                     + "[requested-state] " + status);
         }
     }
@@ -341,14 +340,14 @@ public class ApplicationBuilder {
         }
 
         GroupStatus status = GroupStatus.Inactive;
-        if (group.isStateTransitionValid(status)) {
+        if (group.isStateTransitionValid(status, null)) {
             //setting the status, persist and publish
-            group.setStatus(status);
+            group.setStatus(status, null);
             updateGroupMonitor(appId, groupId, status);
             ApplicationHolder.persistApplication(application);
             ApplicationsEventPublisher.sendGroupInActivateEvent(appId, 
groupId);
         } else {
-            log.warn("Group state transition is not valid: [group-id] " + 
groupId + " [current-state] " + group.getStatus()
+            log.warn("Group state transition is not valid: [group-id] " + 
groupId + " [current-state] " + group.getStatus(null)
                     + "[requested-state] " + status);
         }
     }
@@ -378,14 +377,14 @@ public class ApplicationBuilder {
         try {
             ApplicationHolder.acquireWriteLock();
             GroupStatus status = GroupStatus.Terminating;
-            if (group.isStateTransitionValid(status)) {
+            if (group.isStateTransitionValid(status, null)) {
                 //setting the status, persist and publish
-                group.setStatus(status);
+                group.setStatus(status, null);
                 updateGroupMonitor(appId, groupId, status);
                 ApplicationHolder.persistApplication(application);
                 ApplicationsEventPublisher.sendGroupTerminatingEvent(appId, 
groupId);
             } else {
-                log.warn("Group state transition is not valid: [group-id] " + 
groupId + " [current-state] " + group.getStatus()
+                log.warn("Group state transition is not valid: [group-id] " + 
groupId + " [current-state] " + group.getStatus(null)
                         + "[requested-state] " + status);
             }
         } finally {
@@ -396,11 +395,11 @@ public class ApplicationBuilder {
     private static void updateGroupStatusesRecursively(GroupStatus 
groupStatus, Collection<Group> groups) {
 
         for (Group group : groups) {
-            if (!group.isStateTransitionValid(groupStatus)) {
-                log.error("Invalid state transfer from " + group.getStatus() + 
" to " + groupStatus);
+            if (!group.isStateTransitionValid(groupStatus, null)) {
+                log.error("Invalid state transfer from " + 
group.getStatus(null) + " to " + groupStatus);
             }
             // force update for now
-            group.setStatus(groupStatus);
+            group.setStatus(groupStatus, null);
 
             // go recursively and update
             if (group.getGroups() != null) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java
index f230918..a90bc12 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java
@@ -49,7 +49,7 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
         super(application);
         //setting the appId for the application
         this.appId = application.getUniqueIdentifier();
-        this.status = application.getStatus();
+        this.status = application.getStatus(null);
         //starting the first set of dependencies from its children
         startDependency();
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java
index c7be7c9..cb8a4fa 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java
@@ -107,10 +107,10 @@ public class ApplicationMonitorFactory {
                 }
                 //TODO make sure when it is async
 
-                if (group.getStatus() != groupMonitor.getStatus()) {
+                if (group.getStatus(null) != groupMonitor.getStatus()) {
                     //updating the status, if the group is not in created 
state when creating group Monitor
                     //so that groupMonitor will notify the parent (useful when 
restarting stratos)
-                    groupMonitor.setStatus(group.getStatus());
+                    groupMonitor.setStatus(group.getStatus(null));
                 }
             }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
index 53d77ea..d6d293e 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
@@ -59,7 +59,7 @@ public class GroupMonitor extends ParentComponentMonitor 
implements EventHandler
             TopologyInConsistentException {
         super(group);
         this.appId = appId;
-        this.status = group.getStatus();
+        this.status = group.getStatus(null);
         startDependency();
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
index c1dc547..73f9b27 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
@@ -114,7 +114,7 @@ public class StatusChecker {
                                 //if all members removed from the cluster and 
cluster is in terminating,
                                 // either it has to be terminated or Reset
                                 if (!clusterMonitorHasMembers && 
cluster.getStatus() == ClusterStatus.Terminating) {
-                                    if (application.getStatus() == 
ApplicationStatus.Terminating) {
+                                    if (application.getStatus(null) == 
ApplicationStatus.Terminating) {
                                         if (log.isInfoEnabled()) {
                                             log.info("Publishing Cluster 
terminated event for [application]: " + appId +
                                                     " [cluster]: " + 
clusterId);
@@ -309,13 +309,13 @@ public class StatusChecker {
                 //send activation event
                 if (component instanceof Application) {
                     //send application activated event
-                    if (((Application) component).getStatus() != 
ApplicationStatus.Active) {
+                    if (((Application) component).getStatus(null) != 
ApplicationStatus.Active) {
                         log.info("sending app activate: " + appId);
                         
ApplicationBuilder.handleApplicationActivatedEvent(appId);
                     }
                 } else if (component instanceof Group) {
                     //send activation to the parent
-                    if (((Group) component).getStatus() != GroupStatus.Active) 
{
+                    if (((Group) component).getStatus(null) != 
GroupStatus.Active) {
                         log.info("sending group activate: " + 
component.getUniqueIdentifier());
                         ApplicationBuilder.handleGroupActivatedEvent(appId, 
component.getUniqueIdentifier());
                     }
@@ -330,7 +330,7 @@ public class StatusChecker {
                     ApplicationBuilder.handleApplicationTerminatedEvent(appId);
                 } else if (component instanceof Group) {
                     //send activation to the parent
-                    if (((Group) component).getStatus() != 
GroupStatus.Terminated) {
+                    if (((Group) component).getStatus(null) != 
GroupStatus.Terminated) {
                         log.info("sending group terminated : " + 
component.getUniqueIdentifier());
                         ApplicationBuilder.handleGroupTerminatedEvent(appId, 
component.getUniqueIdentifier());
                     }
@@ -341,10 +341,10 @@ public class StatusChecker {
                             getAllGroupInSameState(groups, 
GroupStatus.Created)) {
                 if (component instanceof Application) {
                     log.info("[Application] " + appId + "couldn't change to 
Created, since it is" +
-                            "already in " + ((Application) 
component).getStatus().toString());
+                            "already in " + ((Application) 
component).getStatus(null).toString());
                 } else if (component instanceof Group) {
                     //send activation to the parent
-                    if (((Group) component).getStatus() != 
GroupStatus.Created) {
+                    if (((Group) component).getStatus(null) != 
GroupStatus.Created) {
                         log.info("sending group created : " + 
component.getUniqueIdentifier());
                         ApplicationBuilder.handleGroupCreatedEvent(appId, 
component.getUniqueIdentifier());
                     }
@@ -359,7 +359,7 @@ public class StatusChecker {
                     
//StatusEventPublisher.sendApplicationInactivatedEvent(appId);
                 } else if (component instanceof Group) {
                     //send activation to the parent
-                    if (((Group) component).getStatus() != 
GroupStatus.Inactive) {
+                    if (((Group) component).getStatus(null) != 
GroupStatus.Inactive) {
                         log.info("sending group in-active: " + 
component.getUniqueIdentifier());
                         ApplicationBuilder.handleGroupInActivateEvent(appId, 
component.getUniqueIdentifier());
                     }
@@ -371,7 +371,7 @@ public class StatusChecker {
                     
//StatusEventPublisher.sendApplicationInactivatedEvent(appId);
                 } else if (component instanceof Group) {
                     //send activation to the parent
-                    if (((Group) component).getStatus() != 
GroupStatus.Inactive) {
+                    if (((Group) component).getStatus(null) != 
GroupStatus.Inactive) {
                         log.info("sending group in-active: " + 
component.getUniqueIdentifier());
                         ApplicationBuilder.handleGroupInActivateEvent(appId, 
component.getUniqueIdentifier());
                     }
@@ -392,7 +392,7 @@ public class StatusChecker {
     private boolean getAllGroupInActive(Map<String, Group> groups) {
         boolean groupStat = false;
         for (Group group : groups.values()) {
-            if (group.getStatus() == GroupStatus.Inactive) {
+            if (group.getStatus(null) == GroupStatus.Inactive) {
                 groupStat = true;
                 return groupStat;
             } else {
@@ -412,7 +412,7 @@ public class StatusChecker {
     private boolean getAllGroupInSameState(Map<String, Group> groups, 
GroupStatus status) {
         boolean groupStat = false;
         for (Group group : groups.values()) {
-            if (group.getStatus() == status) {
+            if (group.getStatus(null) == status) {
                 groupStat = true;
             } else {
                 groupStat = false;

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
index 4bfa559..1579bc1 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
@@ -19,9 +19,10 @@
 
 package org.apache.stratos.messaging.domain.applications;
 
+import org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder;
 import org.apache.commons.lang3.RandomStringUtils;
-import 
org.apache.stratos.messaging.domain.topology.LifeCycleStateTransitionBehavior;
-import 
org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleStateManager;
+import 
org.apache.stratos.messaging.domain.applications.scaling.instance.context.ApplicationInstanceContext;
+import 
org.apache.stratos.messaging.domain.applications.scaling.instance.context.InstanceContext;
 
 import java.util.*;
 
@@ -29,7 +30,7 @@ import java.util.*;
  * Represents an Application in the Topology
  */
 
-public class Application extends ParentComponent implements 
LifeCycleStateTransitionBehavior<ApplicationStatus> {
+public class Application extends ParentComponent<ApplicationInstanceContext> {
 
     private static final long serialVersionUID = -5092959597171649688L;
     // Unique id for the Application, defined in Application Definition
@@ -43,14 +44,15 @@ public class Application extends ParentComponent implements 
LifeCycleStateTransi
     // tenant admin user
     private String tenantAdminUserName;
     // Life cycle state manager
-    protected LifeCycleStateManager<ApplicationStatus> applicationStateManager;
+    //protected LifeCycleStateManager<ApplicationStatus> 
applicationStateManager;
 
     public Application (String id) {
         super();
         this.id = id;
         this.key = RandomStringUtils.randomAlphanumeric(16);
-        this.applicationStateManager =
-                new 
LifeCycleStateManager<ApplicationStatus>(ApplicationStatus.Created, id);
+        this.instanceIdToInstanceContextMap = new HashMap<String, 
ApplicationInstanceContext>();
+        //this.applicationStateManager =
+                //new 
LifeCycleStateManager<ApplicationStatus>(ApplicationStatus.Created, id);
     }
 
     public String getUniqueIdentifier() {
@@ -85,24 +87,20 @@ public class Application extends ParentComponent implements 
LifeCycleStateTransi
         this.tenantAdminUserName = tenantAdminUserName;
     }
 
-    @Override
-    public boolean isStateTransitionValid(ApplicationStatus newState) {
-        return this.applicationStateManager.isStateTransitionValid(newState);
+    public boolean isStateTransitionValid(ApplicationStatus newState, String 
applicationInstancetId) {
+        return 
this.instanceIdToInstanceContextMap.get(applicationInstancetId).isStateTransitionValid(newState);
     }
 
-    @Override
-    public Stack<ApplicationStatus> getTransitionedStates() {
-        return this.applicationStateManager.getStateStack();
+    public Stack<ApplicationStatus> getTransitionedStates(String 
applicationInstancetId) {
+        return 
this.instanceIdToInstanceContextMap.get(applicationInstancetId).getTransitionedStates();
     }
 
-    @Override
-    public ApplicationStatus getStatus() {
-        return this.applicationStateManager.getCurrentState();
+    public ApplicationStatus getStatus(String applicationInstanceId) {
+        return 
this.instanceIdToInstanceContextMap.get(applicationInstanceId).getStatus();
     }
 
-    @Override
-    public boolean setStatus(ApplicationStatus newState) {
-        return this.applicationStateManager.changeState(newState);
+    public boolean setStatus(ApplicationStatus newState, String 
applicationInstanceId) {
+        return 
this.instanceIdToInstanceContextMap.get(applicationInstanceId).setStatus(newState);
     }
 
     public boolean equals(Object other) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java
index adaed23..6990572 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java
@@ -19,18 +19,16 @@
 
 package org.apache.stratos.messaging.domain.applications;
 
-import 
org.apache.stratos.messaging.domain.topology.LifeCycleStateTransitionBehavior;
-import 
org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleStateManager;
+import 
org.apache.stratos.messaging.domain.applications.scaling.instance.context.ApplicationInstanceContext;
+import 
org.apache.stratos.messaging.domain.applications.scaling.instance.context.GroupInstanceContext;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Stack;
+import java.util.*;
 
 /**
  * Represents a Group/nested Group in an Application/Group
  */
 
-public class Group extends ParentComponent implements 
LifeCycleStateTransitionBehavior<GroupStatus> {
+public class Group extends ParentComponent<GroupInstanceContext> {
 
     private static final long serialVersionUID = 8347096598203655846L;
     // Name of the Group, specified in Group Definition
@@ -45,8 +43,10 @@ public class Group extends ParentComponent implements 
LifeCycleStateTransitionBe
     private String applicationId;
     // flag for Group level scaling
     private boolean isGroupScalingEnabled;
+    // Group/Cluster Instance Context map, key = instance id
+//    private final Map<String, Set<InstanceContext>> 
instanceIdToInstanceContextMap;
     // Life cycle state manager
-    protected LifeCycleStateManager<GroupStatus> groupStateManager;
+    //protected LifeCycleStateManager<GroupStatus> groupStateManager;
 
     public Group (String applicationId, String name, String alias) {
         super();
@@ -54,7 +54,9 @@ public class Group extends ParentComponent implements 
LifeCycleStateTransitionBe
         this.name = name;
         this.alias = alias;
         this.isGroupScalingEnabled = false;
-        this.groupStateManager = new 
LifeCycleStateManager<GroupStatus>(GroupStatus.Created, alias);
+        this.instanceIdToInstanceContextMap = new HashMap<String, 
GroupInstanceContext>();
+        //instanceIdToInstanceContextMap = new HashMap<String, 
Set<InstanceContext>>();
+        //this.groupStateManager = new 
LifeCycleStateManager<GroupStatus>(GroupStatus.Created, alias);
     }
 
     public String getUniqueIdentifier() {
@@ -81,24 +83,20 @@ public class Group extends ParentComponent implements 
LifeCycleStateTransitionBe
         this.autoscalingPolicy = autoscalingPolicy;
     }
 
-    @Override
-    public boolean isStateTransitionValid(GroupStatus newState) {
-        return groupStateManager.isStateTransitionValid(newState);
+    public boolean isStateTransitionValid(GroupStatus newState, String 
groupInstanceId) {
+        return 
instanceIdToInstanceContextMap.get(groupInstanceId).isStateTransitionValid(newState);
     }
 
-    @Override
-    public Stack<GroupStatus> getTransitionedStates() {
-        return groupStateManager.getStateStack();
+    public Stack<GroupStatus> getTransitionedStates(String groupInstanceId) {
+        return 
instanceIdToInstanceContextMap.get(groupInstanceId).getTransitionedStates();
     }
 
-    @Override
-    public GroupStatus getStatus() {
-        return groupStateManager.getCurrentState();
+    public GroupStatus getStatus(String groupInstanceId) {
+        return instanceIdToInstanceContextMap.get(groupInstanceId).getStatus();
     }
 
-    @Override
-    public boolean setStatus(GroupStatus newState) {
-        return this.groupStateManager.changeState(newState);
+    public boolean setStatus(GroupStatus newState, String groupInstanceId) {
+        return 
this.instanceIdToInstanceContextMap.get(groupInstanceId).setStatus(newState);
     }
 
     public boolean equals(Object other) {
@@ -129,4 +127,5 @@ public class Group extends ParentComponent implements 
LifeCycleStateTransitionBe
     public void setGroupScalingEnabled(boolean isGroupScalingEnabled) {
         this.isGroupScalingEnabled = isGroupScalingEnabled;
     }
+
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
index ce3dd56..2b3b64f 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
@@ -19,6 +19,8 @@
 
 package org.apache.stratos.messaging.domain.applications;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import 
org.apache.stratos.messaging.domain.applications.scaling.instance.context.InstanceContext;
 
 import java.io.Serializable;
@@ -29,7 +31,9 @@ import java.util.*;
  * in an Application within the Topology
  */
 
-public abstract class ParentComponent implements Serializable {
+public abstract class ParentComponent<T extends InstanceContext> implements 
Serializable {
+
+    private static final Log log = LogFactory.getLog(ParentComponent.class);
 
     // Dependency Order
     private DependencyOrder dependencyOrder;
@@ -38,12 +42,11 @@ public abstract class ParentComponent implements 
Serializable {
     // Cluster Id map, key = subscription alias for the cartridge type
     private final Map<String, ClusterDataHolder> aliasToClusterDataMap;
     // Group/Cluster Instance Context map, key = instance id
-    private final Map<String, Set<InstanceContext>> 
instanceIdToInstanceContextMap;
+    protected Map<String, T> instanceIdToInstanceContextMap;
 
     public ParentComponent () {
         aliasToGroupMap = new HashMap<String, Group>();
         aliasToClusterDataMap = new HashMap<String, ClusterDataHolder>();
-        instanceIdToInstanceContextMap = new HashMap<String, 
Set<InstanceContext>>();
     }
 
     /**
@@ -208,29 +211,35 @@ public abstract class ParentComponent implements 
Serializable {
      * @param instanceId instance id of child
      * @param instanceContext InstanceContext object
      */
-    public void addInstanceContext (String instanceId, InstanceContext 
instanceContext) {
+    public void addInstanceContext (String instanceId, T instanceContext) {
 
-        // check if there is an existing entry of the instance id
         synchronized (instanceIdToInstanceContextMap) {
-            Set<InstanceContext> instanceContexts = 
instanceIdToInstanceContextMap.get(instanceId);
-            if (instanceContexts == null) {
-                // create a new HashSet which includes the given 
InstanceContext element
-                instanceIdToInstanceContextMap.put(instanceId,
-                        new 
HashSet<InstanceContext>(Arrays.asList(instanceContext)));
+            if (instanceIdToInstanceContextMap.get(instanceId) != null) {
+                if (log.isDebugEnabled()) {
+                    log.debug("InstanceContext for instance id " + instanceId 
+ " already exists");
+                }
             } else {
-                // entry exists, update
-                instanceContexts.add(instanceContext);
+                instanceIdToInstanceContextMap.put(instanceId, 
instanceContext);
             }
         }
     }
 
     /**
-     * Retrieves InstanceContext set for the given instance id
+     * Retrieves InstanceContext obj. for the given instance id
      *
      * @param instanceId instance id
-     * @return Set of InstanceContext objects if exists, else null
+     * @return InstanceContext obj. if exists, else null
      */
-    public Set<InstanceContext> getInstanceContexts (String instanceId) {
+    public T getInstanceContexts (String instanceId) {
+        // if map is empty, return null
+        if (instanceIdToInstanceContextMap.isEmpty()) {
+            return null;
+        }
+
+        // if instanceId is null, just get the first InstanceContext
+        if (instanceId == null) {
+            return 
instanceIdToInstanceContextMap.entrySet().iterator().next().getValue();
+        }
 
         return instanceIdToInstanceContextMap.get(instanceId);
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ApplicationInstanceContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ApplicationInstanceContext.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ApplicationInstanceContext.java
new file mode 100644
index 0000000..266b698
--- /dev/null
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ApplicationInstanceContext.java
@@ -0,0 +1,56 @@
+/*
+ * 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.messaging.domain.applications.scaling.instance.context;
+
+import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
+import 
org.apache.stratos.messaging.domain.topology.LifeCycleStateTransitionBehavior;
+import 
org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleStateManager;
+
+import java.util.Stack;
+
+public class ApplicationInstanceContext extends InstanceContext implements 
LifeCycleStateTransitionBehavior<ApplicationStatus> {
+
+    // Life cycle state manager
+    protected LifeCycleStateManager<ApplicationStatus> lifeCycleStateManager;
+
+    public ApplicationInstanceContext(String alias, String instanceId) {
+        super(alias, instanceId);
+    }
+
+    @Override
+    public boolean isStateTransitionValid(ApplicationStatus newState) {
+        return lifeCycleStateManager.isStateTransitionValid(newState);
+    }
+
+    @Override
+    public Stack<ApplicationStatus> getTransitionedStates() {
+        return lifeCycleStateManager.getStateStack();
+    }
+
+    @Override
+    public ApplicationStatus getStatus() {
+        return lifeCycleStateManager.getCurrentState();
+    }
+
+    @Override
+    public boolean setStatus(ApplicationStatus newState) {
+        return this.lifeCycleStateManager.changeState(newState);
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ClusterInstanceContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ClusterInstanceContext.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ClusterInstanceContext.java
index 8dca37a..dcaa201 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ClusterInstanceContext.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ClusterInstanceContext.java
@@ -19,9 +19,40 @@
 
 package 
org.apache.stratos.messaging.domain.applications.scaling.instance.context;
 
-public class ClusterInstanceContext extends InstanceContext {
+import org.apache.stratos.messaging.domain.topology.ClusterStatus;
+import 
org.apache.stratos.messaging.domain.topology.LifeCycleStateTransitionBehavior;
+import 
org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleStateManager;
+
+import java.util.Stack;
+
+public class ClusterInstanceContext extends InstanceContext implements 
LifeCycleStateTransitionBehavior<ClusterStatus> {
+
+    // Life cycle state manager
+    protected LifeCycleStateManager<ClusterStatus> lifeCycleStateManager;
 
     public ClusterInstanceContext(String alias, String instanceId) {
         super(alias, instanceId);
+        this.lifeCycleStateManager = new 
LifeCycleStateManager<ClusterStatus>(ClusterStatus.Created,
+                alias + "_" + instanceId);
+    }
+
+    @Override
+    public boolean isStateTransitionValid(ClusterStatus newState) {
+        return lifeCycleStateManager.isStateTransitionValid(newState);
+    }
+
+    @Override
+    public Stack<ClusterStatus> getTransitionedStates() {
+        return lifeCycleStateManager.getStateStack();
+    }
+
+    @Override
+    public ClusterStatus getStatus() {
+        return lifeCycleStateManager.getCurrentState();
+    }
+
+    @Override
+    public boolean setStatus(ClusterStatus newState) {
+        return this.lifeCycleStateManager.changeState(newState);
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/GroupInstanceContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/GroupInstanceContext.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/GroupInstanceContext.java
index b567353..7a99be5 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/GroupInstanceContext.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/GroupInstanceContext.java
@@ -19,9 +19,40 @@
 
 package 
org.apache.stratos.messaging.domain.applications.scaling.instance.context;
 
-public class GroupInstanceContext extends InstanceContext {
+import org.apache.stratos.messaging.domain.applications.GroupStatus;
+import 
org.apache.stratos.messaging.domain.topology.LifeCycleStateTransitionBehavior;
+import 
org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleStateManager;
+
+import java.util.Stack;
+
+public class GroupInstanceContext extends InstanceContext implements 
LifeCycleStateTransitionBehavior<GroupStatus> {
+
+    // Life cycle state manager
+    protected LifeCycleStateManager<GroupStatus> lifeCycleStateManager;
 
     public GroupInstanceContext(String alias, String instanceId) {
         super(alias, instanceId);
+        this.lifeCycleStateManager = new 
LifeCycleStateManager<GroupStatus>(GroupStatus.Created,
+                alias + "_" + instanceId);
+    }
+
+    @Override
+    public boolean isStateTransitionValid(GroupStatus newState) {
+        return lifeCycleStateManager.isStateTransitionValid(newState);
+    }
+
+    @Override
+    public Stack<GroupStatus> getTransitionedStates() {
+        return lifeCycleStateManager.getStateStack();
+    }
+
+    @Override
+    public GroupStatus getStatus() {
+        return lifeCycleStateManager.getCurrentState();
+    }
+
+    @Override
+    public boolean setStatus(GroupStatus newState) {
+        return this.lifeCycleStateManager.changeState(newState);
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/InstanceContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/InstanceContext.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/InstanceContext.java
index b66f1d7..eba15c1 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/InstanceContext.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/InstanceContext.java
@@ -19,21 +19,17 @@
 
 package 
org.apache.stratos.messaging.domain.applications.scaling.instance.context;
 
-import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState;
-
 import java.io.Serializable;
 import java.util.Properties;
 
 public abstract class InstanceContext implements Serializable {
 
-    // current state
-    private LifeCycleState state;
     // group/cluster level alias
-    private String alias;
-
-    private String instanceId;
+    protected String alias;
+    // instance id
+    protected String instanceId;
 
-    private Properties instanceProperties;
+    protected Properties instanceProperties;
 
     public InstanceContext (String alias, String instanceId) {
         this.alias = alias;
@@ -41,14 +37,6 @@ public abstract class InstanceContext implements 
Serializable {
         this.instanceProperties = new Properties();
     }
 
-    public LifeCycleState getState() {
-        return state;
-    }
-
-    public void setState(LifeCycleState state) {
-        this.state = state;
-    }
-
     public void addProperty (String name, String value) {
         instanceProperties.put(name, value);
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationActivatedMessageProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationActivatedMessageProcessor.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationActivatedMessageProcessor.java
index 7dc0f4c..94d1642 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationActivatedMessageProcessor.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationActivatedMessageProcessor.java
@@ -88,11 +88,11 @@ public class ApplicationActivatedMessageProcessor extends 
MessageProcessor {
             return false;
         } else {
             // Apply changes to the applications
-            if (!application.isStateTransitionValid(ApplicationStatus.Active)) 
{
-                log.error("Invalid State transfer from [ " + 
application.getStatus() +
+            if (!application.isStateTransitionValid(ApplicationStatus.Active, 
null)) {
+                log.error("Invalid State transfer from [ " + 
application.getStatus(null) +
                         " ] to [ " + ApplicationStatus.Active + " ]");
             }
-            application.setStatus(ApplicationStatus.Active);
+            application.setStatus(ApplicationStatus.Active, null);
 
         }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInactivatedMessageProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInactivatedMessageProcessor.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInactivatedMessageProcessor.java
index 3fb77ec..d5e6672 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInactivatedMessageProcessor.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInactivatedMessageProcessor.java
@@ -88,11 +88,11 @@ public class ApplicationInactivatedMessageProcessor extends 
MessageProcessor {
             return false;
         } else {
             // Apply changes to the applications
-            if 
(!application.isStateTransitionValid(ApplicationStatus.Inactive)) {
-                log.error("Invalid State transfer from [ " + 
application.getStatus() +
+            if 
(!application.isStateTransitionValid(ApplicationStatus.Inactive, null)) {
+                log.error("Invalid State transfer from [ " + 
application.getStatus(null) +
                         " ] to [ " + ApplicationStatus.Inactive + " ]");
             }
-            application.setStatus(ApplicationStatus.Inactive);
+            application.setStatus(ApplicationStatus.Inactive, null);
 
         }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationTerminatingMessageProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationTerminatingMessageProcessor.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationTerminatingMessageProcessor.java
index 2161214..f517f2e 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationTerminatingMessageProcessor.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationTerminatingMessageProcessor.java
@@ -88,11 +88,11 @@ public class ApplicationTerminatingMessageProcessor extends 
MessageProcessor {
             return false;
         } else {
             // Apply changes to the applications
-            if 
(!application.isStateTransitionValid(ApplicationStatus.Terminating)) {
-                log.error("Invalid State transfer from [ " + 
application.getStatus() +
+            if 
(!application.isStateTransitionValid(ApplicationStatus.Terminating, null)) {
+                log.error("Invalid State transfer from [ " + 
application.getStatus(null) +
                         " ] to [ " + ApplicationStatus.Terminating + " ]");
             }
-            application.setStatus(ApplicationStatus.Terminating);
+            application.setStatus(ApplicationStatus.Terminating, null);
 
         }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupActivatedProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupActivatedProcessor.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupActivatedProcessor.java
index add943a..9b2f380 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupActivatedProcessor.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupActivatedProcessor.java
@@ -93,10 +93,10 @@ public class GroupActivatedProcessor extends 
MessageProcessor {
             }
         } else {
             // Apply changes to the topology
-            if (!group.isStateTransitionValid(GroupStatus.Active)) {
-                log.error("Invalid State Transition from " + group.getStatus() 
+ " to " + GroupStatus.Active);
+            if (!group.isStateTransitionValid(GroupStatus.Active, null)) {
+                log.error("Invalid State Transition from " + 
group.getStatus(null) + " to " + GroupStatus.Active);
             }
-            group.setStatus(GroupStatus.Active);
+            group.setStatus(GroupStatus.Active, null);
 
         }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupInActivateProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupInActivateProcessor.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupInActivateProcessor.java
index 8800608..ae27d7d 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupInActivateProcessor.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupInActivateProcessor.java
@@ -92,7 +92,7 @@ public class GroupInActivateProcessor extends 
MessageProcessor {
                         event.getGroupId()));
             }
         } else {
-            group.setStatus(GroupStatus.Inactive);
+            group.setStatus(GroupStatus.Inactive, null);
             if (log.isInfoEnabled()) {
                 log.info(String.format("Group updated as in-activated : %s",
                         group.getUniqueIdentifier()));

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupResetProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupResetProcessor.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupResetProcessor.java
index 5c50e0b..e7e951c 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupResetProcessor.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupResetProcessor.java
@@ -93,11 +93,11 @@ public class GroupResetProcessor extends MessageProcessor {
             }
         } else {
             // Apply changes to the applications
-            if (!group.isStateTransitionValid(GroupStatus.Created)) {
-                log.error("Invalid State Transition from " + group.getStatus() 
+ " to " + GroupStatus.Created + " " +
+            if (!group.isStateTransitionValid(GroupStatus.Created, null)) {
+                log.error("Invalid State Transition from " + 
group.getStatus(null) + " to " + GroupStatus.Created + " " +
                         "for Group " + group.getAlias());
             }
-            group.setStatus(GroupStatus.Created);
+            group.setStatus(GroupStatus.Created, null);
 
         }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatedProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatedProcessor.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatedProcessor.java
index 4dc8876..19ffbec 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatedProcessor.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatedProcessor.java
@@ -93,10 +93,10 @@ public class GroupTerminatedProcessor extends 
MessageProcessor {
             }
         } else {
             // Apply changes to the applications
-            if (!group.isStateTransitionValid(GroupStatus.Terminated)) {
-                log.error("Invalid State Transition from " + group.getStatus() 
+ " to " + GroupStatus.Terminated);
+            if (!group.isStateTransitionValid(GroupStatus.Terminated, null)) {
+                log.error("Invalid State Transition from " + 
group.getStatus(null) + " to " + GroupStatus.Terminated);
             }
-            group.setStatus(GroupStatus.Terminated);
+            group.setStatus(GroupStatus.Terminated, null);
 
         }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatingProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatingProcessor.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatingProcessor.java
index 2123f77..82d5716 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatingProcessor.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatingProcessor.java
@@ -93,10 +93,10 @@ public class GroupTerminatingProcessor extends 
MessageProcessor {
             }
         } else {
             // Apply changes to the applications
-            if (!group.isStateTransitionValid(GroupStatus.Terminating)) {
-                log.error("Invalid State Transition from " + group.getStatus() 
+ " to " + GroupStatus.Active);
+            if (!group.isStateTransitionValid(GroupStatus.Terminating, null)) {
+                log.error("Invalid State Transition from " + 
group.getStatus(null) + " to " + GroupStatus.Active);
             }
-            group.setStatus(GroupStatus.Terminating);
+            group.setStatus(GroupStatus.Terminating, null);
 
         }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
index bd9a025..775f431 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
@@ -1055,7 +1055,7 @@ public class PojoConverter {
         }
 
         GroupBean groupBean = new GroupBean();
-        groupBean.setStatus(group.getStatus().toString());
+        groupBean.setStatus(group.getStatus(null).toString());
         groupBean.setAlias(group.getUniqueIdentifier());
         groupBean.setDeploymentPolicy(group.getDeploymentPolicy());
         groupBean.setAutoScalingPolicy(group.getAutoscalingPolicy());

Reply via email to