类 RMIConnectorServer

所有已实现的接口:
MBeanRegistration , NotificationBroadcaster , NotificationEmitter , JMXAddressable , JMXConnectorServerMBean

public class RMIConnectorServer extends JMXConnectorServer

一个 JMX API 连接器服务,它从远程客户端创建基于 RMI 的连接。通常,此类连接器服务是使用 JMXConnectorServerFactory 制作的。但是,专门的应用程序可以直接使用此类,例如使用 RMIServerImpl 对象。

自从:
1.5
  • 字段详细信息

    • JNDI_REBIND_ATTRIBUTE

      public static final String  JNDI_REBIND_ATTRIBUTE

      指定表示 RMI 连接器服务的 RMIServer 存根是否应覆盖同一地址的现有存根的属性名称。与此属性关联的值(如果有)应该是一个等于 "true""false" 的字符串,忽略大小写。默认值为假。

      参见:
    • RMI_CLIENT_SOCKET_FACTORY_ATTRIBUTE

      public static final String  RMI_CLIENT_SOCKET_FACTORY_ATTRIBUTE

      为与此连接器一起创建的 RMI 对象指定 RMIClientSocketFactory 的属性名称。与此属性关联的值必须是 RMIClientSocketFactory 类型,并且只能在创建连接器服务时提供的 Map 参数中指定。

      参见:
    • RMI_SERVER_SOCKET_FACTORY_ATTRIBUTE

      public static final String  RMI_SERVER_SOCKET_FACTORY_ATTRIBUTE

      为与此连接器一起创建的 RMI 对象指定 RMIServerSocketFactory 的属性名称。与此属性关联的值必须是 RMIServerSocketFactory 类型,并且只能在创建连接器服务时提供的 Map 参数中指定。

      参见:
    • CREDENTIALS_FILTER_PATTERN

      public static final String  CREDENTIALS_FILTER_PATTERN
      指定 ObjectInputFilter 模式字符串以过滤 RMIServer.newClient() 远程方法调用可接受的类的属性名称。

      过滤器模式必须与 ObjectInputFilter.Config.createFilter(java.lang.String) 中使用的格式相同

      此过滤器允许的类列表应对应于与 RMIServer 实现相关联的已安装 JMXAuthenticator 使用的凭证类(或多个类)的传递闭包。如果未设置该属性,则任何类都被认为是可接受的。

      参见:
    • SERIAL_FILTER_PATTERN

      public static final String  SERIAL_FILTER_PATTERN
      此属性定义了一个模式,从中创建一个 ObjectInputFilter 将在反序列化任何客户端发送到 JMXConnectorServer 的对象时使用。

      对于在客户端发送给服务的序列化流中找到的任何类,将调用过滤器,包括所有 JMX 定义的类(例如 ObjectName ),所有方法参数,以及如果存在于流中,则由串行形式传递引用的所有类任何反序列化的对象。该模式必须与 ObjectInputFilter.Config.createFilter(java.lang.String) 中使用的格式相同。它可以定义允许类的允许列表、拒绝类的拒绝列表、反序列化对象的最大深度等。

      为了发挥作用,过滤器应该至少允许所有对象的传递闭包中的所有具体类型,这些对象在序列化 RMIConnection 接口中称为参数的所有 JMX 类时可能被序列化,加上 client 可能需要传输的所有类编组对象 以便与 MBeanServer 中注册的 MBean 进行互操作。这可能包括所有具体的 JMX OpenTypes 和它们以串行形式使用的类。

      定义此类过滤器时必须小心,因为定义太窄的允许列表或太宽的拒绝列表可能会阻止合法客户端与 JMXConnectorServer 进行互操作。

      参见:
  • 构造方法详细信息

    • RMIConnectorServer

      public RMIConnectorServer(JMXServiceURL  url, Map <String ,?> environment) throws IOException

      制作一个 RMIConnectorServer 。这相当于调用 RMIConnectorServer(directoryURL,environment,null,null)

      参数:
      url - 定义如何创建连接器服务的 URL。不能为空。
      environment - 管理 RMI 对象的创建和存储的属性。可以为null,相当于一个空的Map。
      抛出:
      IllegalArgumentException - 如果 url 为空。
      MalformedURLException - 如果 url 不符合 RMI 连接器的语法,或者如果此实现无法识别其协议。使用此构造函数时,只有“rmi”有效。
      IOException - 如果由于某种原因无法创建连接器服务,或者它的 start 方法不可避免地会失败。
    • RMIConnectorServer

      public RMIConnectorServer(JMXServiceURL  url, Map <String ,?> environment, MBeanServer  mbeanServer) throws IOException

      为给定的 MBean 服务创建一个 RMIConnectorServer。这相当于调用 RMIConnectorServer(directoryURL,environment,null,mbeanServer)

      参数:
      url - 定义如何创建连接器服务的 URL。不能为空。
      environment - 管理 RMI 对象的创建和存储的属性。可以为null,相当于一个空的Map。
      mbeanServer - 新连接器服务附加到的 MBean 服务,如果它将通过在 MBean 服务中注册为 MBean 来附加,则为 null。
      抛出:
      IllegalArgumentException - 如果 url 为空。
      MalformedURLException - 如果 url 不符合 RMI 连接器的语法,或者如果此实现无法识别其协议。使用此构造函数时,只有“rmi”有效。
      IOException - 如果由于某种原因无法创建连接器服务,或者它的 start 方法不可避免地会失败。
    • RMIConnectorServer

      public RMIConnectorServer(JMXServiceURL  url, Map <String ,?> environment, RMIServerImpl  rmiServerImpl, MBeanServer  mbeanServer) throws IOException

      为给定的 MBean 服务创建一个 RMIConnectorServer

      参数:
      url - 定义如何创建连接器服务的 URL。不能为空。
      environment - 管理 RMI 对象的创建和存储的属性。可以为null,相当于一个空的Map。
      rmiServerImpl - RMIServer接口的实现,与指定的协议类型一致网址.如果该参数不为空,则为指定的协议类型网址不受约束,并假定为有效。否则,只会识别“rmi”。
      mbeanServer - 新连接器服务附加到的 MBean 服务,如果它将通过在 MBean 服务中注册为 MBean 来附加,则为 null。
      抛出:
      IllegalArgumentException - 如果 url 为空。
      MalformedURLException - 如果 url 不符合 RMI 连接器的语法,或者如果此实现无法识别其协议。只有“rmi”被识别时rmiServerImpl一片空白。
      IOException - 如果由于某种原因无法创建连接器服务,或者它的 start 方法不可避免地会失败。
      参见:
  • 方法详情

    • toJMXConnector

      public JMXConnector  toJMXConnector(Map <String ,?> env) throws IOException

      返回此连接器服务的客户端存根。客户端存根是一个可序列化的对象,其 connect 方法可用于与此连接器服务建立新连接。

      指定者:
      toJMXConnector 在接口 JMXConnectorServerMBean
      重写:
      toJMXConnector 在类 JMXConnectorServer
      参数:
      env - 可以提供给 JMXConnector.connect(Map) 的同类客户端连接参数。可以为null,相当于一个空map。
      返回:
      可用于与此连接器服务建立新连接的客户端存根。
      抛出:
      UnsupportedOperationException - 如果此连接器服务不支持生成客户端存根。
      IllegalStateException - 如果 JMXConnectorServer 未启动(请参阅 isActive() )。
      IOException - 如果通信问题意味着无法创建存根。
    • start

      public void start() throws IOException

      激活连接器服务,即开始监听客户端连接。在连接器服务已处于活动状态时调用此方法无效。在连接器服务停止时调用此方法将生成一个 IOException

      第一次调用此方法时的行为取决于构造时提供的参数,如下所述。

      首先,需要一个 RMIServerImpl 子类的对象,通过 RMI 导出连接器服务:

      • 如果将 RMIServerImpl 提供给构造函数,则使用它。
      • 否则,如果 JMXServiceURL 为 null,或其协议部分为 rmi,则创建 RMIJRMPServerImpl 类型的对象。
      • 否则,实现可以创建特定于实现的 RMIServerImpl 或者它可以抛出 MalformedURLException

      如果给定地址包含 javax.management.remote.rmi 包文档中指定的 JNDI 目录 URL,则此 RMIConnectorServer 将通过将 RMIServerImpl 绑定到给定地址来引导。

      如果 JMXServiceURL 的 URL 路径部分为空或单个斜杠 (/),则 RMI 对象将不会绑定到目录。相反,对它的引用将在 RMIConnectorServer 地址(由 getAddress() 返回)的 URL 路径中编码。 rmi 的编码在 javax.management.remote.rmi 的包文档中进行了描述。

      当 URL 路径既不是空的也不是 JNDI 目录 URL 或协议不是 rmi 时的行为是实现定义的,并且可能包括在连接器服务创建或启动时抛出 MalformedURLException

      抛出:
      IllegalStateException - 如果连接器服务尚未连接到 MBean 服务。
      IOException - 如果无法启动连接器服务。
    • stop

      public void stop() throws IOException

      停用连接器服务,即停止监听客户端连接。调用此方法还将关闭此服务建立的所有客户端连接。此方法返回后,无论是正常还是异常,连接器服务都不会创建任何新的客户端连接。

      连接器服务一旦停止,就无法再次启动。

      在连接器服务已停止时调用此方法无效。在连接器服务尚未启动时调用此方法将永久禁用连接器服务对象。

      如果关闭客户端连接产生异常,则该方法不会抛出该异常。一个 JMXConnectionNotification 从此 MBean 发出,带有无法关闭的连接的连接 ID。

      关闭连接器服务是一个可能很慢的操作。例如,如果打开连接的客户端机器崩溃了,关闭操作可能必须等待网络协议超时。不想阻塞关闭操作的调用者应该在单独的线程中执行。

      此方法调用连接器服务的 RMIServerImpl 对象上的方法 close

      如果 RMIServerImpl 已通过 start 方法绑定到 JNDI 目录,则它会通过此方法从目录中解除绑定。

      抛出:
      IOException - 如果服务无法完全关闭,或者如果 RMIServerImpl 无法从目录中解除绑定。抛出此异常时,服务已经尝试关闭所有客户端连接(如果合适);打电话给 RMIServerImpl.close() ;并在适当的情况下从其目录中取消绑定 RMIServerImpl。所有客户端连接都已关闭,除了那些在服务试图关闭它们时可能生成异常的连接。
    • isActive

      public boolean isActive()
      从接口 JMXConnectorServerMBean 复制的描述

      确定连接器服务是否处于活动状态。连接器服务在其 start 方法成功返回时开始处于活动状态,并保持活动状态直到其 stop 方法被调用或连接器服务发生故障。

      返回:
      如果连接器服务处于活动状态,则为真。
    • getAddress

      public JMXServiceURL  getAddress()
      从接口 JMXConnectorServerMBean 复制的描述

      此连接器服务的地址。

      返回的地址可能与创建连接器服务时提供的原始地址不完全相同,因为原始地址可能并不总是完整的。例如,端口号可以在启动连接器服务时动态分配。相反,返回的地址是 JMXConnectorServer 的实际 JMXServiceURL 。这是客户端提供给 JMXConnectorFactory.connect(JMXServiceURL) 的地址。

      请注意,如果 JMXConnectorServer 还不是 active ,则返回的地址可能是 null

      返回:
      此连接器服务的地址,如果没有,则为 null。
    • getAttributes

      public Map <String ,?> getAttributes()
      从接口 JMXConnectorServerMBean 复制的描述

      此连接器服务的属性。

      返回:
      包含此连接器服务属性的只读映射。此map中省略了其值不可序列化的属性。如果没有可序列化的属性,则返回的映射为空。