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
`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)`