Commit 2b211371 authored by Andy Wilkinson's avatar Andy Wilkinson

Use getTomcatWebServer to create TomcatWebServer instance

TomcatReactiveWebServerFactory's getTomcatWebServer is described as
being a hook point the can be overrideden to return a different
TomcatWebServer or to apply additional processing to the Tomcat
server. Previously, this did not work as the method was not called
to create the TomcatWebServer instance. Instead, TomcatWebServer was
instantiated and returned directly.

This commit updates TomcatReactiveWebServerFactory to call
getTomcatWebServer to create the TomcatWebServer instance. A test
has also been added to verify that the method is now used.

Fixes gh-20386
parent 06d870bd
/* /*
* Copyright 2012-2019 the original author or authors. * Copyright 2012-2020 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -112,7 +112,7 @@ public class TomcatReactiveWebServerFactory extends AbstractReactiveWebServerFac ...@@ -112,7 +112,7 @@ public class TomcatReactiveWebServerFactory extends AbstractReactiveWebServerFac
configureEngine(tomcat.getEngine()); configureEngine(tomcat.getEngine());
TomcatHttpHandlerAdapter servlet = new TomcatHttpHandlerAdapter(httpHandler); TomcatHttpHandlerAdapter servlet = new TomcatHttpHandlerAdapter(httpHandler);
prepareContext(tomcat.getHost(), servlet); prepareContext(tomcat.getHost(), servlet);
return new TomcatWebServer(tomcat, getPort() >= 0); return getTomcatWebServer(tomcat);
} }
private void configureEngine(Engine engine) { private void configureEngine(Engine engine) {
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
package org.springframework.boot.web.embedded.tomcat; package org.springframework.boot.web.embedded.tomcat;
import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.catalina.Context; import org.apache.catalina.Context;
import org.apache.catalina.LifecycleEvent; import org.apache.catalina.LifecycleEvent;
...@@ -184,4 +185,19 @@ public class TomcatReactiveWebServerFactoryTests extends AbstractReactiveWebServ ...@@ -184,4 +185,19 @@ public class TomcatReactiveWebServerFactoryTests extends AbstractReactiveWebServ
.isInstanceOf(ConnectorStartFailedException.class); .isInstanceOf(ConnectorStartFailedException.class);
} }
@Test
public void whenGetTomcatWebServerIsOverriddenThenWebServerCreationCanBeCustomized() {
AtomicReference<TomcatWebServer> webServerReference = new AtomicReference<>();
TomcatWebServer webServer = (TomcatWebServer) new TomcatReactiveWebServerFactory() {
@Override
protected TomcatWebServer getTomcatWebServer(Tomcat tomcat) {
webServerReference.set(new TomcatWebServer(tomcat));
return webServerReference.get();
}
}.getWebServer(new EchoHandler());
assertThat(webServerReference).hasValue(webServer);
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment