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();
+        }
+
+    }
 }

Reply via email to