From e5703c6ae5fbbc8b96e14b7f07be81ba793a3986 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Thu, 1 Oct 2015 09:13:06 +0100 Subject: [PATCH] Fix compiler errors/warnings and restore Ribbon support spring-cloud-netflix doesn't depend on feign-ribbon any more (and arguably therefore this should not either, but completing that job is left for another day) --- pom.xml | 18 ++++--- spring-cloud-zookeeper-discovery/pom.xml | 35 +++++++++---- .../discovery/ZookeeperDiscoveryClient.java | 16 +++--- .../ZookeeperDiscoveryHealthIndicator.java | 14 +++--- .../discovery/ZookeeperInstance.java | 1 + .../discovery/ZookeeperLifecycle.java | 16 +++--- .../ZookeeperRibbonClientConfiguration.java | 27 +++++----- .../discovery/ZookeeperServiceWatch.java | 28 ++++++----- .../DependenciesBasedLoadBalancer.java | 23 ++++----- ...ependencyFeignClientAutoConfiguration.java | 49 ++++++++++++------- ...pendencyRestTemplateAutoConfiguration.java | 22 ++++----- .../watcher/DefaultDependencyWatcher.java | 30 ++++++------ ...DependencyStateChangeListenerRegistry.java | 20 ++++---- .../DependencyPresenceOnStartupVerifier.java | 6 +-- .../FailOnMissingDependencyChecker.java | 6 +-- .../presence/LogMissingDependencyChecker.java | 14 +++--- .../watcher/presence/PresenceChecker.java | 6 +-- 17 files changed, 181 insertions(+), 150 deletions(-) diff --git a/pom.xml b/pom.xml index 42e89049..f77904fa 100644 --- a/pom.xml +++ b/pom.xml @@ -132,11 +132,6 @@ spring-cloud-netflix-core ${spring-cloud-netflix.version} - - org.springframework.cloud - spring-cloud-starter-feign - ${spring-cloud-netflix.version} - org.apache.curator curator-framework @@ -189,6 +184,16 @@ ribbon-httpclient ${ribbon.version} + + com.netflix.feign + feign-ribbon + ${feign.version} + + + com.netflix.feign + feign-slf4j + ${feign.version} + org.projectlombok lombok @@ -235,7 +240,7 @@ com.netflix.feign feign-core - 8.7.1 + ${feign.version} @@ -246,6 +251,7 @@ 0.7.1 2.8.0 2.1.0 + 8.10.0 1.0-groovy-2.4 diff --git a/spring-cloud-zookeeper-discovery/pom.xml b/spring-cloud-zookeeper-discovery/pom.xml index 12b355ab..ce44a7f0 100644 --- a/spring-cloud-zookeeper-discovery/pom.xml +++ b/spring-cloud-zookeeper-discovery/pom.xml @@ -47,6 +47,16 @@ spring-boot-starter true + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.springframework + spring-web + true + org.springframework.boot spring-boot-starter-actuator @@ -92,6 +102,21 @@ ribbon-httpclient true + + com.netflix.feign + feign-core + true + + + com.netflix.feign + feign-ribbon + true + + + com.netflix.feign + feign-slf4j + true + org.projectlombok lombok @@ -150,16 +175,6 @@ test 1.53 - - com.netflix.feign - feign-core - true - - - org.springframework.cloud - spring-cloud-starter-feign - true - diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperDiscoveryClient.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperDiscoveryClient.java index a742e2c7..81cad425 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperDiscoveryClient.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperDiscoveryClient.java @@ -22,13 +22,13 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import lombok.SneakyThrows; - import org.apache.curator.x.discovery.ServiceInstance; import org.springframework.cloud.client.DefaultServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.zookeeper.discovery.dependency.ZookeeperDependencies; +import lombok.SneakyThrows; + /** * @author Spencer Gibb * @author Marcin Grzejszczak, 4financeIT @@ -51,7 +51,7 @@ public class ZookeeperDiscoveryClient implements DiscoveryClient { @Override public org.springframework.cloud.client.ServiceInstance getLocalServiceInstance() { - ServiceInstance serviceInstance = serviceDiscovery.getServiceInstance(); + ServiceInstance serviceInstance = this.serviceDiscovery.getServiceInstance(); return createServiceInstance(serviceInstance.getId(), serviceInstance); } @@ -68,11 +68,10 @@ public class ZookeeperDiscoveryClient implements DiscoveryClient { @Override @SneakyThrows - @SuppressWarnings("unchecked") public List getInstances( final String serviceId) { String serviceIdToQuery = getServiceIdToQuery(serviceId); - Collection> zkInstances = serviceDiscovery + Collection> zkInstances = this.serviceDiscovery .getServiceDiscovery().queryForInstances(serviceIdToQuery); ArrayList instances = new ArrayList<>(); @@ -85,19 +84,18 @@ public class ZookeeperDiscoveryClient implements DiscoveryClient { } private String getServiceIdToQuery(String serviceId) { - if (zookeeperDependencies != null && zookeeperDependencies.hasDependencies()) { - String pathForAlias = zookeeperDependencies.getPathForAlias(serviceId); + if (this.zookeeperDependencies != null && this.zookeeperDependencies.hasDependencies()) { + String pathForAlias = this.zookeeperDependencies.getPathForAlias(serviceId); return pathForAlias.isEmpty() ? serviceId : pathForAlias; } return serviceId; } @Override - @SuppressWarnings("unchecked") public List getServices() { ArrayList services = null; try { - services = new ArrayList<>(serviceDiscovery.getServiceDiscovery().queryForNames()); + services = new ArrayList<>(this.serviceDiscovery.getServiceDiscovery().queryForNames()); } catch (Exception e) { rethrowRuntimeException(e); diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperDiscoveryHealthIndicator.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperDiscoveryHealthIndicator.java index bec45a66..a47e2ff6 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperDiscoveryHealthIndicator.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperDiscoveryHealthIndicator.java @@ -19,13 +19,13 @@ package org.springframework.cloud.zookeeper.discovery; import java.util.ArrayList; import java.util.Collection; -import lombok.extern.slf4j.Slf4j; - import org.apache.curator.x.discovery.ServiceInstance; import org.springframework.boot.actuate.health.AbstractHealthIndicator; import org.springframework.boot.actuate.health.Health; import org.springframework.cloud.zookeeper.discovery.dependency.ZookeeperDependencies; +import lombok.extern.slf4j.Slf4j; + /** * @author Spencer Gibb */ @@ -41,13 +41,12 @@ public class ZookeeperDiscoveryHealthIndicator extends AbstractHealthIndicator { } @Override - @SuppressWarnings("unchecked") protected void doHealthCheck(Health.Builder builder) throws Exception { try { Collection names = getNamesToQuery(); ArrayList> allInstances = new ArrayList<>(); for (String name : names) { - Collection> instances = serviceDiscovery + Collection> instances = this.serviceDiscovery .getServiceDiscovery().queryForInstances(name); for (ServiceInstance instance : instances) { allInstances.add(instance); @@ -61,11 +60,10 @@ public class ZookeeperDiscoveryHealthIndicator extends AbstractHealthIndicator { } } - @SuppressWarnings("unchecked") private Collection getNamesToQuery() throws Exception { - if (zookeeperDependencies == null) { - return serviceDiscovery.getServiceDiscovery().queryForNames(); + if (this.zookeeperDependencies == null) { + return this.serviceDiscovery.getServiceDiscovery().queryForNames(); } - return zookeeperDependencies.getDependencyNames(); + return this.zookeeperDependencies.getDependencyNames(); } } diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperInstance.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperInstance.java index 662bd36c..c28c330e 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperInstance.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperInstance.java @@ -27,6 +27,7 @@ import lombok.Data; public class ZookeeperInstance { private String id; + @SuppressWarnings("unused") private ZookeeperInstance() { } } diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperLifecycle.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperLifecycle.java index ed2a8375..607e511a 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperLifecycle.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperLifecycle.java @@ -16,15 +16,13 @@ package org.springframework.cloud.zookeeper.discovery; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; - import org.springframework.cloud.client.discovery.AbstractDiscoveryLifecycle; +import lombok.SneakyThrows; + /** * @author Spencer Gibb */ -@Slf4j public class ZookeeperLifecycle extends AbstractDiscoveryLifecycle { private ZookeeperDiscoveryProperties properties; @@ -55,22 +53,22 @@ public class ZookeeperLifecycle extends AbstractDiscoveryLifecycle { @Override protected boolean isEnabled() { - return properties.isEnabled(); + return this.properties.isEnabled(); } @Override protected int getConfiguredPort() { - return serviceDiscovery.getPort(); + return this.serviceDiscovery.getPort(); } @Override protected void setConfiguredPort(int port) { - serviceDiscovery.setPort(port); - serviceDiscovery.build(); + this.serviceDiscovery.setPort(port); + this.serviceDiscovery.build(); } @Override protected Object getConfiguration() { - return properties; + return this.properties; } } diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperRibbonClientConfiguration.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperRibbonClientConfiguration.java index 74e656a1..69b6fbcf 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperRibbonClientConfiguration.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperRibbonClientConfiguration.java @@ -16,12 +16,11 @@ package org.springframework.cloud.zookeeper.discovery; -import com.netflix.client.config.IClientConfig; -import com.netflix.config.ConfigurationManager; -import com.netflix.config.DynamicPropertyFactory; -import com.netflix.config.DynamicStringProperty; -import com.netflix.loadbalancer.ILoadBalancer; -import com.netflix.loadbalancer.ServerList; +import static com.netflix.client.config.CommonClientConfigKey.DeploymentContextBasedVipAddresses; +import static com.netflix.client.config.CommonClientConfigKey.EnableZoneAffinity; + +import javax.annotation.PostConstruct; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -32,10 +31,12 @@ import org.springframework.cloud.zookeeper.discovery.dependency.ZookeeperDepende import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import javax.annotation.PostConstruct; - -import static com.netflix.client.config.CommonClientConfigKey.DeploymentContextBasedVipAddresses; -import static com.netflix.client.config.CommonClientConfigKey.EnableZoneAffinity; +import com.netflix.client.config.IClientConfig; +import com.netflix.config.ConfigurationManager; +import com.netflix.config.DynamicPropertyFactory; +import com.netflix.config.DynamicStringProperty; +import com.netflix.loadbalancer.ILoadBalancer; +import com.netflix.loadbalancer.ServerList; /** * Preprocessor that configures defaults for zookeeper-discovered ribbon clients. Such as: @@ -64,7 +65,7 @@ public class ZookeeperRibbonClientConfiguration { @ConditionalOnMissingBean @ConditionalOnDependenciesPassed public ServerList ribbonServerListFromDependencies(IClientConfig config, ZookeeperDependencies zookeeperDependencies) { - ZookeeperServerList serverList = new ZookeeperServerList(serviceDiscovery.getServiceDiscovery()); + ZookeeperServerList serverList = new ZookeeperServerList(this.serviceDiscovery.getServiceDiscovery()); serverList.initFromDependencies(config, zookeeperDependencies); return serverList; } @@ -73,14 +74,14 @@ public class ZookeeperRibbonClientConfiguration { @ConditionalOnMissingBean @ConditionalOnDependenciesPassed @ConditionalOnProperty(value = "spring.cloud.zookeeper.dependencies.ribbon.loadbalancer", matchIfMissing = true) - public ILoadBalancer dependenciesBasedLoadBalancer(ZookeeperDependencies zookeeperDependencies, ServerList serverList) { + public ILoadBalancer dependenciesBasedLoadBalancer(ZookeeperDependencies zookeeperDependencies, ServerList serverList) { return new DependenciesBasedLoadBalancer(zookeeperDependencies, serverList); } @Bean @ConditionalOnMissingBean public ServerList ribbonServerList(IClientConfig config) { - ZookeeperServerList serverList = new ZookeeperServerList(serviceDiscovery.getServiceDiscovery()); + ZookeeperServerList serverList = new ZookeeperServerList(this.serviceDiscovery.getServiceDiscovery()); serverList.initWithNiwsConfig(config); return serverList; } diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperServiceWatch.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperServiceWatch.java index c6f07092..2cb08b31 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperServiceWatch.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperServiceWatch.java @@ -20,21 +20,23 @@ import java.util.concurrent.atomic.AtomicLong; import javax.annotation.PreDestroy; -import lombok.SneakyThrows; - import org.apache.curator.framework.CuratorFramework; -import org.apache.curator.framework.recipes.cache.*; +import org.apache.curator.framework.recipes.cache.TreeCache; +import org.apache.curator.framework.recipes.cache.TreeCacheEvent; +import org.apache.curator.framework.recipes.cache.TreeCacheListener; import org.springframework.cloud.client.discovery.event.HeartbeatEvent; import org.springframework.cloud.client.discovery.event.InstanceRegisteredEvent; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisherAware; import org.springframework.context.ApplicationListener; +import lombok.SneakyThrows; + /** * @author Spencer Gibb */ public class ZookeeperServiceWatch implements - ApplicationListener, TreeCacheListener, + ApplicationListener>, TreeCacheListener, ApplicationEventPublisherAware { private final CuratorFramework curator; @@ -55,21 +57,21 @@ public class ZookeeperServiceWatch implements } public TreeCache getCache() { - return cache; + return this.cache; } @Override @SneakyThrows - public void onApplicationEvent(InstanceRegisteredEvent event) { - cache = TreeCache.newBuilder(curator, properties.getRoot()).build(); - cache.getListenable().addListener(this); - cache.start(); + public void onApplicationEvent(InstanceRegisteredEvent event) { + this.cache = TreeCache.newBuilder(this.curator, this.properties.getRoot()).build(); + this.cache.getListenable().addListener(this); + this.cache.start(); } @PreDestroy public void stop() throws Exception { - if (cache != null) { - cache.close(); + if (this.cache != null) { + this.cache.close(); } } @@ -78,8 +80,8 @@ public class ZookeeperServiceWatch implements if (event.getType().equals(TreeCacheEvent.Type.NODE_ADDED) || event.getType().equals(TreeCacheEvent.Type.NODE_REMOVED) || event.getType().equals(TreeCacheEvent.Type.NODE_UPDATED)) { - long newCacheChange = cacheChange.incrementAndGet(); - publisher.publishEvent(new HeartbeatEvent(this, newCacheChange)); + long newCacheChange = this.cacheChange.incrementAndGet(); + this.publisher.publishEvent(new HeartbeatEvent(this, newCacheChange)); } } } diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependenciesBasedLoadBalancer.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependenciesBasedLoadBalancer.java index 6d6df4c5..e6a93c76 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependenciesBasedLoadBalancer.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependenciesBasedLoadBalancer.java @@ -16,16 +16,17 @@ package org.springframework.cloud.zookeeper.discovery.dependency; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + import com.netflix.loadbalancer.BaseLoadBalancer; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RandomRule; import com.netflix.loadbalancer.RoundRobinRule; import com.netflix.loadbalancer.Server; import com.netflix.loadbalancer.ServerList; -import lombok.extern.slf4j.Slf4j; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; +import lombok.extern.slf4j.Slf4j; /** * LoadBalancer that delegates to other rules depending on the provided load balancing strategy @@ -40,7 +41,7 @@ public class DependenciesBasedLoadBalancer extends BaseLoadBalancer { private final ZookeeperDependencies zookeeperDependencies; - public DependenciesBasedLoadBalancer(ZookeeperDependencies zookeeperDependencies, ServerList serverList) { + public DependenciesBasedLoadBalancer(ZookeeperDependencies zookeeperDependencies, ServerList serverList) { this.zookeeperDependencies = zookeeperDependencies; setServersList(serverList.getInitialListOfServers()); } @@ -48,20 +49,20 @@ public class DependenciesBasedLoadBalancer extends BaseLoadBalancer { @Override public Server chooseServer(Object key) { String keyAsString = (String) key; - ZookeeperDependency dependency = zookeeperDependencies.getDependencyForAlias(keyAsString); + ZookeeperDependency dependency = this.zookeeperDependencies.getDependencyForAlias(keyAsString); if (dependency == null) { - log.debug("No dependency found for alias [{}] - will use the default rule which is [{}]", keyAsString, rule); - return rule.choose(key); + log.debug("No dependency found for alias [{}] - will use the default rule which is [{}]", keyAsString, this.rule); + return this.rule.choose(key); }; cacheEntryIfMissing(keyAsString, dependency); - log.debug("Will try to retrieve dependency for key [{}]. Current cache contents [{}]", keyAsString, ruleCache); - return ruleCache.get(keyAsString).choose(key); + log.debug("Will try to retrieve dependency for key [{}]. Current cache contents [{}]", keyAsString, this.ruleCache); + return this.ruleCache.get(keyAsString).choose(key); } private void cacheEntryIfMissing(String keyAsString, ZookeeperDependency dependency) { - if (!ruleCache.containsKey(keyAsString)) { + if (!this.ruleCache.containsKey(keyAsString)) { log.debug("Cache doesn't contain entry for [{}]", keyAsString); - ruleCache.put(keyAsString, chooseRuleForLoadBalancerType(dependency.getLoadBalancerType())); + this.ruleCache.put(keyAsString, chooseRuleForLoadBalancerType(dependency.getLoadBalancerType())); } } diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyFeignClientAutoConfiguration.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyFeignClientAutoConfiguration.java index 33b145d3..9a0e7e8e 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyFeignClientAutoConfiguration.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyFeignClientAutoConfiguration.java @@ -16,16 +16,6 @@ package org.springframework.cloud.zookeeper.discovery.dependency; -import feign.Client; -import feign.Request; -import feign.Response; -import feign.ribbon.RibbonClient; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; - import java.io.IOException; import java.net.URI; import java.util.Collection; @@ -33,6 +23,18 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.netflix.feign.ribbon.LoadBalancerFeignClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +import feign.Client; +import feign.Request; +import feign.Response; +import feign.ribbon.RibbonClient; + /** * * Configuration for ensuring that headers are set for a given dependency. @@ -42,26 +44,35 @@ import java.util.Map; @Configuration @ConditionalOnDependenciesPassed @ConditionalOnProperty(value = "spring.cloud.zookeeper.dependencies.headers.enabled", matchIfMissing = true) -@ConditionalOnClass({Client.class, RibbonClient.class}) +@ConditionalOnClass({ Client.class, RibbonClient.class }) public class DependencyFeignClientAutoConfiguration { @Bean @Primary - @SuppressWarnings("deprecation") - Client dependencyBasedFeignClient(final RibbonClient ribbonClient, final ZookeeperDependencies zookeeperDependencies) { + @SuppressWarnings("deprecation") + Client dependencyBasedFeignClient(final LoadBalancerFeignClient ribbonClient, + final ZookeeperDependencies zookeeperDependencies) { + // TODO: remove dependency on feign-ribbon return new RibbonClient() { @Override - public Response execute(Request request, Request.Options options) throws IOException { + public Response execute(Request request, Request.Options options) + throws IOException { URI asUri = URI.create(request.url()); String clientName = asUri.getHost(); - ZookeeperDependency dependencyForAlias = zookeeperDependencies.getDependencyForAlias(clientName); - Map> headers = getUpdatedHeadersIfPossible(request, dependencyForAlias); - return ribbonClient.execute(Request.create(request.method(), request.url(), headers, request.body(), request.charset()), options); + ZookeeperDependency dependencyForAlias = zookeeperDependencies + .getDependencyForAlias(clientName); + Map> headers = getUpdatedHeadersIfPossible( + request, dependencyForAlias); + return ribbonClient.execute(Request.create(request.method(), + request.url(), headers, request.body(), request.charset()), + options); } - private Map> getUpdatedHeadersIfPossible(Request request, ZookeeperDependency dependencyForAlias) { + private Map> getUpdatedHeadersIfPossible( + Request request, ZookeeperDependency dependencyForAlias) { if (dependencyForAlias != null) { - return Collections.unmodifiableMap(new HashMap<>(dependencyForAlias.getUpdatedHeaders(request.headers()))); + return Collections.unmodifiableMap(new HashMap<>( + dependencyForAlias.getUpdatedHeaders(request.headers()))); } return request.headers(); } diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyRestTemplateAutoConfiguration.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyRestTemplateAutoConfiguration.java index e73a243b..2dd9b844 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyRestTemplateAutoConfiguration.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyRestTemplateAutoConfiguration.java @@ -16,9 +16,13 @@ package org.springframework.cloud.zookeeper.discovery.dependency; -import com.google.common.base.Function; -import com.google.common.collect.Maps; -import lombok.extern.slf4j.Slf4j; +import java.io.IOException; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import javax.annotation.PostConstruct; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -32,11 +36,8 @@ import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.ClientHttpResponse; import org.springframework.web.client.RestTemplate; -import javax.annotation.PostConstruct; -import java.io.IOException; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import com.google.common.base.Function; +import com.google.common.collect.Maps; /** * @@ -49,7 +50,6 @@ import java.util.Map; @Configuration @ConditionalOnDependenciesPassed @ConditionalOnProperty(value = "spring.cloud.zookeeper.dependencies.resttemplate.enabled", matchIfMissing = true) -@Slf4j public class DependencyRestTemplateAutoConfiguration { @Autowired @LoadBalanced RestTemplate restTemplate; @@ -57,11 +57,11 @@ public class DependencyRestTemplateAutoConfiguration { @PostConstruct void customizeRestTemplate() { - restTemplate.getInterceptors().add(new ClientHttpRequestInterceptor() { + this.restTemplate.getInterceptors().add(new ClientHttpRequestInterceptor() { @Override public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { String clientName = request.getURI().getHost(); - ZookeeperDependency dependencyForAlias = zookeeperDependencies.getDependencyForAlias(clientName); + ZookeeperDependency dependencyForAlias = DependencyRestTemplateAutoConfiguration.this.zookeeperDependencies.getDependencyForAlias(clientName); HttpHeaders headers = getUpdatedHeadersIfPossible(request, dependencyForAlias); request.getHeaders().putAll(headers); return execution.execute(request, body); diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/DefaultDependencyWatcher.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/DefaultDependencyWatcher.java index 1b195774..c051e8aa 100755 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/DefaultDependencyWatcher.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/DefaultDependencyWatcher.java @@ -15,7 +15,11 @@ */ package org.springframework.cloud.zookeeper.discovery.watcher; -import lombok.SneakyThrows; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + import org.apache.curator.x.discovery.ServiceCache; import org.springframework.cloud.client.discovery.event.InstanceRegisteredEvent; import org.springframework.cloud.zookeeper.discovery.ZookeeperServiceDiscovery; @@ -24,10 +28,7 @@ import org.springframework.cloud.zookeeper.discovery.dependency.ZookeeperDepende import org.springframework.cloud.zookeeper.discovery.watcher.presence.DependencyPresenceOnStartupVerifier; import org.springframework.context.ApplicationListener; -import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; +import lombok.SneakyThrows; /** * This Dependency Watcher will verify the presence of dependencies upon startup and registers listeners @@ -39,10 +40,10 @@ import java.util.concurrent.ConcurrentHashMap; * @author Marcin Grzejszczak, 4financeIT * @author Michal Chmielarz, 4financeIT */ -public class DefaultDependencyWatcher implements DependencyRegistrationHookProvider, ApplicationListener { +public class DefaultDependencyWatcher implements DependencyRegistrationHookProvider, ApplicationListener> { private final ZookeeperServiceDiscovery serviceDiscovery; - private final Map dependencyRegistry = new ConcurrentHashMap<>(); + private final Map> dependencyRegistry = new ConcurrentHashMap<>(); private final List listeners; private final DependencyPresenceOnStartupVerifier dependencyPresenceOnStartupVerifier; private final ZookeeperDependencies zookeeperDependencies; @@ -59,27 +60,26 @@ public class DefaultDependencyWatcher implements DependencyRegistrationHookProvi @Override @SneakyThrows - public void onApplicationEvent(InstanceRegisteredEvent event) { + public void onApplicationEvent(InstanceRegisteredEvent event) { registerDependencyRegistrationHooks(); } @Override - @SuppressWarnings("unchecked") public void registerDependencyRegistrationHooks() throws Exception { - for (ZookeeperDependency zookeeperDependency : zookeeperDependencies.getDependencyConfigurations()) { + for (ZookeeperDependency zookeeperDependency : this.zookeeperDependencies.getDependencyConfigurations()) { String dependencyPath = zookeeperDependency.getPath(); - ServiceCache serviceCache = serviceDiscovery.getServiceDiscovery() + ServiceCache serviceCache = this.serviceDiscovery.getServiceDiscovery() .serviceCacheBuilder().name(dependencyPath).build(); serviceCache.start(); - dependencyPresenceOnStartupVerifier.verifyDependencyPresence(dependencyPath, serviceCache, zookeeperDependency.isRequired()); - dependencyRegistry.put(dependencyPath, serviceCache); - serviceCache.addListener(new DependencyStateChangeListenerRegistry(listeners, dependencyPath, serviceCache)); + this.dependencyPresenceOnStartupVerifier.verifyDependencyPresence(dependencyPath, serviceCache, zookeeperDependency.isRequired()); + this.dependencyRegistry.put(dependencyPath, serviceCache); + serviceCache.addListener(new DependencyStateChangeListenerRegistry(this.listeners, dependencyPath, serviceCache)); } } @Override public void clearDependencyRegistrationHooks() throws IOException { - for (ServiceCache cache : dependencyRegistry.values()) { + for (ServiceCache cache : this.dependencyRegistry.values()) { cache.close(); } } diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/DependencyStateChangeListenerRegistry.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/DependencyStateChangeListenerRegistry.java index e4cbe292..a5154c86 100755 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/DependencyStateChangeListenerRegistry.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/DependencyStateChangeListenerRegistry.java @@ -17,13 +17,13 @@ package org.springframework.cloud.zookeeper.discovery.watcher; import java.util.List; -import lombok.extern.slf4j.Slf4j; - import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.state.ConnectionState; import org.apache.curator.x.discovery.ServiceCache; import org.apache.curator.x.discovery.details.ServiceCacheListener; +import lombok.extern.apachecommons.CommonsLog; + /** * * Informs all the DependencyWatcherListeners that a dependency's state has changed @@ -31,14 +31,14 @@ import org.apache.curator.x.discovery.details.ServiceCacheListener; * @author Marcin Grzejszczak, 4financeIT * @author Tomasz Nurkiewicz, 4financeIT */ -@Slf4j +@CommonsLog public class DependencyStateChangeListenerRegistry implements ServiceCacheListener { private final List listeners; private final String dependencyName; - private final ServiceCache serviceCache; + private final ServiceCache serviceCache; - public DependencyStateChangeListenerRegistry(List listeners, String dependencyName, ServiceCache serviceCache) { + public DependencyStateChangeListenerRegistry(List listeners, String dependencyName, ServiceCache serviceCache) { this.listeners = listeners; this.dependencyName = dependencyName; this.serviceCache = serviceCache; @@ -46,23 +46,23 @@ public class DependencyStateChangeListenerRegistry implements ServiceCacheListen @Override public void cacheChanged() { - DependencyState state = serviceCache.getInstances().isEmpty() ? DependencyState.DISCONNECTED : DependencyState.CONNECTED; + DependencyState state = this.serviceCache.getInstances().isEmpty() ? DependencyState.DISCONNECTED : DependencyState.CONNECTED; logCurrentState(state); informListeners(state); } private void logCurrentState(DependencyState dependencyState) { - log.info("Service cache state change for '{}' instances, current service state: {}", dependencyName, dependencyState); + log.info("Service cache state change for '"+this.dependencyName+"' instances, current service state: " + dependencyState); } private void informListeners(DependencyState state) { - for (DependencyWatcherListener listener : listeners) { - listener.stateChanged(dependencyName, state); + for (DependencyWatcherListener listener : this.listeners) { + listener.stateChanged(this.dependencyName, state); } } @Override public void stateChanged(CuratorFramework client, ConnectionState newState) { - // todo do something or ignore for what is worth + // TODO do something or ignore for what is worth } } diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/presence/DependencyPresenceOnStartupVerifier.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/presence/DependencyPresenceOnStartupVerifier.java index 00ebdca3..dc90b108 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/presence/DependencyPresenceOnStartupVerifier.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/presence/DependencyPresenceOnStartupVerifier.java @@ -30,7 +30,6 @@ import org.apache.curator.x.discovery.ServiceCache; * @author Marcin Grzejszczak, 4financeIT * @author Tomasz Szymanski, 4financeIT */ -@SuppressWarnings("unchecked") public abstract class DependencyPresenceOnStartupVerifier { private static final PresenceChecker MANDATORY_DEPENDENCY_CHECKER = new FailOnMissingDependencyChecker(); private final PresenceChecker optionalDependencyChecker; @@ -39,11 +38,12 @@ public abstract class DependencyPresenceOnStartupVerifier { this.optionalDependencyChecker = optionalDependencyChecker; } - public void verifyDependencyPresence(String dependencyName, ServiceCache serviceCache, boolean required) { + @SuppressWarnings("unchecked") + public void verifyDependencyPresence(String dependencyName, @SuppressWarnings("rawtypes") ServiceCache serviceCache, boolean required) { if (required) { MANDATORY_DEPENDENCY_CHECKER.checkPresence(dependencyName, serviceCache.getInstances()); } else { - optionalDependencyChecker.checkPresence(dependencyName, serviceCache.getInstances()); + this.optionalDependencyChecker.checkPresence(dependencyName, serviceCache.getInstances()); } } } diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/presence/FailOnMissingDependencyChecker.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/presence/FailOnMissingDependencyChecker.java index 86d5a068..c8e71118 100755 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/presence/FailOnMissingDependencyChecker.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/presence/FailOnMissingDependencyChecker.java @@ -15,10 +15,10 @@ */ package org.springframework.cloud.zookeeper.discovery.watcher.presence; -import org.apache.curator.x.discovery.ServiceInstance; - import java.util.List; +import org.apache.curator.x.discovery.ServiceInstance; + /** * * Will result in throwing an exception if there are no running instances of the dependency @@ -28,7 +28,7 @@ import java.util.List; */ public class FailOnMissingDependencyChecker implements PresenceChecker { @Override - public void checkPresence(String dependencyName, List serviceInstances) { + public void checkPresence(String dependencyName, List> serviceInstances) { if (serviceInstances.isEmpty()) { throw new NoInstancesRunningException(dependencyName); } diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/presence/LogMissingDependencyChecker.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/presence/LogMissingDependencyChecker.java index f394b2ec..26b7d276 100755 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/presence/LogMissingDependencyChecker.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/presence/LogMissingDependencyChecker.java @@ -15,13 +15,13 @@ */ package org.springframework.cloud.zookeeper.discovery.watcher.presence; -import org.apache.curator.x.discovery.ServiceInstance; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.lang.invoke.MethodHandles; import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.curator.x.discovery.ServiceInstance; + /** * * Will log the missing microservice dependency @@ -31,12 +31,12 @@ import java.util.List; */ public class LogMissingDependencyChecker implements PresenceChecker { - private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + private static final Log log = LogFactory.getLog(MethodHandles.lookup().lookupClass()); @Override - public void checkPresence(String dependencyName, List serviceInstances) { + public void checkPresence(String dependencyName, List> serviceInstances) { if (serviceInstances.isEmpty()) { - log.warn("Microservice dependency with name [{}] is missing.", dependencyName); + log.warn("Microservice dependency with name ["+dependencyName+"] is missing."); } } diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/presence/PresenceChecker.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/presence/PresenceChecker.java index 1df71242..7b04b1db 100755 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/presence/PresenceChecker.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/presence/PresenceChecker.java @@ -15,10 +15,10 @@ */ package org.springframework.cloud.zookeeper.discovery.watcher.presence; -import org.apache.curator.x.discovery.ServiceInstance; - import java.util.List; +import org.apache.curator.x.discovery.ServiceInstance; + /** * The implementation of this interface will be called upon checking if a dependency with a given name * is present upon startup within the provided service instances. @@ -33,5 +33,5 @@ public interface PresenceChecker { * @param dependencyName * @param serviceInstances - instances to check the dependency for */ - void checkPresence(String dependencyName, List serviceInstances); + void checkPresence(String dependencyName, List> serviceInstances); }