Class RMIServerImpl

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

public abstract class RMIServerImpl extends Object implements Closeable, RMIServer

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

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

这是一个抽象类。具体的子类定义了客户端连接对象的详细信息。

自版本:
1.5
  • Constructor Details

    • RMIServerImpl

      public RMIServerImpl(Map<String,?> env)

      构造一个新的RMIServerImpl

      参数:
      env - 包含新RMIServerImpl属性的环境。可以为null,相当于一个空Map。
  • Method Details

    • export

      protected abstract void export() throws IOException

      导出此RMI对象。

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

      public abstract Remote toStub() throws IOException
      返回此服务器对象的可远程存根。
      返回:
      一个可远程存根。
      抛出:
      IOException - 如果无法获取存根 - 例如RMIServerImpl尚未导出。
    • setDefaultClassLoader

      public void setDefaultClassLoader(ClassLoader cl)

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

      参数:
      cl - 要由此连接器服务器使用的新ClassLoader
      参见:
    • getDefaultClassLoader

      public ClassLoader getDefaultClassLoader()

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

      返回:
      此连接器服务器使用的默认ClassLoader
      参见:
    • setMBeanServer

      public void setMBeanServer(MBeanServer mbs)

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

      参数:
      mbs - 新的MBeanServer。可以为null,但只要为null,新的客户端连接将被拒绝。
      参见:
    • getMBeanServer

      public MBeanServer getMBeanServer()

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

      返回:
      此连接器附加的MBeanServer
      参见:
    • getVersion

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

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

       protocol-version implementation-name
       

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

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

      指定者:
      getVersion 在接口 RMIServer
      返回:
      符合此处描述的格式的字符串。
    • newClient

      public RMIConnection newClient(Object credentials) throws IOException

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

      客户端连接对象在此内部列表中并不阻止其被垃圾回收。

      指定者:
      newClient 在接口 RMIServer
      参数:
      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 - 经过身份验证的主体。可以为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表示RMI/JRMP。

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

      protected void clientClosed(RMIConnection client) throws IOException

      当由makeClient创建的客户端连接关闭时调用的方法。定义了makeClient的子类必须安排在结果对象的close方法被调用时调用此方法。这使得它可以从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,则未指定从此方法抛出哪一个。

      指定者:
      close 在接口 AutoCloseable
      指定者:
      close 在接口 Closeable
      抛出:
      IOException - 如果closeServer()或一个RMIConnection.close()调用抛出IOException
    • closeServer

      protected abstract void closeServer() throws IOException

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

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