# ApiProxy.Delegate
Date: 2012-02-24

## com.google.apphosting.api
Interface ApiProxy.Delegate<E extends ApiProxy.Environment>

Type Parameters:
  `E` - The concrete class implementing Environment that this Delegate expects to receive.

Enclosing class:
  ApiProxy

    public static interface ApiProxy.Delegate<E extends ApiProxy.Environment>

This interface can be used to provide a class that actually implements API calls.

Method Summary
`void` `flushLogs(E environment)`
`java.util.List<java.lang.Thread>` `getRequestThreads(E environment)` Returns a list of all threads which are currently running requests.
`void` `log(E environment, ApiProxy.LogRecord record)`
`java.util.concurrent.Future<byte[]>` `makeAsyncCall(E environment, java.lang.String packageName, java.lang.String methodName, byte[] request, ApiProxy.ApiConfig apiConfig)` Make an asynchronous call to the specified method in the specified API package.
`byte[]` `makeSyncCall(E environment, java.lang.String packageName, java.lang.String methodName, byte[] request)` Make a synchronous call to the specified method in the specified API package.

Method Detail

### makeSyncCall

    byte[] makeSyncCall(E environment,
                        java.lang.String packageName,
                        java.lang.String methodName,
                        byte[] request)
                        throws ApiProxy.ApiProxyException

  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:
    `environment` - the current request environment.
    `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.
  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.
    `ApiProxy.ArgumentException` - If the request could not be parsed.
    `DeadlineExceededException` - If the request took too long.
    `ApiProxy.CancelledException` - If the request was explicitly cancelled.
    `ApiProxy.UnknownException` - If any other error occurred.
    `ApiProxy.ApiProxyException`

### makeAsyncCall

    java.util.concurrent.Future<byte[]> makeAsyncCall(E environment,
                                                      java.lang.String packageName,
                                                      java.lang.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. always throw `CallNotFoundException`).

  Parameters:
    `environment` - the current request environment.
    `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(Environment, String, String, byte[])` on failure.

### log

    void log(E environment,
             ApiProxy.LogRecord record)

### flushLogs

    void flushLogs(E environment)

### getRequestThreads

    java.util.List<java.lang.Thread> getRequestThreads(E environment)

  Returns a list of all threads which are currently running requests.