Class RMIConnectorServer

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

public class RMIConnectorServer extends JMXConnectorServer

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

自从:
1.5
  • Field Details

    • JNDI_REBIND_ATTRIBUTE

      public static final String JNDI_REBIND_ATTRIBUTE

      指定一个属性的名称,该属性指定表示RMI连接器服务器的RMIServer存根是否应该覆盖同一地址处的现有存根。与此属性关联的值(如果有)应为一个字符串,忽略大小写,等于"true""false"。默认值为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)中使用的格式相同。它可以定义允许的类的白名单、拒绝的类的黑名单、反序列化对象的最大深度等。

      为了使其功能正常,过滤器应至少允许所有在序列化所有JMX类作为参数在RMIConnection接口中引用的所有对象的传递闭包中的所有具体类型,以及客户端可能需要传输的所有类包装在marshalled objects中以与在MBeanServer中注册的MBeans进行交互。这可能包括所有具体的JMX OpenTypes及其在序列化形式中使用的类。

      在定义这样的过滤器时必须小心,因为定义太窄的白名单或太宽的黑名单可能会阻止合法客户端与JMXConnectorServer进行交互。

      参见:
  • Constructor Details

    • RMIConnectorServer

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

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

      参数:
      url - 定义如何创建连接器服务器的URL。不能为空。
      environment - 管理创建和存储RMI对象的属性。可以为null,相当于一个空Map。
      抛出:
      IllegalArgumentException - 如果url为null。
      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为null。
      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接口的实现,与url中指定的协议类型一致。如果此参数非null,则url指定的协议类型不受限制,被认为是有效的。否则,仅当rmiServerImpl为null时才会识别"rmi"。
      mbeanServer - 新连接器服务器附加到的MBean服务器,如果将其注册为MBean在MBean服务器中,则为null。
      抛出:
      IllegalArgumentException - 如果url为null。
      MalformedURLException - 如果url不符合RMI连接器的语法,或者其协议未被此实现识别。仅当rmiServerImpl为null时,才会识别"rmi"。
      IOException - 如果由于某种原因无法创建连接器服务器,或者其start方法将失败。
      参见:
  • Method Details

    • 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地址的URL路径中(由getAddress()返回)。有关rmi的编码,请参阅javax.management.remote.rmi包文档。

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

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

      public void stop() throws IOException

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

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

      当连接器服务器已经停止时调用此方法不会产生任何效果。当连接器服务器尚未启动时调用此方法将永久禁用连接器服务器对象。

      如果关闭客户端连接产生异常,则此方法不会抛出异常。从此方法中发出一个JMXConnectionNotification,其中包含无法关闭的连接的连接ID。

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

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

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

      抛出:
      IOException - 如果服务器无法干净地关闭,或者RMIServerImpl无法从目录中解绑。当抛出此异常时,服务器已尝试关闭所有客户端连接(如果适用);调用RMIServerImpl.close();并解绑RMIServerImpl从其目录(如果适用)。所有客户端连接都已关闭,除非在服务器尝试关闭它们时生成异常。
    • isActive

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

      确定连接器服务器是否处于活动状态。当连接器服务器的start方法成功返回时,连接器服务器开始处于活动状态,并保持活动状态,直到调用其stop方法或连接器服务器失败。

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

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

      此连接器服务器的地址。

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

      请注意,如果JMXConnectorServer尚未active,则返回的地址可能为null

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

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

      此连接器服务器的属性。

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