javax.management.remote.rmi

接口
java.lang.Object
  继承者 javax.management.remote.rmi.RMIServerImpl
所有已实现的接口:
Closeable, Remote, RMIServer
直接已知子类:
RMIIIOPServerImpl, RMIJRMPServerImpl

public abstract class RMIServerImpl
     
extends Object
implements Closeable, RMIServer

表示连接器服务器的 RMI 对象。远程客户端可使用 newClient(Object) 方法进行连接。此方法返回表示此连接的 RMI 对象。

用户代码不经常直接引用此类。RMI 连接服务器通常使用 RMIConnectorServer 类创建。远程客户端通常使用 JMXConnectorFactory 或通过实例化 RMIConnector 创建连接。

这是一个抽象类。由具体的子类定义客户端连接对象的细节,例如使用的是 JRMP 还是 IIOP。

从以下版本开始:
1.5

构造方法摘要
RMIServerImpl(Map<String,?> env)
          构造一个新的 RMIServerImpl
 
方法摘要
protected  void clientClosed(RMIConnection client)
          关闭由 makeClient 创建的客户端连接时调用的方法。
 void close()
          关闭此连接服务器。
protected abstract  void closeClient(RMIConnection client)
          关闭由 makeClient 建立的客户端连接。
protected abstract  void closeServer()
          由 close() 调用以关闭连接器服务器。
protected abstract  void export()
          导出此 RMI 对象。
 ClassLoader getDefaultClassLoader()
          获得此连接器服务器使用的默认 ClassLoader
 MBeanServer getMBeanServer()
          此连接器服务器所连接的 MBeanServer
protected abstract  String getProtocol()
          返回该对象的协议字符串。
 String getVersion()
          此连接器服务器能识别的 RMI 连接协议版本。
protected abstract  RMIConnection makeClient(String connectionId, Subject subject)
          创建一个新的客户端连接。
 RMIConnection newClient(Object credentials)
          创建一个新的客户端连接。
 void setDefaultClassLoader(ClassLoader cl)
          设置此连接器服务器的默认 ClassLoader
 void setMBeanServer(MBeanServer mbs)
          设置此连接器服务器所连接的 MBeanServer
abstract  Remote toStub()
          返回此服务器对象的可远程化的 stub。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

RMIServerImpl

public RMIServerImpl(Map<String,?> env)

构造一个新的 RMIServerImpl

参数:
env - 包含新的 RMIServerImpl 属性的环境。可以为 null,它等效于一个空映射。
方法详细信息

export

protected abstract void export()
                        throws IOException

导出此 RMI 对象。

抛出:
IOException - 如果无法导出此 RMI 对象。

toStub

public abstract Remote toStub()
                       throws IOException
返回此服务器对象的可远程化的 stub。

返回:
可远程化的 stub。
抛出:
IOException - 如果无法获得 stub,例如 RMIServerImpl 尚未导出。

setDefaultClassLoader

public void setDefaultClassLoader(ClassLoader cl)

设置此连接器服务器的默认 ClassLoader。新客户端连接将使用此 classloader。现有客户端连接不受影响。

参数:
cl - 此连接器服务器将使用的新 ClassLoader
另请参见:
getDefaultClassLoader()

getDefaultClassLoader

public ClassLoader getDefaultClassLoader()

获得此连接器服务器使用的默认 ClassLoader

返回:
此连接器服务器使用的默认 ClassLoader

另请参见:
setDefaultClassLoader(java.lang.ClassLoader)

setMBeanServer

public void setMBeanServer(MBeanServer mbs)

设置此连接器服务器所连接的 MBeanServer。新的客户端连接将与此 MBeanServer 交互。现有客户端连接不受影响。

参数:
mbs - 新的 MBeanServer。可以为 null,但将在尽可能长的时间内重用新的客户端连接。
另请参见:
getMBeanServer()

getMBeanServer

public MBeanServer getMBeanServer()

此连接器服务器所连接的 MBeanServer。这是传递给此对象上的 setMBeanServer(javax.management.MBeanServer) 的最后一个值,或者如果从未调用过该方法,则为 null。

返回:
此连接器所连接的 MBeanServer
另请参见:
setMBeanServer(javax.management.MBeanServer)

getVersion

public String getVersion()
从接口 RMIServer 复制的描述

此连接器服务器能识别的 RMI 连接协议版本。这是一个具有以下格式的字符串:

 protocol-version implementation-name
 

protocol-version 是由句点 (.) 分隔的两个或多个非负整数组成的序列。这里,此文档描述的这一版本的实现必须使用字符串 1.0

协议版本后面必须有一个空格,然后是实现名称。实现名称的格式未指定。建议在其中包含一个实现版本号。例如,出于安全原因,实现可使用空字符串作为其实现名称。

指定者:
接口 RMIServer 中的 getVersion
返回:
具有这里描述格式的字符串。

newClient

public RMIConnection newClient(Object credentials)
                        throws IOException

创建一个新的客户端连接。此方法调用 makeClient 并将返回的客户端连接对象添加到一个内部列表中。当此 RMIServerImpl 使用其 close() 方法被关闭时,将调用列表中剩余的每个对象的 close() 方法。

即使事实上一个客户端连接对象位于内部列表中,也不影响对其进行垃圾回收。

指定者:
接口 RMIServer 中的 newClient
参数:
credentials - 此对象指定用户定义的凭据,其传入此服务器以便在创建 RMIConnection 之前验证调用者。可以为 null。
返回:
新创建的 RMIConnection。这通常是由 makeClient 创建的对象,尽管实现可能选择将该对象包装在另一个实现 RMIConnection 的对象中。
抛出:
IOException - 如果无法创建或导出新的客户端对象。
SecurityException - 如果给定的凭据不允许服务器成功地验证用户。
IllegalStateException - 如果 getMBeanServer() 为 null。

makeClient

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

创建一个新的客户端连接。此方法由公共方法 newClient(Object) 调用。

参数:
connectionId - 新连接的 ID。由此连接器服务器打开的每个连接将具有不同的 ID。如果此参数为 null,则行为不明确。
subject - 经验证的 subject。可以为 null。
返回:
新创建的 RMIConnection
抛出:
IOException - 如果无法创建或导出新的客户端对象。

closeClient

protected abstract void closeClient(RMIConnection client)
                             throws IOException

关闭由 makeClient 建立的客户端连接。

参数:
client - 由 makeClient 以前返回的一个连接,以前尚未在其上调用过 closeClient 方法。如果违反这些条件,包括 client 为 null 的情况,则行为不明确。
抛出:
IOException - 如果无法关闭客户端连接。

getProtocol

protected abstract String getProtocol()

返回该对象的协议字符串。对于 RMI/JRMP,该字符串为 rmi;对于 RMI/IIOP,该字符串为 iiop

返回:
此对象的协议字符串。

clientClosed

protected void clientClosed(RMIConnection client)
                     throws IOException

关闭由 makeClient 创建的客户端连接时调用的方法。调用结果对象的 close 方法时,定义 makeClient 的子类必须安排此要调用的方法。这方便从 RMIServerImpl 的连接列表中将其移除。client 不在该列表中并不表示错误。

从连接列表中移除 client 后,此方法调用 closeClient(client)

参数:
client - 已关闭的客户端连接。
抛出:
IOException - 如果 closeClient(javax.management.remote.rmi.RMIConnection) 抛出此异常。
NullPointerException - 如果 client 为 null。

close

public void close()
           throws IOException

关闭此连接服务器。此方法首先调用 closeServer() 方法以便不接受任何新的客户端连接。然后对由 makeClient 返回的其余每个 RMIConnection 对象调用其 close 方法。

多次调用此方法时,行为不明确。

如果 closeServer() 抛出 IOException,会关闭每个单独的连接,然后从此方法抛出 IOException

如果 closeServer() 正常返回,但有一个或多个单独连接抛出 IOException,则在关闭所有的连接后,从此方法抛出其中的一个 IOException。如果有多个连接抛出 IOException,则无法确定哪一个异常是从此方法抛出的。

指定者:
接口 Closeable 中的 close
抛出:
IOException - 如果 closeServer()RMIConnection.close() 之一调用抛出了 IOException

closeServer

protected abstract void closeServer()
                             throws IOException

close() 调用以关闭连接器服务器。从此方法返回后,连接器服务器不接受任何新的连接。

抛出:
IOException - 如果关闭连接器服务器的尝试失败。