public class ObjectName extends Object implements Comparable<ObjectName>, QueryExp
表示MBean的对象名称,或可匹配多个MBean名称的模式。 这个类的实例是不可变的。
这个类的一个实例可以用来表示:
对象名称由域和关键属性两部分组成。
该域是不包括字符冒号( :
)的字符串。 建议域名不能包含字符串“ //
”,留作将来使用。
如果域至少包含一个通配符字符( *
)或问号( ?
),则对象名称是一个模式。 星号匹配任何零个或多个字符的序列,而问号匹配任何单个字符。
如果域为空,则将在特定上下文中使用使用ObjectName的MBean服务器的默认域替换该域 。
关键属性是一组无序的键和关联值。
每个键是非空字符串的字符,可能不包含任何字符逗号( ,
),等号( =
),冒号,星号或问号。 相同的键在给定的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=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
MBean将具有诸如com.example.MyDomain
域。 这与Java语言包名称基本相同。
这个类的serialVersionUID的是1081892073854801359L
。
Modifier and Type | Field and Description |
---|---|
static ObjectName |
WILDCARD
定义通配符“*:*”ObjectName。
|
Constructor and Description |
---|
ObjectName(String name)
从给定的字符串构造一个对象名称。
|
ObjectName(String domain, Hashtable<String,String> table)
从Hashtable构造具有多个关键属性的对象名称。
|
ObjectName(String domain, String key, String value)
用一个key属性构造对象名。
|
Modifier and Type | Method and Description |
---|---|
boolean |
apply(ObjectName name)
测试这个ObjectName(可能是一个模式)是否匹配另一个ObjectName。
|
int |
compareTo(ObjectName name)
比较两个ObjectName实例。
|
boolean |
equals(Object object)
将当前对象名称与另一个对象名称进行比较。
|
String |
getCanonicalKeyPropertyListString()
返回键属性列表的字符串表示形式,其中键属性按词法顺序排序。
|
String |
getCanonicalName()
返回名称的规范形式;
也就是字符串表示,其中属性按词法顺序排序。
|
String |
getDomain()
返回域部分。
|
static ObjectName |
getInstance(ObjectName name)
返回可以在给定对象可以使用的任何地方使用的ObjectName实例。
|
static ObjectName |
getInstance(String name)
返回可以在任何可以使用
new ObjectName(name) 获得的对象的任何地方使用的ObjectName实例。
|
static ObjectName |
getInstance(String domain, Hashtable<String,String> table)
返回可以在任何可以使用
new ObjectName(domain, table) 获得的对象的任何地方使用的ObjectName实例。
|
static ObjectName |
getInstance(String domain, String key, String value)
返回可以在任何可以使用
new ObjectName(domain, key, value) 获得的对象的任何地方使用的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的无引号形式。
|
public static final ObjectName WILDCARD
public ObjectName(String name) throws MalformedObjectNameException
name
- 对象名称的字符串表示形式。
MalformedObjectNameException
- 作为参数传递的字符串没有正确的格式。
NullPointerException
-
name
参数为空。
public ObjectName(String domain, String key, String value) throws MalformedObjectNameException
domain
- 对象名称的域部分。
key
- 对象名称的key属性中的属性。
value
- 对象名称的key属性中的值。
MalformedObjectNameException
-该
domain
,
key
,或
value
包含非法字符,或
value
不遵守规则的引用。
NullPointerException
- 其中一个参数为null。
public ObjectName(String domain, Hashtable<String,String> table) throws MalformedObjectNameException
domain
- 对象名称的域部分。
table
- 包含一个或多个关键属性的哈希表。
表中每个条目的键是对象名称中的键属性的键。
表中的关联值是对象名称中的关联值。
MalformedObjectNameException
-该
domain
包含非法字符,或者在键或值
table
包含非法字符,或者在其中一个值
table
不遵守规则的引用。
NullPointerException
- 其中一个参数为null。
public static ObjectName getInstance(String name) throws MalformedObjectNameException, NullPointerException
返回可以在任何可以使用new ObjectName(name)
获得的对象的任何地方使用的ObjectName实例。 返回的对象可能是ObjectName的子类。 使用相同参数调用此方法两次可能会返回相同的对象或两个相等但不相同的对象。
name
- 对象名称的字符串表示形式。
MalformedObjectNameException
- 作为参数传递的字符串没有正确的格式。
NullPointerException
-
name
参数为空。
public static ObjectName getInstance(String domain, String key, String value) throws MalformedObjectNameException
返回一个ObjectName的实例,可以在任何可以使用new ObjectName(domain, key, value)
获得的对象的地方使用。 返回的对象可能是ObjectName的子类。 使用相同参数调用此方法两次可能会返回相同的对象或两个相等但不相同的对象。
domain
- 对象名称的域部分。
key
- 对象名称的key属性中的属性。
value
- 对象名称的key属性中的值。
MalformedObjectNameException
-该
domain
,
key
,或
value
包含非法字符,或
value
不遵守规则的引用。
NullPointerException
- 其中一个参数为null。
public static ObjectName getInstance(String domain, Hashtable<String,String> table) throws MalformedObjectNameException
返回可以在任何可以使用new ObjectName(domain, table)
获得的对象的任何地方使用的ObjectName实例。 返回的对象可能是ObjectName的子类。 使用相同参数调用此方法两次可能会返回相同的对象或两个相等但不相同的对象。
domain
- 对象名称的域部分。
table
- 包含一个或多个关键属性的哈希表。
表中每个条目的键是对象名称中的键属性的键。
表中的关联值是对象名称中的关联值。
MalformedObjectNameException
-该
domain
包含非法字符,或者在键或值
table
包含非法字符,或者在其中一个值
table
不遵守规则的引用。
NullPointerException
- 其中一个参数为null。
public static ObjectName getInstance(ObjectName name)
返回可以在给定对象可以使用的任何地方使用的ObjectName实例。 返回的对象可能是ObjectName的子类。 如果name
是name
的子类,则不能保证返回的对象将是同一个类。
返回的值可能与name
也可能不name
。 使用相同参数调用此方法两次可能会返回相同的对象或两个相等但不相同的对象。
由于ObjectName是不可变的,所以制作ObjectName的副本通常不是有用的。 这种方法的主要用途是防范可能传递具有令人惊讶的行为的子类的实例的敏感代码的恶意调用者。 这样的代码可以调用此方法来获取一个已知不具有令人惊讶的行为的ObjectName。
name
- ObjectName类或子类的实例
name
尊重的ObjectName的语义,则返回的对象是相等的(但不必相同)至name
。
NullPointerException
-
name
为null。
public boolean isPattern()
对象名称是一个模式,如果其域包含通配符,或者对象名称是属性模式。
public boolean isDomainPattern()
public boolean isPropertyPattern()
如果对象名称是键属性列表上的模式(例如“d:k = v,*”)或属性值(例如“d:k = *”)或两者(例如“d:k = *,*”)。
public boolean isPropertyListPattern()
例如,“d:k = v,*”和“d:k = *,*”是关键属性列表模式,而“d:k = *”不是。
public boolean isPropertyValuePattern()
例如,“d:k = *”和“d:k = *,*”是属性值模式,而“d:k = v,*”不是。
public boolean isPropertyValuePattern(String property)
property
- 要检查其值的属性。
NullPointerException
- 如果
property
为空。
IllegalArgumentException
- 如果
property
不是此ObjectName的有效键属性。
public String getCanonicalName()
返回名称的规范形式; 也就是字符串表示,其中属性按词法顺序排序。
更准确地说,名称的规范形式是由域部分 ,冒号( :
), 规范密钥属性列表和模式指示组成的字符串 。
规范的键属性列表是作为描述的相同字符串getCanonicalKeyPropertyListString()
。
模式指示为:
,*
)。 public String getDomain()
public String getKeyProperty(String property)
property
- 要获取其值的属性。
NullPointerException
- 如果
property
为空。
public Hashtable<String,String> getKeyPropertyList()
将关键属性作为Hashtable返回。 返回的值是一个Hashtable,其中每个键是ObjectName的键属性列表中的一个键,每个值都是相关联的值。
返回的值可能是不可修改的。 如果它是可修改的,更改它对此ObjectName没有影响。
public String getKeyPropertyListString()
返回在创建时指定的关键属性列表的字符串表示形式。 如果此ObjectName由构造函数ObjectName(String)
构造 ,返回的String中的键属性将与构造函数的参数的顺序相同。
public String getCanonicalKeyPropertyListString()
String.compareTo(String)
所暗示的顺序 。
public String toString()
返回对象名称的字符串表示形式。 未指定此字符串的格式,但是当用户只能在相同的情况下,用户可以期望两个ObjectName返回相同的字符串。
public boolean equals(Object object)
equals
在
Object
object
- 要与当前对象名称进行比较的对象名称。
object
是一个ObjectName,其规范形式等于该ObjectName的ObjectName,则为True。
Object.hashCode()
, HashMap
public int hashCode()
hashCode
在
Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
public static String quote(String s)
返回给定String的引用形式,适合包含在ObjectName中。 返回的值可以用作与ObjectName中的键相关联的值。 字符串s
可能包含任何字符。 适当的引用确保返回的值在ObjectName中是合法的。
返回的值包含一个引号('''),一个与s的字符对应的字符s
,另一个引号。s中的s
在返回值中不变,除了
s
- 要引用的字符串。
NullPointerException
- 如果
s
为空。
public static String unquote(String q)
返回给定String的无引号形式。 如果q
是由quote(s)
返回的字符串 ,则unquote(q).equals(s)
。 如果没有String s
为quote(s).equals(q)
,则quote(s).equals(q)
(q)将抛出一个IllegalArgumentException。
这些规则意味着引用和非引用形式之间存在一对一映射。
q
- 要引用的字符串。
IllegalArgumentException
- 如果
q
无法由
quote(java.lang.String)
方法返回,例如,如果它不以引号(“)开头和结尾。
NullPointerException
- 如果
q
为空。
public boolean apply(ObjectName name)
测试这个ObjectName(可能是一个模式)是否匹配另一个ObjectName。 如果name
是模式,则结果为false。 如果此ObjectName是模式,则当且仅当name
与模式匹配时,结果为true。 如果既没有此ObjectName也不name
是一个模式,结果为真,当且仅当作为用于描述的两个的ObjectName相等equals(Object)
方法。
apply
在界面
QueryExp
name
- 要比较的MBean的名称。
name
匹配此ObjectName,则为True。
NullPointerException
- 如果
name
为空。
public void setMBeanServer(MBeanServer mbs)
QueryExp
setMBeanServer
在接口
QueryExp
mbs
- 要执行查询的MBean服务器。
public int compareTo(ObjectName name)
比较两个ObjectName实例。 ObjectNames之间的排序关系并未完全指定,而是旨在使ObjectNames的排序列表按照一个方便用户阅读的顺序出现。
特别地,如果两个ObjectName实例具有不同的域,则它们的顺序是域的字典顺序。 密钥属性列表的顺序仍然未指定。
例如,下面的ObjectName实例:
可以订购如下:
compareTo
在界面
Comparable<ObjectName>
name
- 要比较的ObjectName。