Repository: stratos Updated Branches: refs/heads/master e99025469 -> 1db3e5cdf
initial application creation support from the BE Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/1db3e5cd Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/1db3e5cd Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/1db3e5cd Branch: refs/heads/master Commit: 1db3e5cdf7d0346886b976af192387455ffc538c Parents: e990254 Author: Isuru Haththotuwa <[email protected]> Authored: Fri Nov 28 17:36:18 2014 +0530 Committer: Isuru Haththotuwa <[email protected]> Committed: Fri Nov 28 17:36:47 2014 +0530 ---------------------------------------------------------------------- .../beans/ApplicationDefinition.java | 3 +- .../application/beans/ComponentDefinition.java | 3 +- .../application/beans/GroupDefinition.java | 3 +- .../application/beans/PropertyBean.java | 3 +- .../beans/SubscribableDefinition.java | 3 +- .../application/beans/SubscribableInfo.java | 3 +- .../manager/persistence/PersistenceManager.java | 7 + .../RegistryBasedPersistenceManager.java | 135 +++++++++++++++++++ .../stratos/manager/utils/Serializer.java | 19 +++ .../rest/endpoint/api/StratosApiV41.java | 13 ++ .../rest/endpoint/api/StratosApiV41Utils.java | 31 +++++ 11 files changed, 217 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ApplicationDefinition.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ApplicationDefinition.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ApplicationDefinition.java index 245f3ca..d58adb3 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ApplicationDefinition.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ApplicationDefinition.java @@ -20,10 +20,11 @@ package org.apache.stratos.manager.composite.application.beans; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; import java.util.List; @XmlRootElement -public class ApplicationDefinition { +public class ApplicationDefinition implements Serializable { private String applicationId; http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ComponentDefinition.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ComponentDefinition.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ComponentDefinition.java index 176ab14..f487d1c 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ComponentDefinition.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ComponentDefinition.java @@ -4,10 +4,11 @@ import org.apache.stratos.manager.grouping.definitions.DependencyDefinitions; import org.apache.stratos.manager.grouping.definitions.StartupOrderDefinition; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; import java.util.List; @XmlRootElement(name = "components") -public class ComponentDefinition { +public class ComponentDefinition implements Serializable { private List<GroupDefinition> groups; http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/GroupDefinition.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/GroupDefinition.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/GroupDefinition.java index 3962ac6..1f07d8b 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/GroupDefinition.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/GroupDefinition.java @@ -20,10 +20,11 @@ package org.apache.stratos.manager.composite.application.beans; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; import java.util.List; @XmlRootElement(name = "groups") -public class GroupDefinition { +public class GroupDefinition implements Serializable { private String name; http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/PropertyBean.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/PropertyBean.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/PropertyBean.java index c5c4c56..48303d4 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/PropertyBean.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/PropertyBean.java @@ -20,9 +20,10 @@ package org.apache.stratos.manager.composite.application.beans; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; @XmlRootElement(name = "property") -public class PropertyBean { +public class PropertyBean implements Serializable { private String name; http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableDefinition.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableDefinition.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableDefinition.java index 77d409a..4bdc3f8 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableDefinition.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableDefinition.java @@ -20,9 +20,10 @@ package org.apache.stratos.manager.composite.application.beans; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; @XmlRootElement (name = "subscribables") -public class SubscribableDefinition { +public class SubscribableDefinition implements Serializable { private String type; http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableInfo.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableInfo.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableInfo.java index 85cb821..630e1ed 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableInfo.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableInfo.java @@ -19,12 +19,13 @@ package org.apache.stratos.manager.composite.application.beans; +import java.io.Serializable; import java.util.List; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "subscribableInfo") -public class SubscribableInfo { +public class SubscribableInfo implements Serializable { private String alias; http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/PersistenceManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/PersistenceManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/PersistenceManager.java index 6eaad50..b0dc792 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/PersistenceManager.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/PersistenceManager.java @@ -19,6 +19,7 @@ package org.apache.stratos.manager.persistence; +import org.apache.stratos.manager.composite.application.beans.ApplicationDefinition; import org.apache.stratos.manager.deploy.service.Service; import org.apache.stratos.manager.exception.PersistenceManagerException; import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition; @@ -73,4 +74,10 @@ public abstract class PersistenceManager { public abstract ServiceGroupDefinition getServiceGroupDefinition (String serviceGroupDefinitionName) throws PersistenceManagerException; public abstract void removeServiceGroupDefinition (String serviceGroupDefinitionName) throws PersistenceManagerException; + + public abstract void createApplication (ApplicationDefinition appDefinition) throws PersistenceManagerException; + + public abstract ApplicationDefinition getApplication (String appId) throws PersistenceManagerException; + + public abstract void removeApplication (String appId) throws PersistenceManagerException; } http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/RegistryBasedPersistenceManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/RegistryBasedPersistenceManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/RegistryBasedPersistenceManager.java index 3fcfcc4..7c78451 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/RegistryBasedPersistenceManager.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/RegistryBasedPersistenceManager.java @@ -21,6 +21,7 @@ package org.apache.stratos.manager.persistence; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.manager.composite.application.beans.ApplicationDefinition; import org.apache.stratos.manager.deploy.service.Service; import org.apache.stratos.manager.exception.PersistenceManagerException; import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition; @@ -51,6 +52,7 @@ public class RegistryBasedPersistenceManager extends PersistenceManager { private static final String CARTRIDGES = "/cartridges"; private static final String GROUPS = "/groups"; private static final String COMPOSITE_APPLICATIONS = "/composite_applications"; + private static final String DEFINITIONS = "/definitions"; private static final String SERVICE_GROUPING = "/service.grouping"; private static final String SERVICE_GROUPING_DEFINITIONS = SERVICE_GROUPING + "/definitions"; @@ -832,4 +834,137 @@ public class RegistryBasedPersistenceManager extends PersistenceManager { } } + @Override + public void createApplication(ApplicationDefinition appDefinition) throws PersistenceManagerException { + + int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); + if (tenantId != MultitenantConstants.SUPER_TENANT_ID) { + try { + PrivilegedCarbonContext.startTenantFlow(); + PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + carbonContext.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); + carbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID); + + persistApplication(appDefinition); + + } finally { + PrivilegedCarbonContext.endTenantFlow(); + } + + } else { + persistApplication(appDefinition); + } + } + + private void persistApplication (ApplicationDefinition appDefinition) throws PersistenceManagerException { + + String resourcePath = STRATOS_MANAGER_REOSURCE + COMPOSITE_APPLICATIONS + "/" + appDefinition.getApplicationId(); + + try { + RegistryManager.getInstance().persist(resourcePath, + Serializer.serializeApplicationDefinitionToByteArray(appDefinition), null); + + if (log.isDebugEnabled()) { + log.debug("Persisted Application Definition successfully: [ " + appDefinition.getApplicationId() + " ]"); + } + + } catch (RegistryException e) { + throw new PersistenceManagerException(e); + + } catch (IOException e) { + throw new PersistenceManagerException(e); + } + } + + @Override + public ApplicationDefinition getApplication(String appId) throws PersistenceManagerException { + + int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); + if (tenantId != MultitenantConstants.SUPER_TENANT_ID) { + try { + PrivilegedCarbonContext.startTenantFlow(); + PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + carbonContext.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); + carbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID); + + return retrieveApplication(appId); + + } finally { + PrivilegedCarbonContext.endTenantFlow(); + } + + } else { + return retrieveApplication(appId); + } + } + + private ApplicationDefinition retrieveApplication (String appId) throws PersistenceManagerException { + + Object byteObj; + + try { + byteObj = RegistryManager.getInstance().retrieve(STRATOS_MANAGER_REOSURCE + COMPOSITE_APPLICATIONS + "/" + + appId); + + } catch (RegistryException e) { + throw new PersistenceManagerException(e); + } + + if (byteObj == null) { + return null; + } + + Object appDefinitionObj; + + try { + appDefinitionObj = Deserializer.deserializeFromByteArray((byte[]) byteObj); + + } catch (Exception e) { + throw new PersistenceManagerException(e); + } + + if (appDefinitionObj instanceof ApplicationDefinition) { + return (ApplicationDefinition) appDefinitionObj; + } + + return null; + } + + @Override + public void removeApplication(String appId) throws PersistenceManagerException { + + int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); + if (tenantId != MultitenantConstants.SUPER_TENANT_ID) { + try { + PrivilegedCarbonContext.startTenantFlow(); + PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + carbonContext.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); + carbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID); + + deleteApplication(appId); + + } finally { + PrivilegedCarbonContext.endTenantFlow(); + } + + } else { + deleteApplication(appId); + } + } + + private void deleteApplication (String appId) throws PersistenceManagerException { + + String resourcePath = STRATOS_MANAGER_REOSURCE + COMPOSITE_APPLICATIONS + "/" + appId; + + try { + RegistryManager.getInstance().delete(resourcePath); + if (log.isDebugEnabled()) { + log.debug("Deleted Application Definition on path " + resourcePath + " successfully"); + } + + } catch (RegistryException e) { + throw new PersistenceManagerException(e); + } + } + } http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/Serializer.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/Serializer.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/Serializer.java index c6dadf9..796bddc 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/Serializer.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/Serializer.java @@ -138,4 +138,23 @@ public class Serializer { bos.close(); } } + + public static byte [] serializeApplicationDefinitionToByteArray (ApplicationDefinition applicationDefinition) + throws IOException { + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutput out = null; + try { + out = new ObjectOutputStream(bos); + out.writeObject(applicationDefinition); + + return bos.toByteArray(); + + } finally { + if (out != null) { + out.close(); + } + bos.close(); + } + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java index 7810b5d..7b6dd19 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java @@ -481,6 +481,19 @@ public class StratosApiV41 extends AbstractApi { return Response.created(url).build(); } +// @POST +// @Path("/applications") +// @Produces("application/json") +// @Consumes("application/json") +// @AuthorizationAction("/permission/protected/manage/monitor/tenants") +// @SuperTenantService(true) +// public Response createApplication (ApplicationDefinition applicationDefinitionBean) +// throws RestAPIException { +// StratosApiV41Utils.createApplication(applicationDefinitionBean); +// URI url = uriInfo.getAbsolutePathBuilder().path(applicationDefinitionBean.getApplicationId()).build(); +// return Response.created(url).build(); +// } + @DELETE @Path("/applications/{applicationId}") @Produces("application/json") http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java index 850faa0..fb007d5 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java @@ -44,6 +44,8 @@ import org.apache.stratos.manager.exception.*; import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition; import org.apache.stratos.manager.grouping.manager.ServiceGroupingManager; import org.apache.stratos.manager.manager.CartridgeSubscriptionManager; +import org.apache.stratos.manager.persistence.PersistenceManager; +import org.apache.stratos.manager.persistence.RegistryBasedPersistenceManager; import org.apache.stratos.manager.repository.RepositoryNotification; import org.apache.stratos.manager.subscription.ApplicationSubscription; import org.apache.stratos.manager.subscription.CartridgeSubscription; @@ -97,6 +99,7 @@ public class StratosApiV41Utils { private static CartridgeSubscriptionManager cartridgeSubsciptionManager = new CartridgeSubscriptionManager(); private static ServiceGroupingManager serviceGropingManager = new ServiceGroupingManager(); private static ServiceDeploymentManager serviceDeploymentManager = new ServiceDeploymentManager(); + private static PersistenceManager persistenceManager = new RegistryBasedPersistenceManager(); public static void deployCartridge(CartridgeDefinitionBean cartridgeDefinitionBean, ConfigurationContext ctxt, String userName, String tenantDomain) throws RestAPIException { @@ -115,6 +118,34 @@ public class StratosApiV41Utils { log.info("Successfully deployed Cartridge [type] " + cartridgeDefinitionBean.type); } + public static void createApplication (ApplicationDefinition appDefinition) throws RestAPIException { + + try { + if (persistenceManager.getApplication(appDefinition.getApplicationId()) != null) { + String errorMsg = "Application Definition with id " + appDefinition.getApplicationId() + + " already exists"; + log.error(errorMsg); + throw new RestAPIException(errorMsg); + } + } catch (PersistenceManagerException e) { + throw new RestAPIException(e); + } + + try { + persistenceManager.createApplication(appDefinition); + } catch (PersistenceManagerException e) { + throw new RestAPIException(e); + } + } + + public static void deleteApplication (String appId) throws RestAPIException { + + try { + persistenceManager.removeApplication(appId); + } catch (PersistenceManagerException e) { + throw new RestAPIException(e); + } + } public static void deployApplicationDefinition(ApplicationDefinition appDefinition, ConfigurationContext ctxt, String userName, String tenantDomain)
