org.springframework.remoting.rmi

## Class RmiBasedExporter

- java.lang.Object
- - org.springframework.remoting.support.RemotingSupport
  - - org.springframework.remoting.support.RemoteExporter
    - - org.springframework.remoting.support.RemoteInvocationBasedExporter
      - - org.springframework.remoting.rmi.RmiBasedExporter

- All Implemented Interfaces:
    Aware, BeanClassLoaderAware
  Direct Known Subclasses:
    JndiRmiServiceExporter, RmiServiceExporter

      public abstract class RmiBasedExporter
      extends RemoteInvocationBasedExporter

  Convenient superclass for RMI-based remote exporters. Provides a facility to automatically wrap a given plain Java service object with an RmiInvocationWrapper, exposing the `RmiInvocationHandler` remote interface.

  Using the RMI invoker mechanism, RMI communication operates at the `RmiInvocationHandler` level, sharing a common invoker stub for any number of services. Service interfaces are not required to extend `java.rmi.Remote` or declare `java.rmi.RemoteException` on all service methods. However, in and out parameters still have to be serializable.

  Since:
    1.2.5
  Author:
    Juergen Hoeller
  See Also:
    `RmiServiceExporter`, `JndiRmiServiceExporter`

- - ### Field Summary

    - ### Fields inherited from class org.springframework.remoting.support.RemotingSupport

      `logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `RmiBasedExporter()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected Remote` | `getObjectToExport()` Determine the object to export: either the service object itself or a RmiInvocationWrapper in case of a non-RMI service object.
    `protected Object` | `invoke(RemoteInvocation invocation, Object targetObject)` Redefined here to be visible to RmiInvocationWrapper.

    - ### Methods inherited from class org.springframework.remoting.support.RemoteInvocationBasedExporter

      `getRemoteInvocationExecutor, invokeAndCreateResult, setRemoteInvocationExecutor`

    - ### Methods inherited from class org.springframework.remoting.support.RemoteExporter

      `checkService, checkServiceInterface, getExporterName, getProxyForService, getService, getServiceInterface, setInterceptors, setRegisterTraceInterceptor, setService, setServiceInterface`

    - ### Methods inherited from class org.springframework.remoting.support.RemotingSupport

      `getBeanClassLoader, overrideThreadContextClassLoader, resetThreadContextClassLoader, setBeanClassLoader`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### RmiBasedExporter

          public RmiBasedExporter()

  - ### Method Detail

    - #### getObjectToExport

          protected Remote getObjectToExport()

      Determine the object to export: either the service object itself or a RmiInvocationWrapper in case of a non-RMI service object.
      Returns:
        the RMI object to export
      See Also:
        `RemoteExporter.setService(java.lang.Object)`, `RemoteExporter.setServiceInterface(java.lang.Class)`

    - #### invoke

          protected Object invoke(RemoteInvocation invocation,
                      Object targetObject)
                           throws NoSuchMethodException,
                                  IllegalAccessException,
                                  InvocationTargetException

      Redefined here to be visible to RmiInvocationWrapper. Simply delegates to the corresponding superclass method.
      Overrides:
        `invoke` in class `RemoteInvocationBasedExporter`
      Parameters:
        `invocation` - the remote invocation
        `targetObject` - the target object to apply the invocation to
      Returns:
        the invocation result
      Throws:
        `NoSuchMethodException` - if the method name could not be resolved
        `IllegalAccessException` - if the method could not be accessed
        `InvocationTargetException` - if the method invocation resulted in an exception
      See Also:
        `RemoteInvocationExecutor.invoke(org.springframework.remoting.support.RemoteInvocation, java.lang.Object)`