THRIFT-1869 TThreadPoolServer (java) dies when threadpool is consumed
Patch: Brock Noland
diff --git a/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java b/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java
index 19e51af..38dfd58 100644
--- a/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java
+++ b/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java
@@ -20,6 +20,7 @@
 package org.apache.thrift.server;
 
 import java.util.concurrent.ExecutorService;
+import java.util.concurrent.RejectedExecutionException;
 import java.util.concurrent.SynchronousQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
@@ -121,7 +122,24 @@
       try {
         TTransport client = serverTransport_.accept();
         WorkerProcess wp = new WorkerProcess(client);
-        executorService_.execute(wp);
+        while(true) {
+          int rejections = 0;
+          try {
+            executorService_.execute(wp);
+            break;
+          } catch(RejectedExecutionException ex) {
+            LOGGER.warn("ExecutorService rejected client " + (++rejections) +
+                " times(s)", ex);
+            try {
+              TimeUnit.SECONDS.sleep(1);
+            } catch (InterruptedException e) {
+              LOGGER.warn("Interrupted while waiting to place client on" +
+              		" executor queue.");
+              Thread.currentThread().interrupt();
+              break;
+            }
+          }
+        }
       } catch (TTransportException ttx) {
         if (!stopped_) {
           ++failureCount;