- 所有已实现的接口:
Serializable
,Comparable<ObjectName>
,QueryExp
表示一个 MBean 的对象名称,或者可以匹配多个 MBean 名称的模式。此类的实例是不可变的。
此类的实例可用于表示:
- 对象名称
- 查询上下文中的对象名称模式
对象名称由两部分组成,域和键属性。
domain 是不包括字符冒号 (:
) 的字符串。建议域不要包含字符串“//
”,保留以备将来使用。
如果域包含至少一次出现的通配符星号 (*
) 或问号 (?
),则对象名称是一个模式。星号匹配零个或多个字符的任何序列,而问号匹配任何单个字符。
如果域为空,则在某些上下文中它将被使用 ObjectName 的 MBean 服务的 default domain 替换。
key properties 是一组无序的键和关联值。
每个 key 都是一个非空字符串,可能不包含任何字符逗号 (,
)、等号 (=
)、冒号、星号或问号。同一个键不能在给定的 ObjectName 中出现两次。
每个与键关联的 value 都是一串未加引号或加引号的字符。
unquoted value 可能是空字符串,其中可能不包含任何字符逗号、等号、冒号或引号。
如果 unquoted value 包含至少一次通配符星号或问号,则对象名称为 property value pattern 。星号匹配零个或多个字符的任何序列,而问号匹配任何单个字符。
quoted value 由一个引号 ("
) 组成,后跟一个可能为空的字符串,然后是另一个引号。在字符串中,反斜杠 (\
) 具有特殊含义。它后面必须跟以下字符之一:
- 另一个反斜杠。第二个反斜杠没有特殊含义,两个字符代表一个反斜杠。
- 字符'n'。这两个字符代表一个换行符(Java 中的“\n”)。
- 一个报价。这两个字符代表一个引号,并且该引号不被视为终止被引号的值。必须存在结束收盘价,报价才有效。
- 问号 (?) 或星号 (*)。这两个字符分别代表问号或星号。
引号不能出现在引号内,除非紧跟在奇数个连续反斜杠之后。
引用值周围的引号以及该值内的任何反斜杠都被视为该值的一部分。
如果 quoted value 包含至少一次字符星号或问号并且它们前面没有反斜杠,则它们被视为通配符并且对象名称是 property value pattern 。星号匹配零个或多个字符的任何序列,而问号匹配任何单个字符。
ObjectName 可能是 property list pattern 。在这种情况下,它可能有零个或多个键和关联值。它匹配一个非模式 ObjectName,其域匹配并且包含相同的键和关联值,以及可能的其他键和值。
当 ObjectName 的 quoted 或 unquoted 键属性值中的至少一个包含如上所述的通配符星号或问号时,ObjectName 就是一个 property value pattern。在这种情况下,它有一个或多个键和相关联的值,其中至少一个值包含通配符。它匹配一个非模式 ObjectName,其域匹配并且包含值匹配的相同键;如果属性值模式也是属性列表模式,则非模式 ObjectName 可以包含其他键和值。
如果 ObjectName 是 property list pattern 或 property value pattern 或两者,则它是 property pattern。
如果 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=Bar
和d:type=Fro,name=Bar
。d:type=F*o,name=Bar
将匹配例如d:type=Fo,name=Bar
和d:type=Frodo,name=Bar
。d:type=Foo,name="B*"
将匹配例如d:type=Foo,name="Bling"
。即使在引号内也可以识别通配符,并且像其他特殊字符一样可以使用\
进行转义。
一个 ObjectName 可以写成一个 String 并按顺序包含以下元素:
- 域。
- 冒号 (
:
)。 - 如下定义的关键属性列表。
写成字符串的键属性列表是一个逗号分隔的元素列表。每个元素要么是一个星号,要么是一个关键属性。键属性由键、等号 (=
) 和关联值组成。
关键属性列表的至多一个元素可以是星号。如果键属性列表包含星号元素,则 ObjectName 是属性列表模式。
空格在表示 ObjectName 的字符串中没有特殊意义。例如,字符串:
domain: key1 = value1 , key2 = value2表示具有两个键的 ObjectName。每个键的名称包含六个字符,其中第一个和最后一个是空格。与键
" key1 "
关联的值也以空格开头和结尾。
除了上述对字符的限制外,ObjectName 的任何部分都不得包含换行符 ('\n'
),无论是域、键还是值,无论是引用还是未引用。换行符可以用带有序列 \n
的引号值表示。
无论使用哪个构造方法创建 ObjectName,有关特殊字符和引号的规则都适用。
为避免不同供应商提供的 MBean 之间发生冲突,一个有用的约定是以指定 MBean 的组织的反向 DNS 名称开始域名,后跟一个句点和一个字符串,其解释由该组织确定。例如,example.com
指定的 MBean 将具有诸如 com.example.MyDomain
之类的域。这基本上与 Java 语言包名称的约定相同。
这serialVersionUID这个类的是1081892073854801359L
。
- 实现注意事项:
-
此实现中域名的最大允许长度为
Integer.MAX_VALUE/4
- 自从:
- 1.5
- 参见:
-
字段摘要
字段 -
构造方法总结
构造方法构造方法描述ObjectName
(String name) 从给定的字符串构造一个对象名称。ObjectName
(String domain, String key, String value) 构造一个只有一个关键属性的对象名称。ObjectName
(String domain, Hashtable<String, String> table) 使用哈希表中的几个关键属性构造一个对象名称。 -
方法总结
修饰符和类型方法描述boolean
apply
(ObjectName name) 测试此 ObjectName(可能是一个模式)是否与另一个 ObjectName 匹配。int
compareTo
(ObjectName name) 比较两个 ObjectName 实例。boolean
将当前对象名称与另一个对象名称进行比较。返回键属性列表的字符串表示形式,其中键属性按词法顺序排序。返回名称的规范形式;即,属性按词汇顺序排序的字符串表示形式。返回域部分。static ObjectName
getInstance
(String name) 返回一个 ObjectName 的实例,它可以在任何可以使用new ObjectName(name)
获得的对象的地方使用。static ObjectName
getInstance
(String domain, String key, String value) 返回一个 ObjectName 的实例,可以在任何可以使用通过new ObjectName(domain, key, value)
获得的对象的地方使用。static ObjectName
getInstance
(String domain, Hashtable<String, String> table) 返回一个 ObjectName 的实例,它可以在任何可以使用通过new ObjectName(domain, table)
获得的对象的地方使用。static ObjectName
getInstance
(ObjectName name) 返回一个 ObjectName 的实例,它可以在任何可以使用给定对象的地方使用。getKeyProperty
(String property) 获取与键属性中的键关联的值。将键属性作为哈希表返回。返回创建时指定的键属性列表的字符串表示形式。int
hashCode()
返回此对象名称的哈希码。boolean
检查对象名称是否是域部分的模式。boolean
检查对象名称是否为模式。boolean
检查对象名称是否是键属性列表中的模式。boolean
检查对象名称是否是键属性上的模式。boolean
检查对象名称是否是至少一个键属性的值部分的模式。boolean
isPropertyValuePattern
(String property) 检查与键属性中的键关联的值是否为模式。static String
返回给定字符串的引用形式,适合包含在 ObjectName 中。void
设置要在其上执行查询的 MBean 服务。toString()
返回对象名称的字符串表示形式。static String
返回给定字符串的不带引号的形式。
-
字段详细信息
-
WILDCARD
定义通配符“*:*”ObjectName。- 自从:
- 1.6
-
-
构造方法详细信息
-
ObjectName
从给定的字符串构造一个对象名称。- 参数:
name
- 对象名称的字符串表示形式。- 抛出:
MalformedObjectNameException
- 作为参数传递的字符串格式不正确。NullPointerException
-name
参数为空。
-
ObjectName
构造一个只有一个关键属性的对象名称。- 参数:
domain
- 对象名称的域部分。key
- 对象名称的键属性中的属性。value
- 对象名称的键属性中的值。- 抛出:
MalformedObjectNameException
-domain
、key
或value
包含非法字符,或者value
不遵循引用规则,或者域的长度超过允许的最大长度。NullPointerException
- 其中一个参数为空。
-
ObjectName
public ObjectName(String domain, Hashtable <String , String > table) throws MalformedObjectNameException使用哈希表中的几个关键属性构造一个对象名称。- 参数:
domain
- 对象名称的域部分。table
- 包含一个或多个关键属性的哈希表。表中每个条目的键是对象名称中的键属性的键。表中的关联值是对象名称中的关联值。- 抛出:
MalformedObjectNameException
-domain
包含非法字符,或者table
中的键或值之一包含非法字符,或者table
中的值之一不遵循引用规则,或者域的长度超过允许的最大长度。NullPointerException
- 其中一个参数为空。
-
-
方法详情
-
getInstance
public static ObjectName getInstance(String name) throws MalformedObjectNameException , NullPointerException 返回一个 ObjectName 的实例,它可以在任何可以使用
new ObjectName(name)
获得的对象的地方使用。返回的对象可能是 ObjectName 的子类。使用相同的参数调用此方法两次可能会返回相同的对象或两个相等但不相同的对象。- 参数:
name
- 对象名称的字符串表示形式。- 返回:
- 与给定字符串对应的 ObjectName。
- 抛出:
MalformedObjectNameException
- 作为参数传递的字符串格式不正确。NullPointerException
-name
参数为空。
-
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
-domain
、key
或value
包含非法字符,或者value
不遵循引用规则,或者域的长度超过允许的最大长度。NullPointerException
- 其中一个参数为空。
-
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
- 其中一个参数为空。
-
getInstance
返回一个 ObjectName 的实例,它可以在任何可以使用给定对象的地方使用。返回的对象可能是 ObjectName 的子类。如果
name
是 ObjectName 的子类,则不能保证返回的对象属于同一类。返回值可能与
name
相同,也可能不同。使用相同的参数调用此方法两次可能会返回相同的对象或两个相等但不相同的对象。由于 ObjectName 是不可变的,因此制作 ObjectName 的副本通常没有用。此方法的主要用途是防止恶意调用者将具有异常行为的子类实例传递给敏感代码。这样的代码可以调用此方法来获取已知不会有意外行为的 ObjectName。
- 参数:
name
- ObjectName 类或子类的实例- 返回:
-
已知具有相同语义的 ObjectName 或子类的实例。如果
name
尊重 ObjectName 的语义,则返回的对象与name
相等(但不一定相同)。 - 抛出:
NullPointerException
-name
为空。
-
isPattern
public boolean isPattern()检查对象名称是否为模式。如果对象名称的域包含通配符或者对象名称是属性模式,则对象名称是模式。
- 返回:
- 如果名称是模式,则为真,否则为假。
-
isDomainPattern
public boolean isDomainPattern()检查对象名称是否是域部分的模式。- 返回:
- 如果名称是域模式,则为真,否则为假。
-
isPropertyPattern
public boolean isPropertyPattern()检查对象名称是否是键属性上的模式。如果对象名称是键属性列表(例如“d:k=v,*”)或属性值(例如“d:k=*”)或两者上的模式,则对象名称是键属性的模式(例如“d:k=*,*”)。
- 返回:
- 如果名称是属性模式,则为真,否则为假。
-
isPropertyListPattern
public boolean isPropertyListPattern()检查对象名称是否是键属性列表中的模式。例如,“d:k=v,*”和“d:k=*,*”是关键属性列表模式,而“d:k=*”不是。
- 返回:
- 如果名称是属性列表模式,则为真,否则为假。
- 自从:
- 1.6
-
isPropertyValuePattern
public boolean isPropertyValuePattern()检查对象名称是否是至少一个键属性的值部分的模式。例如,“d:k=*”和“d:k=*,*”是属性值模式,而“d:k=v,*”不是。
- 返回:
- 如果名称是属性值模式,则为真,否则为假。
- 自从:
- 1.6
-
isPropertyValuePattern
检查与键属性中的键关联的值是否为模式。- 参数:
property
- 要检查其值的属性。- 返回:
- 如果与给定键属性关联的值是模式,则为真,否则为假。
- 抛出:
NullPointerException
- 如果property
为空。IllegalArgumentException
- 如果property
不是此 ObjectName 的有效键属性。- 自从:
- 1.6
-
getCanonicalName
返回名称的规范形式;即,属性按词汇顺序排序的字符串表示形式。
更准确地说,名称的规范形式是由 domain part 、冒号 (
:
)、canonical key property list 和 pattern indication 组成的字符串。canonical key property list 与
getCanonicalKeyPropertyListString()
中描述的字符串相同。pattern indication 是:
- 对于不是属性列表模式的 ObjectName 为空;
- ObjectName 的星号,它是没有键的属性列表模式;或者
- ObjectName 的逗号和星号 (
,*
) 是至少具有一个键的属性列表模式。
- 返回:
- 名称的规范形式。
-
getDomain
返回域部分。- 返回:
- 域。
-
getKeyProperty
获取与键属性中的键关联的值。- 参数:
property
- 要获取其值的属性。- 返回:
- 属性的值,如果此 ObjectName 中没有此类属性,则为 null。
- 抛出:
NullPointerException
- 如果property
为空。
-
getKeyPropertyList
将键属性作为哈希表返回。返回值是一个哈希表,其中每个键都是 ObjectName 的键属性列表中的一个键,每个值都是关联的值。
返回值可能是不可修改的。如果它是可修改的,则更改它对此 ObjectName 没有影响。
- 返回:
- 关键属性表。
-
getKeyPropertyListString
返回创建时指定的键属性列表的字符串表示形式。如果此 ObjectName 是使用构造函数
ObjectName(String)
构造的,则返回的 String 中的键属性的顺序将与构造函数的参数中的顺序相同。- 返回:
- 键属性列表字符串。此字符串与 ObjectName 是否为模式无关。
-
getCanonicalKeyPropertyListString
返回键属性列表的字符串表示形式,其中键属性按词法顺序排序。这用于执行词典比较,以便根据其关键属性列表选择 MBean。词汇顺序是String.compareTo(String)
隐含的顺序。- 返回:
- 规范键属性列表字符串。此字符串与 ObjectName 是否为模式无关。
-
toString
返回对象名称的字符串表示形式。未指定此字符串的格式,但用户可以期望两个 ObjectName 当且仅当它们相等时返回相同的字符串。
-
equals
将当前对象名称与另一个对象名称进行比较。当且仅当它们的规范形式相等时,两个 ObjectName 实例才相等。规范形式是为getCanonicalName()
描述的字符串。 -
hashCode
public int hashCode()返回此对象名称的哈希码。 -
quote
返回给定字符串的引用形式,适合包含在 ObjectName 中。返回值可用作与 ObjectName 中的键关联的值。字符串
s
可以包含任何字符。适当的引用可确保返回值在 ObjectName 中是合法的。返回值由引号 ('"')、与
s
的字符对应的字符序列和另一个引号组成。s
中的字符在返回值中看起来没有变化,除了:- 引号 ('"') 替换为反斜杠 (\),后跟引号。
- 星号 ('*') 替换为反斜杠 (\) 后跟一个星号。
- 问号 ('?') 替换为反斜杠 (\),后跟问号。
- 一个反斜杠 ('\') 被两个反斜杠代替。
- 换行符(Java 中的字符“\n”)由后跟字符“\n”的反斜杠替换。
- 参数:
s
- 要引用的字符串。- 返回:
- 引用的字符串。
- 抛出:
NullPointerException
- 如果s
为空。
-
unquote
返回给定字符串的不带引号的形式。如果
q
是quote(s)
返回的字符串,则unquote(q).equals(s)
。如果quote(s).equals(q)
不存在 Strings
,则 unquote(q) 会抛出 IllegalArgumentException。这些规则意味着引用和未引用形式之间存在一对一的映射。
- 参数:
q
- 要取消引用的字符串。- 返回:
- 未加引号的字符串。
- 抛出:
IllegalArgumentException
- 如果q
无法由quote(java.lang.String)
方法返回,例如,如果它不以引号 (") 开头和结尾。NullPointerException
- 如果q
为空。
-
apply
测试此 ObjectName(可能是一个模式)是否与另一个 ObjectName 匹配。如果
name
是模式,则结果为假。如果此 ObjectName 是一个模式,则当且仅当name
匹配该模式时,结果为真。如果此 ObjectName 和name
都不是模式,则当且仅当两个 ObjectName 如equals(Object)
方法所述相等时,结果为真。- 指定者:
apply
在接口QueryExp
中- 参数:
name
- 要比较的 MBean 的名称。- 返回:
-
如果
name
匹配此 ObjectName,则为真。 - 抛出:
NullPointerException
- 如果name
为空。
-
setMBeanServer
从接口QueryExp
复制的描述设置要在其上执行查询的 MBean 服务。- 指定者:
setMBeanServer
在接口QueryExp
中- 参数:
mbs
- 要在其上执行查询的 MBean 服务。
-
compareTo
比较两个 ObjectName 实例。 ObjectNames 之间的排序关系没有完全指定,但旨在使 ObjectNames 的排序列表将以方便人们阅读的顺序出现。
特别是,如果两个 ObjectName 实例具有不同的域,那么它们的顺序就是域的字典顺序。键属性列表的顺序保持未指定。
例如,下面的 ObjectName 实例:
- 形状:类型=方形,名称=3
- 颜色:类型=红色,名称=2
- 形状:类型=三角形,边=等腰,名称=2
- 颜色:类型=红色,名称=1
- 形状:类型=方形,名称=1
- 颜色:类型=蓝色,名称=1
- 形状:类型=方形,名称=2
- JMImplementation:type=MBeanServerDelegate
- 形状:类型=三角形,边=斜角,名称=1
可以订购如下:
- 颜色:类型=蓝色,名称=1
- 颜色:类型=红色,名称=1
- 颜色:类型=红色,名称=2
- JMImplementation:type=MBeanServerDelegate
- 形状:类型=方形,名称=1
- 形状:类型=方形,名称=2
- 形状:类型=方形,名称=3
- 形状:类型=三角形,边=斜角,名称=1
- 形状:类型=三角形,边=等腰,名称=2
- 指定者:
compareTo
在接口Comparable<ObjectName>
中- 参数:
name
- 要比较的 ObjectName。- 返回:
- 负整数、零或正整数,因为此 ObjectName 小于、等于或大于指定的 ObjectName。
- 自从:
- 1.6
-