JMX的查找机制

之前查资料做的记录,放上来,兴许某天用的着

JMX发现和查找服务

一个JMX AGENT 通常包括了一个mbean server和若干个协议连接器和适配器,也称作连接服务器,因为这些东西负责为远程客户端提供获取和操作mbean server中的mbean的接口。但是,如果一个MBeanserverMBean数量非常多的话,查找起来也是非常麻烦的。因此,JMX MBeanserver提供了一系列的接口和类,用于描述你的查找语句(有点类似sql),简化你的查找过程

主要的方法有两个:queryMBeans(ObjectName, QueryExp) queryNames(ObjectName, QueryExp)。一个用于查找特定的MBean,另一个则是查找符合要求的MBeanObjectName集合。两者用法一样,主要解释一下参数的含义。

ObjectName:定义查找的范围,相当于“预查找”。

构造此ObjectName参数时所用的字符串可以是简单的正则表达式,也就是类似 new ObjectName(“HelloAgent:type=a,*”),意思是“以HelloAgent为前缀,且至少包含一个值为a的属性type”。“*”即表示“零个或多个字符”,除了“*”外,还能用“?”表示“单个字符”,用法和我们平常的正则表达式一样。本参数的目的就是缩小查找范围。

QueryExp:查询表达式。

在刚才的ObjectName限定了范围后,就可以进一步用这个QueryExp来细化查找了。为了能表达更加丰富的查找语义,JMX总共提供了四个类用于构造查询表达式,它们是:

  QueryExp

  ValueExp

  AttributeValueExp

  StringValueExp

具体含义先不解释,看了后面的实例就能明白了。JMX还有一个专门的工具类Query,它包含了很多静态方法,用于产生上面这四个类。先看看下面这行代码。

QueryExp exp = Query.gt( Query.attr( "count" ), Query.value( 10 ) );

gt”指“大于”,这行代码的意思是:“查找拥有属性值count并且大于10MBean”。

换个复杂的例子:

QueryExp exp1 = Query.equals( Query.attr( "inkLevel" ),Query.value( "LOW" ) );

QueryExp exp2 = Query.equals( Query.attr( "paperCount" ),Query.value( "LOW" ) );

QueryExp finalExp = Query.or( exp1, exp2 );

mbeanServer.queryMBeans( new ObjectName( "Hardware:*" ), finalExp );

前两句意思差不多,第三句表示“exp1exp2成立”,最后是执行查询。从这些例子可以看出,MBean的查询语句和编译原理、sql的内容差不多,也是计算机语言的共通之处,只是换成了以对象来表达而已。更多内容,请参考JMX手册

 

 

你可能感兴趣的:(Java,EE,jmx,正则表达式,server,sql,query,服务器)