jmx的運用場景:客戶端呼叫伺服器端的方法。服務端做服務。從這一點來講:jmx可用於分布式專案。將服務分布在不同的伺服器上,形成分布式專案。
先從小demo入手,理解jmx是怎麼玩的。
1.準備好材料:
1.需要乙個mbean介面,並且實現這個介面。
2.乙個服務端,用來將介面註冊進去。
3.乙個客戶端,用來呼叫介面中的方法。
從上面我們可以分析出:
1.mbean介面和實現,與服務端放在一起。
2.客戶端需要mbean介面。而不需要實現。
理解了這兩點:我們可以建立兩個專案。乙個jmxserver,乙個jmxclient.
jmxserver專案:
乙個mbean介面
public inte***ce hellombean
實現這個介面:
public class hello implements hellombean
public void setname(string name)
public void print()
}
然後是服務,首先是開個埠,然後需要將介面註冊進去:
public class jmxserver );
inetaddress ipinte***ce = inetaddress.getbyname("192.168.10.38");
rmisocketfactory rmifactory = rmisocketfactory.getdefaultsocketfactory();
//new anchorsocketfactory(ipinte***ce,"false");
locateregistry.createregistry(1234, null, rmifactory);
// 這個是必須的,否則報 no such object in table之類是異常!!!! 花了相當長時間才發現這點
jmxenvironment.put(
rmiconnectorserver.rmi_server_socket_factory_attribute,
rmifactory);
// 需要認證則這麼寫:
// jmxauthenticator auth = createjmxauthenticator();
// jmxenvironment.put(jmxconnectorserver.authenticator, auth);
jmxconnectorserver connector = jmxconnectorserve***ctory
.newjmxconnectorserver(address, jmxenvironment,
managementfactory.getplatformmbeanserver());
hellombean mbean = new hello();
objectname testmbeanname = new objectname(
"hellombean:name=hellombean");
testmbeanname = new objectname("hellombeandomain", "type",
"hellombean");
mbs.registermbean(mbean, testmbeanname);
connector.start();
} catch (exception e)
}private jmxauthenticator createjmxauthenticator()
string username = scredentials[0];
string pvalue = scredentials[1];
if ("saf".equals(username) && "asswrd".equals(pvalue))
throw new securityexception("authentication failed!");}};
}}
服務端搞定。
接下來是客戶端:
客戶端需要mbean介面,這個介面是跟服務端一致的。
public inte***ce hellombean
然後是連線上ip和埠,拿到註冊的bean,然後呼叫其中的方法。然後服務端就會服務了。
public class jmxclient );
jmxconnector connector = jmxconnecto***ctory.connect(address,
jmxenvironment);
system.out.println("jmxremote.main()2");
mbeanserverconnection mbs = connector.getmbeanserverconnection();
system.out.println("jmxremote.main()3");
threadmxbean threadbean = managementfactory.newplatformmxbeanproxy(
mbs, managementfactory.thread_mxbean_name,
threadmxbean.class);
system.out
.println(" getthreadcount " + threadbean.getthreadcount());
mbeanserverconnection connection = connector
.getmbeanserverconnection();
hellombean hellombean = jmx.newmxbeanproxy(connection, hello_name,
hellombean.class);
system.out.println("aaaaaaaa " + hellombean);
hellombean.setname("lkkkkkkk ddd basdf");
hellombean.print();
connector.close();
} catch (exception e)
}}
jmx的簡單例子就是這樣了。完畢!!!!!!
JMX讀書筆記) JMX的架構
jmx採用的是3層的架構模型 分配層 distributed layer 這一層主要包含了能jmxagent和外部世界進行通訊的元件。有兩種型別的互動,一種稱為adaptor,一種稱為connector.層 agent layer 這一層主要包含了agent和mbeanserver,前者為了方便管理...
JMX使用中碰到的問題
1.mbean中方法的名字切勿用作setxx或者getxx,按照jmx標準這是屬性的存在是根據 mbean 介面中是否存 在getname isname或setname方法 符合 standard mbean 的約定 來推斷的,於是這些方法會被當做 屬性的讀寫許可權,也就是attributes。而方...
JMX的查詢機制
之前查資料做的記錄,放上來,興許某天用的著 jmx發現和查詢服務 乙個jmx agent 通常包括了乙個 mbean server 和若干個協議聯結器和介面卡,也稱作連線伺服器,因為這些東西負責為遠端客戶端提供獲取和操作 mbean server 中的mbean 的介面。但是,如果乙個 mbeans...