日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

JMX之模型MBean

發(fā)布時(shí)間:2025/4/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JMX之模型MBean 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

標(biāo)準(zhǔn)MBean所暴露的屬性,操作,通知都是固定不變的,都固化在ClassNameMBean這個(gè)接口中,靈活度不足。

動(dòng)態(tài)Mbean所暴露的特性是運(yùn)行時(shí)確立,靈活度足夠,但編碼困難,因?yàn)槟阈枰幋a實(shí)現(xiàn)每一個(gè)屬性,操作與通知。

模型Mbean也是一種動(dòng)態(tài)Mbean,能夠使你更快的編寫(xiě)動(dòng)態(tài)MBean.

模型MBean的封裝類(lèi)RequiredModelMBean實(shí)現(xiàn)了ModelMBean接口,ModelMBean接口繼承自DynamicMBean,所以說(shuō)模型Mbean也是一種動(dòng)態(tài)Mbean

首先定義需要管理的資源:

  • package?guojje.jmx; ?
  • ?
  • import?javax.management.NotificationBroadcasterSupport; ?
  • ?
  • public?class?HelloWordShadow?extends?NotificationBroadcasterSupport{ ?
  • ???? ?
  • ????private?String?name?=?"anranran"; ?
  • ????public?HelloWordShadow(String?name){ ?
  • ????????this.name?=?name; ?
  • ????} ?
  • ???? ?
  • ????public?String?getName(){ ?
  • ????????System.out.println("invoke?getName?method!!"); ?
  • ????????return?name; ?
  • ????} ?
  • ???? ?
  • ????public?void?setName(String?name){ ?
  • ????????System.out.println("invoke?setName?method!!"); ?
  • ????????this.name?=?name; ?
  • ????} ?
  • ???? ?
  • ????public?void?Say(){ ?
  • ????????System.out.println("hi~!!!"); ?
  • ????} ?
  • } ?
  • 測(cè)試類(lèi):

  • package?guojje.jmx; ?
  • public?class?Main?{ ?
  • ????public?static?void?main(String?args[])?throws?Exception?{ ?
  • ????????JMXServiceURL?jUrl?=?new?JMXServiceURL("iiop",?"192.168.1.61",?9998, ?
  • ????????????????"/jndi/rmi://localhost:9999/guojje"); ?
  • ????????MBeanServer?ms?=?MBeanServerFactory.createMBeanServer(); ?
  • ????????JMXConnectorServer?cs?=?JMXConnectorServerFactory ?
  • ????????????????.newJMXConnectorServer(jUrl,?null,?ms); ?
  • ????????cs.start(); ?
  • ????????System.out.println("jmx?address:"?+?cs.getAddress()); ?
  • ?
  • ????????exeHelloWordShadow(ms); ?
  • ????} ?
  • private?static?void?exeHelloWordShadow(MBeanServer?ms)?throws?Exception?{ ?
  • ????????RequiredModelMBean?rmm?=?new?RequiredModelMBean(); ?
  • ????????//add?a?property?called?'name' ?
  • ????????ModelMBeanAttributeInfo?nameAttr?=?new?ModelMBeanAttributeInfo("name","java.lang.String", ?
  • ????????????????"pepole?name",true,?true,?false,null); ?
  • ???????? ?
  • ????????ModelMBeanInfo?mmInfo?=?new?ModelMBeanInfoSupport(RequiredModelMBean.class.toString(),?"Jmx?demo",?new?ModelMBeanAttributeInfo[]{nameAttr},?null,?null,?null); ?
  • ????????rmm.setModelMBeanInfo(mmInfo); ?
  • ????//System.out.println(nameAttr.getDescriptor().getFieldValue("value"));//1 ?
  • ????????rmm.setAttribute(new?Attribute("name",?"guojianjun")); ?
  • ????????System.out.println(rmm.getAttribute("name")); ?
  • ????//System.out.println(nameAttr.getDescriptor().getFieldValue("value"));?//2 ?
  • } ?
  • 目前nameHelloWorkShadow還沒(méi)有任何關(guān)系,去掉12兩行注釋,你會(huì)發(fā)現(xiàn)ModelMBeanAttributeInfo的描述子用來(lái)存儲(chǔ)了這個(gè)值(代碼中,ModelMBeanAttributeInfo的最后一個(gè)參數(shù),我設(shè)了null,JDK會(huì)為之創(chuàng)建一個(gè)默認(rèn)的描述子)。


    ?

    如何把對(duì)MBean的操作轉(zhuǎn)移動(dòng)對(duì)HelloWordShadow的操作,以達(dá)到我們管是資源的目的。

    第一步為ModelMBeanAttributeInfo對(duì)像添加get,set方法.

  • private?static?void?exeHelloWordShadow(MBeanServer?ms)?throws?Exception?{ ?
  • RequiredModelMBean?rmm?=?new?RequiredModelMBean(); ?
  • ????????Method?getMethod?=?HelloWordShadow.class.getMethod("getName", ?
  • ????????????????new?Class[]?{}); ?
  • ????????Method?setMethod?=?HelloWordShadow.class.getMethod("setName", ?
  • ????????????????new?Class[]?{String.class}); ?
  • ????????//add?a?property?called?'name' ?
  • ????????ModelMBeanAttributeInfo?nameAttr?=?new?ModelMBeanAttributeInfo("name", ?
  • ????????????????"pepole?name",getMethod,?setMethod,null); ?
  • ???????? ?
  • ???????? ?
  • ???????? ?
  • ????????ModelMBeanInfo?mmInfo?=?new?ModelMBeanInfoSupport(RequiredModelMBean.class.toString(),?"Jmx?demo",?new?ModelMBeanAttributeInfo[]{nameAttr},?null,?null,?null); ?
  • ????????rmm.setModelMBeanInfo(mmInfo); ?
  • ???????? ?
  • ????????rmm.setAttribute(new?Attribute("name",?"guojianjun")); ?
  • ????????System.out.println(rmm.getAttribute("name"));? ?
  • }?
  • 運(yùn)行結(jié)果:

    jmx address:service:jmx:iiop://192.168.1.61:9998/jndi/rmi://localhost:9999/guojje

    guojianjun

    發(fā)現(xiàn)并沒(méi)有起作用。剛才說(shuō)到ModelMBeanAttributeInfo用了默認(rèn)的描述子,我們不防給

    添加一個(gè)描述子:

  • private?static?void?exeHelloWordShadow(MBeanServer?ms)?throws?Exception?{ ?
  • ??? .....
  • Descriptor?nameDesc?=?new?DescriptorSupport(); ?
  • ????????nameDesc.setField("name",?"Name");//must?be?setted ?
  • ????????nameDesc.setField("descriptorType",?"attribute");//must?be?setted ?
  • ????????nameDesc.setField("displayName",?"Name"); ?
  • ????????nameDesc.setField("getMethod",?"getName"); ?
  • ????????nameDesc.setField("setMethod",?"setName"); ?
  • ????????//add?a?property?called?'name' ?
  • ????????ModelMBeanAttributeInfo?nameAttr?=?new?ModelMBeanAttributeInfo("name", ?
  • ????????????????"pepole?name",getMethod,?setMethod,nameDesc); ?
  • ???????? ?
  • ????????ModelMBeanInfo?mmInfo?=?new?ModelMBeanInfoSupport(null,?"Jmx?demo",?new?ModelMBeanAttributeInfo[]{nameAttr},?null,?null,?null); ?
  • ????????rmm.setModelMBeanInfo(mmInfo); ?
  • ???????? ?
  • ????????rmm.setAttribute(new?Attribute("name",?"guojianjun")); ?
  • ????????System.out.println(rmm.getAttribute("name")); ?
  • }?
  • 更糟糕,直接報(bào)錯(cuò):Operation setName not in ModelMBeanInfo

    但這也說(shuō)明是用描述子設(shè)定set方法是正確的。這樣我們需要在ModelMBeanInfo中聲明setName操作,getName一樣:?

  • .....
  • //add?a?property?called?'name' ?
  • ????????ModelMBeanAttributeInfo?nameAttr?=?new?ModelMBeanAttributeInfo("name", ?
  • ????????????????"pepole?name",getMethod,?setMethod,nameDesc); ?
  • ???????? ?
  • ?????????//parameter?is?not?necessary ?
  • ?????????ModelMBeanOperationInfo?getName?=?new?ModelMBeanOperationInfo(// ?
  • ????????????????????"getName",?// ?
  • ????????????????????"get?name?attribute",?// ?
  • ????????????????????null,?// ?
  • ????????????????????"java.lang.String",?// ?
  • ????????????????????MBeanOperationInfo.ACTION,?// ?
  • ????????????????????null// ?
  • ??????????????????);? ?
  • ????????? ?
  • ?????????MBeanParameterInfo?mParam?=?new?MBeanParameterInfo("name",?"java.lang.String",?"set?name?methord?param"); ?
  • ????????? ?
  • ?????????ModelMBeanOperationInfo?setName?=?new?ModelMBeanOperationInfo(// ?
  • ????????????????????"setName",?// ?
  • ????????????????????"set?name?attribute",?// ?
  • ????????????????????new?MBeanParameterInfo[]{mParam},?// ?
  • ????????????????????null,?// ?
  • ????????????????????MBeanOperationInfo.ACTION,?// ?
  • ????????????????????null// ?
  • ??????????);? ?
  • ???????? ?
  • ????????ModelMBeanInfo?mmInfo?=?new?ModelMBeanInfoSupport(null,?"Jmx?demo",?new?ModelMBeanAttributeInfo[]{nameAttr},? ?
  • ????????????????null?,?new?ModelMBeanOperationInfo[]{getName,setName},?null); ?
  • ????????rmm.setModelMBeanInfo(mmInfo); ?
  • ???????? ?
  • ????????rmm.setAttribute(new?Attribute("name",?"guojianjun")); ?
  • ????????System.out.println(rmm.getAttribute("name")); ?
  • 仍然報(bào)錯(cuò): managedResource for invoke setName is null

    managedResource是什么?就是我們需要管理的對(duì)像資源,在這里當(dāng)然是HelloWordShadow對(duì)象,終于扯上關(guān)系了。那就構(gòu)造一個(gè)HelloWordShadow對(duì)象:

  • .....
  • ModelMBeanInfo?mmInfo?=?new?ModelMBeanInfoSupport(RequiredModelMBean.class.toString(),?"Jmx?demo",?new?ModelMBeanAttributeInfo[]{nameAttr},? ?
  • ????????????????null?,?new?ModelMBeanOperationInfo[]{getName,setName},?null); ?
  • ????????rmm.setModelMBeanInfo(mmInfo); ?
  • ???????? ?
  • ????????HelloWordShadow?hw?=?new?HelloWordShadow("miniName"); ?
  • ????????rmm.setManagedResource(hw,?"ObjectReference"); ?
  • ???????? ?
  • ????????rmm.setAttribute(new?Attribute("name",?"guojianjun")); ?
  • ????????System.out.println(rmm.getAttribute("name")); ?
  • 運(yùn)行輸出:

    jmx address:service:jmx:iiop://192.168.1.61:9998/jndi/rmi://localhost:9999/guojje

    invoke getName method!!

    invoke setName method!!

    invoke getName method!!

    guojianjun

    OK,成功。說(shuō)了這么多,那構(gòu)造函數(shù)ModelMBeanAttributeInfo("name",???????? "pepole name",getMethod, setMethod,nameDesc);里的getMethod, setMethod方法有什么用呢,我覺(jué)得好像沒(méi)什么用,只是用來(lái)確認(rèn)屬性類(lèi)型,可讀可寫(xiě)情況。(個(gè)人觀點(diǎn))

    最后就是把這個(gè)MBean注冊(cè)到MBeanServer中管理,Jconsole就可以看到了:

    ms.registerMBean(rmm, new ObjectName(

    ?????? "guojje:type=notification,name=hello"));

    (待續(xù))

    轉(zhuǎn)載于:https://blog.51cto.com/guojuanjun/599229

    總結(jié)

    以上是生活随笔為你收集整理的JMX之模型MBean的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 九一亚色 | 精品无码人妻一区二区免费蜜桃 | 日韩精品第二页 | 亚洲一区二区在线电影 | www一级片 | 亚洲综合五月天婷婷丁香 | 亚洲高清自拍 | 国产精品一区二区三区在线 | 国语对白一区二区三区 | 欧洲xxxxx| 日本一级二级视频 | aaa日韩| 国产女主播一区 | 日韩3p| 韩国av电影在线观看 | 久久激情网站 | 亚洲一区二区三区精品视频 | 欧美亚洲一区 | 在线欧美视频 | 波多野结衣黄色片 | 成人片免费视频 | 亚洲欧美自拍偷拍 | 紧身裙女教师三上悠亚红杏 | 黄色网址在线免费观看 | 久久久久久久久久久久久久av | 久久国产视频精品 | 中文字幕女优 | 亚洲成人无码久久 | 污污的视频在线观看 | 国产精品人成 | 黄色一级黄色片 | 日本少妇做爰全过程毛片 | 久久色资源网 | 日韩片在线 | 成人h动漫精品一区二区下载 | 国内三级在线 | 亚洲综合日韩精品欧美综合区 | 久久久情 | 伊人激情综合网 | 两个女人互添下身爱爱 | 性色欲网站人妻丰满中文久久不卡 | 亚洲视频久久久 | 国产精品粉嫩 | 日本在线视频一区二区三区 | 解开人妻的裙子猛烈进入 | 国产色播 | 久操免费在线 | 天天干夜夜夜 | 91精品国产视频 | 黄色福利片 | 波多野结衣一区二区在线 | 波多野结衣在线观看一区二区 | 亚洲 欧美 自拍偷拍 | 一级片黄色的 | 精品视频在线免费看 | 国产毛片一区二区三区va在线 | 男人天堂视频网 | 性欧美精品男男 | 天天夜碰日日摸日日澡性色av | 日韩国产中文字幕 | 午夜天堂视频 | 午夜肉体高潮免费毛片 | 欧美日韩在线高清 | 97在线免费视频 | 免费av黄色 | 亚洲一区在线免费 | 亚洲一区二区三区视频 | 97久久国产精品 | a级一片 | 人妻换人妻a片爽麻豆 | 蜜臀尤物一区二区三区直播 | 又欲又污又肉又黄短文 | 93久久精品日日躁夜夜躁欧美 | 91久久精品一区二区 | 无码人妻h动漫 | 国产伦精品一区二区三区视频黑人 | 性少妇bbw张开 | 国产在线观看免费视频软件 | 91成人在线观看喷潮 | 少妇又色又紧又爽又刺激视频 | 在线观看三区 | 亚洲熟女乱色综合亚洲av | 亚洲一级理论片 | 大又大粗又爽又黄少妇毛片 | 69xxxx国产| 里番acg★同人里番本子大全 | 老司机午夜福利视频 | 91黄视频在线观看 | 女人扒开屁股让男人桶 | 吊侵犯の奶水授乳羞羞漫画 | 国产ts丝袜人妖系列视频 | 69av网| 在线观看涩涩视频 | 色老头在线一区二区三区 | 国产精品丝袜在线观看 | 午夜激情婷婷 | 精品一区中文字幕 | 亚洲视频一区二区 | 日本无翼乌邪恶大全彩h |