public class EventDrivenSpaceRemotingProxyFactoryBean 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
which in turn is registered with an event container.
This proxy builds a representation of the remote invocation using SpaceRemotingEntry
and
waits for a remoting response represented by SpaceRemotingEntry
.
The proxy requires a setGigaSpace(org.openspaces.core.GigaSpace)
interface to be set
in order to write the remote invocation and wait for a response using the space API. It also
requires a RemoteAccessor.setServiceInterface(Class)
which represents the interface that will be
proxied.
Allows for one way invocations (i.e. not waiting for a response). The one way invocation can
be set globally for all of the service methods by setting setGlobalOneWay(boolean)
or
can be enabled only for methods that return void
by setting setVoidOneWay(boolean)
. Note, if using one way invocation and an exception is raised by the
remote service, it won't be raised by this proxy.
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 SpaceRemotingEntry
class). The proxy
allows for a pluggable routing handler implementation by setting setRemoteRoutingHandler(RemoteRoutingHandler)
.
The actual remote invocation can be replaced with an aspect implementing RemoteInvocationAspect
which can be set using setRemoteInvocationAspect(RemoteInvocationAspect)
. It is up the aspect to then call the actual
remote invocation.
Note that it is also possible to configure method level fifo behavior, one way behavior,
RemoteResultReducer
, RemoteRoutingHandler
, RemoteInvocationAspect
and
MetaArgumentsHandler
using the EventDrivenRemotingMethod
annotation.
SpaceRemotingServiceExporter
Modifier and Type | Field and Description |
---|---|
static String |
DEFAULT_ASYNC_METHOD_PREFIX |
Constructor and Description |
---|
EventDrivenSpaceRemotingProxyFactoryBean() |
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 |
setAsyncMethodPrefix(String asyncMethodPrefix)
Sets the async method prefix.
|
void |
setFifo(boolean fifo)
Sets the remote invocation objects written to the Space to work in FIFO.
|
void |
setGigaSpace(GigaSpace gigaSpace)
Sets the GigaSpace interface that will be used to work with the space as the transport layer
for both writing and taking
SpaceRemotingEntry . |
void |
setGlobalOneWay(boolean globalOneWay)
If set to
true (defaults to false ) all of the service methods will
be invoked and the proxy will not wait for a return value. |
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(RemoteInvocationAspect) . |
void |
setRemoteRoutingHandler(RemoteRoutingHandler remoteRoutingHandler)
In case of remote invocation over a partitioned space the default partitioned routing index
will be random (the hashCode of the newly created
SpaceRemotingEntry class). |
void |
setTimeout(long timeout)
Sets the timeout that will be used to wait for the remote invocation response.
|
void |
setVoidOneWay(boolean voidOneWay)
If set to
true (defaults to false ) service methods that return void
will be invoked and the proxy will not wait for a return value. |
getServiceInterface, setServiceInterface
public static final String DEFAULT_ASYNC_METHOD_PREFIX
public EventDrivenSpaceRemotingProxyFactoryBean()
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 setGigaSpace(GigaSpace gigaSpace)
SpaceRemotingEntry
.public void setTimeout(long timeout)
60000
(60 seconds).public void setRemoteRoutingHandler(RemoteRoutingHandler remoteRoutingHandler)
SpaceRemotingEntry
class). This
RemoteRoutingHandler
allows for custom routing computation (for example, based on one
of the service method parameters).public void setMetaArgumentsHandler(MetaArgumentsHandler metaArgumentsHandler)
SpaceRemotingInvocation.getMetaArguments()
.public void setGlobalOneWay(boolean globalOneWay)
true
(defaults to false
) all of the service methods will
be invoked and the proxy will not wait for a return value. Note, any exception raised by the
remote service will be logged on the server side and not propagated to the client.public void setVoidOneWay(boolean voidOneWay)
true
(defaults to false
) service methods that return void
will be invoked and the proxy will not wait for a return value. Note, any exception raised by
the remote service will be logged on the server side and not propagated to the client.public void setFifo(boolean fifo)
SpaceRemotingServiceExporter
.
This allows for remoting to work in fifo mode without needing to set the whole Space to work
in fifo mode.public void setAsyncMethodPrefix(String asyncMethodPrefix)
DEFAULT_ASYNC_METHOD_PREFIX
.public void setRemoteInvocationAspect(RemoteInvocationAspect remoteInvocationAspect)
RemoteInvocationAspect
which can be set using setRemoteInvocationAspect(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.