Crawling Dialy

          常用鏈接

          統計

          最新評論

          2007年2月27日 #

          JMX學習-2

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

          posted @ 2007-02-27 23:26 solospider 閱讀(1360) | 評論 (0)編輯 收藏

          JMX學習-1

          這是第一篇關于java的文章,之前決定要寫一個關于線程的專題的,不過并發這個東西看上去還是比較深奧,寫一些比較淺的東西也沒什么意思,最近一段時間JMX接觸得比較多,索性就先寫一個JMX的專題吧。
          最早接觸這個東西是在05年的JavaChina大會上,其中有一個專門介紹JMX的Session,當時我聽完了也不知道這個東西到底是干什么的,只是看到演示的Demo很炫。后來也就一直沒怎么碰過這門技術,一直到06年的JavaTechDays我又聽了一個關于JMX的Session,畢竟一年的時間悟性提高了一些,終于聽懂了Session的內容,不過這個Session介紹的已經是JMX新的version了,JMX在JDK6.0中有了很多改進,加入了MXBean較之以前開發更簡單,靈活。
          首先總的介紹一下JMX這個概念,JMX是Java Management Extension的縮寫,其實簡單得說來就是用來監控Java Class運行時狀態的技術。而且他提供了強大的API和很好的設計,非常易于擴展,JDK5.0提供了這個技術的實現。
          下面簡單的介紹一下JMX之中的基本概念:
          1,MBean是JMX需要監控的Java Class類,每一個MBean都要實現一個后綴為MBean的接口,這個接口也是用戶定義的,這個接口是用來向JMX暴露可訪問的方法,屬性等
          2,MBeanServer是MBeans的管理者,MBeanServer提供一個MBean的容器,一旦MBean注冊到這個MBeanServer,這個MBean就被放到這個容器中,可以通過MBeanServer來訪問這個MBean的屬性和方法,(我覺得這個思路和EJB非常的相似)。
          3,Connector是用于用戶訪問MBeanServer的,有多種實現方式,有通過Http的連接方式,通過RMI的連接方式等
          其實這三個概念就是JMX的三個基本組成部分,JMX的Architecture就是由這三層組成的:
          1,基礎部件(MBean)
          2,代理層(MBeanServer)
          3,發布層(Connector)

          posted @ 2007-02-27 23:25 solospider 閱讀(5630) | 評論 (2)編輯 收藏

          僅列出標題  
          主站蜘蛛池模板: 阿坝县| 固始县| 吴堡县| 巴青县| 九台市| 板桥市| 汪清县| 马关县| 镇原县| 威远县| 海南省| 滁州市| 二手房| 富蕴县| 廉江市| 沽源县| 合川市| 邹平县| 新巴尔虎左旗| 庐江县| 巴青县| 扎兰屯市| 连南| 黄浦区| 石林| 九江县| 绿春县| 宁河县| 井冈山市| 思茅市| 湄潭县| 林芝县| 德昌县| 巴中市| 遵义县| 兴山县| 常州市| 虹口区| 汉阴县| 忻城县| 临江市|