Skip to content

Instantly share code, notes, and snippets.

@WdWeaver
Created December 7, 2009 16:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save WdWeaver/250924 to your computer and use it in GitHub Desktop.
Save WdWeaver/250924 to your computer and use it in GitHub Desktop.
package testlib;
import java.io.IOException;
import java.util.concurrent.Future;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyRange;
import com.google.apphosting.api.ApiProxy;
import com.google.apphosting.api.ApiProxy.ApiConfig;
import com.google.apphosting.api.ApiProxy.ApiProxyException;
import com.google.apphosting.api.ApiProxy.Delegate;
import com.google.apphosting.api.ApiProxy.Environment;
import com.google.apphosting.api.ApiProxy.LogRecord;
import com.google.apphosting.api.DatastorePb.PutRequest;
import com.google.apphosting.api.DatastorePb.PutResponse;
public class MakeAsyncCallTestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
Logger logger = Logger.getLogger(MakeAsyncCallTestServlet.class.getName());
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Delegate<Environment> base = ApiProxy.getDelegate();
ApiProxy.setDelegate(new MyDelegate(base));
DatastoreService svc = DatastoreServiceFactory.getDatastoreService();
KeyRange range = svc.allocateIds("testdata", 100);
long b4 = System.currentTimeMillis();
for(Key key: range) {
Entity entity = new Entity(key);
entity.setProperty("testfield", key.getId());
svc.put(entity);
}
response.getWriter().write(String.format("put time with makeAsyncCall: %d",System.currentTimeMillis() - b4));
ApiProxy.setDelegate(base);
}
public class MyDelegate implements Delegate<Environment> {
Delegate<Environment> base;
MyDelegate(Delegate<Environment> base) {
this.base = base;
}
public void log(Environment env, LogRecord log) {
base.log(env,log);
}
public Future<byte[]> makeAsyncCall(Environment env, String pkg,
String method, byte[] data, ApiConfig config) {
return base.makeAsyncCall(env, pkg, method, data, config);
}
public byte[] makeSyncCall(Environment env, String pkg, String method,
byte[] data) throws ApiProxyException {
if("datastore_v3".equalsIgnoreCase(pkg)&&"Put".equalsIgnoreCase(method)) {
PutRequest request = new PutRequest();
request.mergeFrom(data);
ApiConfig config = new ApiConfig();
config.setDeadlineInSeconds(10.0);
Future<byte[]> responses = makeAsyncCall(env,pkg,method,data,config);
try {
PutResponse response = new PutResponse();
response.addKey(request.getEntity(0).getKey());
return response.toByteArray();
} catch (Exception e) {
throw new ApiProxyException(e.getMessage());
}
} else {
byte[] response = base.makeSyncCall(env, pkg, method, data);
return response;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment