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();
+  }
 }