Module java.management
Package javax.management

Class ObjectName

java.lang.Object
javax.management.ObjectName
所有已实现的接口:
Serializable, Comparable<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,* 匹配具有键type=Foo,name=Bar加零个或多个其他键的域d中的名称。
  • *: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可以被写为一个字符串,其中包含以下元素:

  • 域。
  • 一个冒号(:)。
  • 如下所定义的键属性列表。

作为字符串编写的键属性列表是一个逗号分隔的元素列表。每个元素要么是一个星号,要么是一个键属性。键属性由键、等号(=)和关联值组成。

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

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

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

除了上述字符的限制外,ObjectName的任何部分都不得包含换行字符('\n'),无论是域、键还是值,无论是引用还是未引用。换行字符可以在引用值中用序列\n表示。

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

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

此类的serialVersionUID1081892073854801359L

实现注意:
此实现中域名的最大允许长度为Integer.MAX_VALUE/4
自:
1.5
参见:
  • Field Details

    • WILDCARD

      public static final ObjectName WILDCARD
      定义通配符"*:*"的ObjectName。
      自:
      1.6
  • Constructor Details

    • ObjectName

      public ObjectName(String name) throws MalformedObjectNameException
      从给定字符串构造对象名称。
      参数:
      name - 对象名称的字符串表示形式。
      抛出:
      MalformedObjectNameException - 作为参数传递的字符串格式不正确。
      NullPointerException - name 参数为null。
    • ObjectName

      public ObjectName(String domain, String key, String value) throws MalformedObjectNameException
      构造一个只有一个键属性的对象名称。
      参数:
      domain - 对象名称的域部分。
      key - 对象名称的键属性中的属性。
      value - 对象名称的键属性中的值。
      抛出:
      MalformedObjectNameException - domainkeyvalue 包含非法字符,或value 不符合引号规则,或域的长度超过最大允许长度。
      NullPointerException - 参数中有一个为null。
    • ObjectName

      public ObjectName(String domain, Hashtable<String,String> table) throws MalformedObjectNameException
      从Hashtable中构造具有多个键属性的对象名称。
      参数:
      domain - 对象名称的域部分。
      table - 包含一个或多个键属性的哈希表。表中每个条目的键是对象名称中键属性的键。表中的关联值是对象名称中的关联值。
      抛出:
      MalformedObjectNameException - domain 包含非法字符,或table 中的键或值之一包含非法字符,或table 中的一个值不符合引号规则,或域的长度超过最大允许长度。
      NullPointerException - 参数中有一个为null。
  • Method Details

    • getInstance

      public static ObjectName getInstance(String name) throws MalformedObjectNameException, NullPointerException

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

      参数:
      name - 对象名称的字符串表示形式。
      返回:
      对应于给定字符串的ObjectName。
      抛出:
      MalformedObjectNameException - 作为参数传递的字符串格式不正确。
      NullPointerException - name 参数为null。
    • getInstance

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

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

      参数:
      domain - 对象名称的域部分。
      key - 对象名称的键属性中的属性。
      value - 对象名称的键属性中的值。
      返回:
      对应于给定域、键和值的ObjectName。
      抛出:
      MalformedObjectNameException - domainkeyvalue 包含非法字符,或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相同,也可能不同。使用相同参数两次调用此方法可能返回相同的对象或两个相等但不相同的对象。

      由于ObjectName是不可变的,通常不会对ObjectName进行复制。此方法的主要用途是防止恶意调用者可能向敏感代码传递具有意外行为的子类实例。这样的代码可以调用此方法以获取已知不具有意外行为的ObjectName。

      参数:
      name - ObjectName类或其子类的实例
      返回:
      具有相同语义的ObjectName或其子类的实例。如果name遵守ObjectName的语义,则返回的对象是相等的(但不一定是相同的)name
      抛出:
      NullPointerException - name为null。
    • 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起:
      1.6
    • isPropertyValuePattern

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

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

      返回:
      如果名称是属性值模式,则为true,否则为false。
      自1.6起:
      1.6
    • isPropertyValuePattern

      public boolean isPropertyValuePattern(String property)
      检查键属性中与键关联的值是否为模式。
      参数:
      property - 要检查其值是否为模式的属性。
      返回:
      如果与给定键属性关联的值为模式,则为true,否则为false。
      抛出:
      NullPointerException - 如果property为null。
      IllegalArgumentException - 如果property不是此ObjectName的有效键属性。
      自1.6起:
      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为null。
    • getKeyPropertyList

      public Hashtable<String,String> getKeyPropertyList()

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

      返回的值可能是不可修改的。如果它是可修改的,则对其进行更改不会影响此ObjectName。

      返回:
      键属性表。
    • getKeyPropertyListString

      public String getKeyPropertyListString()

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

      返回:
      键属性列表字符串。此字符串与ObjectName是否为模式无关。
    • getCanonicalKeyPropertyListString

      public String getCanonicalKeyPropertyListString()
      返回键属性列表的字符串表示形式,其中键属性按字典顺序排序。这用于按字典顺序比较,以便根据其键属性列表选择MBeans。字典顺序是由String.compareTo(String)隐含的顺序。
      返回:
      规范的键属性列表字符串。此字符串与ObjectName是否为模式无关。
    • toString

      public String toString()

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

      覆盖:
      toString 在类 Object
      返回:
      此对象名称的字符串表示形式。
    • equals

      public boolean equals(Object object)
      比较当前对象名称与另一个对象名称。仅当它们的规范形式相等时,两个ObjectName实例才相等。规范形式是描述为getCanonicalName()的字符串。
      覆盖:
      equals 在类 Object
      参数:
      object - 要将当前对象名称与之比较的对象名称。
      返回:
      如果object是一个ObjectName,其规范形式等于此ObjectName的规范形式,则返回true。
      参见:
    • hashCode

      public int hashCode()
      返回此对象名称的哈希码。
      覆盖:
      hashCode 在类 Object
      返回:
      此对象的哈希码值。
      参见:
    • quote

      public static String quote(String s)

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

      返回的值由一个引号('“')、与s的字符对应的字符序列和另一个引号组成。在返回的值中,s中的字符除外:

      • 引号('“')被一个反斜杠(\)后跟一个引号替换。
      • 星号('*')被一个反斜杠(\)后跟一个星号替换。
      • 问号('?')被一个反斜杠(\)后跟一个问号替换。
      • 反斜杠('\')被两个反斜杠替换。
      • 换行字符(Java中的字符'\n')被一个反斜杠后跟字符'\n'替换。
      参数:
      s - 要带引号的字符串。
      返回:
      带引号的字符串。
      抛出:
      NullPointerException - 如果s为null。
    • unquote

      public static String unquote(String q)

      返回给定字符串的未带引号形式。如果q是由quote(s)返回的字符串,则unquote(q).equals(s)。如果没有字符串s使得quote(s).equals(q),则unquote(q)会抛出IllegalArgumentException。

      这些规则意味着带引号和未带引号形式之间存在一对一的映射。

      参数:
      q - 要去除引号的字符串。
      返回:
      未带引号的字符串。
      抛出:
      IllegalArgumentException - 如果q不可能是quote(java.lang.String)方法返回的字符串,例如如果它不以引号(")开始和结束。
      NullPointerException - 如果q为null。
    • apply

      public boolean apply(ObjectName name)

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

      指定者:
      apply 在接口 QueryExp
      参数:
      name - 要比较的MBean的名称。
      返回:
      如果name与此ObjectName匹配,则为true。
      抛出:
      NullPointerException - 如果name为null。
    • setMBeanServer

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

      public int compareTo(ObjectName name)

      比较两个ObjectName实例。ObjectName之间的排序关系没有完全指定,但旨在使ObjectName的排序列表以便于人们阅读的顺序显示。

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

      例如,下面的ObjectName实例:

      • Shapes:type=Square,name=3
      • Colors:type=Red,name=2
      • Shapes:type=Triangle,side=isosceles,name=2
      • Colors:type=Red,name=1
      • Shapes:type=Square,name=1
      • Colors:type=Blue,name=1
      • Shapes:type=Square,name=2
      • JMImplementation:type=MBeanServerDelegate
      • Shapes:type=Triangle,side=scalene,name=1

      可以按以下顺序排序:

      • Colors:type=Blue,name=1
      • Colors:type=Red,name=1
      • Colors:type=Red,name=2
      • JMImplementation:type=MBeanServerDelegate
      • Shapes:type=Square,name=1
      • Shapes:type=Square,name=2
      • Shapes:type=Square,name=3
      • Shapes:type=Triangle,side=scalene,name=1
      • Shapes:type=Triangle,side=isosceles,name=2
      指定者:
      compareTo 在接口 Comparable<ObjectName>
      参数:
      name - 要比较的ObjectName。
      返回:
      如果此ObjectName小于、等于或大于指定的ObjectName,则为负整数、零或正整数。
      自:
      1.6