package ddth.dasp.test; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.pool.ObjectPool; import org.apache.commons.pool.PoolableObjectFactory; import org.apache.commons.pool.impl.GenericObjectPool; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.transport.TFramedTransport; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; import ddth.dasp.servlet.thrift.api.DaspJsonApi; import ddth.dasp.servlet.thrift.api.DaspJsonApi.Client; import ddth.dasp.test.utils.Benchmark; import ddth.dasp.test.utils.BenchmarkResult; import ddth.dasp.test.utils.Operation; public class TestThriftClient { static class ClientFactory implements PoolableObjectFactory<DaspJsonApi.Client> { @Override public void activateObject(Client client) throws Exception { // client.getInputProtocol().getTransport().open(); } @Override public void destroyObject(Client client) throws Exception { System.out.println("Destroying object..."); client.getInputProtocol().getTransport().close(); } @Override public Client makeObject() throws Exception { System.out.println("Creating new object..."); // TTransport trans = new TFramedTransport(new TSocket("localhost", // 9090)); TTransport trans = new TFramedTransport(new TSocket("10.60.47.14", 9090)); TProtocol proto = new TBinaryProtocol(trans); DaspJsonApi.Client client = new DaspJsonApi.Client(proto); trans.open(); return client; } @Override public void passivateObject(Client client) throws Exception { // client.getInputProtocol().getTransport().close(); } @Override public boolean validateObject(Client client) { return true; } } public static void main(String[] args) throws Exception { int numSamples = 1; int numThreads = 1; if (args.length > 0) { numSamples = Integer.parseInt(args[0]); } if (args.length > 1) { numThreads = Integer.parseInt(args[1]); } System.out.println("Num Samples: " + numSamples); System.out.println("Num Threads: " + numThreads); final ObjectPool<DaspJsonApi.Client> pool = new GenericObjectPool<DaspJsonApi.Client>( new ClientFactory(), 32); final Map<Object, Boolean> map = new ConcurrentHashMap<Object, Boolean>(); BenchmarkResult result = new Benchmark(new Operation() { @Override public void run(int runId) { String moduleName = "profile"; String functionName = "getUserId"; String jsonEncodedInput = "{\"account_name\":\"btnguyen2k\"}"; String authKey = null; try { DaspJsonApi.Client client = pool.borrowObject(); try { Object result = client.callApi(moduleName, functionName, jsonEncodedInput, authKey); System.out.println(result); // if (map.containsKey(result)) { // System.out.println("Was generated: " + result); // } else { // map.put(result, Boolean.TRUE); // } } finally { pool.returnObject(client); } } catch (Exception e) { e.printStackTrace(); } } }, numSamples, numThreads).run(); System.out.println(result.summarize()); pool.close(); } }