- 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 withJMXConnectorFactory
or by instantiatingRMIConnector
.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 newRMIServerImpl
.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected void
clientClosed(RMIConnection client)
Method called when a client connection created bymakeClient
is closed.void
close()
Closes this connection server.protected abstract void
closeClient(RMIConnection client)
Closes a client connection made bymakeClient
.protected abstract void
closeServer()
Called byclose()
to close the connector server.protected abstract void
export()
Exports this RMI object.ClassLoader
getDefaultClassLoader()
Gets the defaultClassLoader
used by this connector server.MBeanServer
getMBeanServer()
TheMBeanServer
to which this connector server is attached.protected abstract String
getProtocol()
Returns the protocol string for this object.String
getVersion()
The version of the RMI Connector Protocol understood by this connector server.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 defaultClassLoader
for this connector server.void
setMBeanServer(MBeanServer mbs)
Sets theMBeanServer
to which this connector server is attached.abstract Remote
toStub()
Returns a remotable stub for this server object.
-
-
-
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 newClassLoader
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 thisMBeanServer
. 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 tosetMBeanServer(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)
-
getVersion
public String getVersion()
Description copied from interface:RMIServer
The version of the RMI Connector Protocol understood by this connector server. This is a string with the following format:
protocol-version implementation-name
The
protocol-version
is a series of two or more non-negative integers separated by periods (.
). An implementation of the version described by this documentation must use the string1.0
here.After the protocol version there must be a space, followed by the implementation name. The format of the implementation name is unspecified. It is recommended that it include an implementation version number. An implementation can use an empty string as its implementation name, for example for security reasons.
- Specified by:
getVersion
in interfaceRMIServer
- Returns:
- a string with the format described here.
-
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 thisRMIServerImpl
is shut down via itsclose()
method, theclose()
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 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 bymakeClient
on which thecloseClient
method has not previously been called. The behavior is unspecified if these conditions are violated, including the case whereclient
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 definesmakeClient
must arrange for this method to be called when the resultant object'sclose
method is called. This enables it to be removed from theRMIServerImpl
's list of connections. It is not an error forclient
not to be in that list.After removing
client
from the list of connections, this method callscloseClient(client)
.- Parameters:
client
- the client connection that has been closed.- Throws:
IOException
- ifcloseClient(javax.management.remote.rmi.RMIConnection)
throws this exception.NullPointerException
- ifclient
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 remainingRMIConnection
object returned bymakeClient
, itsclose
method is called.The behavior when this method is called more than once is unspecified.
If
closeServer()
throws anIOException
, the individual connections are nevertheless closed, and then theIOException
is thrown from this method.If
closeServer()
returns normally but one or more of the individual connections throws anIOException
, then, after closing all the connections, one of thoseIOException
s is thrown from this method. If more than one connection throws anIOException
, it is unspecified which one is thrown from this method.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in 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.
-
-