- java.lang.Object
-
- javax.management.ObjectName
-
- All Implemented Interfaces:
-
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,*
以匹配域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的String中没有特殊的意义。 例如,String:
domain: key1 = value1 , key2 = value2
表示具有两个键的ObjectName。 每个键的名称包含六个字符,其中第一个和最后一个是空格。 与键" key1 "
相关联的值也以空格开头和结尾。除了对上述拼写的字符的限制之外,ObjectName的任何部分都不能包含换行字符(
'\n'
),无论是域,键还是值,无论是引用还是不引用。 换行符可以用引用的值\n
。无论使用哪个构造函数来创建ObjectName,对特殊字符和引用的规则都适用。
为了避免不同供应商提供的MBean之间的冲突,一个有用的约定是使用指定MBean的组织的反向DNS名称开始域名,后跟一个句点和一个字符串,其解释由该组织决定。 例如,由
example.com
指定的example.com
将具有域com.example.MyDomain
。 这与Java语言包名称基本相同。该类的serialVersionUID为
1081892073854801359L
。- Implementation Note:
-
此实现中域名的最大允许长度为
Integer.MAX_VALUE/4
- 从以下版本开始:
- 1.5
- 另请参见:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field 描述 static ObjectName
WILDCARD
定义通配符“*:*”ObjectName。
-
构造方法摘要
构造方法 Constructor 描述 ObjectName(String name)
从给定的字符串构造一个对象名称。ObjectName(String domain, String key, String value)
用一个key属性构造对象名。ObjectName(String domain, Hashtable<String,String> table)
从Hashtable构造具有多个关键属性的对象名称。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 boolean
apply(ObjectName name)
测试这个ObjectName(可能是一个模式)是否匹配另一个ObjectName。int
compareTo(ObjectName name)
比较两个ObjectName实例。boolean
equals(Object object)
将当前对象名称与另一个对象名称进行比较。String
getCanonicalKeyPropertyListString()
返回键属性列表的字符串表示形式,其中键属性按词法顺序排序。String
getCanonicalName()
返回名称的规范形式; 也就是字符串表示,其中属性按词法顺序排序。String
getDomain()
返回域部分。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实例。String
getKeyProperty(String property)
获取与键属性中的键相关联的值。Hashtable<String,String>
getKeyPropertyList()
将关键属性作为Hashtable返回。String
getKeyPropertyListString()
返回在创建时指定的关键属性列表的字符串表示形式。int
hashCode()
返回此对象名称的哈希码。boolean
isDomainPattern()
检查对象名称是否是域部件上的模式。boolean
isPattern()
检查对象名称是否为模式。boolean
isPropertyListPattern()
检查对象名称是否是密钥属性列表上的模式。boolean
isPropertyPattern()
检查对象名称是否是关键属性上的模式。boolean
isPropertyValuePattern()
检查对象名称是否是至少一个关键属性的值部分上的模式。boolean
isPropertyValuePattern(String property)
检查与键属性中的键相关联的值是否为模式。static String
quote(String s)
返回给定String的引用形式,适合包含在ObjectName中。void
setMBeanServer(MBeanServer mbs)
设置要执行查询的MBean服务器。String
toString()
返回对象名称的字符串表示形式。static String
unquote(String q)
返回给定String的无引号形式。
-
-
-
字段详细信息
-
WILDCARD
public static final ObjectName WILDCARD
定义通配符“*:*”ObjectName。- 从以下版本开始:
- 1.6
-
-
构造方法详细信息
-
ObjectName
public ObjectName(String name) throws MalformedObjectNameException
从给定的字符串构造一个对象名称。- 参数
-
name
- 对象名称的字符串表示形式。 - 异常
-
MalformedObjectNameException
- 作为参数传递的字符串没有正确的格式。 -
NullPointerException
-name
参数为空。
-
ObjectName
public ObjectName(String domain, String key, String value) throws MalformedObjectNameException
用一个key属性构造对象名。- 参数
-
domain
- 对象名称的域部分。 -
key
- 对象名称的key属性中的属性。 -
value
- 对象名称的key属性中的值。 - 异常
-
MalformedObjectNameException
-该domain
,key
,或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 name) throws MalformedObjectNameException, NullPointerException
返回可以在任何可以使用
new ObjectName(name)
获得的对象的任何地方使用的ObjectName实例。 返回的对象可能是ObjectName的子类。 使用相同参数调用此方法两次可能会返回相同的对象或两个相等但不相同的对象。- 参数
-
name
- 对象名称的字符串表示形式。 - 结果
- 一个与给定String对应的ObjectName。
- 异常
-
MalformedObjectNameException
- 作为参数传递的字符串没有正确的格式。 -
NullPointerException
-name
参数为空。
-
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
-该domain
,key
,或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返回相同的字符串。
-
equals
public boolean equals(Object object)
- 重写:
-
equals
在Object
- 参数
-
object
- 要与当前对象名称进行比较的对象名称。 - 结果
-
如果
object
是一个ObjectName,其规范形式等于该ObjectName的ObjectName,object
true。 - 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
返回此对象名称的哈希码。- 重写:
-
hashCode
在Object
- 结果
- 该对象的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
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
-
-