Updated Branches: refs/heads/master 8cf82f22f -> 7a61fc023
persisting deployed Services in Registry Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/18949f71 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/18949f71 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/18949f71 Branch: refs/heads/master Commit: 18949f7113a1968231e49e7c81e0103364946f0e Parents: df8e5cc Author: Isuru <[email protected]> Authored: Mon Jan 6 17:46:32 2014 +0530 Committer: Isuru <[email protected]> Committed: Mon Jan 6 17:46:32 2014 +0530 ---------------------------------------------------------------------- .../adc/mgt/persistence/PersistenceManager.java | 7 + .../RegistryBasedPersistenceManager.java | 137 +++++++++++++++++++ .../DataInsertionAndRetrievalManager.java | 16 +++ .../stratos/adc/mgt/utils/Serializer.java | 21 +++ 4 files changed, 181 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/18949f71/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java index 6eb93ad..d892656 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java @@ -19,6 +19,7 @@ package org.apache.stratos.adc.mgt.persistence; +import org.apache.stratos.adc.mgt.deploy.service.Service; import org.apache.stratos.adc.mgt.exception.PersistenceManagerException; import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription; @@ -41,6 +42,12 @@ public abstract class PersistenceManager { public abstract Collection<CartridgeSubscription> getCartridgeSubscriptions(int tenantId) throws PersistenceManagerException; + public abstract void persistService (Service service) throws PersistenceManagerException; + + public abstract Service getService (String cartridgeType) throws PersistenceManagerException; + + public abstract void removeService (String cartridgeType) throws PersistenceManagerException; + //public abstract Collection<CartridgeSubscription> getCartridgeSubscriptions(int tenantId) // throws PersistenceManagerException; http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/18949f71/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java index 359f5da..5d0638d 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java @@ -21,6 +21,7 @@ package org.apache.stratos.adc.mgt.persistence; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.adc.mgt.deploy.service.Service; import org.apache.stratos.adc.mgt.exception.PersistenceManagerException; import org.apache.stratos.adc.mgt.registry.RegistryManager; import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription; @@ -43,6 +44,7 @@ public class RegistryBasedPersistenceManager extends PersistenceManager { private static final String STRATOS_MANAGER_REOSURCE = "/stratos_manager"; private static final String ACTIVE_SUBSCRIPTIONS = "/subscriptions/active"; private static final String INACTIVE_SUBSCRIPTIONS = "/subscriptions/inactive"; + private static final String SERVICES = "/services"; @Override public void persistCartridgeSubscription (CartridgeSubscription cartridgeSubscription) throws PersistenceManagerException { @@ -341,6 +343,140 @@ public class RegistryBasedPersistenceManager extends PersistenceManager { return traverseAndGetCartridgeSubscriptions(STRATOS_MANAGER_REOSURCE + ACTIVE_SUBSCRIPTIONS + "/" + Integer.toString(tenantId)); } + @Override + public void persistService(Service service) throws PersistenceManagerException { + + int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); + if (tenantId != MultitenantConstants.SUPER_TENANT_ID) { + // TODO: This is only a workaround. Proper fix is to write to tenant registry + try { + PrivilegedCarbonContext.startTenantFlow(); + PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + carbonContext.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); + carbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID); + + persistDeployedService(service); + + } finally { + PrivilegedCarbonContext.endTenantFlow(); + } + + } else { + persistDeployedService(service); + } + } + + private void persistDeployedService (Service service) throws PersistenceManagerException { + + // persist Service + try { + RegistryManager.getInstance().persist(STRATOS_MANAGER_REOSURCE + SERVICES + "/" + service.getType(), + Serializer.serializeServiceToByteArray(service), null); + + if (log.isDebugEnabled()) { + log.debug("Persisted Service successfully: [ " + service.getType() + ", " + service.getTenantRange() + " ]"); + } + + } catch (RegistryException e) { + throw new PersistenceManagerException(e); + + } catch (IOException e) { + throw new PersistenceManagerException(e); + } + } + + @Override + public Service getService(String cartridgeType) throws PersistenceManagerException { + + int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); + if (tenantId != MultitenantConstants.SUPER_TENANT_ID) { + // TODO: This is only a workaround. Proper fix is to write to tenant registry + try { + PrivilegedCarbonContext.startTenantFlow(); + PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + carbonContext.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); + carbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID); + + return getDeployedService(cartridgeType); + + } finally { + PrivilegedCarbonContext.endTenantFlow(); + } + + } else { + return getDeployedService(cartridgeType); + } + } + + public Service getDeployedService (String cartridgeType) throws PersistenceManagerException { + + Object byteObj; + + try { + byteObj = RegistryManager.getInstance().retrieve(STRATOS_MANAGER_REOSURCE + SERVICES + "/" + cartridgeType); + + } catch (RegistryException e) { + throw new PersistenceManagerException(e); + } + + if (byteObj == null) { + return null; + } + + Object serviceObj; + + try { + serviceObj = Deserializer.deserializeFromByteArray((byte[]) byteObj); + + } catch (Exception e) { + throw new PersistenceManagerException(e); + } + + if (serviceObj instanceof Service) { + return (Service) serviceObj; + } + + return null; + } + + @Override + public void removeService(String cartridgeType) throws PersistenceManagerException { + + int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); + if (tenantId != MultitenantConstants.SUPER_TENANT_ID) { + // TODO: This is only a workaround. Proper fix is to write to tenant registry + try { + PrivilegedCarbonContext.startTenantFlow(); + PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + carbonContext.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); + carbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID); + + removeDeployedService(cartridgeType); + + } finally { + PrivilegedCarbonContext.endTenantFlow(); + } + + } else { + removeDeployedService(cartridgeType); + } + } + + private void removeDeployedService (String cartridgeType) throws PersistenceManagerException { + + String resourcePath = STRATOS_MANAGER_REOSURCE + SERVICES + "/" + cartridgeType; + + try { + RegistryManager.getInstance().delete(resourcePath); + if (log.isDebugEnabled()) { + log.debug("Deleted Service on path " + resourcePath + " successfully"); + } + + } catch (RegistryException e) { + throw new PersistenceManagerException(e); + } + } + /*@Override public Collection<CartridgeSubscription> getCartridgeSubscriptions (int tenantId) throws PersistenceManagerException { @@ -427,4 +563,5 @@ public class RegistryBasedPersistenceManager extends PersistenceManager { return null; }*/ + } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/18949f71/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataInsertionAndRetrievalManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataInsertionAndRetrievalManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataInsertionAndRetrievalManager.java index ddc2a44..07fa626 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataInsertionAndRetrievalManager.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataInsertionAndRetrievalManager.java @@ -21,6 +21,7 @@ package org.apache.stratos.adc.mgt.retriever; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.adc.mgt.deploy.service.Service; import org.apache.stratos.adc.mgt.exception.PersistenceManagerException; import org.apache.stratos.adc.mgt.lookup.LookupDataHolder; import org.apache.stratos.adc.mgt.persistence.PersistenceManager; @@ -166,6 +167,21 @@ public class DataInsertionAndRetrievalManager { } } + public void persistService (Service service) throws PersistenceManagerException { + + persistenceManager.persistService(service); + } + + public Service getService (String cartridgeType) throws PersistenceManagerException { + + return persistenceManager.getService(cartridgeType); + } + + public void removeService (String cartridgeType) throws PersistenceManagerException { + + persistenceManager.removeService(cartridgeType); + } + /*public void persistAll (int tenantId) { Collection<CartridgeSubscription> cartridgeSubscriptions = LookupDataHolder.getInstance().getSubscriptions(tenantId); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/18949f71/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Serializer.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Serializer.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Serializer.java index f84990b..2c45d2c 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Serializer.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Serializer.java @@ -19,6 +19,7 @@ package org.apache.stratos.adc.mgt.utils; +import org.apache.stratos.adc.mgt.deploy.service.Service; import org.apache.stratos.adc.mgt.lookup.ClusterIdToSubscription; import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription; @@ -80,4 +81,24 @@ public class Serializer { } } + + public static byte[] serializeServiceToByteArray(Service service) + throws IOException { + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutput out = null; + try { + out = new ObjectOutputStream(bos); + out.writeObject(service); + + return bos.toByteArray(); + + } finally { + if (out != null) { + out.close(); + } + bos.close(); + } + + } }
