RMIServerImpl (Java SE 14 & JDK 14)
Description: declaration: module: java.management.rmi, package: javax.management.remote.rmi, class: RMIServerImpl
Keywords: javax.management.remote.rmi.RMIServerImpl class

Module java.management.rmi
Package javax.management.remote.rmi

# Class RMIServerImpl

java.lang.Object
javax.management.remote.rmi.RMIServerImpl

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`, `Remote`, `RMIServer`

Direct Known Subclasses:
  `RMIIIOPServerImpl`, `RMIJRMPServerImpl`

    public abstract class RMIServerImpl
    extends Object
    implements Closeable, RMIServer

An RMI object representing a connector server. Remote clients can make connections using the `newClient(Object)` method. This method returns an RMI object representing the connection.

User code does not usually reference this class directly. RMI connection servers are usually created with the class `RMIConnectorServer`. Remote clients usually create connections either with `JMXConnectorFactory` or by instantiating `RMIConnector`.

This is an abstract class. Concrete subclasses define the details of the client connection objects.

Since:
  1.5

- ## Constructor Summary

  Constructors
  Constructor | Description
  --- | ---
  `RMIServerImpl​(Map<String,​?> env)` | Constructs a new `RMIServerImpl`.

- ## Method Summary

  Modifier and Type | Method | Description
  --- | --- | ---
  `protected void` | `clientClosed​(RMIConnection client)` | Method called when a client connection created by `makeClient` is closed.
  `void` | `close()` | Closes this connection server.
  `protected abstract void` | `closeClient​(RMIConnection client)` | Closes a client connection made by `makeClient`.
  `protected abstract void` | `closeServer()` | Called by `close()` to close the connector server.
  `protected abstract void` | `export()` | Exports this RMI object.
  `ClassLoader` | `getDefaultClassLoader()` | Gets the default `ClassLoader` used by this connector server.
  `MBeanServer` | `getMBeanServer()` | The `MBeanServer` to which this connector server is attached.
  `protected abstract String` | `getProtocol()` | Returns the protocol string for this object.
  `protected abstract RMIConnection` | `makeClient​(String connectionId, Subject subject)` | Creates a new client connection.
  `RMIConnection` | `newClient​(Object credentials)` | Creates a new client connection.
  `void` | `setDefaultClassLoader​(ClassLoader cl)` | Sets the default `ClassLoader` for this connector server.
  `void` | `setMBeanServer​(MBeanServer mbs)` | Sets the `MBeanServer` to which this connector server is attached.
  `abstract Remote` | `toStub()` | Returns a remotable stub for this server object.

  ### Methods declared in class java.lang.Object

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

  ### Methods declared in interface javax.management.remote.rmi.RMIServer

  `getVersion`

- ## Constructor Details

  - ### RMIServerImpl

    public RMIServerImpl​(Map<String,​?> env)

    Constructs a new `RMIServerImpl`.

    Parameters:
      `env` - the environment containing attributes for the new `RMIServerImpl`. Can be null, which is equivalent to an empty Map.

- ## Method Details

  - ### export

    protected abstract void export() throws IOException

    Exports this RMI object.

    Throws:
      `IOException` - if this RMI object cannot be exported.

  - ### toStub

    public abstract Remote toStub() throws IOException
    Returns a remotable stub for this server object.
    Returns:
      a remotable stub.
    Throws:
      `IOException` - if the stub cannot be obtained - e.g the RMIServerImpl has not been exported yet.

  - ### setDefaultClassLoader

    public void setDefaultClassLoader​(ClassLoader cl)

    Sets the default `ClassLoader` for this connector server. New client connections will use this classloader. Existing client connections are unaffected.

    Parameters:
      `cl` - the new `ClassLoader` to be used by this connector server.
    See Also:
      `getDefaultClassLoader()`

  - ### getDefaultClassLoader

    public ClassLoader getDefaultClassLoader()

    Gets the default `ClassLoader` used by this connector server.

    Returns:
      the default `ClassLoader` used by this connector server.
    See Also:
      `setDefaultClassLoader(java.lang.ClassLoader)`

  - ### setMBeanServer

    public void setMBeanServer​(MBeanServer mbs)

    Sets the `MBeanServer` to which this connector server is attached. New client connections will interact with this `MBeanServer`. Existing client connections are unaffected.

    Parameters:
      `mbs` - the new `MBeanServer`. Can be null, but new client connections will be refused as long as it is.
    See Also:
      `getMBeanServer()`

  - ### getMBeanServer

    public MBeanServer getMBeanServer()

    The `MBeanServer` to which this connector server is attached. This is the last value passed to `setMBeanServer(javax.management.MBeanServer)` on this object, or null if that method has never been called.

    Returns:
      the `MBeanServer` to which this connector is attached.
    See Also:
      `setMBeanServer(javax.management.MBeanServer)`

  - ### newClient

    public RMIConnection newClient​(Object credentials) throws IOException

    Creates a new client connection. This method calls `makeClient` and adds the returned client connection object to an internal list. When this `RMIServerImpl` is shut down via its `close()` method, the `close()` method of each object remaining in the list is called.

    The fact that a client connection object is in this internal list does not prevent it from being garbage collected.

    Specified by:
      `newClient` in interface `RMIServer`
    Parameters:
      `credentials` - this object specifies the user-defined credentials to be passed in to the server in order to authenticate the caller before creating the `RMIConnection`. Can be null.
    Returns:
      the newly-created `RMIConnection`. This is usually the object created by `makeClient`, though an implementation may choose to wrap that object in another object implementing `RMIConnection`.
    Throws:
      `IOException` - if the new client object cannot be created or exported.
      `SecurityException` - if the given credentials do not allow the server to authenticate the user successfully.
      `IllegalStateException` - if `getMBeanServer()` is null.

  - ### makeClient

    protected abstract RMIConnection makeClient​(String connectionId, Subject subject) throws IOException

    Creates a new client connection. This method is called by the public method `newClient(Object)`.

    Parameters:
      `connectionId` - the ID of the new connection. Every connection opened by this connector server will have a different ID. The behavior is unspecified if this parameter is null.
      `subject` - the authenticated subject. Can be null.
    Returns:
      the newly-created `RMIConnection`.
    Throws:
      `IOException` - if the new client object cannot be created or exported.

  - ### closeClient

    protected abstract void closeClient​(RMIConnection client) throws IOException

    Closes a client connection made by `makeClient`.

    Parameters:
      `client` - a connection previously returned by `makeClient` on which the `closeClient` method has not previously been called. The behavior is unspecified if these conditions are violated, including the case where `client` is null.
    Throws:
      `IOException` - if the client connection cannot be closed.

  - ### getProtocol

    protected abstract String getProtocol()

    Returns the protocol string for this object. The string is `rmi` for RMI/JRMP.

    Returns:
      the protocol string for this object.

  - ### clientClosed

    protected void clientClosed​(RMIConnection client) throws IOException

    Method called when a client connection created by `makeClient` is closed. A subclass that defines `makeClient` must arrange for this method to be called when the resultant object's `close` method is called. This enables it to be removed from the `RMIServerImpl`'s list of connections. It is not an error for `client` not to be in that list.

    After removing `client` from the list of connections, this method calls `closeClient(client)`.

    Parameters:
      `client` - the client connection that has been closed.
    Throws:
      `IOException` - if `closeClient(javax.management.remote.rmi.RMIConnection)` throws this exception.
      `NullPointerException` - if `client` is null.

  - ### close

    public void close() throws IOException

    Closes this connection server. This method first calls the `closeServer()` method so that no new client connections will be accepted. Then, for each remaining `RMIConnection` object returned by `makeClient`, its `close` method is called.

    The behavior when this method is called more than once is unspecified.

    If `closeServer()` throws an `IOException`, the individual connections are nevertheless closed, and then the `IOException` is thrown from this method.

    If `closeServer()` returns normally but one or more of the individual connections throws an `IOException`, then, after closing all the connections, one of those `IOException`s is thrown from this method. If more than one connection throws an `IOException`, it is unspecified which one is thrown from this method.

    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `Closeable`
    Throws:
      `IOException` - if `closeServer()` or one of the `RMIConnection.close()` calls threw `IOException`.

  - ### closeServer

    protected abstract void closeServer() throws IOException

    Called by `close()` to close the connector server. After returning from this method, the connector server must not accept any new connections.

    Throws:
      `IOException` - if the attempt to close the connector server failed.