Thrift TTransportFactory model for servers
Summary: Servers need to create bufferedtransports etc. around the transports they get in a user-definable way. So use a factory pattern to allow the user to supply an object to the server that defines this behavior.
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@664792 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/java/src/server/TThreadPoolServer.java b/lib/java/src/server/TThreadPoolServer.java
index d19275e..2f5be8d 100644
--- a/lib/java/src/server/TThreadPoolServer.java
+++ b/lib/java/src/server/TThreadPoolServer.java
@@ -5,6 +5,8 @@
import com.facebook.thrift.transport.TServerTransport;
import com.facebook.thrift.transport.TTransport;
import com.facebook.thrift.transport.TTransportException;
+import com.facebook.thrift.transport.TTransportFactory;
+import com.facebook.thrift.transport.TBaseTransportFactory;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
@@ -20,28 +22,28 @@
*/
public class TThreadPoolServer extends TServer {
- // Server transport
- private TServerTransport serverTransport_;
-
// Executor service for handling client connections
private ExecutorService executorService_;
// Customizable server options
public static class Options extends TServer.Options {
- public int port = 9190;
public int minWorkerThreads = 5;
public int maxWorkerThreads = Integer.MAX_VALUE;
}
public TThreadPoolServer(TProcessor processor,
TServerTransport serverTransport) {
- this(processor, new Options(), serverTransport);
+ this(processor,
+ serverTransport,
+ new TBaseTransportFactory(),
+ new Options());
}
-
+
public TThreadPoolServer(TProcessor processor,
- Options options,
- TServerTransport serverTransport) {
- super(processor, options);
+ TServerTransport serverTransport,
+ TTransportFactory transportFactory,
+ Options options) {
+ super(processor, serverTransport, transportFactory, options);
serverTransport_ = serverTransport;
executorService_ = null;
@@ -95,12 +97,22 @@
* Loops on processing a client forever
*/
public void run() {
+ TTransport[] io = null;
try {
- while (processor_.process(client_, client_)) {}
+ io = transportFactory_.getIOTransports(client_);
+ while (processor_.process(io[0], io[1])) {}
} catch (TException tx) {
tx.printStackTrace();
}
- client_.close();
+
+ if (io != null) {
+ if (io[0] != null) {
+ io[0].close();
+ }
+ if (io[1] != null) {
+ io[1].close();
+ }
+ }
}
}
}