org.springframework.remoting.rmi

## Class JndiRmiServiceExporter

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

- All Implemented Interfaces:
    Aware, BeanClassLoaderAware, DisposableBean, InitializingBean

      public class JndiRmiServiceExporter
      extends RmiBasedExporter
      implements InitializingBean, DisposableBean

  Service exporter which binds RMI services to JNDI. Typically used for RMI-IIOP (CORBA).

  Exports services via the `PortableRemoteObject` class. You need to run "rmic" with the "-iiop" option to generate corresponding stubs and skeletons for each exported service.

  Also supports exposing any non-RMI service via RMI invokers, to be accessed via `JndiRmiClientInterceptor` / `JndiRmiProxyFactoryBean`'s automatic detection of such invokers.

  With an RMI invoker, RMI communication works on the `RmiInvocationHandler` level, needing only one stub for any service. Service interfaces do not have to extend `java.rmi.Remote` or throw `java.rmi.RemoteException` on all methods, but in and out parameters have to be serializable.

  The JNDI environment can be specified as "jndiEnvironment" bean property, or be configured in a `jndi.properties` file or as system properties. For example:

      <property name="jndiEnvironment">
               <props>
                       <prop key="java.naming.factory.initial">com.sun.jndi.cosnaming.CNCtxFactory</prop>
                       <prop key="java.naming.provider.url">iiop://localhost:1050</prop>
               </props>
       </property>

  Since:
    1.1
  Author:
    Juergen Hoeller
  See Also:
    `RemoteExporter.setService(java.lang.Object)`, `setJndiTemplate(org.springframework.jndi.JndiTemplate)`, `setJndiEnvironment(java.util.Properties)`, `setJndiName(java.lang.String)`, `JndiRmiClientInterceptor`, `JndiRmiProxyFactoryBean`, `PortableRemoteObject.exportObject(java.rmi.Remote)`

- - ### Field Summary

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

      `logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `JndiRmiServiceExporter()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterPropertiesSet()` Invoked by a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).
    `void` | `destroy()` Unbind the RMI service from JNDI on bean factory shutdown.
    `void` | `prepare()` Initialize this service exporter, binding the specified service to JNDI.
    `void` | `rebind()` Rebind the specified service to JNDI, for recovering in case of the target registry having been restarted.
    `void` | `setJndiEnvironment(Properties jndiEnvironment)` Set the JNDI environment to use for JNDI lookups.
    `void` | `setJndiName(String jndiName)` Set the JNDI name of the exported RMI service.
    `void` | `setJndiTemplate(JndiTemplate jndiTemplate)` Set the JNDI template to use for JNDI lookups.

    - ### Methods inherited from class org.springframework.remoting.rmi.RmiBasedExporter

      `getObjectToExport, invoke`

    - ### 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

    - #### JndiRmiServiceExporter

          public JndiRmiServiceExporter()

  - ### Method Detail

    - #### setJndiTemplate

          public void setJndiTemplate(JndiTemplate jndiTemplate)

      Set the JNDI template to use for JNDI lookups. You can also specify JNDI environment settings via "jndiEnvironment".
      See Also:
        `setJndiEnvironment(java.util.Properties)`

    - #### setJndiEnvironment

          public void setJndiEnvironment(Properties jndiEnvironment)

      Set the JNDI environment to use for JNDI lookups. Creates a JndiTemplate with the given environment settings.
      See Also:
        `setJndiTemplate(org.springframework.jndi.JndiTemplate)`

    - #### setJndiName

          public void setJndiName(String jndiName)

      Set the JNDI name of the exported RMI service.

    - #### afterPropertiesSet

          public void afterPropertiesSet()
                                  throws NamingException,
                                         RemoteException

      Description copied from interface: `InitializingBean`
      Invoked by a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).

      This method allows the bean instance to perform initialization only possible when all bean properties have been set and to throw an exception in the event of misconfiguration.

      Specified by:
        `afterPropertiesSet` in interface `InitializingBean`
      Throws:
        `NamingException`
        `RemoteException`

    - #### prepare

          public void prepare()
                       throws NamingException,
                              RemoteException

      Initialize this service exporter, binding the specified service to JNDI.
      Throws:
        `NamingException` - if service binding failed
        `RemoteException` - if service export failed

    - #### rebind

          public void rebind()
                      throws NamingException

      Rebind the specified service to JNDI, for recovering in case of the target registry having been restarted.
      Throws:
        `NamingException` - if service binding failed

    - #### destroy

          public void destroy()
                       throws NamingException,
                              NoSuchObjectException

      Unbind the RMI service from JNDI on bean factory shutdown.
      Specified by:
        `destroy` in interface `DisposableBean`
      Throws:
        `NamingException`
        `NoSuchObjectException`