You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by is...@apache.org on 2014/07/17 11:49:26 UTC

[2/6] git commit: Creating Subscriptions from Composite App structure

Creating Subscriptions from Composite App structure


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

Branch: refs/heads/4.0.0-grouping
Commit: cf72ef4ccb5b7b35ca30ce475ef0fa4cc9cef6ca
Parents: 5cb4ffc
Author: Isuru Haththotuwa <is...@apache.org>
Authored: Sun Jul 13 16:52:37 2014 +0530
Committer: Isuru Haththotuwa <is...@apache.org>
Committed: Sun Jul 13 16:52:37 2014 +0530

----------------------------------------------------------------------
 .../CompositeApplicationManager.java            | 131 ++++++++++++++++---
 .../parser/CompositeApplicationParser.java      |   1 -
 .../DefaultCompositeApplicationParser.java      |  16 +--
 .../application/parser/ParserUtils.java         |   6 +-
 .../structure/CompositeAppContext.java          |  20 +--
 .../application/structure/GroupContext.java     |  19 +--
 .../CompositeApplicationException.java          |  47 +++++++
 .../rest/endpoint/services/ServiceUtils.java    |   9 +-
 .../rest/endpoint/services/StratosAdmin.java    |   3 +-
 9 files changed, 200 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/cf72ef4c/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/CompositeApplicationManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/CompositeApplicationManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/CompositeApplicationManager.java
index a1d87a6..02893e8 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/CompositeApplicationManager.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/CompositeApplicationManager.java
@@ -1,17 +1,23 @@
 package org.apache.stratos.manager.composite.application;
 
 import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.manager.composite.application.beans.CompositeAppDefinition;
 import org.apache.stratos.manager.composite.application.parser.CompositeApplicationParser;
 import org.apache.stratos.manager.composite.application.parser.DefaultCompositeApplicationParser;
+import org.apache.stratos.manager.composite.application.structure.CompositeAppContext;
+import org.apache.stratos.manager.composite.application.structure.GroupContext;
+import org.apache.stratos.manager.composite.application.structure.SubscribableContext;
 import org.apache.stratos.manager.composite.application.utils.ApplicationUtils;
-import org.apache.stratos.manager.exception.ADCException;
-import org.apache.stratos.manager.exception.CompositeApplicationDefinitionException;
-import org.apache.stratos.manager.exception.PersistenceManagerException;
+import org.apache.stratos.manager.exception.*;
+import org.apache.stratos.manager.manager.CartridgeSubscriptionManager;
 import org.apache.stratos.manager.retriever.DataInsertionAndRetrievalManager;
+import org.apache.stratos.manager.subscription.CartridgeSubscription;
+import org.apache.stratos.manager.subscription.SubscriptionData;
 import org.apache.stratos.messaging.domain.topology.ConfigCompositeApplication;
 
 //Grouping
@@ -19,30 +25,117 @@ public class CompositeApplicationManager {
 	
 	private static Log log = LogFactory.getLog(CompositeApplicationManager.class);
 	
-	public void deployCompositeApplication (CompositeAppDefinition compositeAppDefinition) throws CompositeApplicationDefinitionException, PersistenceManagerException {
-//		if (log.isDebugEnabled()) {
-//			log.debug("deploying composite application " + configCompositeApplication.getAlias());
-//		}
-//		registerCompositeApplication(configCompositeApplication);
-//		if (log.isDebugEnabled()) {
-//			log.debug("publishing composite application " + configCompositeApplication.getAlias());
-//		}
-//		ApplicationUtils.publishApplicationCreatedEvent(configCompositeApplication);
-//		if (log.isDebugEnabled()) {
-//			log.debug("composite application successfully deployed" + configCompositeApplication.getAlias());
-//		}
+	public void deployCompositeApplication (CompositeAppDefinition compositeAppDefinition, int tenantId, String tenantDomain,
+                                            String tenantAdminUsername) throws CompositeApplicationException, CompositeApplicationDefinitionException,
+            PersistenceManagerException {
 
         CompositeApplicationParser compositeAppParser = new DefaultCompositeApplicationParser();
-        compositeAppParser.parse(compositeAppDefinition);
+        CompositeAppContext compositeAppContext = compositeAppParser.parse(compositeAppDefinition);
+
+        log.info("Composite Application [ Id: " + compositeAppDefinition.getApplicationId() + " , alias: "
+                + compositeAppDefinition.getAlias() + " ] deployed successfully");
         
         //DataInsertionAndRetrievalManager mgr = new DataInsertionAndRetrievalManager();
         //mgr.persistCompositeApplication(compositeAppDefinition);
+        Set<CartridgeSubscription> cartridgeSubscriptions = new HashSet<CartridgeSubscription>();
 
-        // TODO: traverse the data structure and create the subscriptions
+        // traverse through the Composite App Structure and create Cartridge Subscriptions
+        if(compositeAppContext.getSubscribableContexts() != null) {
+            // Subscription relevant to top level Subscribables
+            cartridgeSubscriptions.addAll(getCartridgeSybscriptionsForSubscribables(compositeAppContext.getSubscribableContexts(),
+                    tenantId, tenantDomain, tenantAdminUsername));
+        }
 
-        log.info("Composite Application [ Id: " + compositeAppDefinition.getApplicationId() + " , alias: "
-                + compositeAppDefinition.getAlias() + " ] deployed successfully");
+        if (compositeAppContext.getGroupContexts() != null) {
+            // Subscriptions relevant to Groups
+            cartridgeSubscriptions.addAll(getCartridgeSubscriptionForGroups(compositeAppContext.getGroupContexts(), tenantId,
+                    tenantDomain, tenantAdminUsername));
+        }
 	}
+
+    private Set<CartridgeSubscription> getCartridgeSubscriptionForGroups (Set<GroupContext> groupContexts,
+                                                                          int tenantId, String tenantDomain,
+                                                                          String tenantAdminUsername)
+            throws CompositeApplicationException {
+
+        Set<CartridgeSubscription> cartridgeSubscriptions = new HashSet<CartridgeSubscription>();
+        for (GroupContext groupContext : groupContexts) {
+            // create Subscriptions for the Group's top level Subscribables
+            if (groupContext.getSubscribableContexts() != null) {
+                cartridgeSubscriptions.addAll(getCartridgeSybscriptionsForSubscribables(groupContext.getSubscribableContexts(),
+                        tenantId, tenantDomain, tenantAdminUsername));
+            }
+            // create Subscriptions for the nested Group's Subscribables
+            if (groupContext.getGroupContexts() != null) {
+                cartridgeSubscriptions.addAll(getCartridgeSubscriptionForGroups(groupContext.getGroupContexts(), tenantId,
+                        tenantDomain, tenantAdminUsername));
+            }
+        }
+
+        return cartridgeSubscriptions;
+    }
+
+    private Set<CartridgeSubscription> getCartridgeSybscriptionsForSubscribables (Set<SubscribableContext> subscribableContexts,
+                                                                                  int tenantId, String tenantDomain,
+                                                                                  String tenantAdminUsername)
+            throws CompositeApplicationException {
+
+        Set<CartridgeSubscription> cartridgeSubscriptions = new HashSet<CartridgeSubscription>();
+
+        for (SubscribableContext subscribableContext : subscribableContexts) {
+            cartridgeSubscriptions.add(getCartridgeSubscription(subscribableContext, tenantId, tenantDomain, tenantAdminUsername));
+        }
+
+        return cartridgeSubscriptions;
+    }
+
+    private CartridgeSubscription getCartridgeSubscription (SubscribableContext subscribableContext, int tenantId, String tenantDomain,
+                                                            String tenantAdminUsername) throws CompositeApplicationException {
+
+        SubscriptionData subscriptionData = new SubscriptionData();
+        subscriptionData.setCartridgeType(subscribableContext.getCartridgeType());
+        subscriptionData.setCartridgeAlias(subscribableContext.getAlias());
+        subscriptionData.setAutoscalingPolicyName(subscribableContext.getAutoscalingPolicy());
+        subscriptionData.setDeploymentPolicyName(subscribableContext.getDeploymentPolicy());
+        subscriptionData.setTenantId(tenantId);
+        subscriptionData.setTenantDomain(tenantDomain);
+        subscriptionData.setTenantAdminUsername(tenantAdminUsername);
+
+        if (subscribableContext.getRepoUrl() != null && !subscribableContext.getRepoUrl().isEmpty()) {
+            subscriptionData.setRepositoryType("git");
+            subscriptionData.setRepositoryURL(subscribableContext.getRepoUrl());
+            subscriptionData.setPrivateRepository(subscribableContext.isPrivateRepo());
+            subscriptionData.setRepositoryUsername(subscribableContext.getUsername());
+            subscriptionData.setRepositoryPassword(subscribableContext.getPassword());
+        }
+
+        CartridgeSubscriptionManager cartridgeSubscriptionManager = new CartridgeSubscriptionManager();
+        try {
+            return cartridgeSubscriptionManager.createCartridgeSubscription(subscriptionData);
+
+        } catch (ADCException e) {
+            throw new CompositeApplicationException(e);
+        } catch (InvalidCartridgeAliasException e) {
+            throw new CompositeApplicationException(e);
+        } catch (DuplicateCartridgeAliasException e) {
+            throw new CompositeApplicationException(e);
+        } catch (PolicyException e) {
+            throw new CompositeApplicationException(e);
+        } catch (UnregisteredCartridgeException e) {
+            throw new CompositeApplicationException(e);
+        } catch (RepositoryRequiredException e) {
+            throw new CompositeApplicationException(e);
+        } catch (RepositoryCredentialsRequiredException e) {
+            throw new CompositeApplicationException(e);
+        } catch (RepositoryTransportException e) {
+            throw new CompositeApplicationException(e);
+        } catch (AlreadySubscribedException e) {
+            throw new CompositeApplicationException(e);
+        } catch (InvalidRepositoryException e) {
+            throw new CompositeApplicationException(e);
+        }
+
+    }
 	
 	public void unDeployCompositeApplication(String configApplicationAlias) throws ADCException {
 		if (log.isDebugEnabled()) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/cf72ef4c/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/parser/CompositeApplicationParser.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/parser/CompositeApplicationParser.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/parser/CompositeApplicationParser.java
index 1c494a3..e319742 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/parser/CompositeApplicationParser.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/parser/CompositeApplicationParser.java
@@ -20,7 +20,6 @@
 package org.apache.stratos.manager.composite.application.parser;
 
 import org.apache.stratos.manager.composite.application.structure.CompositeAppContext;
-import org.apache.stratos.manager.composite.application.tmp.CompositeAppRegistrants;
 import org.apache.stratos.manager.exception.CompositeApplicationDefinitionException;
 
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/cf72ef4c/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/parser/DefaultCompositeApplicationParser.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/parser/DefaultCompositeApplicationParser.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/parser/DefaultCompositeApplicationParser.java
index 6fc15cd..9bfc864 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/parser/DefaultCompositeApplicationParser.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/parser/DefaultCompositeApplicationParser.java
@@ -211,12 +211,12 @@ public class DefaultCompositeApplicationParser implements CompositeApplicationPa
         return compositeAppContext;
     }
 
-    private List<GroupContext> getGroupContexts (List<GroupDefinition> groupDefinitions,
+    private Set<GroupContext> getGroupContexts (List<GroupDefinition> groupDefinitions,
                                                  Map<String, SubscribableInfo> subscribableInformation,
                                                  Map<String, GroupDefinition> definedGroups)
             throws CompositeApplicationDefinitionException {
 
-        List<GroupContext> groupContexts = new ArrayList<GroupContext>();
+        Set<GroupContext> groupContexts = new HashSet<GroupContext>();
 
         for (GroupDefinition group : groupDefinitions) {
             groupContexts.add(getGroupContext(group, subscribableInformation, definedGroups));
@@ -248,7 +248,7 @@ public class DefaultCompositeApplicationParser implements CompositeApplicationPa
         }
         // get nested groups
         if (group.getSubGroups() != null) {
-            List<GroupContext> nestedGroupContexts = new ArrayList<GroupContext>();
+            Set<GroupContext> nestedGroupContexts = new HashSet<GroupContext>();
             // check sub groups
             for (GroupDefinition subGroup : group.getSubGroups()) {
                 nestedGroupContexts.add(getGroupContext(subGroup, subscribableInformation, definedGroups));
@@ -260,7 +260,7 @@ public class DefaultCompositeApplicationParser implements CompositeApplicationPa
         return groupContext;
     }
 
-    private List<StartupOrder> getStartupOrderForGroup(String serviceGroupName) throws CompositeApplicationDefinitionException {
+    private Set<StartupOrder> getStartupOrderForGroup(String serviceGroupName) throws CompositeApplicationDefinitionException {
 
         ServiceGroupDefinition groupDefinition;
 
@@ -284,14 +284,14 @@ public class DefaultCompositeApplicationParser implements CompositeApplicationPa
         return null;
     }
 
-    private List<StartupOrder> getStartupOrderForApplicationComponents (List<StartupOrderDefinition> startupOrderDefinitions)
+    private Set<StartupOrder> getStartupOrderForApplicationComponents (List<StartupOrderDefinition> startupOrderDefinitions)
             throws CompositeApplicationDefinitionException {
 
         if (startupOrderDefinitions == null) {
             return null;
         }
 
-        List<StartupOrder> startupOrders = new ArrayList<StartupOrder>();
+        Set<StartupOrder> startupOrders = new HashSet<StartupOrder>();
 
         for (StartupOrderDefinition startupOrderDefinition : startupOrderDefinitions) {
             startupOrders.add(new StartupOrder(startupOrderDefinition.getStart(), startupOrderDefinition.getAfter()));
@@ -323,11 +323,11 @@ public class DefaultCompositeApplicationParser implements CompositeApplicationPa
 
     }
 
-    private List<SubscribableContext> getSubsribableContexts (List<SubscribableDefinition> subscribableDefinitions,
+    private Set<SubscribableContext> getSubsribableContexts (List<SubscribableDefinition> subscribableDefinitions,
                                                               Map<String, SubscribableInfo> subscribableInformation)
             throws CompositeApplicationDefinitionException {
 
-        List<SubscribableContext> subscribableContexts = new ArrayList<SubscribableContext>();
+        Set<SubscribableContext> subscribableContexts = new HashSet<SubscribableContext>();
 
         for (SubscribableDefinition subscribableDefinition : subscribableDefinitions) {
             // check is there is a related Subscribable Information

http://git-wip-us.apache.org/repos/asf/stratos/blob/cf72ef4c/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/parser/ParserUtils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/parser/ParserUtils.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/parser/ParserUtils.java
index 8e3939f..be9e703 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/parser/ParserUtils.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/parser/ParserUtils.java
@@ -29,7 +29,9 @@ import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition;
 import org.apache.stratos.manager.grouping.definitions.StartupOrderDefinition;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 public class ParserUtils {
 
@@ -49,9 +51,9 @@ public class ParserUtils {
         return subscribableContext;
     }
 
-    public static List<StartupOrder> convert (List<StartupOrderDefinition> startupOrderDefinitions) {
+    public static Set<StartupOrder> convert (List<StartupOrderDefinition> startupOrderDefinitions) {
 
-        List<StartupOrder> startupOrders = new ArrayList<StartupOrder>();
+        Set<StartupOrder> startupOrders = new HashSet<StartupOrder>();
         for (StartupOrderDefinition startupOrderDefinition : startupOrderDefinitions) {
             StartupOrder startupOrder = new StartupOrder(startupOrderDefinition.getStart(), startupOrderDefinition.getAfter());
             startupOrders.add(startupOrder);

http://git-wip-us.apache.org/repos/asf/stratos/blob/cf72ef4c/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/structure/CompositeAppContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/structure/CompositeAppContext.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/structure/CompositeAppContext.java
index 98c3afc..6a589e7 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/structure/CompositeAppContext.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/structure/CompositeAppContext.java
@@ -19,17 +19,17 @@
 
 package org.apache.stratos.manager.composite.application.structure;
 
-import java.util.List;
+import java.util.Set;
 
 public class CompositeAppContext {
 
     private String appId;
 
-    private List<GroupContext> groupContexts;
+    private Set<GroupContext> groupContexts;
 
-    private List<SubscribableContext> subscribableContexts;
+    private Set<SubscribableContext> subscribableContexts;
 
-    private List<StartupOrder> startupOrder;
+    private Set<StartupOrder> startupOrder;
 
     private String killBehaviour;
 
@@ -41,27 +41,27 @@ public class CompositeAppContext {
         this.appId = appId;
     }
 
-    public List<GroupContext> getGroupContexts() {
+    public Set<GroupContext> getGroupContexts() {
         return groupContexts;
     }
 
-    public void setGroupContexts(List<GroupContext> groupContexts) {
+    public void setGroupContexts(Set<GroupContext> groupContexts) {
         this.groupContexts = groupContexts;
     }
 
-    public List<SubscribableContext> getSubscribableContexts() {
+    public Set<SubscribableContext> getSubscribableContexts() {
         return subscribableContexts;
     }
 
-    public void setSubscribableContexts(List<SubscribableContext> subscribableContexts) {
+    public void setSubscribableContexts(Set<SubscribableContext> subscribableContexts) {
         this.subscribableContexts = subscribableContexts;
     }
 
-    public List<StartupOrder> getStartupOrder() {
+    public Set<StartupOrder> getStartupOrder() {
         return startupOrder;
     }
 
-    public void setStartupOrder(List<StartupOrder> startupOrder) {
+    public void setStartupOrder(Set<StartupOrder> startupOrder) {
         this.startupOrder = startupOrder;
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/cf72ef4c/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/structure/GroupContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/structure/GroupContext.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/structure/GroupContext.java
index 216d89c..e7736ea 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/structure/GroupContext.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/structure/GroupContext.java
@@ -20,6 +20,7 @@
 package org.apache.stratos.manager.composite.application.structure;
 
 import java.util.List;
+import java.util.Set;
 
 public class GroupContext {
 
@@ -31,20 +32,20 @@ public class GroupContext {
 
     private String autoscalingPolicy;
 
-    private List<GroupContext> groupContexts;
+    private Set<GroupContext> groupContexts;
 
-    private List<SubscribableContext> subscribableContexts;
+    private Set<SubscribableContext> subscribableContexts;
 
-    private List<StartupOrder> startupOrder;
+    private Set<StartupOrder> startupOrder;
 
     private String killBehaviour;
 
 
-    public List<StartupOrder> getStartupOrder() {
+    public Set<StartupOrder> getStartupOrder() {
         return startupOrder;
     }
 
-    public void setStartupOrder(List<StartupOrder> startupOrder) {
+    public void setStartupOrder(Set<StartupOrder> startupOrder) {
         this.startupOrder = startupOrder;
     }
 
@@ -88,19 +89,19 @@ public class GroupContext {
         this.autoscalingPolicy = autoscalingPolicy;
     }
 
-    public List<GroupContext> getGroupContexts() {
+    public Set<GroupContext> getGroupContexts() {
         return groupContexts;
     }
 
-    public void setGroupContexts(List<GroupContext> groupContexts) {
+    public void setGroupContexts(Set<GroupContext> groupContexts) {
         this.groupContexts = groupContexts;
     }
 
-    public List<SubscribableContext> getSubscribableContexts() {
+    public Set<SubscribableContext> getSubscribableContexts() {
         return subscribableContexts;
     }
 
-    public void setSubscribableContexts(List<SubscribableContext> subscribableContexts) {
+    public void setSubscribableContexts(Set<SubscribableContext> subscribableContexts) {
         this.subscribableContexts = subscribableContexts;
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/cf72ef4c/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/CompositeApplicationException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/CompositeApplicationException.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/CompositeApplicationException.java
new file mode 100644
index 0000000..ea47536
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/CompositeApplicationException.java
@@ -0,0 +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.manager.exception;
+
+public class CompositeApplicationException extends Exception {
+
+    private String message;
+
+    public CompositeApplicationException () {
+        super();
+    }
+
+    public CompositeApplicationException (String message, Throwable cause) {
+        super(message, cause);
+        this.message = message;
+    }
+
+    public CompositeApplicationException (String message) {
+        super(message);
+        this.message = message;
+    }
+
+    public CompositeApplicationException (Throwable cause) {
+        super(cause);
+    }
+
+    public String getMessage() {
+        return message;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/cf72ef4c/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
index 12c01cf..8e10fda 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
@@ -251,16 +251,21 @@ public class ServiceUtils {
             return stratosAdminResponse;
         }
 */
-    static StratosAdminResponse deployCompositeApplicationDefintion (CompositeAppDefinition compositeAppDefinition)
+    static StratosAdminResponse deployCompositeApplicationDefintion (CompositeAppDefinition compositeAppDefinition, ConfigurationContext ctxt,
+                                                                     String userName, String tenantDomain)
             throws RestAPIException {
 
+        int tenantId = ApplicationManagementUtil.getTenantId(ctxt);
+
         try {
-            compositeApplicationManager.deployCompositeApplication(compositeAppDefinition);
+            compositeApplicationManager.deployCompositeApplication(compositeAppDefinition, tenantId, tenantDomain, userName);
 
         } catch (CompositeApplicationDefinitionException e) {
             throw new RestAPIException(e);
         } catch (PersistenceManagerException e) {
             throw new RestAPIException(e);
+        } catch (CompositeApplicationException e) {
+            throw new RestAPIException(e);
         }
 
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/cf72ef4c/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
index 8cdf16b..dc24984 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
@@ -132,7 +132,8 @@ public class StratosAdmin extends AbstractAdmin {
     // Grouping
     public StratosAdminResponse deployApplicationDefinition(CompositeAppDefinition applicationDefinitionBean)
             throws RestAPIException {
-        return ServiceUtils.deployCompositeApplicationDefintion(applicationDefinitionBean);
+        return ServiceUtils.deployCompositeApplicationDefintion(applicationDefinitionBean, getConfigContext(),
+                getUsername(), getTenantDomain());
 
     }