1 // Copyright 2010 Google Inc. All Rights Reserved.
3 package com
.google
.appengine
.tools
.remoteapi
;
5 import com
.google
.apphosting
.api
.ApiProxy
.Delegate
;
6 import com
.google
.apphosting
.api
.ApiProxy
.Environment
;
9 * Handles App Engine API calls by making HTTP requests to a remote server.
10 * The exact mechanism by which the requests are made is an implementation
11 * detail of subclasses. Users of this class are expected to call
12 * {@link #shutdown()} when they are done with an instance.
15 abstract class RemoteApiDelegate
implements Delegate
<Environment
> {
16 private final RemoteRpc remoteRpc
;
17 private final RemoteDatastore remoteDatastore
;
22 public static RemoteApiDelegate
newInstance(RemoteRpc remoteRpc
, RemoteApiOptions options
, Delegate
<Environment
> containerDelegate
) {
23 return containerDelegate
!= null ?
24 new HostedRemoteApiDelegate(remoteRpc
, options
, containerDelegate
) :
25 new StandaloneRemoteApiDelegate(remoteRpc
, options
);
29 * Do not call directly, use
30 * {@link #newInstance(RemoteRpc, RemoteApiOptions, Delegate)} instead.
32 RemoteApiDelegate(RemoteRpc rpc
, RemoteApiOptions options
) {
34 this.remoteDatastore
= new RemoteDatastore(remoteRpc
, options
);
37 void resetRpcCount() {
38 remoteRpc
.resetRpcCount();
42 return remoteRpc
.getRpcCount();
45 final byte[] makeDefaultSyncCall(
46 Environment env
, String serviceName
, String methodName
, byte[] request
) {
47 if (serviceName
.equals(RemoteDatastore
.DATASTORE_SERVICE
)) {
48 return remoteDatastore
.handleDatastoreCall(methodName
, request
);
50 return remoteRpc
.call(serviceName
, methodName
, "", request
);
55 * Perform any necessary clean up and shut down.
57 public abstract void shutdown();