模块  java.management
软件包  javax.management

Class ObjectName

  • 实现的所有接口
    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不是模式,则它必须至少包含一个具有关联值的键。

    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:

    • 域名。
    • 结肠( : )。
    • 如下定义的关键属性列表。

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

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

    空间在表示ObjectName的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
        使用一个键属性构造一个对象名称。
        参数
        domain - 对象名称的域部分。
        key - 对象名称的键属性中的属性。
        value - 对象名称的key属性中的值。
        异常
        MalformedObjectNameException -该 domainkey ,或 value含有非法字符,或 value不遵守规则的引用,或域的长度超过允许的最大长度。
        NullPointerException - 其中一个参数为null。
      • ObjectName

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

      • getInstance

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

        返回一个ObjectName实例,可以在任何可以使用new ObjectName(domain, key, value)获取的对象的地方使用。 返回的对象可以是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

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

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

        public static ObjectName getInstance​(ObjectName name)

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

        返回值可能与name相同,也可能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()

        返回对象名称的字符串表示形式。 未指定此字符串的格式,但是当且仅当它们相等时,用户才能期望两个ObjectNames返回相同的字符串。

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

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

        public static String quote​(String s)

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

        返回值由引号('“'),与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无法返回 q ,例如,如果它没有以引号(“)开头和结尾。
        NullPointerException - 如果 q为空。
      • apply

        public boolean apply​(ObjectName name)

        测试此ObjectName(可能是模式)是否与另一个ObjectName匹配。 如果name是模式,则结果为false。 如果此ObjectName是模式,则当且仅当name与模式匹配时,结果为true。 如果此ObjectName和name是模式,则当且仅当两个ObjectNames等于equals(Object)方法时,结果才为真。

        Specified by:
        apply在界面 QueryExp
        参数
        name - 要比较的MBean的名称。
        结果
        如果 name与此ObjectName匹配, name True。
        异常
        NullPointerException - 如果 name为空。
      • 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