Class ApiProxy

java.lang.Object
com.google.apphosting.api.ApiProxy

public class ApiProxy extends Object
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.
  • Method Details

    • makeSyncCall

      public static byte[] makeSyncCall(String packageName, String methodName, byte[] request)
      See Also:
    • 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 called setEnvironmentForCurrentThread in this thread before calling this method, it will act like no API calls are available (i.e. always throw CallNotFoundException).

      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 by ThreadManager.
      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

      public static Future<byte[]> makeAsyncCall(String packageName, String methodName, byte[] request)
      See Also:
    • 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 called setEnvironmentForCurrentThread in this thread before calling this method, it will act like no API calls are available (i.e. the returned Future will throw CallNotFoundException).

      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 for makeSyncCall(String, String, byte[], ApiConfig) on failure.
    • log

      public static void log(ApiProxy.LogRecord record)
    • flushLogs

      public static void flushLogs()
      Synchronously flush all pending application logs.
    • getCurrentEnvironment

      public static ApiProxy.Environment getCurrentEnvironment()
      Gets the environment associated with this thread. This can be used to discover additional information about the current request. The value returned is the Environment that this thread most recently set with setEnvironmentForCurrentThread(com.google.apphosting.api.ApiProxy.Environment). If that is null and setEnvironmentFactory(com.google.apphosting.api.ApiProxy.EnvironmentFactory) has set an ApiProxy.EnvironmentFactory, that EnvironmentFactory is used to create an Environment instance which is returned by this call and future calls. If there is no EnvironmentFactory either, then null is returned.
    • setDelegate

      public static void setDelegate(@Nullable ApiProxy.Delegate<?> aDelegate)
      Sets a delegate to which we will proxy requests. This should not be used from user-code.
    • getDelegate

      public static ApiProxy.Delegate 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

      public static void setEnvironmentForCurrentThread(ApiProxy.Environment environment)
      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

      public static ApiProxy.EnvironmentFactory getEnvironmentFactory()
    • setEnvironmentFactory

      public static void setEnvironmentFactory(ApiProxy.EnvironmentFactory factory)
      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

      public static List<Thread> getRequestThreads()
      Returns a list of all threads which are currently running requests.