Java libraries for Thrift

Summary: The basic Thrift stack implemented in Java, still in need of a lot of work but fully functional.

Reviewed By: aditya

Test Plan: Unit tests are the NEXT checkin, I swear

Notes: Perf on the Java stuff actually isn't that bad, and it's far from optimized at the moment. Barely any tweaking has been done. Testing shows that a Java server with the C++ client has RPC performance within 2x of the pure C++ implementations. This is pretty sweet, since this cost will be eclipsed by the cost of whatever processing is being done on an actual server doing real work.




git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@664715 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/java/src/server/TSimpleServer.java b/lib/java/src/server/TSimpleServer.java
new file mode 100644
index 0000000..352a6de
--- /dev/null
+++ b/lib/java/src/server/TSimpleServer.java
@@ -0,0 +1,50 @@
+package com.facebook.thrift.server;
+
+import com.facebook.thrift.TException;
+import com.facebook.thrift.TProcessor;
+import com.facebook.thrift.transport.TServerTransport;
+import com.facebook.thrift.transport.TTransport;
+import com.facebook.thrift.transport.TTransportException;
+
+/**
+ * Simple singlethreaded server for testing.
+ *
+ * @author Mark Slee <mcslee@facebook.com>
+ */
+public class TSimpleServer extends TServer {
+
+  private TServerTransport serverTransport_;
+
+  public TSimpleServer(TProcessor processor,
+                       TServer.Options options,
+                       TServerTransport serverTransport) {
+    super(processor, options);
+    serverTransport_ = serverTransport;
+  }
+
+  public void run() {
+    try {
+      serverTransport_.listen();
+    } catch (TTransportException ttx) {
+      ttx.printStackTrace();
+      return;
+    }
+
+    while (true) {
+      TTransport client = null;
+      try {
+        client = serverTransport_.accept();
+        if (client != null) {
+          while (processor_.process(client, client));
+        }
+      } catch (TException tx) {
+        tx.printStackTrace();
+      }
+
+      if (client != null) {
+        client.close();
+        client = null;
+      }
+    }
+  }
+}