Class SpaceRemotingServiceExporter

java.lang.Object
org.openspaces.remoting.SpaceRemotingServiceExporter
All Implemented Interfaces:
EventListener, ClusterInfoAware, EventTemplateProvider, SpaceDataEventListener<SpaceRemotingEntry>, ServiceDetailsProvider, ServiceMonitorsProvider, org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanNameAware, org.springframework.beans.factory.InitializingBean, org.springframework.context.ApplicationContextAware, org.springframework.context.ApplicationListener

public class SpaceRemotingServiceExporter extends Object implements SpaceDataEventListener<SpaceRemotingEntry>, org.springframework.beans.factory.InitializingBean, org.springframework.context.ApplicationContextAware, org.springframework.beans.factory.BeanNameAware, EventTemplateProvider, ClusterInfoAware, org.springframework.context.ApplicationListener, ServiceDetailsProvider, ServiceMonitorsProvider
Exports a list of services (beans) as remote services with the Space as the transport layer. All the interfaces each service implements are registered as lookup names (matching SpaceRemotingInvocation.getLookupName() which are then used to lookup the actual service when a remote invocation is received. The correct service and its method are then executed and a SpaceRemotingResult is written back to the space. The remote result can either hold the return value (or null in case of void return value) or an exception that was thrown by the service.

The exporter implements SpaceDataEventListener which means that it acts as a listener to data events and should be used with the different event containers such as SimplePollingEventListenerContainer. This method of execution is called event driven remote execution (EventDrivenSpaceRemotingProxyFactoryBean).

It also implements EventTemplateProvider which means that within the event container configuration there is no need to configure the template, as it uses the one provided by this exported.

Last, the exporter provides services to executor based remoting (ExecutorSpaceRemotingProxyFactoryBean).

By default, the exporter will also autowire and post process all the arguments passed, allowing to inject them with "server" side beans using Spring Autowired annotation for example. Note, this variables must be defined as transient so they won't be passed back to the client. This can be disabled by setting setDisableAutowiredArguments(boolean) to true.

Author:
kimchy
See Also:
  • Field Details

  • Constructor Details

    • SpaceRemotingServiceExporter

      public SpaceRemotingServiceExporter()
  • Method Details

    • setServices

      public void setServices(List<Object> services)
      Sets the list of services that will be exported as remote services. Each service will have all of its interfaces registered as lookups (mapping to SpaceRemotingInvocation.getLookupName() which will then be used to invoke the correct service.
    • setAsyncInterfaceSuffix

      public void setAsyncInterfaceSuffix(String asyncInterfaceSuffix)
      For async based execution of remote services, this is one of the options to enable this by using two different interfaces. The first is the actual "server side" interface (sync), and the other has the same interface name just with an "async suffix" to it. The exporter will identify the async suffix, and will perform the invocation on the actual interface.

      This setter allows to set the async suffix which by default is Async.

    • setFifo

      public void setFifo(boolean fifo)
      Sets the template used to read async invocation (the SpaceRemotingEntry) to be fifo. Works in with setting the EventDrivenSpaceRemotingProxyFactoryBean fifo flag to true and allows for remoting to work in fifo mode without needing to set the whole Space to work in fifo mode.
    • setUseFastReflection

      public void setUseFastReflection(boolean userFastReflection)
      Controls if executing the service should use fast reflection or not.
    • setDisableAutowiredArguments

      public void setDisableAutowiredArguments(boolean disableAutowiredArguments)
      Allows to disable (by default it is enabled) the autowiring of method arguments with beans that exists within the server side context.
    • setServiceExecutionAspect

      public void setServiceExecutionAspect(ServiceExecutionAspect serviceExecutionAspect)
      Allows to inject a service execution callback.
    • setTemplateLookupName

      public void setTemplateLookupName(String templateLookupName)
      Allows to narrow down the async polling container to perform a lookup only on specific lookup name (which is usually the interface that will be used to proxy it on the client side). Defaults to match on all async remoting invocations.

      This option allows to create several polling container, each for different service that will perform the actual invocation.

    • setApplicationContext

      public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext)
      Application context injected by Spring
      Specified by:
      setApplicationContext in interface org.springframework.context.ApplicationContextAware
    • setBeanName

      public void setBeanName(String name)
      Specified by:
      setBeanName in interface org.springframework.beans.factory.BeanNameAware
    • setClusterInfo

      public void setClusterInfo(ClusterInfo clusterInfo)
      Cluster Info injected
      Specified by:
      setClusterInfo in interface ClusterInfoAware
      Parameters:
      clusterInfo - The cluster information to be injected
    • addService

      public void addService(String beanId, Object service) throws IllegalStateException
      Throws:
      IllegalStateException
    • afterPropertiesSet

      public void afterPropertiesSet() throws Exception
      Specified by:
      afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
      Throws:
      Exception
    • onApplicationEvent

      public void onApplicationEvent(org.springframework.context.ApplicationEvent applicationEvent)
      Specified by:
      onApplicationEvent in interface org.springframework.context.ApplicationListener
    • getTemplate

      public Object getTemplate()
      The template used for receiving events. Defaults to all objects that are of type SpaceRemotingEntry.
      Specified by:
      getTemplate in interface EventTemplateProvider
    • getServicesDetails

      public ServiceDetails[] getServicesDetails()
      Description copied from interface: ServiceDetailsProvider
      Retruns one or more service details that the service exposes.
      Specified by:
      getServicesDetails in interface ServiceDetailsProvider
    • getServicesMonitors

      public ServiceMonitors[] getServicesMonitors()
      Description copied from interface: ServiceMonitorsProvider
      Retruns one or more service details that the service exposes.
      Specified by:
      getServicesMonitors in interface ServiceMonitorsProvider
    • onEvent

      public void onEvent(SpaceRemotingEntry remotingEntry, GigaSpace gigaSpace, org.springframework.transaction.TransactionStatus txStatus, Object source)
      Receives a SpaceRemotingEntry which holds all the relevant invocation information. Looks up (based on SpaceRemotingInvocation.getLookupName() the interface the service is registered against (which is the interface the service implements) and then invokes the relevant method within it using the provided method name and arguments. Write the result value or invocation exception back to the space using SpaceRemotingEntry.
      Specified by:
      onEvent in interface SpaceDataEventListener<SpaceRemotingEntry>
      Parameters:
      remotingEntry - The remote entry object
      gigaSpace - The GigaSpace interface
      txStatus - A transactional status
      source - An optional source event information
    • invokeExecutor

      public Object invokeExecutor(ExecutorRemotingTask task) throws Throwable
      Throws:
      Throwable