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
| Constructor | Description |
|---|---|
RMIServerImpl(Map<String,?> env) | Constructs a new |
Method Summary
| Modifier and Type | Method | Description |
|---|---|---|
protected void | clientClosed(RMIConnection client) | Method called when a client connection created by |
void | close() | Closes this connection server. |
protected abstract void | closeClient(RMIConnection client) | Closes a client connection made by |
protected abstract void | closeServer() | Called by |
protected abstract void | export() | Exports this RMI object. |
ClassLoader | getDefaultClassLoader() | Gets the default |
MBeanServer | getMBeanServer() | The |
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 |
void | setMBeanServer(MBeanServer mbs) | Sets the |
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 Detail
RMIServerImpl
public RMIServerImpl(Map<String,?> env)
Constructs a new RMIServerImpl.
- Parameters:
-
env- the environment containing attributes for the newRMIServerImpl. Can be null, which is equivalent to an empty Map.
Method Detail
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 newClassLoaderto 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
ClassLoaderused 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 newMBeanServer. 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
MBeanServerto 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:
-
newClientin interfaceRMIServer - Parameters:
-
credentials- this object specifies the user-defined credentials to be passed in to the server in order to authenticate the caller before creating theRMIConnection. Can be null. - Returns:
- the newly-created
RMIConnection. This is usually the object created bymakeClient, though an implementation may choose to wrap that object in another object implementingRMIConnection. - 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- ifgetMBeanServer()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 bymakeClienton which thecloseClientmethod has not previously been called. The behavior is unspecified if these conditions are violated, including the case whereclientis 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- ifcloseClient(javax.management.remote.rmi.RMIConnection)throws this exception. -
NullPointerException- ifclientis 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 IOExceptions 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:
-
closein interfaceAutoCloseable - Specified by:
-
closein interfaceCloseable - Throws:
-
IOException- ifcloseServer()or one of theRMIConnection.close()calls threwIOException.
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.