Package com.google.apphosting.api
Class ApiProxy
java.lang.Object
com.google.apphosting.api.ApiProxy
ApiProxy is a static class that serves as the collection point for
all API calls from user code into the application server.
It is responsible for proxying makeSyncCall() calls to a delegate,
which actually implements the API calls. It also stores an
Environment for each thread, which contains additional user-visible
information about the request.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final class
ApiConfig
encapsulates one or more configuration parameters scoped to an individual API call.static class
static class
An exception produced when trying to perform an API call.static interface
A subtype ofFuture
that provides more detailed information about the timing and resource consumption of particular API calls.static class
static class
static class
static class
static class
static interface
ApiProxy.Delegate<E extends ApiProxy.Environment>
This interface can be used to provide a class that actually implements API calls.static interface
Environment is a simple data container that provides additional information about the current request (e.g.static interface
Used to create an Environment object to use if no thread local Environment is set.static interface
A specialization of Environment with call-tracing metadata.static class
static final class
LogRecord
represents a single apphosting log entry, including a Java-specific logging level, a timestamp in microseconds, and a message, which is a formatted string containing the rest of the logging information (e.g.static class
static class
static class
static class
static class
An exception whose cause is not known or understood by the API code. -
Method Summary
Modifier and TypeMethodDescriptionstatic void
Removes any environment associated with the current thread.static void
Synchronously flush all pending application logs.static ApiProxy.Environment
Gets the environment associated with this thread.static ApiProxy.Delegate
Gets the delegate to which we will proxy requests.static ApiProxy.EnvironmentFactory
Returns a list of all threads which are currently running requests.static void
log
(ApiProxy.LogRecord record) static Future<byte[]>
makeAsyncCall
(String packageName, String methodName, byte[] request) static Future<byte[]>
makeAsyncCall
(String packageName, String methodName, byte[] request, ApiProxy.ApiConfig apiConfig) Make an asynchronous call to the specified method in the specified API package.static byte[]
makeSyncCall
(String packageName, String methodName, byte[] request) static byte[]
makeSyncCall
(String packageName, String methodName, byte[] request, ApiProxy.ApiConfig apiConfig) Make a synchronous call to the specified method in the specified API package.static void
setDelegate
(@Nullable ApiProxy.Delegate<?> aDelegate) Sets a delegate to which we will proxy requests.static void
Set the EnvironmentFactory instance to use, which will be used to create Environment instances when a thread local one is not set.static void
setEnvironmentForCurrentThread
(ApiProxy.Environment environment) Sets an environment for the current thread.
-
Method Details
-
makeSyncCall
-
makeSyncCall
public static byte[] makeSyncCall(String packageName, String methodName, byte[] request, ApiProxy.ApiConfig apiConfig) Make a synchronous call to the specified method in the specified API package.Note: if you have not installed a
Delegate
and calledsetEnvironmentForCurrentThread
in this thread before calling this method, it will act like no API calls are available (i.e. always throwCallNotFoundException
).- Parameters:
packageName
- the name of the API package.methodName
- the name of the method within the API package.request
- a byte array containing the serialized form of the request protocol buffer.apiConfig
- that specifies API-specific configuration parameters.- Returns:
- a byte array containing the serialized form of the response protocol buffer.
- Throws:
ApiProxy.ApplicationException
- For any error that is the application's fault.ApiProxy.RPCFailedException
- If we could not connect to a backend service.ApiProxy.CallNotFoundException
- If the specified method does not exist, or if the thread making the call is neither a request thread nor a thread created byThreadManager
.ApiProxy.ArgumentException
- If the request could not be parsed.ApiProxy.ApiDeadlineExceededException
- If the request took too long.ApiProxy.CancelledException
- If the request was explicitly cancelled.ApiProxy.CapabilityDisabledException
- If the API call is currently unavailable.ApiProxy.OverQuotaException
- If the API call required more quota than is available.ApiProxy.RequestTooLargeException
- If the request to the API was too large.ApiProxy.ResponseTooLargeException
- If the response to the API was too large.ApiProxy.UnknownException
- If any other error occurred.
-
makeAsyncCall
-
makeAsyncCall
public static Future<byte[]> makeAsyncCall(String packageName, String methodName, byte[] request, ApiProxy.ApiConfig apiConfig) Make an asynchronous call to the specified method in the specified API package.Note: if you have not installed a
Delegate
and calledsetEnvironmentForCurrentThread
in this thread before calling this method, it will act like no API calls are available (i.e. the returnedFuture
will throwCallNotFoundException
).There is a limit to the number of simultaneous asynchronous API calls (currently 100). Invoking this method while this number of API calls are outstanding will block.
- Parameters:
packageName
- the name of the API package.methodName
- the name of the method within the API package.request
- a byte array containing the serialized form of the request protocol buffer.apiConfig
- that specifies API-specific configuration parameters.- Returns:
- a
Future
that will resolve to a byte array containing the serialized form of the response protocol buffer on success, or throw one of the exceptions documented formakeSyncCall(String, String, byte[], ApiConfig)
on failure.
-
log
-
flushLogs
public static void flushLogs()Synchronously flush all pending application logs. -
getCurrentEnvironment
Gets the environment associated with this thread. This can be used to discover additional information about the current request. The value returned is theEnvironment
that this thread most recently set withsetEnvironmentForCurrentThread(com.google.apphosting.api.ApiProxy.Environment)
. If that is null andsetEnvironmentFactory(com.google.apphosting.api.ApiProxy.EnvironmentFactory)
has set anApiProxy.EnvironmentFactory
, thatEnvironmentFactory
is used to create anEnvironment
instance which is returned by this call and future calls. If there is noEnvironmentFactory
either, then null is returned. -
setDelegate
Sets a delegate to which we will proxy requests. This should not be used from user-code. -
getDelegate
Gets the delegate to which we will proxy requests. This should really only be called from test-code where, for example, you might want to downcast and invoke methods on a specific implementation that you happen to know has been installed. -
setEnvironmentForCurrentThread
Sets an environment for the current thread. This should not be used from user-code. -
clearEnvironmentForCurrentThread
public static void clearEnvironmentForCurrentThread()Removes any environment associated with the current thread. This should not be used from user-code. -
getEnvironmentFactory
-
setEnvironmentFactory
Set the EnvironmentFactory instance to use, which will be used to create Environment instances when a thread local one is not set. This should not be used from user-code, and it should only be called once, with a value that must not be null. -
getRequestThreads
Returns a list of all threads which are currently running requests.
-