You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2013/12/07 18:23:53 UTC

git commit: Updated adc manager to publish tenant subscribed and un-subscribed events

Updated Branches:
  refs/heads/master 2ef7a0025 -> 8d947038b


Updated adc manager to publish tenant subscribed and un-subscribed events


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

Branch: refs/heads/master
Commit: 8d947038b5d53164060dfe763c1223c171139a10
Parents: 2ef7a00
Author: Imesh Gunaratne <im...@apache.org>
Authored: Sat Dec 7 22:53:44 2013 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Sat Dec 7 22:53:44 2013 +0530

----------------------------------------------------------------------
 .../service/ApplicationManagementService.java   | 118 +++++++++++++------
 1 file changed, 82 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8d947038/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java
index 62a1adb..0eb2c28 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java
@@ -36,6 +36,10 @@ import org.apache.stratos.adc.mgt.utils.PersistenceManager;
 import org.apache.stratos.adc.mgt.utils.PolicyHolder;
 import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
 import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+import org.apache.stratos.messaging.broker.publish.EventPublisher;
+import org.apache.stratos.messaging.event.tenant.TenantSubscribedEvent;
+import org.apache.stratos.messaging.event.tenant.TenantUnSubscribedEvent;
+import org.apache.stratos.messaging.util.Constants;
 import org.wso2.carbon.context.PrivilegedCarbonContext;
 import org.wso2.carbon.core.AbstractAdmin;
 import org.wso2.carbon.registry.core.exceptions.RegistryException;
@@ -54,14 +58,10 @@ import java.util.regex.Pattern;
  */
 public class ApplicationManagementService extends AbstractAdmin {
 
-
     private static final Log log = LogFactory.getLog(ApplicationManagementService.class);
-    RegistryManager registryManager = new RegistryManager();
+    private RegistryManager registryManager = new RegistryManager();
     private CartridgeSubscriptionManager cartridgeSubsciptionManager = new CartridgeSubscriptionManager();
 
-    PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext();
-    String tenantDomain = carbonContext.getTenantDomain();
-    
     /*
      * Instantiate RepoNotificationService. Since this service is in the same 
      * component (org.apache.stratos.adc.mgt), a new object is created.
@@ -261,7 +261,7 @@ public class ApplicationManagementService extends AbstractAdmin {
 					TopologyManagementService topologyMgtService = DataHolder.getTopologyMgtService();
 					String[] ips = topologyMgtService.getActiveIPs(subscription.getCartridge(),
 							subscription.getClusterDomain(), subscription.getClusterSubdomain());
-					Cartridge cartridge = ApplicationManagementUtil.populateCartridgeInfo(cartridgeInfo, subscription, ips, tenantDomain);
+					Cartridge cartridge = ApplicationManagementUtil.populateCartridgeInfo(cartridgeInfo, subscription, ips, getTenantDomain());
 					cartridges.add(cartridge);
 				}
 			} else {
@@ -404,13 +404,15 @@ public class ApplicationManagementService extends AbstractAdmin {
             try {
                 connectingCartridgeSubscription = cartridgeSubsciptionManager.getCartridgeSubscription(getTenantDomain(),
                         dataCartridgeAlias);
-
             } catch (NotSubscribedException e) {
                 log.error(e.getMessage(), e);
             }
             if (connectingCartridgeSubscription != null) {
+                // Publish tenant subscribed event
+                publishTenantSubscribedEvent(getTenantId(), connectingCartridgeSubscription.getCartridgeInfo().getType());
+
                 try {
-                    cartridgeSubsciptionManager.connectCartridges(tenantDomain, cartridgeSubscription,
+                    cartridgeSubsciptionManager.connectCartridges(getTenantDomain(), cartridgeSubscription,
                             connectingCartridgeSubscription.getAlias());
 
                 } catch (NotSubscribedException e) {
@@ -429,6 +431,35 @@ public class ApplicationManagementService extends AbstractAdmin {
 
 	}
 
+    private void publishTenantSubscribedEvent(int tenantId, String serviceName) {
+        try {
+            if(log.isInfoEnabled()) {
+                log.info(String.format("Publishing tenant subscribed event: [tenant-id] %d [service] %s", tenantId, serviceName));
+            }
+            TenantSubscribedEvent subscribedEvent = new TenantSubscribedEvent(tenantId, serviceName);
+            EventPublisher eventPublisher = new EventPublisher(Constants.TENANT_TOPIC);
+            eventPublisher.publish(subscribedEvent);
+        } catch (Exception e) {
+            if (log.isErrorEnabled()) {
+                log.error(String.format("Could not publish tenant subscribed event: [tenant-id] %d [service] %s", tenantId, serviceName), e);
+            }
+        }
+    }
+
+    private void publishTenantUnSubscribedEvent(int tenantId, String serviceName) {
+        try {
+            if(log.isInfoEnabled()) {
+                log.info(String.format("Publishing tenant un-subscribed event: [tenant-id] %d [service] %s", tenantId, serviceName));
+            }
+            TenantUnSubscribedEvent event = new TenantUnSubscribedEvent(tenantId, serviceName);
+            EventPublisher eventPublisher = new EventPublisher(Constants.TENANT_TOPIC);
+            eventPublisher.publish(event);
+        } catch (Exception e) {
+            if (log.isErrorEnabled()) {
+                log.error(String.format("Could not publish tenant un-subscribed event: [tenant-id] %d [service] %s", tenantId, serviceName), e);
+            }
+        }
+    }
 
     /**
      * Unsubscribing the cartridge
@@ -439,19 +470,38 @@ public class ApplicationManagementService extends AbstractAdmin {
 
         checkSuperTenant();
 
+        // Find subscription of alias
+        CartridgeSubscriptionInfo subscription;
+        String errorMessage = String.format("Tenant %s is not subscribed for %s", getTenantDomain(), alias);
+        try {
+            subscription = PersistenceManager.getSubscription(getTenantDomain(), alias);
+            if(subscription == null) {
+                throw new ADCException(errorMessage);
+            }
+        } catch (Exception e) {
+            throw new ADCException(errorMessage);
+        }
+
+        // Un-subscribe from cartridge
         cartridgeSubsciptionManager.unsubscribeFromCartridge(getTenantDomain(), alias);
+
+        // Publish tenant un-subscribed event
+        String serviceName = subscription.getCartridge();
+        publishTenantUnSubscribedEvent(getTenantId(), serviceName);
+
+
         /*CartridgeSubscriptionInfo subscription = null;
         
         try {
-			subscription = PersistenceManager.getSubscription(tenantDomain, alias);
+			subscription = PersistenceManager.getSubscription(getTenantDomain(), alias);
 		} catch (Exception e) {
-			String msg = "Failed to get subscription for " + tenantDomain + " and alias " + alias;
+			String msg = "Failed to get subscription for " + getTenantDomain() + " and alias " + alias;
             log.error(msg, e);
 			throw new ADCException(msg, e);
 		}
 
         if (subscription == null) {
-            String msg = "Tenant " + tenantDomain + " is not subscribed for " + alias;
+            String msg = "Tenant " + getTenantDomain() + " is not subscribed for " + alias;
             log.error(msg);
             throw new NotSubscribedException("You have not subscribed for " + alias, alias);
         }
@@ -482,7 +532,7 @@ public class ApplicationManagementService extends AbstractAdmin {
                 }
             }
 
-            new RepositoryFactory().destroyRepository(alias, tenantDomain, getUsername());
+            new RepositoryFactory().destroyRepository(alias, getTenantDomain(), getUsername());
             log.info("Repo is destroyed successfully.. ");
 
             PersistenceManager.updateSubscriptionState(subscription.getSubscriptionId(), "UNSUBSCRIBED");
@@ -516,14 +566,14 @@ public class ApplicationManagementService extends AbstractAdmin {
         String actualHost = null;
         
         try {
-			subscription = PersistenceManager.getSubscription(tenantDomain, cartridgeAlias);
+			subscription = PersistenceManager.getSubscription(getTenantDomain(), cartridgeAlias);
 		} catch (Exception e) {
-			String msg = "Failed to get subscription for " + tenantDomain + " and alias " + cartridgeAlias;
+			String msg = "Failed to get subscription for " + getTenantDomain() + " and alias " + cartridgeAlias;
             log.error(msg, e);
 			throw new ADCException(msg, e);
 		}
         if (subscription == null) {
-        	String msg = "Tenant " + tenantDomain + " is not subscribed for " + cartridgeAlias;
+        	String msg = "Tenant " + getTenantDomain() + " is not subscribed for " + cartridgeAlias;
             log.error(msg);
             throw new NotSubscribedException("You have not subscribed for " + cartridgeAlias, cartridgeAlias);
         }
@@ -531,7 +581,7 @@ public class ApplicationManagementService extends AbstractAdmin {
         try {
         	actualHost = getActualHost(cartridgeAlias);
             registryManager.addDomainMappingToRegistry(mappedDomain, actualHost);
-            log.info("Domain mapping is added for " + mappedDomain + " tenant: " + tenantDomain);
+            log.info("Domain mapping is added for " + mappedDomain + " tenant: " + getTenantDomain());
             PersistenceManager.updateDomainMapping(
                     ApplicationManagementUtil.getTenantId(getConfigContext()), cartridgeAlias, mappedDomain);
         } catch (RegistryException e) {
@@ -561,14 +611,14 @@ public class ApplicationManagementService extends AbstractAdmin {
         String actualHost = null;
         
         try {
-			subscription = PersistenceManager.getSubscription(tenantDomain, cartridgeAlias);
+			subscription = PersistenceManager.getSubscription(getTenantDomain(), cartridgeAlias);
 		} catch (Exception e) {
-			String msg = "Failed to get subscription for " + tenantDomain + " and alias " + cartridgeAlias;
+			String msg = "Failed to get subscription for " + getTenantDomain() + " and alias " + cartridgeAlias;
             log.error(msg, e);
 			throw new ADCException(msg, e);
 		}
         if (subscription == null) {
-        	String msg = "Tenant " + tenantDomain + " is not subscribed for " + cartridgeAlias;
+        	String msg = "Tenant " + getTenantDomain() + " is not subscribed for " + cartridgeAlias;
             log.error(msg);
             throw new NotSubscribedException("You have not subscribed for " + cartridgeAlias, cartridgeAlias);
         }
@@ -576,7 +626,7 @@ public class ApplicationManagementService extends AbstractAdmin {
         try {
         	actualHost = getActualHost(cartridgeAlias);
             registryManager.removeDomainMappingFromRegistry(actualHost);
-            log.info("Domain mapping is removed for " + actualHost + " tenant: " + tenantDomain);
+            log.info("Domain mapping is removed for " + actualHost + " tenant: " + getTenantDomain());
             PersistenceManager.updateDomainMapping(ApplicationManagementUtil.getTenantId(getConfigContext()),
                     cartridgeAlias, null);
         } catch (RegistryException e) {
@@ -596,38 +646,34 @@ public class ApplicationManagementService extends AbstractAdmin {
         
         // Validating subscription
         try {
-			subscription = PersistenceManager.getSubscription(tenantDomain, cartridgeAlias);
+			subscription = PersistenceManager.getSubscription(getTenantDomain(), cartridgeAlias);
 		} catch (Exception e) {
-			String msg = "Failed to get subscription for " + tenantDomain + " and alias " + cartridgeAlias;
+			String msg = "Failed to get subscription for " + getTenantDomain() + " and alias " + cartridgeAlias;
             log.error(msg, e);
 			throw new ADCException(msg, e);
 		}
         if (subscription == null) {
-        	String msg = "Tenant " + tenantDomain + " is not subscribed for " + cartridgeAlias;
+        	String msg = "Tenant " + getTenantDomain() + " is not subscribed for " + cartridgeAlias;
             log.error(msg);
             throw new NotSubscribedException("You have not subscribed for " + cartridgeAlias, cartridgeAlias);
         }
 		
 		try {
-			repoNotificationService.notifyRepoUpdate(tenantDomain, cartridgeAlias);
+			repoNotificationService.notifyRepoUpdate(getTenantDomain(), cartridgeAlias);
 		} catch (Exception e) {
 			throw new ADCException(e.getMessage() != null ? e.getMessage() : "Failed to synchronize repository", e);
 		}
 	}
 
-    /**
-     * Validate authentication.
-     * First call of cli tool in the prompt mode after log in.
-     *
-     * @return The tenant domain
-     */
 	public String getTenantDomain() {
-		if (tenantDomain != null) {
-			// This means, authentication is successful
-			log.info("Tenant " + tenantDomain + " is authorized to access Application Management Service!");
-		}
-		return tenantDomain;
+        PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext();
+        return carbonContext.getTenantDomain();
 	}
+
+    public int getTenantId() {
+        PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext();
+        return carbonContext.getTenantId();
+    }
     
 	/**
 	 * Allow to check whether features are enabled in the back-end
@@ -654,7 +700,7 @@ public class ApplicationManagementService extends AbstractAdmin {
 	private void checkSuperTenant() throws ADCException {
 		if (log.isDebugEnabled()) {
 			log.debug("Checking whether super tenant accesses the service methods. Tenant ID: "
-					+ ApplicationManagementUtil.getTenantId(getConfigContext()) + ", Tenant Domain: " + carbonContext.getTenantDomain());
+					+ ApplicationManagementUtil.getTenantId(getConfigContext()) + ", Tenant Domain: " + getTenantDomain());
 		}
 		if (MultitenantConstants.SUPER_TENANT_ID == ApplicationManagementUtil.getTenantId(getConfigContext())) {
 			throw new ADCException("Super Tenant is not allowed to complete requested operation");