public class ExecutorSpaceRemotingProxyFactoryBean extends org.springframework.remoting.support.RemoteAccessor implements org.springframework.beans.factory.FactoryBean, org.springframework.beans.factory.InitializingBean, org.aopalliance.intercept.MethodInterceptor, RemotingInvoker, 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.
SpaceRemotingServiceExporter
Modifier and Type | Field and Description |
---|---|
static String |
DEFAULT_ASYNC_METHOD_PREFIX |
Constructor and Description |
---|
ExecutorSpaceRemotingProxyFactoryBean() |
Modifier and Type | Method and Description |
---|---|
void |
afterPropertiesSet() |
Object |
getObject() |
Class<?> |
getObjectType() |
Object |
invoke(org.aopalliance.intercept.MethodInvocation methodInvocation) |
Object |
invokeRemote(org.aopalliance.intercept.MethodInvocation methodInvocation)
This invocation will cause the actual remote invocation.
|
boolean |
isSingleton() |
void |
setApplicationContext(org.springframework.context.ApplicationContext applicationContext) |
void |
setBroadcast(boolean broadcast)
If set the
true (defaults to false ) causes the remote invocation to
be called on all active (primary) cluster members. |
void |
setGigaSpace(GigaSpace gigaSpace)
Sets the GigaSpace interface that will be used to work with the space as the transport
layer.
|
void |
setMetaArgumentsHandler(MetaArgumentsHandler metaArgumentsHandler)
Allows to set a meta argument handler that will control
SpaceRemotingInvocation.getMetaArguments() . |
void |
setRemoteInvocationAspect(RemoteInvocationAspect remoteInvocationAspect)
The actual remote invocation can be replaced with an aspect implementing
RemoteInvocationAspect which can be set using setRemoteInvocationAspect(org.openspaces.remoting.RemoteInvocationAspect) . |
void |
setRemoteResultReducer(RemoteResultReducer remoteResultReducer)
When using broadcast set to
true , allows to plug a custom reducer that can
reduce the array of result objects into another response object. |
void |
setRemoteRoutingHandler(RemoteRoutingHandler remoteRoutingHandler)
In case of remote invocation over a partitioned space the default partitioned routing index
will be random.
|
void |
setReturnFirstResult(boolean returnFirstResult)
When set to
true (defaults to true ) will return the first result
when using broadcast. |
void |
setTimeout(long timeout)
Sets the timeout that will be used to wait for the remote invocation response.
|
getServiceInterface, setServiceInterface
public static final String DEFAULT_ASYNC_METHOD_PREFIX
public ExecutorSpaceRemotingProxyFactoryBean()
public void setGigaSpace(GigaSpace gigaSpace)
public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext) throws org.springframework.beans.BeansException
setApplicationContext
in interface org.springframework.context.ApplicationContextAware
org.springframework.beans.BeansException
public void setTimeout(long timeout)
60000
(60 seconds).public void setRemoteRoutingHandler(RemoteRoutingHandler remoteRoutingHandler)
RemoteRoutingHandler
allows for custom
routing computation (for example, based on one of the service method parameters).public void setBroadcast(boolean broadcast)
true
(defaults to false
) causes the remote invocation to
be called on all active (primary) cluster members.public void setRemoteResultReducer(RemoteResultReducer remoteResultReducer)
true
, allows to plug a custom reducer that can
reduce the array of result objects into another response object.public void setMetaArgumentsHandler(MetaArgumentsHandler metaArgumentsHandler)
SpaceRemotingInvocation.getMetaArguments()
.public void setReturnFirstResult(boolean returnFirstResult)
true
(defaults to true
) will return the first result
when using broadcast. If set to false
, an array of results will be retuned.
Note, this only applies if no reducer is provided.
public void setRemoteInvocationAspect(RemoteInvocationAspect remoteInvocationAspect)
RemoteInvocationAspect
which can be set using setRemoteInvocationAspect(org.openspaces.remoting.RemoteInvocationAspect)
.
It is up the aspect to then call the actual remote invocation.public void afterPropertiesSet()
afterPropertiesSet
in interface org.springframework.beans.factory.InitializingBean
public Object getObject()
getObject
in interface org.springframework.beans.factory.FactoryBean
public Class<?> getObjectType()
getObjectType
in interface org.springframework.beans.factory.FactoryBean
public boolean isSingleton()
isSingleton
in interface org.springframework.beans.factory.FactoryBean
public Object invoke(org.aopalliance.intercept.MethodInvocation methodInvocation) throws Throwable
invoke
in interface org.aopalliance.intercept.MethodInterceptor
Throwable
public Object invokeRemote(org.aopalliance.intercept.MethodInvocation methodInvocation) throws Throwable
RemotingInvoker
invokeRemote
in interface RemotingInvoker
Throwable
Copyright © GigaSpaces.