类 RMIServerImpl

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

public abstract class RMIServerImpl extends Object implements Closeable , RMIServer

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

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

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

自从:
1.5
  • 构造方法详细信息

    • RMIServerImpl

      public RMIServerImpl(Map <String ,?> env)

      构造一个新的 RMIServerImpl .

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

    • 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。可以为空,但只要为空,新的客户端连接就会被拒绝。
      参见:
    • 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 之前对调用者进行身份验证。可以为空。
      返回:
      新创建的 RMIConnection 。这通常是由 makeClient 创建的对象,尽管实现可能会选择将该对象包装在另一个实现 RMIConnection 的对象中。
      抛出:
      IOException - 如果无法创建或导出新的客户端对象。
      SecurityException - 如果给定的凭据不允许服务成功验证用户。
      IllegalStateException - 如果 getMBeanServer() 为空。
    • makeClient

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

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

      参数:
      connectionId - 新连接的 ID。此连接器服务打开的每个连接都将具有不同的 ID。如果此参数为空,则行为未指定。
      subject - 经过身份验证的主题。可以为空。
      返回:
      新创建的 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

      返回:
      此对象的协议字符串。
    • 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 为空。
    • 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 - 如果尝试关闭连接器服务失败。