Class ExecutorSpaceRemotingProxyFactoryBean
- All Implemented Interfaces:
org.aopalliance.aop.Advice,org.aopalliance.intercept.Interceptor,org.aopalliance.intercept.MethodInterceptor,RemotingInvoker,org.springframework.beans.factory.Aware,org.springframework.beans.factory.FactoryBean,org.springframework.beans.factory.InitializingBean,org.springframework.context.ApplicationContextAware
SpaceRemotingServiceExporter. The actual invocations uses the
space executors mechanism to perform the actual method invocation, allowing to perform async
invocations (invocations that return Future (which is better than
the sync remoting option). In general, the executor based remoting should be used over the sync
remoting option. The proxy requires a setGigaSpace(org.openspaces.core.GigaSpace)
interface to be set in order to write execute.
A timeout which controls how long the
proxy will wait for the response can be set using setTimeout(long). The timeout value if
in milliseconds.
The space remote proxy supports a future based invocation. This
means that if, on the client side, one of the service interface methods returns Future, it can be used for async execution. Note, this means that in terms
of interfaces there will have to be two different service interfaces (under the same package and
with the same name). One for the server side service that returns the actual value, and one on
the client side that for the same method simply returns the future. Another option is not having
two different interfaces, but having the same interface with async methods (returning
Future). The async methods should start with a specified prefix (defaults to
async) and should have no implementation on the server side (simply return
null).
In case of remote invocation over a partitioned space the default
partitioned routing index will be random (the hashCode of the newly created ExecutorRemotingTask class). The proxy allows for a pluggable routing
handler implementation by setting setRemoteRoutingHandler(org.openspaces.remoting.RemoteRoutingHandler).
The proxy allows to perform broadcast the remote invocation to all different cluster
members (partitions for example) by setting the broadcast flag to
true. In such cases, a custom setRemoteResultReducer(org.openspaces.remoting.RemoteResultReducer)
can be plugged to reduce the results of all different services into a single response (assuming
that the service has a return value).
The actual remote invocation can be replaced with
an aspect implementing RemoteInvocationAspect which can be set using setRemoteInvocationAspect(org.openspaces.remoting.RemoteInvocationAspect). It is up the aspect
to then call the actual remote invocation.
Note that it is also possible to configure
method level broadcasting, RemoteResultReducer, RemoteRoutingHandler, RemoteInvocationAspect and MetaArgumentsHandler using the ExecutorRemotingMethod
annotation.
- Author:
- kimchy
- See Also:
-
Field Summary
FieldsFields inherited from interface org.springframework.beans.factory.FactoryBean
OBJECT_TYPE_ATTRIBUTE -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidClass<?>invoke(org.aopalliance.intercept.MethodInvocation methodInvocation) invokeRemote(org.aopalliance.intercept.MethodInvocation methodInvocation) This invocation will cause the actual remote invocation.booleanvoidsetApplicationContext(org.springframework.context.ApplicationContext applicationContext) voidsetBroadcast(boolean broadcast) If set thetrue(defaults tofalse) causes the remote invocation to be called on all active (primary) cluster members.voidsetGigaSpace(GigaSpace gigaSpace) Sets the GigaSpace interface that will be used to work with the space as the transport layer.voidsetMetaArgumentsHandler(MetaArgumentsHandler metaArgumentsHandler) Allows to set a meta argument handler that will controlSpaceRemotingInvocation.getMetaArguments().voidsetRemoteInvocationAspect(RemoteInvocationAspect remoteInvocationAspect) The actual remote invocation can be replaced with an aspect implementingRemoteInvocationAspectwhich can be set usingsetRemoteInvocationAspect(org.openspaces.remoting.RemoteInvocationAspect).voidsetRemoteResultReducer(RemoteResultReducer remoteResultReducer) When using broadcast set totrue, allows to plug a custom reducer that can reduce the array of result objects into another response object.voidsetRemoteRoutingHandler(RemoteRoutingHandler remoteRoutingHandler) In case of remote invocation over a partitioned space the default partitioned routing index will be random.voidsetReturnFirstResult(boolean returnFirstResult) When set totrue(defaults totrue) will return the first result when using broadcast.voidsetServiceInterface(Class serviceInterface) voidsetTimeout(long timeout) Sets the timeout that will be used to wait for the remote invocation response.
-
Field Details
-
DEFAULT_ASYNC_METHOD_PREFIX
- See Also:
-
-
Constructor Details
-
ExecutorSpaceRemotingProxyFactoryBean
public ExecutorSpaceRemotingProxyFactoryBean()
-
-
Method Details
-
setGigaSpace
Sets the GigaSpace interface that will be used to work with the space as the transport layer. -
setApplicationContext
public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext) throws org.springframework.beans.BeansException - Specified by:
setApplicationContextin interfaceorg.springframework.context.ApplicationContextAware- Throws:
org.springframework.beans.BeansException
-
setTimeout
public void setTimeout(long timeout) Sets the timeout that will be used to wait for the remote invocation response. The timeout value is in milliseconds and defaults to60000(60 seconds). -
setRemoteRoutingHandler
In case of remote invocation over a partitioned space the default partitioned routing index will be random. ThisRemoteRoutingHandlerallows for custom routing computation (for example, based on one of the service method parameters). -
setBroadcast
public void setBroadcast(boolean broadcast) If set thetrue(defaults tofalse) causes the remote invocation to be called on all active (primary) cluster members. -
setRemoteResultReducer
When using broadcast set totrue, allows to plug a custom reducer that can reduce the array of result objects into another response object. -
setMetaArgumentsHandler
Allows to set a meta argument handler that will controlSpaceRemotingInvocation.getMetaArguments(). -
setReturnFirstResult
public void setReturnFirstResult(boolean returnFirstResult) When set totrue(defaults totrue) will return the first result when using broadcast. If set tofalse, an array of results will be retuned.Note, this only applies if no reducer is provided.
-
setRemoteInvocationAspect
The actual remote invocation can be replaced with an aspect implementingRemoteInvocationAspectwhich can be set usingsetRemoteInvocationAspect(org.openspaces.remoting.RemoteInvocationAspect). It is up the aspect to then call the actual remote invocation. -
afterPropertiesSet
public void afterPropertiesSet()- Specified by:
afterPropertiesSetin interfaceorg.springframework.beans.factory.InitializingBean
-
getObject
- Specified by:
getObjectin interfaceorg.springframework.beans.factory.FactoryBean
-
getObjectType
- Specified by:
getObjectTypein interfaceorg.springframework.beans.factory.FactoryBean
-
isSingleton
public boolean isSingleton()- Specified by:
isSingletonin interfaceorg.springframework.beans.factory.FactoryBean
-
invoke
- Specified by:
invokein interfaceorg.aopalliance.intercept.MethodInterceptor- Throws:
Throwable
-
invokeRemote
public Object invokeRemote(org.aopalliance.intercept.MethodInvocation methodInvocation) throws Throwable Description copied from interface:RemotingInvokerThis invocation will cause the actual remote invocation.- Specified by:
invokeRemotein interfaceRemotingInvoker- Throws:
Throwable
-
getServiceInterface
-
setServiceInterface
-