Added versions to service definitions for deployment and topology KNOX-481
Project: http://git-wip-us.apache.org/repos/asf/knox/repo Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/8bdd4498 Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/8bdd4498 Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/8bdd4498 Branch: refs/heads/KNOX-481 Commit: 8bdd4498d3a828890852e6c1845d51fdcf766701 Parents: e6787fb Author: Sumit Gupta <su...@apache.org> Authored: Tue Jan 27 10:56:37 2015 -0500 Committer: Sumit Gupta <su...@apache.org> Committed: Wed Feb 11 15:51:11 2015 -0500 ---------------------------------------------------------------------- .../gateway/deploy/DeploymentFactory.java | 109 ++++++++++--------- .../ServiceDefinitionDeploymentContributor.java | 6 + 2 files changed, 62 insertions(+), 53 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/knox/blob/8bdd4498/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/DeploymentFactory.java ---------------------------------------------------------------------- diff --git a/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/DeploymentFactory.java b/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/DeploymentFactory.java index a0cc6cb..16d188a 100644 --- a/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/DeploymentFactory.java +++ b/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/DeploymentFactory.java @@ -19,18 +19,17 @@ package org.apache.hadoop.gateway.deploy; import org.apache.hadoop.gateway.GatewayMessages; import org.apache.hadoop.gateway.GatewayForwardingServlet; -import org.apache.hadoop.gateway.GatewayResources; import org.apache.hadoop.gateway.GatewayServlet; import org.apache.hadoop.gateway.config.GatewayConfig; import org.apache.hadoop.gateway.descriptor.GatewayDescriptor; import org.apache.hadoop.gateway.descriptor.GatewayDescriptorFactory; import org.apache.hadoop.gateway.i18n.messages.MessagesFactory; -import org.apache.hadoop.gateway.i18n.resources.ResourcesFactory; import org.apache.hadoop.gateway.services.GatewayServices; import org.apache.hadoop.gateway.services.registry.ServiceRegistry; import org.apache.hadoop.gateway.topology.Provider; import org.apache.hadoop.gateway.topology.Service; import org.apache.hadoop.gateway.topology.Topology; +import org.apache.hadoop.gateway.topology.Version; import org.apache.hadoop.gateway.util.ServiceDefinitionsLoader; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.Asset; @@ -44,26 +43,16 @@ import java.beans.Statement; import java.io.File; import java.io.IOException; import java.io.StringWriter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.ServiceLoader; -import java.util.Set; -import java.util.LinkedHashMap; +import java.util.*; public abstract class DeploymentFactory { private static final String DEFAULT_APP_REDIRECT_CONTEXT_PATH = "redirectTo"; private static final String STACKS_SERVICES_DIRECTORY = "services"; - private static GatewayResources res = ResourcesFactory.get( GatewayResources.class ); private static GatewayMessages log = MessagesFactory.get( GatewayMessages.class ); private static GatewayServices gatewayServices = null; - //private static Set<ServiceDeploymentContributor> SERVICE_CONTRIBUTORS; - private static Map<String,Map<String,ServiceDeploymentContributor>> SERVICE_CONTRIBUTOR_MAP; + private static Map<String,Map<String,Map<Version, ServiceDeploymentContributor>>> SERVICE_CONTRIBUTOR_MAP; static { loadServiceContributors(); } @@ -73,7 +62,7 @@ public abstract class DeploymentFactory { static { loadProviderContributors(); } - + public static void setGatewayServices(GatewayServices services) { DeploymentFactory.gatewayServices = services; } @@ -84,7 +73,7 @@ public abstract class DeploymentFactory { String stacks = config.getGatewayStacksDir(); File stacksDir = new File(stacks, STACKS_SERVICES_DIRECTORY); Set<ServiceDeploymentContributor> deploymentContributors = ServiceDefinitionsLoader.loadServiceDefinitions(stacksDir); - addServiceDeploymentContributors(SERVICE_CONTRIBUTOR_MAP, deploymentContributors.iterator()); + addServiceDeploymentContributors(deploymentContributors.iterator()); Map<String,List<ProviderDeploymentContributor>> providers = selectContextProviders( topology ); Map<String,List<ServiceDeploymentContributor>> services = selectContextServices( topology ); @@ -196,7 +185,7 @@ public abstract class DeploymentFactory { = new HashMap<String,List<ServiceDeploymentContributor>>(); for( Service service : topology.getServices() ) { String role = service.getRole(); - ServiceDeploymentContributor contributor = getServiceContributor( role, service.getName() ); + ServiceDeploymentContributor contributor = getServiceContributor( role, service.getName(), service.getVersion() ); if( contributor != null ) { List<ServiceDeploymentContributor> list = defaults.get( role ); if( list == null ) { @@ -248,12 +237,12 @@ public abstract class DeploymentFactory { } } } - + private static void injectServices(Object contributor) { if (gatewayServices != null) { Statement stmt = null; for(String serviceName : gatewayServices.getServiceNames()) { - + try { // TODO: this is just a temporary injection solution // TODO: test for the existence of the setter before attempting it @@ -289,12 +278,12 @@ public abstract class DeploymentFactory { } } for( Service service : topology.getServices() ) { - ServiceDeploymentContributor contributor = getServiceContributor( service.getRole(), null ); + ServiceDeploymentContributor contributor = getServiceContributor( service.getRole(), service.getName(), service.getVersion() ); if( contributor != null ) { try { contributor.contributeService( context, service ); if (gatewayServices != null) { - ServiceRegistry sr = (ServiceRegistry) gatewayServices.getService(GatewayServices.SERVICE_REGISTRY_SERVICE); + ServiceRegistry sr = gatewayServices.getService(GatewayServices.SERVICE_REGISTRY_SERVICE); if (sr != null) { String regCode = sr.getRegistrationCode(topology.getName()); sr.registerService(regCode, topology.getName(), service.getRole(), service.getUrls() ); @@ -322,14 +311,22 @@ public abstract class DeploymentFactory { return contributor; } - public static ServiceDeploymentContributor getServiceContributor( String role, String name ) { + public static ServiceDeploymentContributor getServiceContributor( String role, String name, Version version ) { ServiceDeploymentContributor contributor = null; - Map<String,ServiceDeploymentContributor> nameMap = SERVICE_CONTRIBUTOR_MAP.get( role ); - if( nameMap != null ) { - if( name == null ) { - contributor = nameMap.values().iterator().next(); - } else if ( !nameMap.isEmpty() ) { - contributor = nameMap.get( name ); + Map<String,Map<Version, ServiceDeploymentContributor>> nameMap = SERVICE_CONTRIBUTOR_MAP.get( role ); + if( nameMap != null && !nameMap.isEmpty()) { + Map<Version, ServiceDeploymentContributor> versionMap = null; + if ( name == null ) { + versionMap = nameMap.values().iterator().next(); + } else { + versionMap = nameMap.get( name ); + } + if ( versionMap != null && !versionMap.isEmpty()) { + if( version == null ) { + contributor = ((TreeMap<Version, ServiceDeploymentContributor>) versionMap).firstEntry().getValue(); + } else { + contributor = versionMap.get( version ); + } } } return contributor; @@ -400,19 +397,16 @@ public abstract class DeploymentFactory { } } return null; - } - - private static void loadServiceContributors() { - Map<String,Map<String,ServiceDeploymentContributor>> roleMap - = new HashMap<String,Map<String,ServiceDeploymentContributor>>(); + } + private static void loadServiceContributors() { + SERVICE_CONTRIBUTOR_MAP = new HashMap<String, Map<String, Map<Version, ServiceDeploymentContributor>>>(); ServiceLoader<ServiceDeploymentContributor> loader = ServiceLoader.load( ServiceDeploymentContributor.class ); Iterator<ServiceDeploymentContributor> contributors = loader.iterator(); - addServiceDeploymentContributors(roleMap, contributors); - SERVICE_CONTRIBUTOR_MAP = roleMap; + addServiceDeploymentContributors(contributors); } - private static void addServiceDeploymentContributors(Map<String, Map<String, ServiceDeploymentContributor>> roleMap, Iterator<ServiceDeploymentContributor> contributors) { + private static void addServiceDeploymentContributors(Iterator<ServiceDeploymentContributor> contributors) { while( contributors.hasNext() ) { ServiceDeploymentContributor contributor = contributors.next(); if( contributor.getName() == null ) { @@ -423,12 +417,21 @@ public abstract class DeploymentFactory { log.ignoringServiceContributorWithMissingRole( contributor.getClass().getName() ); continue; } - Map nameMap = roleMap.get( contributor.getRole() ); + if( contributor.getVersion() == null ) { + log.ignoringServiceContributorWithMissingVersion(contributor.getClass().getName()); + continue; + } + Map<String,Map<Version, ServiceDeploymentContributor>> nameMap = SERVICE_CONTRIBUTOR_MAP.get( contributor.getRole() ); if( nameMap == null ) { - nameMap = new HashMap<String,ServiceDeploymentContributor>(); - roleMap.put( contributor.getRole(), nameMap ); + nameMap = new HashMap<String,Map<Version, ServiceDeploymentContributor>>(); + SERVICE_CONTRIBUTOR_MAP.put( contributor.getRole(), nameMap ); + } + Map<Version, ServiceDeploymentContributor> versionMap = nameMap.get(contributor.getName()); + if (versionMap == null) { + versionMap = new TreeMap<Version, ServiceDeploymentContributor>(); + nameMap.put(contributor.getName(), versionMap); } - nameMap.put( contributor.getName(), contributor ); + versionMap.put( contributor.getVersion(), contributor ); } } @@ -475,18 +478,18 @@ public abstract class DeploymentFactory { return contributor; } - static ServiceDeploymentContributor getServiceContributor( - Map<String,List<ServiceDeploymentContributor>> services, String role, String name ) { - ServiceDeploymentContributor contributor = null; - if( name == null ) { - List<ServiceDeploymentContributor> list = services.get( role ); - if( !list.isEmpty() ) { - contributor = list.get( 0 ); - } - } else { - contributor = getServiceContributor( role, name ); - } - return contributor; - } +// static ServiceDeploymentContributor getServiceContributor( +// Map<String,List<ServiceDeploymentContributor>> services, String role, String name ) { +// ServiceDeploymentContributor contributor = null; +// if( name == null ) { +// List<ServiceDeploymentContributor> list = services.get( role ); +// if( !list.isEmpty() ) { +// contributor = list.get( 0 ); +// } +// } else { +// contributor = getServiceContributor( role, name ); +// } +// return contributor; +// } } http://git-wip-us.apache.org/repos/asf/knox/blob/8bdd4498/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/ServiceDefinitionDeploymentContributor.java ---------------------------------------------------------------------- diff --git a/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/ServiceDefinitionDeploymentContributor.java b/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/ServiceDefinitionDeploymentContributor.java index 7220cdd..789a221 100644 --- a/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/ServiceDefinitionDeploymentContributor.java +++ b/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/ServiceDefinitionDeploymentContributor.java @@ -27,6 +27,7 @@ import org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteRulesDescriptor; import org.apache.hadoop.gateway.service.definition.*; import org.apache.hadoop.gateway.topology.Provider; import org.apache.hadoop.gateway.topology.Service; +import org.apache.hadoop.gateway.topology.Version; import java.net.URISyntaxException; import java.util.ArrayList; @@ -60,6 +61,11 @@ public class ServiceDefinitionDeploymentContributor extends ServiceDeploymentCon } @Override + public Version getVersion() { + return new Version(serviceDefinition.getVersion()); + } + + @Override public void contributeService(DeploymentContext context, Service service) throws Exception { contributeRewriteRules(context, service); contributeResources(context, service);