之前查資料做的記錄,放上來,興許某天用的著
jmx發現和查詢服務
乙個jmx agent
通常包括了乙個
mbean server
和若干個協議聯結器和介面卡,也稱作連線伺服器,因為這些東西負責為遠端客戶端提供獲取和操作
mbean server
中的mbean
的介面。但是,如果乙個
mbeanserver
的mbean
數量非常多的話,查詢起來也是非常麻煩的。因此,
jmx mbeanserver
提供了一系列的介面和類,用於描述你的查詢語句(有點類似
sql),簡化你的查詢過程
主要的方法有兩個:
querymbeans(objectname, queryexp)
和querynames(objectname, queryexp)
。乙個用於查詢特定的
mbean
,另乙個則是查詢符合要求的
mbean
的objectname
集合。兩者用法一樣,主要解釋一下引數的含義。
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
並且大於10的
mbean
」。換個複雜的例子:
queryexp exp1 = query.equals( query.attr( "inklevel" ),query.value( "low" ) );
queryexp exp2 = query.equals( query.attr( "*****count" ),query.value( "low" ) );
queryexp finalexp = query.or( exp1, exp2 );
mbeanserver.querymbeans( new objectname( "hardware:*" ), finalexp );
前兩句意思差不多,第三句表示「
exp1
或exp2
成立」,最後是執行查詢。從這些例子可以看出,
mbean
的查詢語句和編譯原理、
sqljmx
手冊
JMX讀書筆記) JMX的架構
jmx採用的是3層的架構模型 分配層 distributed layer 這一層主要包含了能jmxagent和外部世界進行通訊的元件。有兩種型別的互動,一種稱為adaptor,一種稱為connector.層 agent layer 這一層主要包含了agent和mbeanserver,前者為了方便管理...
JMX的使用步驟
jmx的運用場景 客戶端呼叫伺服器端的方法。服務端做服務。從這一點來講 jmx可用於分布式專案。將服務分布在不同的伺服器上,形成分布式專案。先從小demo入手,理解jmx是怎麼玩的。1.準備好材料 1.需要乙個mbean介面,並且實現這個介面。2.乙個服務端,用來將介面註冊進去。3.乙個客戶端,用來...
JMX使用中碰到的問題
1.mbean中方法的名字切勿用作setxx或者getxx,按照jmx標準這是屬性的存在是根據 mbean 介面中是否存 在getname isname或setname方法 符合 standard mbean 的約定 來推斷的,於是這些方法會被當做 屬性的讀寫許可權,也就是attributes。而方...