public class ServiceLayerDecorator extends ServiceLayer
ServiceLayer.create(ServiceLayerDecorator...). The methods defined in
this type will automatically delegate to the next decorator or the root
service object after being processed bycreate().| Modifier and Type | Field and Description |
|---|---|
(package private) ServiceLayer |
next
A pointer to the next deepest layer.
|
top| Constructor and Description |
|---|
ServiceLayerDecorator() |
| Modifier and Type | Method and Description |
|---|---|
<T> T |
createDomainObject(java.lang.Class<T> clazz)
Create an instance of the requested domain type.
|
<T extends Locator<?,?>> |
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.
|
<T extends ServiceLocator> |
createServiceLocator(java.lang.Class<T> clazz)
Create an instance of the requested
ServiceLocator type. |
protected <T> T |
die(java.lang.Throwable e,
java.lang.String message,
java.lang.Object... args)
Throw a fatal error up into the top-level processing code.
|
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.Object |
getId(java.lang.Object domainObject)
Return the persistent id for a domain object.
|
java.lang.Class<?> |
getIdType(java.lang.Class<?> domainType)
Returns the type of object the domain type's
findFoo() or
Locator.getId() expects to receive. |
(package private) ServiceLayer |
getNext()
Retrieves the next service layer.
|
java.lang.Object |
getProperty(java.lang.Object domainObject,
java.lang.String property)
Retrieve the named property from the domain object.
|
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.
|
protected ServiceLayer |
getTop()
Returns the top-most service layer.
|
java.lang.Object |
getVersion(java.lang.Object domainObject)
May return
null to indicate that the domain object has not been
persisted. |
java.lang.Object |
invoke(java.lang.reflect.Method domainMethod,
java.lang.Object... args)
Invoke a domain service method.
|
boolean |
isLive(java.lang.Object domainObject)
Returns
true if the given domain object is still live (i.e. |
<T> T |
loadDomainObject(java.lang.Class<T> clazz,
java.lang.Object domainId)
Load an object from the backing store.
|
java.util.List<java.lang.Object> |
loadDomainObjects(java.util.List<java.lang.Class<?>> classes,
java.util.List<java.lang.Object> domainIds)
Load multiple objects from the backing store.
|
protected <T> T |
report(java.lang.reflect.InvocationTargetException userGeneratedException)
Report an exception thrown by code that is under the control of the
end-developer.
|
protected <T> T |
report(java.lang.String msg,
java.lang.Object... args)
Return a message to the client.
|
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> proxyType)
Return a string used to represent the given type in the wire protocol.
|
void |
setProperty(java.lang.Object domainObject,
java.lang.String property,
java.lang.Class<?> expectedType,
java.lang.Object value)
Sets a property on a domain object.
|
<T> java.util.Set<ConstraintViolation<T>> |
validate(T domainObject)
Invoke a JSR 303 validator on the given domain object.
|
createServiceLayer next
public <T> T createDomainObject(java.lang.Class<T> clazz)
ServiceLayercreateDomainObject in class ServiceLayerT - the requested domain typeclazz - the requested domain typepublic <T extends Locator<?,?>> T createLocator(java.lang.Class<T> clazz)
ServiceLayerLocator type.createLocator in class ServiceLayerT - the requested Locator typeclazz - the requested Locator typepublic java.lang.Object createServiceInstance(java.lang.Class<? extends RequestContext> requestContext)
ServiceLayercreateServiceInstance in class ServiceLayerrequestContext - the RequestContext type for which a service object
must be instantiated.public <T extends ServiceLocator> T createServiceLocator(java.lang.Class<T> clazz)
ServiceLayerServiceLocator type.createServiceLocator in class ServiceLayerT - the requested ServiceLocator typeclazz - the requested ServiceLocator typepublic java.lang.ClassLoader getDomainClassLoader()
ServiceLayer
The default implementation returns
Thread.currentThread().getContextClassLoader().
getDomainClassLoader in class ServiceLayerpublic java.lang.reflect.Method getGetter(java.lang.Class<?> domainType,
java.lang.String property)
ServiceLayergetGetter in class ServiceLayerdomainType - a domain entity typeproperty - the name of the property to be retrievednull if the method could not be locatedpublic java.lang.Object getId(java.lang.Object domainObject)
ServiceLayernull to
indicate that the domain object has not been persisted. The value returned
from this method must be a simple type (e.g. Integer, String) or a domain
type for which a mapping to an EntityProxy or Value proxy exists.
The values returned from this method may be passed to
ServiceLayer.loadDomainObject(Class, Object) in the future.
getId in class ServiceLayerdomainObject - a domain objectnull if the
object is not persistentpublic java.lang.Class<?> getIdType(java.lang.Class<?> domainType)
ServiceLayerfindFoo() or
Locator.getId() expects to receive.getIdType in class ServiceLayerdomainType - a domain entity typepublic java.lang.Object getProperty(java.lang.Object domainObject,
java.lang.String property)
ServiceLayergetProperty in class ServiceLayerdomainObject - the domain object being examinedproperty - the property namepublic java.lang.reflect.Type getRequestReturnType(java.lang.reflect.Method contextMethod)
ServiceLayergetRequestReturnType in class ServiceLayerpublic java.lang.reflect.Method getSetter(java.lang.Class<?> domainType,
java.lang.String property)
ServiceLayergetSetter in class ServiceLayerdomainType - a domain entity typeproperty - the name of the property to be setnull if the method could not be locatedpublic java.lang.Object getVersion(java.lang.Object domainObject)
ServiceLayernull to indicate that the domain object has not been
persisted. The value returned from this method must be a simple type (e.g.
Integer, String) or a domain type for which a mapping to an EntityProxy or
Value proxy exists.getVersion in class ServiceLayerdomainObject - a domain objectnull if the object is
not persistentpublic java.lang.Object invoke(java.lang.reflect.Method domainMethod,
java.lang.Object... args)
ServiceLayerMethod.invoke(Object, Object...).invoke in class ServiceLayerdomainMethod - the method to invokeargs - the arguments to pass to the methodpublic boolean isLive(java.lang.Object domainObject)
ServiceLayertrue if the given domain object is still live (i.e. not
deleted) in the backing store.isLive in class ServiceLayerdomainObject - a domain entitytrue if domainObject could be retrieved at a later
point in timepublic <T> T loadDomainObject(java.lang.Class<T> clazz,
java.lang.Object domainId)
ServiceLayernull
to indicate that the requested object is no longer available.loadDomainObject in class ServiceLayerT - the type of object to loadclazz - the type of object to loaddomainId - an id previously returned from ServiceLayer.getId(Object)null if it is irretrievablepublic java.util.List<java.lang.Object> loadDomainObjects(java.util.List<java.lang.Class<?>> classes,
java.util.List<java.lang.Object> domainIds)
ServiceLayer
The default implementation of this method will delegate to
ServiceLayer.loadDomainObject(Class, Object).
loadDomainObjects in class ServiceLayerclasses - type type of each object to loaddomainIds - the ids previously returned from ServiceLayer.getId(Object)null if the
requested objects were irretrievablepublic boolean requiresServiceLocator(java.lang.reflect.Method contextMethod,
java.lang.reflect.Method domainMethod)
ServiceLayerServiceLocator as the 0th parameter when passed into
ServiceLayer.invoke(Method, Object...).requiresServiceLocator in class ServiceLayercontextMethod - a method defined in a RequestContextdomainMethod - a domain methodtrue if a ServiceLocator is requiredpublic java.lang.Class<? extends BaseProxy> resolveClass(java.lang.String typeToken)
ServiceLayerServiceLayer.resolveTypeToken(Class), return the Class literal associated with
the token.resolveClass in class ServiceLayertypeToken - a string tokenpublic <T> java.lang.Class<? extends T> resolveClientType(java.lang.Class<?> domainClass,
java.lang.Class<T> clientType,
boolean required)
ServiceLayerclientType parameter is used to ensure assignability.resolveClientType in class ServiceLayerdomainClass - the server-side type to be transported to the clientclientType - the type to which the returned type must be assignablerequired - if true and no mapping is available, throw an
exception, otherwise the method will return nulldomainClass on the client which is
assignable to clientTypepublic java.lang.Class<?> resolveDomainClass(java.lang.Class<?> clazz)
ServiceLayerresolveDomainClass in class ServiceLayerclazz - a client-side typeclientType representspublic java.lang.reflect.Method resolveDomainMethod(java.lang.String operation)
ServiceLayerrequestContextMethod will have been previously
resolved by #resolveRequestContextMethod(String, String).resolveDomainMethod in class ServiceLayerpublic java.lang.Class<? extends Locator<?,?>> resolveLocator(java.lang.Class<?> domainType)
ServiceLayerLocator that should be used to access the given
domain type.resolveLocator in class ServiceLayerdomainType - a domain (server-side) typenull if the type conforms to
the RequestFactory entity protocolpublic java.lang.Class<? extends RequestContext> resolveRequestContext(java.lang.String operation)
ServiceLayerresolveRequestContext in class ServiceLayeroperation - the operationnull if no RequestContext exists that
can fulfill the operationpublic java.lang.reflect.Method resolveRequestContextMethod(java.lang.String operation)
ServiceLayerresolveRequestContextMethod in class ServiceLayeroperation - the operation's namenull if the method does not
existpublic java.lang.Class<? extends RequestFactory> resolveRequestFactory(java.lang.String binaryName)
ServiceLayerresolveRequestFactory in class ServiceLayerbinaryName - the RequestFactory's type token (usually the type's binary
name)public java.lang.Class<?> resolveServiceClass(java.lang.Class<? extends RequestContext> requestContextClass)
ServiceLayerRequestContext method, find the service class referenced in
the Service or
ServiceName annotation.resolveServiceClass in class ServiceLayerrequestContextClass - a RequestContext interfacepublic java.lang.Class<? extends ServiceLocator> resolveServiceLocator(java.lang.Class<? extends RequestContext> requestContext)
ServiceLayerServiceLocator 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.resolveServiceLocator in class ServiceLayerrequestContext - the RequestContext for which a ServiceLocator must be
locatedpublic java.lang.String resolveTypeToken(java.lang.Class<? extends BaseProxy> proxyType)
ServiceLayerresolveTypeToken in class ServiceLayerproxyType - a client-side EntityProxy or ValueProxy typepublic void setProperty(java.lang.Object domainObject,
java.lang.String property,
java.lang.Class<?> expectedType,
java.lang.Object value)
ServiceLayersetProperty in class ServiceLayerdomainObject - the domain object to operate onproperty - the name of the property to setexpectedType - the type of the propertyvalue - the new valuepublic <T> java.util.Set<ConstraintViolation<T>> validate(T domainObject)
ServiceLayervalidate in class ServiceLayerT - the type of data being validateddomainObject - the domain objcet to validateprotected final <T> T die(java.lang.Throwable e,
java.lang.String message,
java.lang.Object... args)
throws UnexpectedException
e - a throwable with more data, may be nullmessage - a printf-style format stringargs - arguments for the messageUnexpectedException - this method never returns normallyreport(String, Object...)protected final ServiceLayer getTop()
getTop() when calling public
methods on the ServiceLayer API to allow higher-level decorators to
override behaviors built into lower-level decorators.ServiceLayer.create(ServiceLayerDecorator...)protected final <T> T report(java.lang.reflect.InvocationTargetException userGeneratedException)
throws ReportableException
userGeneratedException - an InvocationTargetException thrown
by an invocation of user-provided codeReportableException - this method never returns normallyprotected final <T> T report(java.lang.String msg,
java.lang.Object... args)
throws ReportableException
msg - a printf-style format stringargs - arguments for the messageReportableException - this method never returns normallydie(Throwable, String, Object...)final ServiceLayer getNext()
super.doSomething().