JMX學(xué)習(xí)-2
最近覺得需要在設(shè)計(jì)方面多下些功夫,可能最近一段時間太過于沉溺于技術(shù)的細(xì)節(jié)了,所以準(zhǔn)備把項(xiàng)目程序的Design細(xì)致的分析一下。有時間的話把那本Head First Design Pattern看一下。
忘記說了這個專題介紹的JMX是JDK5.0時候的標(biāo)準(zhǔn),6.0好像有很多變動,這里不會介紹。
接著上次的繼續(xù)……
其實(shí)在這個專題中我不想把JMX這門技術(shù)面面俱到,也不想太鉆到細(xì)節(jié)里面,只是想寫一些個人對這個技術(shù)的理解,一個是對學(xué)習(xí)的一個檢驗(yàn),另外其一個備忘的作用。
?上一次說到了JMX分三個層次,分別是:基礎(chǔ)部件,代理,發(fā)布。下面分別介紹這三個層次。
1,基礎(chǔ)構(gòu)件(MBean)
每一個MBean有兩個部分組成,其中一個是后綴名為MBean的interface,另外一個是實(shí)現(xiàn)了這個接口的類,這點(diǎn)和EJB2.0很相似。我認(rèn)為相似的原因是他們都是可以遠(yuǎn)程調(diào)用的,所以客戶端只需要拿到那個實(shí)現(xiàn)了interface的Object就好了,不需要知道這個Object里面究竟是如何實(shí)現(xiàn)的。一個MBean的interface是用來定義暴露給MBeanServer的方法和屬性的,其中暴露的屬性是通過setter和getter方法來實(shí)現(xiàn)的,這個是符合JavaBean的規(guī)范的。MBean的Class則是實(shí)現(xiàn)這個interface,向外界提供具體的服務(wù),這個Class的名字必須是那個接口MBean后綴的前部分。
還有一中MBean是DynamicMBean,這種MBean不需要創(chuàng)建接口,只需要實(shí)現(xiàn)DynamicMBean這個接口就行了。這種MBean的作用就是可以通過反射的機(jī)制自定義暴露的方法,屬性,通知,而不使用MBeanServer提供的默認(rèn)的訪問規(guī)則。
還有就是Notification,這個理解起來很簡單就不講了。
2,代理層(MBeanServer)
代理層其實(shí)是管理MBean的容器,容器里面的MBean通過MBeanServer向外界提供服務(wù),所以這層叫做代理層。
一個MBeanServer通過如下的工廠方法創(chuàng)建:
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
MBean可以注冊到這個MBeanServer:
?
????? ObjectName name = new ObjectName("com.example.mbeans:type=Hello");?
????? Hello mbean = new Hello();?
????? Hello mbean = new Hello();?
?
ObjectName是從容器中取出這個MBean的Key。一個MBeanServer中不能注冊兩個相同的ObjectName。
MBeanServer基本上是通過反射機(jī)制來訪問容器中的MBean的,所以對外提供的訪問方法和反射機(jī)制很相似,基本上就是多了一個ObjectName的參數(shù)而已,下面列幾個例子:
mbs.getAttribute(mbeanObjectName, "State");mbs.setAttribute(mbeanObjectName, stateAttribute);mbs.invoke(mbeanObjectName, "reset", null, null);
//TODO?代理層先寫到這里吧,如果以后有需要補(bǔ)充的再加。
3,發(fā)布層
所謂發(fā)布層就是外界訪問代理層的方法。
可以通過如下的方法啟動一個RMI服務(wù)器
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");
JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs);
Client可以連接到這個RMI服務(wù)器
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
而MBeanServer就是繼承自MBeanServerConntion的,所以他們的大部分方法都一樣或者相似。
OK,JMX的基本概念就介紹到這里,以后的專題就是關(guān)于JMX的lookup service和JMX的應(yīng)用分析,比如在jboss和glassfish上的應(yīng)用。
posted @ 2007-02-27 23:26 solospider 閱讀(1360) | 評論 (0) | 編輯 收藏