ProcessorFactory for Java

Reviewed By: simon forman


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665124 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/java/src/server/TThreadPoolServer.java b/lib/java/src/server/TThreadPoolServer.java
index 9eaf9b8..22930d5 100644
--- a/lib/java/src/server/TThreadPoolServer.java
+++ b/lib/java/src/server/TThreadPoolServer.java
@@ -8,6 +8,7 @@
 
 import com.facebook.thrift.TException;
 import com.facebook.thrift.TProcessor;
+import com.facebook.thrift.TProcessorFactory;
 import com.facebook.thrift.protocol.TProtocol;
 import com.facebook.thrift.protocol.TProtocolFactory;
 import com.facebook.thrift.protocol.TBinaryProtocol;
@@ -47,6 +48,14 @@
          new Options());
   }
 
+  public TThreadPoolServer(TProcessorFactory processorFactory,
+          TServerTransport serverTransport) {
+    this(processorFactory, serverTransport, 
+         new TTransportFactory(), new TTransportFactory(),
+         new TBinaryProtocol.Factory(), new TBinaryProtocol.Factory(),
+         new Options());
+  }
+
   public TThreadPoolServer(TProcessor processor,
                            TServerTransport serverTransport,
                            TTransportFactory transportFactory,
@@ -56,15 +65,39 @@
          protocolFactory, protocolFactory,
          new Options());
   }
+
+  public TThreadPoolServer(TProcessorFactory processorFactory,
+          TServerTransport serverTransport,
+          TTransportFactory transportFactory,
+          TProtocolFactory protocolFactory) {
+    this(processorFactory, serverTransport, 
+         transportFactory, transportFactory,
+         protocolFactory, protocolFactory,
+         new Options());
+  }
+
   
   public TThreadPoolServer(TProcessor processor,
+          TServerTransport serverTransport,
+          TTransportFactory inputTransportFactory,
+          TTransportFactory outputTransportFactory,
+          TProtocolFactory inputProtocolFactory,
+          TProtocolFactory outputProtocolFactory,
+          Options options) {
+    this(new TProcessorFactory(processor), serverTransport,
+         inputTransportFactory, outputTransportFactory,
+         inputProtocolFactory, outputProtocolFactory,
+         options);
+  }
+  
+  public TThreadPoolServer(TProcessorFactory processorFactory,
                            TServerTransport serverTransport,
                            TTransportFactory inputTransportFactory,
                            TTransportFactory outputTransportFactory,
                            TProtocolFactory inputProtocolFactory,
                            TProtocolFactory outputProtocolFactory,
                            Options options) {
-    super(processor, serverTransport, 
+    super(processorFactory, serverTransport, 
           inputTransportFactory, outputTransportFactory,
           inputProtocolFactory, outputProtocolFactory);
 
@@ -122,16 +155,18 @@
      * Loops on processing a client forever
      */
     public void run() {
+      TProcessor processor = null;
       TTransport inputTransport = null;
       TTransport outputTransport = null;
       TProtocol inputProtocol = null;
       TProtocol outputProtocol = null;
       try {
+        processor = processorFactory_.getProcessor(client_);
         inputTransport = inputTransportFactory_.getTransport(client_);
         outputTransport = outputTransportFactory_.getTransport(client_);
         inputProtocol = inputProtocolFactory_.getProtocol(inputTransport);
         outputProtocol = outputProtocolFactory_.getProtocol(outputTransport);
-        while (processor_.process(inputProtocol, outputProtocol)) {}
+        while (processor.process(inputProtocol, outputProtocol)) {}
       } catch (TTransportException ttx) {
         // Assume the client died and continue silently
       } catch (TException tx) {