Add programatic shutdown option to Java Thrift servers
Summary: Same paradigm as in C++ model. Allow ServerTransport to be interrupted to block an accept loop and cleanly stop serving client requests.
Reviewed By: dreiss
Test Plan: Invoke shutdown() method on a TServer
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665322 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/java/src/server/TSimpleServer.java b/lib/java/src/server/TSimpleServer.java
index 181d8e4..cb127c7 100644
--- a/lib/java/src/server/TSimpleServer.java
+++ b/lib/java/src/server/TSimpleServer.java
@@ -23,6 +23,8 @@
*/
public class TSimpleServer extends TServer {
+ private boolean stopped_ = false;
+
public TSimpleServer(TProcessor processor,
TServerTransport serverTransport) {
super(new TProcessorFactory(processor), serverTransport);
@@ -71,6 +73,7 @@
public void serve() {
+ stopped_ = false;
try {
serverTransport_.listen();
} catch (TTransportException ttx) {
@@ -78,7 +81,7 @@
return;
}
- while (true) {
+ while (!stopped_) {
TTransport client = null;
TProcessor processor = null;
TTransport inputTransport = null;
@@ -98,9 +101,13 @@
} catch (TTransportException ttx) {
// Client died, just move on
} catch (TException tx) {
- tx.printStackTrace();
+ if (!stopped_) {
+ tx.printStackTrace();
+ }
} catch (Exception x) {
- x.printStackTrace();
+ if (!stopped_) {
+ x.printStackTrace();
+ }
}
if (inputTransport != null) {
@@ -113,4 +120,9 @@
}
}
+
+ public void stop() {
+ stopped_ = true;
+ serverTransport_.interrupt();
+ }
}