com.google.web.bindery.requestfactory.server

## Class ServiceLayerCache

- java.lang.Object
- - com.google.web.bindery.requestfactory.server.ServiceLayer
  - - com.google.web.bindery.requestfactory.server.ServiceLayerDecorator
    - - com.google.web.bindery.requestfactory.server.ServiceLayerCache

    class ServiceLayerCache
    extends ServiceLayerDecorator

A cache for idempotent methods in `ServiceLayer`. The caching is separate from `ReflectiveServiceLayer` so that the cache can be applied to any decorators injected by the user.

### Field Summary

### Fields inherited from class com.google.web.bindery.requestfactory.server.ServiceLayerDecorator

`next`

### Fields inherited from class com.google.web.bindery.requestfactory.server.ServiceLayer

`top`

### Constructor Summary

Constructors
Constructor and Description
`ServiceLayerCache()`

### Method Summary

All Methods Instance Methods Concrete Methods
`<T extends Locator<?,?>> T` `createLocator(java.lang.Class<T> clazz)` Create an instance of the requested `Locator` type.
`java.lang.Object` `createServiceInstance(java.lang.Class<? extends RequestContext> requestContext)` Create an instance of a service object that can be used as the target for the given method invocation.
`java.lang.ClassLoader` `getDomainClassLoader()` Returns the ClassLoader that should be used when attempting to access domain classes or resources.
`java.lang.reflect.Method` `getGetter(java.lang.Class<?> domainType, java.lang.String property)` Determine the method to invoke when retrieving the given property.
`java.lang.Class<?>` `getIdType(java.lang.Class<?> domainType)` Returns the type of object the domain type's `findFoo()` or `Locator.getId()` expects to receive.
`java.lang.reflect.Type` `getRequestReturnType(java.lang.reflect.Method contextMethod)` Compute the return type for a method declared in a RequestContext by analyzing the generic method declaration.
`java.lang.reflect.Method` `getSetter(java.lang.Class<?> domainType, java.lang.String property)` Determine the method to invoke when setting the given property.
`boolean` `requiresServiceLocator(java.lang.reflect.Method contextMethod, java.lang.reflect.Method domainMethod)` Determines if the invocation of a domain method requires a `ServiceLocator` as the 0th parameter when passed into `ServiceLayer.invoke(Method, Object...)`.
`java.lang.Class<? extends BaseProxy>` `resolveClass(java.lang.String typeToken)` Given a type token previously returned from `ServiceLayer.resolveTypeToken(Class)`, return the Class literal associated with the token.
`<T> java.lang.Class<? extends T>` `resolveClientType(java.lang.Class<?> domainClass, java.lang.Class<T> clientType, boolean required)` Determine the type used by the client code to represent a given domain type.
`java.lang.Class<?>` `resolveDomainClass(java.lang.Class<?> clazz)` Determine the domain (server-side) type that the given client type is mapped to.
`java.lang.reflect.Method` `resolveDomainMethod(java.lang.String operation)` Return the domain service method associated with a RequestContext method declaration.
`java.lang.Class<? extends Locator<?,?>>` `resolveLocator(java.lang.Class<?> domainType)` Return the type of `Locator` that should be used to access the given domain type.
`java.lang.Class<? extends RequestContext>` `resolveRequestContext(java.lang.String operation)` Find a RequestContext that should be used to fulfill the requested operation.
`java.lang.reflect.Method` `resolveRequestContextMethod(java.lang.String operation)` Find a RequestContext method declaration by name.
`java.lang.Class<? extends RequestFactory>` `resolveRequestFactory(java.lang.String binaryName)` Loads and validates a RequestFactory interface.
`java.lang.Class<?>` `resolveServiceClass(java.lang.Class<? extends RequestContext> requestContextClass)` Given a `RequestContext` method, find the service class referenced in the `Service` or `ServiceName` annotation.
`java.lang.Class<? extends ServiceLocator>` `resolveServiceLocator(java.lang.Class<? extends RequestContext> requestContext)` Given a RequestContext method declaration, resolve the `ServiceLocator` that should be used when invoking the domain method.
`java.lang.String` `resolveTypeToken(java.lang.Class<? extends BaseProxy> domainClass)` Return a string used to represent the given type in the wire protocol.

### Methods inherited from class com.google.web.bindery.requestfactory.server.ServiceLayerDecorator

`createDomainObject, createServiceLocator, die, getId, getNext, getProperty, getTop, getVersion, invoke, isLive, loadDomainObject, loadDomainObjects, report, report, setProperty, validate`

### Methods inherited from class com.google.web.bindery.requestfactory.server.ServiceLayer

`create`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### ServiceLayerCache

    ServiceLayerCache()

### Method Detail

#### createLocator

    public <T extends Locator<?,?>> T createLocator(java.lang.Class<T> clazz)

Description copied from class: `ServiceLayer`
Create an instance of the requested `Locator` type.

Overrides:
  `createLocator` in class `ServiceLayerDecorator`
Type Parameters:
  `T` - the requested Locator type
Parameters:
  `clazz` - the requested Locator type
Returns:
  an instance of the requested Locator type

#### createServiceInstance

    public java.lang.Object createServiceInstance(java.lang.Class<? extends RequestContext> requestContext)

Description copied from class: `ServiceLayer`
Create an instance of a service object that can be used as the target for the given method invocation.

Overrides:
  `createServiceInstance` in class `ServiceLayerDecorator`
Parameters:
  `requestContext` - the RequestContext type for which a service object must be instantiated.
Returns:
  an instance of the requested service object

#### getDomainClassLoader

    public java.lang.ClassLoader getDomainClassLoader()

Description copied from class: `ServiceLayer`
Returns the ClassLoader that should be used when attempting to access domain classes or resources.

The default implementation returns `Thread.currentThread().getContextClassLoader()`.

Overrides:
  `getDomainClassLoader` in class `ServiceLayerDecorator`

#### getGetter

    public java.lang.reflect.Method getGetter(java.lang.Class<?> domainType,
                                              java.lang.String property)

Description copied from class: `ServiceLayer`
Determine the method to invoke when retrieving the given property.

Overrides:
  `getGetter` in class `ServiceLayerDecorator`
Parameters:
  `domainType` - a domain entity type
  `property` - the name of the property to be retrieved
Returns:
  the Method that should be invoked to retrieve the property or `null` if the method could not be located

#### getIdType

    public java.lang.Class<?> getIdType(java.lang.Class<?> domainType)

Description copied from class: `ServiceLayer`
Returns the type of object the domain type's `findFoo()` or `Locator.getId()` expects to receive.

Overrides:
  `getIdType` in class `ServiceLayerDecorator`
Parameters:
  `domainType` - a domain entity type
Returns:
  the type of the persistent id value used to represent the domain type

#### getRequestReturnType

    public java.lang.reflect.Type getRequestReturnType(java.lang.reflect.Method contextMethod)

Description copied from class: `ServiceLayer`
Compute the return type for a method declared in a RequestContext by analyzing the generic method declaration.

Overrides:
  `getRequestReturnType` in class `ServiceLayerDecorator`

#### getSetter

    public java.lang.reflect.Method getSetter(java.lang.Class<?> domainType,
                                              java.lang.String property)

Description copied from class: `ServiceLayer`
Determine the method to invoke when setting the given property.

Overrides:
  `getSetter` in class `ServiceLayerDecorator`
Parameters:
  `domainType` - a domain entity type
  `property` - the name of the property to be set
Returns:
  the Method that should be invoked to set the property or `null` if the method could not be located

#### requiresServiceLocator

    public boolean requiresServiceLocator(java.lang.reflect.Method contextMethod,
                                          java.lang.reflect.Method domainMethod)

Description copied from class: `ServiceLayer`
Determines if the invocation of a domain method requires a `ServiceLocator` as the 0th parameter when passed into `ServiceLayer.invoke(Method, Object...)`.

Overrides:
  `requiresServiceLocator` in class `ServiceLayerDecorator`
Parameters:
  `contextMethod` - a method defined in a RequestContext
  `domainMethod` - a domain method
Returns:
  `true` if a ServiceLocator is required

#### resolveClass

    public java.lang.Class<? extends BaseProxy> resolveClass(java.lang.String typeToken)

Description copied from class: `ServiceLayer`
Given a type token previously returned from `ServiceLayer.resolveTypeToken(Class)`, return the Class literal associated with the token.

Overrides:
  `resolveClass` in class `ServiceLayerDecorator`
Parameters:
  `typeToken` - a string token
Returns:
  the type represented by the token

#### resolveClientType

    public <T> java.lang.Class<? extends T> resolveClientType(java.lang.Class<?> domainClass,
                                                              java.lang.Class<T> clientType,
                                                              boolean required)

Description copied from class: `ServiceLayer`
Determine the type used by the client code to represent a given domain type. If multiple proxy types have been mapped to the same domain type, the `clientType` parameter is used to ensure assignability.

Overrides:
  `resolveClientType` in class `ServiceLayerDecorator`
Parameters:
  `domainClass` - the server-side type to be transported to the client
  `clientType` - the type to which the returned type must be assignable
  `required` - if `true` and no mapping is available, throw an exception, otherwise the method will return `null`
Returns:
  a class that represents `domainClass` on the client which is assignable to `clientType`

#### resolveDomainClass

    public java.lang.Class<?> resolveDomainClass(java.lang.Class<?> clazz)

Description copied from class: `ServiceLayer`
Determine the domain (server-side) type that the given client type is mapped to.

Overrides:
  `resolveDomainClass` in class `ServiceLayerDecorator`
Parameters:
  `clazz` - a client-side type
Returns:
  the domain type that `clientType` represents

#### resolveDomainMethod

    public java.lang.reflect.Method resolveDomainMethod(java.lang.String operation)

Description copied from class: `ServiceLayer`
Return the domain service method associated with a RequestContext method declaration. The `requestContextMethod` will have been previously resolved by `#resolveRequestContextMethod(String, String)`.

Overrides:
  `resolveDomainMethod` in class `ServiceLayerDecorator`
Returns:
  the domain service method that should be invoked

#### resolveLocator

    public java.lang.Class<? extends Locator<?,?>> resolveLocator(java.lang.Class<?> domainType)

Description copied from class: `ServiceLayer`
Return the type of `Locator` that should be used to access the given domain type.

Overrides:
  `resolveLocator` in class `ServiceLayerDecorator`
Parameters:
  `domainType` - a domain (server-side) type
Returns:
  the type of Locator to use, or `null` if the type conforms to the RequestFactory entity protocol

#### resolveRequestContext

    public java.lang.Class<? extends RequestContext> resolveRequestContext(java.lang.String operation)

Description copied from class: `ServiceLayer`
Find a RequestContext that should be used to fulfill the requested operation.

Overrides:
  `resolveRequestContext` in class `ServiceLayerDecorator`
Parameters:
  `operation` - the operation
Returns:
  the RequestContext or `null` if no RequestContext exists that can fulfill the operation

#### resolveRequestContextMethod

    public java.lang.reflect.Method resolveRequestContextMethod(java.lang.String operation)

Description copied from class: `ServiceLayer`
Find a RequestContext method declaration by name.

Overrides:
  `resolveRequestContextMethod` in class `ServiceLayerDecorator`
Parameters:
  `operation` - the operation's name
Returns:
  the method declaration, or `null` if the method does not exist

#### resolveRequestFactory

    public java.lang.Class<? extends RequestFactory> resolveRequestFactory(java.lang.String binaryName)

Description copied from class: `ServiceLayer`
Loads and validates a RequestFactory interface.

Overrides:
  `resolveRequestFactory` in class `ServiceLayerDecorator`
Parameters:
  `binaryName` - the RequestFactory's type token (usually the type's binary name)
Returns:
  the RequestFactory type

#### resolveServiceClass

    public java.lang.Class<?> resolveServiceClass(java.lang.Class<? extends RequestContext> requestContextClass)

Description copied from class: `ServiceLayer`
Given a `RequestContext` method, find the service class referenced in the `Service` or `ServiceName` annotation.

Overrides:
  `resolveServiceClass` in class `ServiceLayerDecorator`
Parameters:
  `requestContextClass` - a RequestContext interface
Returns:
  the type of service to use

#### resolveServiceLocator

    public java.lang.Class<? extends ServiceLocator> resolveServiceLocator(java.lang.Class<? extends RequestContext> requestContext)

Description copied from class: `ServiceLayer`
Given a RequestContext method declaration, resolve the `ServiceLocator` that should be used when invoking the domain method. This method will only be called if `ServiceLayer.requiresServiceLocator(Method, Method)` returned `true` for the associated domain method.

Overrides:
  `resolveServiceLocator` in class `ServiceLayerDecorator`
Parameters:
  `requestContext` - the RequestContext for which a ServiceLocator must be located
Returns:
  the type of ServiceLocator to use

#### resolveTypeToken

    public java.lang.String resolveTypeToken(java.lang.Class<? extends BaseProxy> domainClass)

Description copied from class: `ServiceLayer`
Return a string used to represent the given type in the wire protocol.

Overrides:
  `resolveTypeToken` in class `ServiceLayerDecorator`
Parameters:
  `domainClass` - a client-side EntityProxy or ValueProxy type
Returns:
  the type token used to represent the proxy type