- 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不是模式,则它必须至少包含一个具有关联值的键。
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:
- 域名。
- 结肠(
:
)。 - 如下定义的关键属性列表。
写为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语言包名称相同。此类的serialVersionUID是
1081892073854801359L
。- Implementation Note:
-
此实现中域名的最大允许长度为
Integer.MAX_VALUE/4
- 从以下版本开始:
- 1.5
- 另请参见:
- Serialized Form
-
-
字段汇总
字段 变量和类型 字段 描述 static ObjectName
WILDCARD
定义通配符“*:*”ObjectName。
-
构造方法摘要
构造方法 构造器 描述 ObjectName(String name)
根据给定的字符串构造对象名称。ObjectName(String domain, String key, String value)
使用一个键属性构造一个对象名称。ObjectName(String domain, Hashtable<String,String> table)
使用Hashtable中的几个关键属性构造一个对象名称。
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 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中。String
toString()
返回对象名称的字符串表示形式。static String
unquote(String q)
返回给定String的不带引号的形式。-
声明方法的接口 javax.management.QueryExp
setMBeanServer
-
-
-
-
字段详细信息
-
WILDCARD
public static final ObjectName WILDCARD
定义通配符“*:*”ObjectName。- 从以下版本开始:
- 1.6
-
-
构造方法详细信息
-
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
- 对象名称的key属性中的值。 - 异常
-
MalformedObjectNameException
-该domain
,key
,或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 name) throws MalformedObjectNameException, NullPointerException
返回一个ObjectName实例,可以在任何可以使用
new ObjectName(name)
获得的对象的地方使用。 返回的对象可以是ObjectName的子类。 使用相同的参数调用此方法两次可能会返回相同的对象或两个相同但不相同的对象。- 参数
-
name
- 对象名称的字符串表示形式。 - 结果
- 与给定String对应的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
- 对象名称的key属性中的属性。 -
value
- 对象名称的key属性中的值。 - 结果
- 与给定域,键和值对应的ObjectName。
- 异常
-
MalformedObjectNameException
-该domain
,key
,或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()
- 结果
- 规范键属性列表字符串。 此字符串与ObjectName是否为模式无关。
-
toString
public String toString()
返回对象名称的字符串表示形式。 未指定此字符串的格式,但是当且仅当它们相等时,用户才能期望两个ObjectNames返回相同的字符串。
-
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
字符在返回值中保持不变,除了:- 引号('“')替换为反斜杠(\)后跟引号。
- 星号('*')替换为反斜杠(\)后跟星号。
- 问号('?')替换为反斜杠(\)后跟问号。
- 反斜杠('\')由两个反斜杠替换。
- 换行符(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
-
-