Skip to content

Commit 77b52e6

Browse files
committed
Undertow: add Gracefull shutdown handler
1 parent 84d2d3f commit 77b52e6

File tree

1 file changed

+19
-2
lines changed
  • modules/jooby-utow/src/main/java/io/jooby/utow

1 file changed

+19
-2
lines changed

modules/jooby-utow/src/main/java/io/jooby/utow/Utow.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import io.undertow.Undertow;
1414
import io.undertow.UndertowOptions;
1515
import io.undertow.server.HttpHandler;
16+
import io.undertow.server.handlers.GracefulShutdownHandler;
1617
import io.undertow.server.handlers.encoding.EncodingHandler;
1718
import org.xnio.Options;
1819

@@ -23,6 +24,7 @@
2324
import java.util.Collections;
2425
import java.util.List;
2526
import java.util.Optional;
27+
import java.util.concurrent.TimeUnit;
2628

2729
/**
2830
* Web server implementation using <a href="http://undertow.io/">Undertow</a>.
@@ -36,6 +38,8 @@ public class Utow extends Server.Base {
3638

3739
private Undertow server;
3840

41+
private GracefulShutdownHandler shutdown;
42+
3943
private List<Jooby> applications = new ArrayList<>();
4044

4145
private ServerOptions options = new ServerOptions()
@@ -66,6 +70,8 @@ public class Utow extends Server.Base {
6670
handler = new EncodingHandler.Builder().build(null).wrap(handler);
6771
}
6872

73+
shutdown = new GracefulShutdownHandler(handler);
74+
6975
Undertow.Builder builder = Undertow.builder()
7076
.addHttpListener(options.getPort(), options.getHost())
7177
.setBufferSize(options.getBufferSize())
@@ -82,7 +88,7 @@ public class Utow extends Server.Base {
8288
.setIoThreads(options.getIoThreads())
8389
.setWorkerOption(Options.WORKER_NAME, "worker")
8490
.setWorkerThreads(options.getWorkerThreads())
85-
.setHandler(handler);
91+
.setHandler(shutdown);
8692

8793
SSLContext sslContext = options.getSSLContext(application.getEnvironment().getClassLoader());
8894
if (sslContext != null) {
@@ -109,14 +115,25 @@ public class Utow extends Server.Base {
109115
@Nonnull @Override public synchronized Server stop() {
110116
fireStop(applications);
111117
applications = null;
118+
try {
119+
shutdown.shutdown();
120+
shutdown.awaitShutdown(TimeUnit.SECONDS.toMillis(1));
121+
} catch (Exception x) {
122+
throw SneakyThrows.propagate(x);
123+
} finally {
124+
shutdownServer();
125+
}
126+
return this;
127+
}
128+
129+
private void shutdownServer() {
112130
if (server != null) {
113131
try {
114132
server.stop();
115133
} finally {
116134
server = null;
117135
}
118136
}
119-
return this;
120137
}
121138

122139
}

0 commit comments

Comments
 (0)