Module  java.management
软件包  javax.management

Class ObjectName

  • All Implemented Interfaces:
    SerializableComparable<ObjectName>QueryExp


    public class ObjectName
    extends Object
    implements Comparable<ObjectName>, QueryExp

    表示MBean的对象名称,或可匹配多个MBean名称的模式。 这个类的实例是不可变的。

    这个类的一个实例可以用来表示:

    • 对象名称
    • 在查询的上下文中的对象名称模式

    对象名称由域和关键属性两部分组成。

    是不包括字符冒号( : )的字符串。 建议域名不能包含字符串“ // ”,留作将来使用。

    如果域至少包含一个通配符( * )或问号( ? ),则对象名称是一个模式。 星号匹配任何零个或多个字符的序列,而问号匹配任何单个字符。

    如果域为空,则将在特定上下文中使用使用ObjectName的MBean服务器的默认域替换该

    关键属性是一组无序的键和关联值。

    每个是一个非空字符串,可能不包含任何字符逗号( , ),等号( = ),冒号,星号或问号。 相同的键在给定的ObjectName中可能不会发生两次。

    与密钥相关联的每个都是一个字符串,不管是引用还是引用。

    未引用的值是可能为空的字符串,可能不包含任何逗号,等号,冒号或引号的字符。

    如果未引用的值至少包含一个通配符字符的星号或问号,则对象名称是属性值模式 星号匹配任何零个或多个字符的序列,而问号匹配任何单个字符。

    引用的值由一个引号( " )组成,后跟一个可能为空的字符串,后跟另一个引号。 在字符串中,反斜杠( \ )具有特殊的含义。 它之后必须是以下字符之一:

    • 另一个反斜杠 第二个反斜杠没有特殊意义,两个字符表示单个反斜杠。
    • 字符“n”。 两个字符代表一个换行符(Java中的'\ n')。
    • 报价。 两个字符代表一个报价,该报价不被视为终止引用的值。 必须存在结尾的报价才能使引用的值有效。
    • 一个问号(?)或星号(*)。 两个字符分别代表一个问号或星号。

    报价可能不会出现在引用的值内,除了在奇数个连续反斜杠之后。

    引用值周围的引号和该值中的任何反斜杠都被认为是该值的一部分。

    如果引用的值至少包含一个字符星号或问号,并且它们之前没有反斜杠,则它们被视为通配符,对象名称是属性值模式 星号匹配任何零个或多个字符的序列,而问号匹配任何单个字符。

    ObjectName可以是属性列表模式 在这种情况下,它可能具有零个或多个键和相关联的值。 它与域匹配的非模式ObjectName匹配,并且包含相同的键和关联值以及可能的其他键和值。

    当至少其中一个引用或未引用的键属性值包含如上所述的通配符号星号或问号时,ObjectName是属性值模式 在这种情况下,它具有一个或多个键和关联值,其中至少一个值包含通配符。 它与域匹配的非模式ObjectName匹配,并且包含值匹配的相同键; 如果属性值模式也是属性列表模式,则非模式ObjectName可以包含其他键和值。

    如果ObjectName是属性列表模式属性值模式或两者,则ObjectName是属性模式

    ObjectName是一个模式,如果其域包含一个通配符,或者ObjectName是一个属性模式。

    如果ObjectName不是模式,则它必须至少包含一个具有关联值的键。

    ObjectName模式的示例有:

    • *:type=Foo,name=Bar匹配任何域的名称,其精确的键集是type=Foo,name=Bar
    • d:type=Foo,name=Bar,*以匹配域d中具有type=Foo,name=Bar键加上零个或多个其他键的名称。
    • *:type=Foo,name=Bar,*以匹配任何具有键type=Foo,name=Bar加上零个或多个其他键的域中的名称。
    • d:type=F?o,name=Bar将匹配例如d:type=Foo,name=Bard:type=Fro,name=Bar
    • d:type=F*o,name=Bar将匹配例如d:type=Fo,name=Bard:type=Frodo,name=Bar
    • d:type=Foo,name="B*"将匹配,例如d:type=Foo,name="Bling" 通配符即使在引号内也被识别,像其他特殊字符一样可以用\进行转义。

    ObjectName可以按照以下元素的字符串形式编写:

    • 域名。
    • 冒号( : )。
    • 以下定义的关键属性列表。

    以String形式写入的关键属性列表是以逗号分隔的元素列表。 每个元素都是星号或密钥属性。 密钥属性由密钥,等号( = )和关联值组成。

    密钥属性列表中的最多一个元素可能是星号。 如果键属性列表包含星号元素,则ObjectName是属性列表模式。

    空格在表示ObjectName的String中没有特殊的意义。 例如,String:

      domain: key1 = value1 , key2 = value2 
    表示具有两个键的ObjectName。 每个键的名称包含六个字符,其中第一个和最后一个是空格。 与键" key1 "相关联的值也以空格开头和结尾。

    除了对上述拼写的字符的限制之外,ObjectName的任何部分都不能包含换行字符( '\n' ),无论是域,键还是值,无论是引用还是不引用。 换行符可以用引用的值\n

    无论使用哪个构造函数来创建ObjectName,对特殊字符和引用的规则都适用。

    为了避免不同供应商提供的MBean之间的冲突,一个有用的约定是使用指定MBean的组织的反向DNS名称开始域名,后跟一个句点和一个字符串,其解释由该组织决定。 例如,由example.com指定的example.com将具有域com.example.MyDomain 这与Java语言包名称基本相同。

    该类的serialVersionUID1081892073854801359L

    Implementation Note:
    此实现中域名的最大允许长度为 Integer.MAX_VALUE/4
    从以下版本开始:
    1.5
    另请参见:
    Serialized Form
    • 字段详细信息

      • WILDCARD

        public static final ObjectName WILDCARD
        定义通配符“*:*”ObjectName。
        从以下版本开始:
        1.6
    • 构造方法详细信息

      • ObjectName

        public ObjectName​(String domain,
                          String key,
                          String value)
                   throws MalformedObjectNameException
        用一个key属性构造对象名。
        参数
        domain - 对象名称的域部分。
        key - 对象名称的key属性中的属性。
        value - 对象名称的key属性中的值。
        异常
        MalformedObjectNameException -该 domainkey ,或 value包含非法字符,或者 value不遵守规则的引用,或域的长度超过允许的最大长度。
        NullPointerException - 其中一个参数为空。
      • ObjectName

        public ObjectName​(String domain,
                          Hashtable<String,String> table)
                   throws MalformedObjectNameException
        从Hashtable构造具有多个关键属性的对象名称。
        参数
        domain - 对象名称的域部分。
        table - 包含一个或多个关键属性的哈希表。 表中每个条目的键是对象名称中的键属性的键。 表中的关联值是对象名称中的关联值。
        异常
        MalformedObjectNameException -该 domain包含非法字符,或者在键或值的一个 table包含非法字符,或者在其中一个值 table不遵守规则的引用,或域的长度超过允许的最大长度。
        NullPointerException - 其中一个参数为空。
    • 方法详细信息

      • getInstance

        public static ObjectName getInstance​(String domain,
                                             String key,
                                             String value)
                                      throws MalformedObjectNameException

        返回可以在任何可以使用new ObjectName(domain, key, value)获得的对象的任何地方使用的ObjectName实例。 返回的对象可能是ObjectName的子类。 使用相同参数调用此方法两次可能会返回相同的对象或两个相等但不相同的对象。

        参数
        domain - 对象名称的域部分。
        key - 对象名称的key属性中的属性。
        value - 对象名称的key属性中的值。
        结果
        对应于给定域,键和值的ObjectName。
        异常
        MalformedObjectNameException -该 domainkey ,或 value包含非法字符,或者 value不遵守规则的引用,或域的长度超过允许的最大长度。
        NullPointerException - 其中一个参数为null。
      • getInstance

        public static ObjectName getInstance​(String domain,
                                             Hashtable<String,String> table)
                                      throws MalformedObjectNameException

        返回一个可以在任何可以使用new ObjectName(domain, table)获得的对象的地方使用的ObjectName实例。 返回的对象可能是ObjectName的子类。 使用相同参数调用此方法两次可能会返回相同的对象或两个相等但不相同的对象。

        参数
        domain - 对象名称的域部分。
        table - 包含一个或多个关键属性的哈希表。 表中每个条目的键是对象名称中的键属性的键。 表中的关联值是对象名称中的关联值。
        结果
        一个与给定域对应的ObjectName和键映射。
        异常
        MalformedObjectNameException -该 domain包含非法字符,或者在键或值的一个 table包含非法字符,或者在其中一个值 table不遵守规则的引用,或域的长度超过允许的最大长度。
        NullPointerException - 其中一个参数为null。
      • getInstance

        public static ObjectName getInstance​(ObjectName name)

        返回可以在给定对象可以使用的任何地方使用的ObjectName实例。 返回的对象可能是ObjectName的子类。 如果name是ObjectName的子类,则不能保证返回的对象将是同一个类。

        返回的值可能与name也可能不相同。 使用相同参数调用此方法两次可能会返回相同的对象或两个相等但不相同的对象。

        由于ObjectName是不可变的,所以制作ObjectName的副本通常不是有用的。 这种方法的主要用途是防范可能传递具有令人惊讶的行为的子类的实例的敏感代码的恶意调用者。 这样的代码可以调用此方法来获取一个已知不具有令人惊讶的行为的ObjectName。

        参数
        name - ObjectName类或子类的实例
        结果
        ObjectName的实例或已知具有相同语义的子类。 如果name遵循ObjectName的语义,那么返回的对象与name相等(尽管不一定相同)。
        异常
        NullPointerException - name为空。
      • isPattern

        public boolean isPattern​()
        检查对象名称是否为模式。

        对象名称是一个模式,如果其域包含通配符,或者对象名称是属性模式。

        结果
        如果名称是模式,则为true,否则为false。
      • isDomainPattern

        public boolean isDomainPattern​()
        检查对象名称是否是域部件上的模式。
        结果
        如果名称是域模式,则为true,否则为false。
      • isPropertyPattern

        public boolean isPropertyPattern​()
        检查对象名称是否是关键属性上的模式。

        如果对象名称是键属性列表上的模式(例如“d:k = v,*”)或属性值(例如“d:k = *”)或两者(例如“d:k = *,*”)。

        结果
        如果名称是属性模式,则为true,否则为false。
      • isPropertyListPattern

        public boolean isPropertyListPattern​()
        检查对象名称是否是密钥属性列表上的模式。

        例如,“d:k = v,*”和“d:k = *,*”是关键属性列表模式,而“d:k = *”不是。

        结果
        如果名称是属性列表模式,则为true,否则为false。
        从以下版本开始:
        1.6
      • isPropertyValuePattern

        public boolean isPropertyValuePattern​()
        检查对象名称是否是至少一个关键属性的值部分上的模式。

        例如,“d:k = *”和“d:k = *,*”是属性值模式,而“d:k = v,*”不是。

        结果
        如果名称是属性值模式,则为true,否则为false。
        从以下版本开始:
        1.6
      • isPropertyValuePattern

        public boolean isPropertyValuePattern​(String property)
        检查与键属性中的键相关联的值是否为模式。
        参数
        property - 要检查其值的属性。
        结果
        如果与给定键属性相关联的值是模式,则为True,否则为false。
        异常
        NullPointerException - 如果 property为空。
        IllegalArgumentException - 如果 property不是此ObjectName的有效键属性。
        从以下版本开始:
        1.6
      • getCanonicalName

        public String getCanonicalName​()

        返回名称的规范形式; 也就是字符串表示,其中属性按词法顺序排序。

        更准确地说,名称的规范形式是由域部分 ,冒号( : ), 规范密钥属性列表模式指示组成的字符串。

        规范密钥属性列表getCanonicalKeyPropertyListString()所述的字符串相同。

        模式指示为:

        • 对于不是属性列表模式的ObjectName,为空;
        • ObjectName的一个星号,是一个没有键的属性列表模式; 要么
        • 用于具有至少一个键的属性列表模式的ObjectName的逗号和星号( ,* )。
        结果
        名称的规范形式。
      • getDomain

        public String getDomain​()
        返回域部分。
        结果
        域名。
      • getKeyProperty

        public String getKeyProperty​(String property)
        获取与键属性中的键相关联的值。
        参数
        property - 要获取其值的属性。
        结果
        该属性的值,如果此ObjectName中没有此类属性,则为null。
        异常
        NullPointerException - 如果 property为空。
      • getKeyPropertyList

        public Hashtable<String,String> getKeyPropertyList​()

        将关键属性作为Hashtable返回。 返回的值是一个Hashtable,其中每个键是ObjectName的键属性列表中的一个键,每个值都是相关联的值。

        返回的值可能是不可修改的。 如果它是可修改的,更改它对此ObjectName没有影响。

        结果
        关键属性表。
      • getKeyPropertyListString

        public String getKeyPropertyListString​()

        返回在创建时指定的关键属性列表的字符串表示形式。 如果此ObjectName是使用构造函数ObjectName(String)构造的,则返回的String中的键属性将与构造函数的参数的顺序相同。

        结果
        关键属性列表字符串。 该字符串与ObjectName是否为模式无关。
      • getCanonicalKeyPropertyListString

        public String getCanonicalKeyPropertyListString​()
        返回键属性列表的字符串表示形式,其中键属性按词法顺序排序。 这是用于执行的词典比较,以便根据其关键属性列表来选择MBean。 词汇顺序是String.compareTo(String)所暗示的顺序
        结果
        规范键属性列表字符串。 该字符串与ObjectName是否为模式无关。
      • toString

        public String toString​()

        返回对象名称的字符串表示形式。 未指定此字符串的格式,但是当用户只能在相同的情况下,用户可以期望两个ObjectName返回相同的字符串。

        重写:
        toStringObject
        结果
        该对象名称的字符串表示形式。
      • equals

        public boolean equals​(Object object)
        将当前对象名称与另一个对象名称进行比较。 当且仅当它们的规范形式相等时,两个ObjectName实例是相等的。 规范形式是getCanonicalName()描述的字符串。
        重写:
        equalsObject
        参数
        object - 要与当前对象名称进行比较的对象名称。
        结果
        如果 object是一个ObjectName,其规范形式等于该ObjectName的ObjectName, object true。
        另请参见:
        Object.hashCode()HashMap
      • quote

        public static String quote​(String s)

        返回给定String的引用形式,适合包含在ObjectName中。 返回的值可以用作与ObjectName中的键相关联的值。 字符串s可能包含任何字符。 适当的引用确保返回的值在ObjectName中是合法的。

        返回值包含一个引号('''),一个与s的字符对应的字符s ,另一个引号, s字符在返回值中不变,除了

        • 一个引号(''')被一个反斜杠(\)替换为一个引号。
        • 星号('*')替换为反斜杠(\),后跟星号。
        • 一个问号('?')被一个反斜杠(\)替换,后跟一个问号。
        • 反斜杠('\')替换为两个反斜杠。
        • 换行字符(Java中的字符“\ n”)由反斜杠替换,后跟字符“\ n”。
        参数
        s - 要引用的字符串。
        结果
        引用的字符串。
        异常
        NullPointerException - 如果 s为空。
      • unquote

        public static String unquote​(String q)

        返回给定String的无引号形式。 如果q是由quote(s)返回的字符串unquote(q).equals(s) 如果没有字符串s为其quote(s).equals(q) ,然后引文结束(Q)抛出IllegalArgumentException。

        这些规则意味着引用和非引用形式之间存在一对一映射。

        参数
        q - 要引用的字符串。
        结果
        无引号的字符串。
        异常
        IllegalArgumentException - 如果 q无法由 quote(java.lang.String)方法返回,例如,如果它不以引号(“)开头和结尾。
        NullPointerException - 如果 q为空。
      • apply

        public boolean apply​(ObjectName name)

        测试这个ObjectName(可能是一个模式)是否匹配另一个ObjectName。 如果name是模式,则结果为false。 如果此ObjectName是模式,则当且仅当name匹配模式时,结果为true。 如果此ObjectName和name是模式,则当且仅当两个ObjectName与equals(Object)方法所述相同时,结果为true。

        Specified by:
        apply在接口 QueryExp
        参数
        name - 要比较的MBean的名称。
        结果
        如果 name与此ObjectName匹配, name真。
        异常
        NullPointerException - 如果 name为空。
      • setMBeanServer

        public void setMBeanServer​(MBeanServer mbs)
        描述从接口QueryExp复制
        设置要执行查询的MBean服务器。
        Specified by:
        setMBeanServer在接口 QueryExp
        参数
        mbs - 要执行查询的MBean服务器。
      • compareTo

        public int compareTo​(ObjectName name)

        比较两个ObjectName实例。 ObjectNames之间的排序关系并未完全指定,而是旨在使ObjectNames的排序列表按照一个方便用户阅读的顺序出现。

        特别地,如果两个ObjectName实例具有不同的域,则它们的顺序是域的字典顺序。 密钥属性列表的顺序仍然未指定。

        例如,下面的ObjectName实例:

        • 形状:类型=广场,名字= 3
        • 颜色:类型=红色,名称= 2
        • 形状:类型=三角,侧=等腰,姓名= 2
        • 颜色:类型=红色,名称= 1
        • 形状:类型=广场,名字= 1
        • 颜色:类型=蓝色,姓名= 1
        • 形状:类型=广场,名字= 2
        • JMImplementation:类型=的MBeanServerDelegate
        • 形状:类型=三角,侧=斜角肌,姓名= 1

        可以订购如下:

        • 颜色:类型=蓝色,姓名= 1
        • 颜色:类型=红色,名称= 1
        • 颜色:类型=红色,名称= 2
        • JMImplementation:类型=的MBeanServerDelegate
        • 形状:类型=广场,名字= 1
        • 形状:类型=广场,名字= 2
        • 形状:类型=广场,名字= 3
        • 形状:类型=三角,侧=斜角肌,姓名= 1
        • 形状:类型=三角,侧=等腰,姓名= 2
        Specified by:
        compareTo在接口 Comparable<ObjectName>
        参数
        name - 要比较的ObjectName。
        结果
        负整数,零或正整数,因为此ObjectName小于,等于或大于指定的ObjectName。
        从以下版本开始:
        1.6