diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusAutoConfiguration.java index 32e464b7..64ae8614 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusAutoConfiguration.java @@ -23,12 +23,21 @@ import java.util.concurrent.atomic.AtomicBoolean; import javax.annotation.PreDestroy; +import com.netflix.config.AggregatedConfiguration; +import com.netflix.config.ConcurrentCompositeConfiguration; +import com.netflix.config.ConfigurationManager; +import com.netflix.config.DeploymentContext; +import com.netflix.config.DynamicProperty; +import com.netflix.config.DynamicPropertyFactory; +import com.netflix.config.DynamicURLConfiguration; + import org.apache.commons.configuration.AbstractConfiguration; import org.apache.commons.configuration.ConfigurationBuilder; import org.apache.commons.configuration.EnvironmentConfiguration; import org.apache.commons.configuration.SystemConfiguration; import org.apache.commons.configuration.event.ConfigurationEvent; import org.apache.commons.configuration.event.ConfigurationListener; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.condition.ConditionalOnEnabledEndpoint; import org.springframework.boot.actuate.endpoint.Endpoint; @@ -44,14 +53,6 @@ import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.Environment; import org.springframework.util.ReflectionUtils; -import com.netflix.config.AggregatedConfiguration; -import com.netflix.config.ConcurrentCompositeConfiguration; -import com.netflix.config.ConfigurationManager; -import com.netflix.config.DeploymentContext; -import com.netflix.config.DynamicProperty; -import com.netflix.config.DynamicPropertyFactory; -import com.netflix.config.DynamicURLConfiguration; - import static com.netflix.config.ConfigurationManager.APPLICATION_PROPERTIES; import static com.netflix.config.ConfigurationManager.DISABLE_DEFAULT_ENV_CONFIG; import static com.netflix.config.ConfigurationManager.DISABLE_DEFAULT_SYS_CONFIG; @@ -79,8 +80,13 @@ public class ArchaiusAutoConfiguration { @Autowired(required = false) private List externalConfigurations = new ArrayList<>(); + private DynamicURLConfiguration defaultURLConfig; + @PreDestroy public void close() { + if (defaultURLConfig != null) { + defaultURLConfig.stopLoading(); + } setStatic(ConfigurationManager.class, "instance", null); setStatic(ConfigurationManager.class, "customConfigurationInstalled", false); setStatic(DynamicPropertyFactory.class, "config", null); @@ -154,8 +160,7 @@ public class ArchaiusAutoConfiguration { config.addConfiguration(envConfig, ConfigurableEnvironmentConfiguration.class.getSimpleName()); - // below come from ConfigurationManager.createDefaultConfigInstance() - DynamicURLConfiguration defaultURLConfig = new DynamicURLConfiguration(); + defaultURLConfig = new DynamicURLConfiguration(); try { config.addConfiguration(defaultURLConfig, URL_CONFIG_NAME); } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/AdhocTestSuite.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/AdhocTestSuite.java index 47a365ed..eb36fe30 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/AdhocTestSuite.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/AdhocTestSuite.java @@ -20,11 +20,9 @@ import org.junit.Ignore; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; -import org.springframework.cloud.netflix.feign.encoding.FeignAcceptEncodingTests; -import org.springframework.cloud.netflix.metrics.servo.ServoMetricReaderTests; -import org.springframework.cloud.netflix.ribbon.RibbonInterceptorTests; -import org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClientTests; -import org.springframework.cloud.netflix.zuul.ZuulProxyConfigurationTests; + +import org.springframework.cloud.netflix.zuul.FormZuulServletProxyApplicationTests; +import org.springframework.cloud.netflix.zuul.ZuulProxyAutoConfigurationTests; /** * A test suite for probing weird ordering problems in the tests. @@ -32,8 +30,8 @@ import org.springframework.cloud.netflix.zuul.ZuulProxyConfigurationTests; * @author Dave Syer */ @RunWith(Suite.class) -@SuiteClasses({ RibbonLoadBalancerClientTests.class, RibbonInterceptorTests.class, FeignAcceptEncodingTests.class, - ServoMetricReaderTests.class, ZuulProxyConfigurationTests.class }) +@SuiteClasses({ ZuulProxyAutoConfigurationTests.class, + FormZuulServletProxyApplicationTests.class }) @Ignore public class AdhocTestSuite { diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/encoding/FeignAcceptEncodingTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/encoding/FeignAcceptEncodingTests.java index a0620fc8..bd7f9956 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/encoding/FeignAcceptEncodingTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/encoding/FeignAcceptEncodingTests.java @@ -16,14 +16,16 @@ package org.springframework.cloud.netflix.feign.encoding; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - import java.util.Collections; import java.util.List; +import com.netflix.loadbalancer.BaseLoadBalancer; +import com.netflix.loadbalancer.ILoadBalancer; +import com.netflix.loadbalancer.Server; + import org.junit.Test; import org.junit.runner.RunWith; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -37,11 +39,11 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit4.SpringRunner; -import com.netflix.loadbalancer.BaseLoadBalancer; -import com.netflix.loadbalancer.ILoadBalancer; -import com.netflix.loadbalancer.Server; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; /** * Tests the response compression. @@ -50,7 +52,8 @@ import com.netflix.loadbalancer.Server; */ @SpringBootTest(classes = FeignAcceptEncodingTests.Application.class, webEnvironment = WebEnvironment.RANDOM_PORT, value = { "feign.compression.response.enabled=true" }) -@RunWith(SpringJUnit4ClassRunner.class) +@RunWith(SpringRunner.class) +@DirtiesContext public class FeignAcceptEncodingTests { @Autowired diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonDisabledTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonDisabledTests.java index 5da53b4c..1c3bccd5 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonDisabledTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonDisabledTests.java @@ -20,6 +20,7 @@ package org.springframework.cloud.netflix.ribbon; import org.junit.Test; import org.junit.runner.RunWith; + import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.cloud.ClassPathExclusions; import org.springframework.cloud.FilteredClassPathRunner; @@ -28,12 +29,12 @@ import org.springframework.cloud.FilteredClassPathRunner; * @author Ryan Baxter */ @RunWith(FilteredClassPathRunner.class) -@ClassPathExclusions({"ribbon-{version:\\d.*}.jar"}) +@ClassPathExclusions({ "ribbon-{version:\\d.*}.jar" }) public class RibbonDisabledTests { @Test(expected = ArrayStoreException.class) public void testRibbonDisabled() { - new SpringApplicationBuilder().web(false) - .sources(RibbonAutoConfiguration.class).run(); + new SpringApplicationBuilder().web(false).sources(RibbonAutoConfiguration.class) + .run().close(); } } \ No newline at end of file diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/ZuulProxyAutoConfigurationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/ZuulProxyAutoConfigurationTests.java index 5d4d1b7e..c374d823 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/ZuulProxyAutoConfigurationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/ZuulProxyAutoConfigurationTests.java @@ -19,6 +19,7 @@ package org.springframework.cloud.netflix.zuul; import org.junit.Test; import org.junit.runner.RunWith; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; @@ -26,6 +27,7 @@ import org.springframework.cloud.netflix.zuul.filters.CompositeRouteLocator; import org.springframework.cloud.netflix.zuul.filters.RouteLocator; import org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter; import org.springframework.context.annotation.Configuration; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringRunner; import static org.assertj.core.api.Assertions.assertThat; @@ -39,24 +41,24 @@ import static org.assertj.core.api.Assertions.assertThat; @RunWith(SpringRunner.class) @SpringBootTest +@DirtiesContext public class ZuulProxyAutoConfigurationTests { - + @Autowired private RouteLocator routeLocator; - + @Autowired(required = false) private RibbonRoutingFilter ribbonRoutingFilter; - + @Test public void testAutoConfiguredBeans() { assertThat(routeLocator).isInstanceOf(CompositeRouteLocator.class); assertThat(this.ribbonRoutingFilter).isNotNull(); } - - + @Configuration @EnableAutoConfiguration @EnableZuulProxy static class TestConfig { - } + } } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/support/RibbonRetryIntegrationTestBase.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/support/RibbonRetryIntegrationTestBase.java index c43b6307..a0d1eea6 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/support/RibbonRetryIntegrationTestBase.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/support/RibbonRetryIntegrationTestBase.java @@ -18,10 +18,15 @@ package org.springframework.cloud.netflix.zuul.filters.route.support; +import com.netflix.loadbalancer.Server; +import com.netflix.loadbalancer.ServerList; +import com.netflix.zuul.context.RequestContext; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Before; import org.junit.Test; + import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.web.client.TestRestTemplate; @@ -47,10 +52,6 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; -import com.netflix.loadbalancer.Server; -import com.netflix.loadbalancer.ServerList; -import com.netflix.zuul.context.RequestContext; - import static org.junit.Assert.assertEquals; /** @@ -67,12 +68,10 @@ public abstract class RibbonRetryIntegrationTestBase { public void setup() { RequestContext.getCurrentContext().clear(); String uri = "/resetError"; - new TestRestTemplate().exchange( - "http://localhost:" + this.port + uri, HttpMethod.GET, - new HttpEntity<>((Void) null), String.class); + new TestRestTemplate().exchange("http://localhost:" + this.port + uri, + HttpMethod.GET, new HttpEntity<>((Void) null), String.class); } - @Test public void retryable() { String uri = "/retryable/everyothererror"; @@ -147,9 +146,11 @@ public abstract class RibbonRetryIntegrationTestBase { @RibbonClient(name = "retryable", configuration = RibbonClientConfiguration.class), @RibbonClient(name = "disableretry", configuration = RibbonClientConfiguration.class), @RibbonClient(name = "globalretrydisabled", configuration = RibbonClientConfiguration.class), - @RibbonClient(name = "getretryable", configuration = RibbonClientConfiguration.class)}) + @RibbonClient(name = "getretryable", configuration = RibbonClientConfiguration.class) }) public static class RetryableTestConfig { + private final Log LOG = LogFactory.getLog(RetryableTestConfig.class); + private boolean error = true; @RequestMapping("/resetError") @@ -162,13 +163,14 @@ public abstract class RibbonRetryIntegrationTestBase { boolean shouldError = error; error = !error; try { - if(shouldError) { + if (shouldError) { Thread.sleep(80000); } - } catch (InterruptedException e) { - e.printStackTrace(); } - + catch (InterruptedException e) { + LOG.info(e); + Thread.currentThread().interrupt(); + } return new ResponseEntity("no error", HttpStatus.OK); } @@ -183,9 +185,9 @@ public abstract class RibbonRetryIntegrationTestBase { public ResponseEntity fourOFourError() { boolean shouldError = error; error = !error; - if(shouldError) { - return new ResponseEntity("not found", HttpStatus.NOT_FOUND); - } + if (shouldError) { + return new ResponseEntity("not found", HttpStatus.NOT_FOUND); + } return new ResponseEntity("no error", HttpStatus.OK); } @@ -204,14 +206,17 @@ public abstract class RibbonRetryIntegrationTestBase { } @Configuration - public static class FourOFourRetryableRibbonConfiguration extends RibbonClientConfiguration { + public static class FourOFourRetryableRibbonConfiguration + extends RibbonClientConfiguration { @Bean - public LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory(SpringClientFactory factory) { + public LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory( + SpringClientFactory factory) { return new MyRibbonRetryPolicyFactory(factory); } - public static class MyRibbonRetryPolicyFactory extends RibbonLoadBalancedRetryPolicyFactory { + public static class MyRibbonRetryPolicyFactory + extends RibbonLoadBalancedRetryPolicyFactory { private SpringClientFactory factory; @@ -221,21 +226,25 @@ public abstract class RibbonRetryIntegrationTestBase { } @Override - public LoadBalancedRetryPolicy create(String serviceId, ServiceInstanceChooser loadBalanceChooser) { + public LoadBalancedRetryPolicy create(String serviceId, + ServiceInstanceChooser loadBalanceChooser) { RibbonLoadBalancerContext lbContext = this.factory .getLoadBalancerContext(serviceId); - return new MyLoadBalancedRetryPolicy(serviceId, lbContext, loadBalanceChooser); + return new MyLoadBalancedRetryPolicy(serviceId, lbContext, + loadBalanceChooser); } class MyLoadBalancedRetryPolicy extends RibbonLoadBalancedRetryPolicy { - public MyLoadBalancedRetryPolicy(String serviceId, RibbonLoadBalancerContext context, ServiceInstanceChooser loadBalanceChooser) { + public MyLoadBalancedRetryPolicy(String serviceId, + RibbonLoadBalancerContext context, + ServiceInstanceChooser loadBalanceChooser) { super(serviceId, context, loadBalanceChooser); } @Override - public boolean retryableStatusCode( int statusCode) { - if(statusCode == HttpStatus.NOT_FOUND.value()) { + public boolean retryableStatusCode(int statusCode) { + if (statusCode == HttpStatus.NOT_FOUND.value()) { return true; } return super.retryableStatusCode(statusCode); diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/support/ZuulProxyTestBase.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/support/ZuulProxyTestBase.java index c1912697..41fbabf3 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/support/ZuulProxyTestBase.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/support/ZuulProxyTestBase.java @@ -27,9 +27,19 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; + import javax.servlet.http.HttpServletRequest; + +import com.netflix.loadbalancer.Server; +import com.netflix.loadbalancer.ServerList; +import com.netflix.zuul.ZuulFilter; +import com.netflix.zuul.context.RequestContext; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.junit.Before; import org.junit.Test; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.web.BasicErrorController; @@ -43,6 +53,7 @@ import org.springframework.cloud.netflix.zuul.filters.ZuulProperties; import org.springframework.cloud.netflix.zuul.filters.discovery.DiscoveryClientRouteLocator; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandFactory; import org.springframework.cloud.netflix.zuul.filters.route.ZuulFallbackProvider; +import org.springframework.cloud.netflix.zuul.filters.route.support.RibbonRetryIntegrationTestBase.RetryableTestConfig; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpEntity; @@ -65,10 +76,6 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; -import com.netflix.loadbalancer.Server; -import com.netflix.loadbalancer.ServerList; -import com.netflix.zuul.ZuulFilter; -import com.netflix.zuul.context.RequestContext; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; @@ -214,12 +221,13 @@ public abstract class ZuulProxyTestBase { public void ribbonDeleteWithBody() { this.endpoint.reset(); ResponseEntity result = new TestRestTemplate().exchange( - "http://localhost:" + this.port + "/simple/deletewithbody", HttpMethod.DELETE, - new HttpEntity<>("deleterequestbody"), String.class); + "http://localhost:" + this.port + "/simple/deletewithbody", + HttpMethod.DELETE, new HttpEntity<>("deleterequestbody"), String.class); assertEquals(HttpStatus.OK, result.getStatusCode()); if (supportsDeleteWithBody()) { assertEquals("Deleted deleterequestbody", result.getBody()); - } else { + } + else { assertEquals("Deleted null", result.getBody()); } } @@ -286,16 +294,16 @@ public abstract class ZuulProxyTestBase { assertEquals(HttpStatus.OK, result.getStatusCode()); assertEquals("Patched 1!", result.getBody()); } - + @SuppressWarnings("deprecation") @Test public void javascriptEncodedFormParams() { TestRestTemplate testRestTemplate = new TestRestTemplate(); ArrayList> converters = new ArrayList<>(); - converters.addAll(Arrays.asList(new StringHttpMessageConverter(), + converters.addAll(Arrays.asList(new StringHttpMessageConverter(), new NoEncodingFormHttpMessageConverter())); testRestTemplate.getRestTemplate().setMessageConverters(converters); - + MultiValueMap map = new LinkedMultiValueMap<>(); map.add("foo", "(bar)"); ResponseEntity result = testRestTemplate.postForEntity( @@ -307,9 +315,11 @@ public abstract class ZuulProxyTestBase { public static abstract class AbstractZuulProxyApplication extends DelegatingWebMvcConfiguration { + private final Log LOG = LogFactory.getLog(RetryableTestConfig.class); + @RequestMapping(value = "/local/{id}", method = RequestMethod.PATCH) public String patch(@PathVariable final String id, - @RequestBody final String body) { + @RequestBody final String body) { return "Patched " + id + "!"; } @@ -322,11 +332,12 @@ public abstract class ZuulProxyTestBase { public String local() { return "Hello local"; } - + @RequestMapping(value = "/local", method = RequestMethod.POST) - public String postWithFormParam(HttpServletRequest request, + public String postWithFormParam(HttpServletRequest request, @RequestBody MultiValueMap body) { - return "Posted " + body.get("foo") + " and Content-Length was: " + request.getContentLength() + "!"; + return "Posted " + body.get("foo") + " and Content-Length was: " + + request.getContentLength() + "!"; } @RequestMapping(value = "/deletewithbody", method = RequestMethod.DELETE) @@ -371,8 +382,10 @@ public abstract class ZuulProxyTestBase { public String slow() { try { Thread.sleep(80000); - } catch (InterruptedException e) { - e.printStackTrace(); + } + catch (InterruptedException e) { + LOG.info(e); + Thread.currentThread().interrupt(); } return "slow"; } @@ -422,7 +435,6 @@ public abstract class ZuulProxyTestBase { return mapping; } - } public static class FallbackProvider implements ZuulFallbackProvider { @@ -469,14 +481,16 @@ public abstract class ZuulProxyTestBase { }; } } - + @Configuration - public class FormEncodedMessageConverterConfiguration extends WebMvcConfigurerAdapter { + public class FormEncodedMessageConverterConfiguration + extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List> converters) { FormHttpMessageConverter converter = new FormHttpMessageConverter(); - MediaType mediaType = new MediaType("application", "x-www-form-urlencoded", Charset.forName("UTF-8")); + MediaType mediaType = new MediaType("application", "x-www-form-urlencoded", + Charset.forName("UTF-8")); converter.setSupportedMediaTypes(Arrays.asList(mediaType)); converters.add(converter); super.configureMessageConverters(converters); @@ -492,8 +506,8 @@ public abstract class ZuulProxyTestBase { @Bean public ServerList ribbonServerList() { - return new StaticServerList<>(new Server("localhost", this.port)); - } + return new StaticServerList<>(new Server("localhost", this.port)); + } } @@ -516,12 +530,13 @@ public abstract class ZuulProxyTestBase { AtomicBoolean controllerUsed = new AtomicBoolean(); public MyErrorController(ErrorAttributes errorAttributes) { - super(errorAttributes, new ErrorProperties()); - } + super(errorAttributes, new ErrorProperties()); + } @Override public ResponseEntity> error(HttpServletRequest request) { - String errorUri = (String) request.getAttribute("javax.servlet.error.request_uri"); + String errorUri = (String) request + .getAttribute("javax.servlet.error.request_uri"); if (errorUri != null && errorUri.equals(this.uriToMatch.get())) { controllerUsed.set(true); @@ -531,15 +546,15 @@ public abstract class ZuulProxyTestBase { } public void setUriToMatch(String uri) { - this.uriToMatch.set(uri); - } + this.uriToMatch.set(uri); + } public boolean wasControllerUsed() { - return this.controllerUsed.get(); - } + return this.controllerUsed.get(); + } public void clear() { - this.controllerUsed.set(false); - } + this.controllerUsed.set(false); + } } }