/**
   * Locate or create the RMI registry for this exporter.
   *
   * @param registryPort the registry port to use
   * @param clientSocketFactory the RMI client socket factory for the registry (if any)
   * @param serverSocketFactory the RMI server socket factory for the registry (if any)
   * @return the RMI registry
   * @throws RemoteException if the registry couldn't be located or created
   */
  protected Registry getRegistry(
      int registryPort,
      RMIClientSocketFactory clientSocketFactory,
      RMIServerSocketFactory serverSocketFactory)
      throws RemoteException {

    if (clientSocketFactory != null) {
      if (this.alwaysCreateRegistry) {
        logger.info("Creating new RMI registry");
        return LocateRegistry.createRegistry(
            registryPort, clientSocketFactory, serverSocketFactory);
      }
      if (logger.isInfoEnabled()) {
        logger.info(
            "Looking for RMI registry at port '" + registryPort + "', using custom socket factory");
      }
      try {
        // Retrieve existing registry.
        Registry reg = LocateRegistry.getRegistry(null, registryPort, clientSocketFactory);
        testRegistry(reg);
        return reg;
      } catch (RemoteException ex) {
        logger.debug("RMI registry access threw exception", ex);
        logger.info("Could not detect RMI registry - creating new one");
        // Assume no registry found -> create new one.
        return LocateRegistry.createRegistry(
            registryPort, clientSocketFactory, serverSocketFactory);
      }
    } else {
      return getRegistry(registryPort);
    }
  }
 /**
  * Locate or create the RMI registry for this exporter.
  *
  * @param registryPort the registry port to use
  * @return the RMI registry
  * @throws RemoteException if the registry couldn't be located or created
  */
 protected Registry getRegistry(int registryPort) throws RemoteException {
   if (this.alwaysCreateRegistry) {
     logger.info("Creating new RMI registry");
     return LocateRegistry.createRegistry(registryPort);
   }
   if (logger.isInfoEnabled()) {
     logger.info("Looking for RMI registry at port '" + registryPort + "'");
   }
   try {
     // Retrieve existing registry.
     Registry reg = LocateRegistry.getRegistry(registryPort);
     testRegistry(reg);
     return reg;
   } catch (RemoteException ex) {
     logger.debug("RMI registry access threw exception", ex);
     logger.info("Could not detect RMI registry - creating new one");
     // Assume no registry found -> create new one.
     return LocateRegistry.createRegistry(registryPort);
   }
 }
  /**
   * Locate or create the RMI registry for this exporter.
   *
   * @param registryHost the registry host to use (if this is specified, no implicit creation of a
   *     RMI registry will happen)
   * @param registryPort the registry port to use
   * @param clientSocketFactory the RMI client socket factory for the registry (if any)
   * @param serverSocketFactory the RMI server socket factory for the registry (if any)
   * @return the RMI registry
   * @throws RemoteException if the registry couldn't be located or created
   */
  protected Registry getRegistry(
      String registryHost,
      int registryPort,
      RMIClientSocketFactory clientSocketFactory,
      RMIServerSocketFactory serverSocketFactory)
      throws RemoteException {

    if (registryHost != null) {
      // Host explictly specified: only lookup possible.
      if (logger.isInfoEnabled()) {
        logger.info(
            "Looking for RMI registry at port '"
                + registryPort
                + "' of host ["
                + registryHost
                + "]");
      }
      Registry reg = LocateRegistry.getRegistry(registryHost, registryPort, clientSocketFactory);
      testRegistry(reg);
      return reg;
    } else {
      return getRegistry(registryPort, clientSocketFactory, serverSocketFactory);
    }
  }