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 inServiceLayer
. The caching is separate fromReflectiveServiceLayer
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 Description ServiceLayerCache()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description <T extends Locator<?,?>>
TcreateLocator(java.lang.Class<T> clazz)
Create an instance of the requestedLocator
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'sfindFoo()
orLocator.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 aServiceLocator
as the 0th parameter when passed intoServiceLayer.invoke(Method, Object...)
.java.lang.Class<? extends BaseProxy>
resolveClass(java.lang.String typeToken)
Given a type token previously returned fromServiceLayer.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 ofLocator
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 aRequestContext
method, find the service class referenced in theService
orServiceName
annotation.java.lang.Class<? extends ServiceLocator>
resolveServiceLocator(java.lang.Class<? extends RequestContext> requestContext)
Given a RequestContext method declaration, resolve theServiceLocator
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
-
-
-
-
Method Detail
-
createLocator
public <T extends Locator<?,?>> T createLocator(java.lang.Class<T> clazz)
Description copied from class:ServiceLayer
Create an instance of the requestedLocator
type.- Overrides:
createLocator
in classServiceLayerDecorator
- 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 classServiceLayerDecorator
- 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 classServiceLayerDecorator
-
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 classServiceLayerDecorator
- Parameters:
domainType
- a domain entity typeproperty
- 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'sfindFoo()
orLocator.getId()
expects to receive.- Overrides:
getIdType
in classServiceLayerDecorator
- 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 classServiceLayerDecorator
-
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 classServiceLayerDecorator
- Parameters:
domainType
- a domain entity typeproperty
- 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 aServiceLocator
as the 0th parameter when passed intoServiceLayer.invoke(Method, Object...)
.- Overrides:
requiresServiceLocator
in classServiceLayerDecorator
- Parameters:
contextMethod
- a method defined in a RequestContextdomainMethod
- 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 fromServiceLayer.resolveTypeToken(Class)
, return the Class literal associated with the token.- Overrides:
resolveClass
in classServiceLayerDecorator
- 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, theclientType
parameter is used to ensure assignability.- Overrides:
resolveClientType
in classServiceLayerDecorator
- Parameters:
domainClass
- the server-side type to be transported to the clientclientType
- the type to which the returned type must be assignablerequired
- iftrue
and no mapping is available, throw an exception, otherwise the method will returnnull
- Returns:
- a class that represents
domainClass
on the client which is assignable toclientType
-
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 classServiceLayerDecorator
- 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. TherequestContextMethod
will have been previously resolved by#resolveRequestContextMethod(String, String)
.- Overrides:
resolveDomainMethod
in classServiceLayerDecorator
- 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 ofLocator
that should be used to access the given domain type.- Overrides:
resolveLocator
in classServiceLayerDecorator
- 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 classServiceLayerDecorator
- 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 classServiceLayerDecorator
- 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 classServiceLayerDecorator
- 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 aRequestContext
method, find the service class referenced in theService
orServiceName
annotation.- Overrides:
resolveServiceClass
in classServiceLayerDecorator
- 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 theServiceLocator
that should be used when invoking the domain method. This method will only be called ifServiceLayer.requiresServiceLocator(Method, Method)
returnedtrue
for the associated domain method.- Overrides:
resolveServiceLocator
in classServiceLayerDecorator
- 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 classServiceLayerDecorator
- Parameters:
domainClass
- a client-side EntityProxy or ValueProxy type- Returns:
- the type token used to represent the proxy type
-
-