WebJMX开源项目应用与进阶_第1页
WebJMX开源项目应用与进阶_第2页
WebJMX开源项目应用与进阶_第3页
WebJMX开源项目应用与进阶_第4页
WebJMX开源项目应用与进阶_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

最近公司用到一些关于JMX的使用,在我的BLOG之前介绍过JMX。一个简单的JMX结构由以下几个步骤去完成:①需要一个MBeanServer作为一个容器,去装载你的MBean如下创建:MBeanServerserver=MBeanServerFactory.createMBeanServer("Local");②ObjectName,JDK文档对它的描述是这样的:表示MBean的对象名,或者能够与多个MBean名称相匹配的模式。我们可以从字面上了解到他是干什么的了,就好比一个KEY,当我们的MBean注入MBeanServer后总要有一个标识它,以方便我们以后通过这个KEY去找过我们的MBean.如下创建:ObjectNamemanager=newObjectName("NCS:name=scheduler");③将我们需要进行管理的MBean注册到MBeanServer中,具体如下:

server.registerMBean(newIScheduler(),manager);这样就算告一段落了,完成以上步骤后,将实现一个MBeanServer(一个容器)中拥有多个MBean(受管理的类).这就是JMX的基本实现。那么如果要对MBean进行管理当然少不了一些管理机制,如SUN自己提供的HtmlAdaptorServer和Jconsole。HtmlAdaptorServer可以通过WEB对MBean进行管理,Jconsole则是C/S结构的。下面列举一下HtmlAdaptorServer的使用方法:HtmlAdaptorServeradapter=newHtmlAdaptorServer();

server.registerMBean(adapter,adapterName);以上代码片段可以看出其实HtmlAdaptorServer也就是个MBean,而这个MBean可访问注册在MBeanServer的其他MBean而已。最后启动HtmlAdaptorServer:adapter.start();完整代码片段://XXX()自定义方法名吧!publicvoidXXX(){

try{

//createMBSERVERnameisWUBINSERVER采

晶Li煮st害l漏=兄M枝Be境a掉nS鹊er们ve腔rF胁ac宁to痛ry带.f映in叠dM煮Be柏an档Se切rv馅er球(n炭ul剩l)撞;吓

炕if那(律l.银si汪ze奖()屈>丘0伙)翠{

废s扭er质ve秋r舞=郑(M是Be孩an微Se纱rv俭er话)省l.甜ge工t(集0)防;

瑞}胀el北se妇{

嫌s猾er龄ve想r觉=厦MB盼ea兆nS燕er壁ve伐rF袖ac忌to疏ry体.c鸦re浊at挣eM唤Be闯an项Se候rv尼er胀("沃Lo脂ca槽l"学);

金}冤

令//撕R戴eg第is言te张r各Ht拐ml咐Ad旗ap就to民rs此er亭ve皇r么po择rt资i损s远80妖82奶.

伞Ob沙je夜ct平Na底me匪a寺da观pt更er阔Na虾me假=瑞n五ew珠O刮bj这ec陵tN涛am团e(

璃"M号an匀ag炒er坑Ag窃en誉t:西na捉me祥=h渡tm清la遍da恳pt胡er翻,p凡or号t=浩80朵82萝")妹;

馆Ht楚ml纠Ad加ap毒to掏rS慰er成ve摘r朴ad正ap炸te鱼r耻=观ne搬w河Ht疫ml群Ad妙ap蔽to随rS姑er贴ve变r(司);

僵se餐rv验er镜.r乘eg挠is燃te刷rM盲Be纵an涝(a虾da颠pt悼er俘,岔ad乒ap登te汁rN妻am防e)笋;倾

剖//花y染ou叨r钥se燕lf矛o州bj迫ec卧tn盛am构e颈re启gi洲st衡er准.

士Ob致je渴ct纱Na故me坚m释an韵ag部er销=名n嚼ew读O筝bj遵ec缩tN盐am速e(尾"N峰CS鸟:n棕am徐e=晋sc肿he朝du碍le徒r"坐);

稠se留rv危er绍.r烫eg根is践te巩rM肿Be瓜an本(n滨ew毯I嘱Sc脖he品du红le贪r(骆),洪m败an姿ag骨er约);

壶Ob爱je模ct膛Na扁me笔m百an鸽ag虫er马2虏=逃ne兰w醉Ob艇je白ct阻Na坊me遣("土NC种S:昂na种me举=s杏ch举ed土ul女er明2"拔);

瓜se滔rv北er形.r米eg侨is圾te探rM稿Be抗an愉(n桶ew赚I量Sc可he垂du恢le谢r(阀),愈m伴an饺ag山er涂2)湾;

轧//余

呈Ob选je哄ct忠Na珍me之m歼an燃ag助er陕=妇n微ew攀O减bj监ec乡tN访am厘e(全"N变CS夏:n款am员e=象sc缓he扯du商le洗r1宪")闸;

吉//姻

油se竖rv殃er某.r猴eg稻is誓te磨rM穿Be毕an咽(n覆ew讽J锹ob隶Ma章na誉ge直rM乓Be胳an住Im侄pl铜()嘱,颗ma米na底ge箩r)扮;

蜘ad类ap俯te喊r.浸st艘ar虹t(进);

牺Sy请st惨em扒.o椒ut犬.p深ri旧nt幸ln舱("喂st例ar些t.获..唱..高")胆;捏

舟}斥c呀at膏ch秋(蹈Ma向lf失or猜me抹dO生bj涌ec蚀tN喘am创eE数xc禽ep姓ti恼on轰e蕉)质{

首//使T四OD斩O闸Au权to委-g亦en饥er班at影ed钟c毙at拿ch浇b判lo惯ck

叶e.孔pr亚in诸tS胡ta牵ck加Tr壮ac变e(水);

死}执c莫at窗ch绒(支In龟st榜an芒ce滚Al剂re同ad棚yE齐xi秃st准sE亿xc蠢ep释ti捡on腐e四)信{

叹//净T典OD彻O首Au牙to超-g垃en签er渐at扰ed圾c峰at般ch果b蓬lo掏ck

舒e.挠pr址in幻tS等ta馅ck资Tr弄ac华e(呢);

锤}杯c晨at挖ch灯(舍MB西ea哨nR财eg逝is均tr哥at霸io呈nE甘xc牧ep烟ti巡on擦e熔)浅{

垫//阔T狂OD敬O拜Au碗to葵-g贼en蹈er境at筹ed霞c辛at牲ch乱b焰lo或ck

印e.勉pr坐in肝tS贴ta遍ck忌Tr晒ac录e(筑);

屿

卵}畅c雷at债ch尽(雀No卫tC售om魄pl萍ia软nt兄MB骨ea蒜nE贱xc央ep侍ti颜on左e叉)而{

惰//茫T资OD洁O沉Au俗to衬-g绘en再er萝at哑ed喜c委at术ch消b柳lo坡ck

乞e.填pr腐in箭tS缝ta喝ck斯Tr雨ac售e(延);

待}躬c爪at脸ch演(岔Nu海ll友Po碌in迅te歉rE祖xc闲ep乏ti享on悄e伶)降{

舰//阁T随OD乱O拜Au惹to衔-g评en骄er乓at梦ed具c让at性ch旋b雷lo始ck

混e.格pr飘in凭tS杠ta伴ck矿Tr崖ac掏e(欢);

豪}

见}腐当我育们访料问本额地的趋80仍82疤后就广可以联看到神Ht权ml鱼Ad呈ap绪to蠢rS竭er盲ve捞r引所提抖供的贯管理火界面并,但联这样浅的管域理界献面非欣常不抚人性去化,证(那轿么丑蛾,怎包么见羊人呢驴?)育那下方面我们隆重挡介绍乌的就丢是W表eb聋JM赌X!汇!!混他能炉帮我付们解暑决管酷理界疮面的晓问题究,让知我们纠可自铜编写凶自己元的管鹊理界贱面。住We将bJ不MX票T刊ag穿L崖ib桐ra编ry报P与ro怜je余ct浮首先施下载贫WE羡BJ偶MX稳ht泡tp独:/叨/s决ou武rc旷ef悟or萝ge良.n饶et车/p闪ro菜je亦ct抓/s没ho肯wf垦il矿es文.p锋hp杀?g扛ro椒up过_i奏d=摔58傍76蒜9&阶re究le婆as耍e_钥id勤=1居02奉25耍7鸽(建填议下肺1.怠2a界版本恨)妨那在予DO正WN戒LO巧AD拉IN谈G.兽..佳的时译候我约来说始一下区WE香BJ贯MX膝的缺翼陷。酬。。贸(是锤不是隐开门缺一棒救,呵增呵,吉这个谁我必件须先行告诉谨大家董一声第,不罗然你晶发现理如果约WE木BJ发MX讨并不交适合范你的井工程陡那下尘来也凑没什塑么意住义了岁。)过缺陷猜:习1、维WE旧BJ顾MX省在2榜00乎2年惯之后须就再烂也没蕉有更惰新过伴,最秀后一沃个版神本是膜1.渗3。哪很遗坏憾,汉有可柜能以寇后都匹不会陆有新席的更锤新,誓如果哨你觉湾得这俩点无华法接泪受,话我可休以介知绍给涝你其崇他-辱--屿--孕--环-M街X4划J,紫不过测这个中东西增很麻师烦,咱如果耗有兴接趣自骂己去敬找找绩资料冰吧。糟2、飘WE蛇BJ向MX膝是中储标签缘,其取他就颜是利扰用标捕签库乔进行溜VI目EW穴。虽森说标窗签已扇属于滩过去违式,哪但不朋代表维没有克人用盲它嘛正,象劳我这置样的够老人宅家还担在用供呢!刺:)粪3、徒WE桶BJ股MX植部署停混乱们,资盲料较申缺。窗这点韵没有河什么宽办法测,所严以我欧建议惊大家共下W印EB塌JM渔X1的.2叹a版胶本,付那个料1.脊3版喝本的柜必须孔用A见NT热部署奸才行劲,而辨且里慈面有洋很多甜需要翁在环驱境变纯量里脾配置艺的东稿西,宋比如崖TO天MC持AT框HO闲ME俘啊S刊TR拼UT全SH郊OM剩E啊亲等等极HO市ME沸。而尤且我放发现壳在那讨AN幅T脚汗本里母本提排到有薄个J稀MX脆.w吼ar安包在宪TE井MP尖目录汤下,钻结果概去寻安找也尺没找袍到~妇~~绑作者向的失割败之绵处…抹…胡4、归WE烤BJ歇MX宽用的健JD货K是喘1.棒4的撑,但政不要厅紧也雹支持糊1.仙5仿好了盆,废限话过系后相桐信你油的W龙EB债JM语X工苍程也挖该下乞好了帜,把笨开始坟我们辈的W涉EB券JM瞧X旅匪程吧届,我市希望波它是领轻松需愉快狡的。签小女可子才勺疏学厚浅,曾如果汤有错名误也挡希望乳得到瞎批评食,但孟不要这象X胜X人席在我拐的留驻言版颜中一求样骂棍我,判说偶馅的B按LO盲G是纲垃圾包BL却OG毁,即流便是祝垃圾厘BL瘦OG辅也麻概烦留模点所患谓的熔垃圾衡评语尽(为捷虾米敞垃圾兼)啊拼,否谁则就安太不箭知所鬼为了拒。蜂我推音荐的扔部署塑方式苗并不娇是用胞他提榆供的裁AN强T脚依本,胁而是粥我们含自己毛的部崇署手扰段。培我们饲先用浙MY远EC均LI谦P牧SE往创建爆一个僚WE扇B的译PR袄OJ在EC重T。援叫W崭EB追JM眼X,毁然后上将W偷EB拒JM陵X目滴录下吐的o夏rg雹整个谣目录单拷贝销到我有们的增新建搞的工坛程的漫sr塞c目即录下阅,然鼻后我界们会嚼看到饱好多酿红叉恩叉。粘不用行害怕旦,这谁都算庸少的笨了…搁…蕉然后疯导入倍几个占包包臭,这散个包朋包有顶MX坑4J庸的、俩ST差RU畜TS检的、锣QU净IC染K的镇还有奉JM掌X自少己的奥。由开于W猪EB稳JM液X是泉使用耐1.沾4的蜂JD鸦K。递所以纷当时帅SU拴N公压司还哥没有师将J护MX础放到鞭JD陶K中啦,.鲜1.喂5就开没事钩了。跌导完腥后差纽不多毅如下渔图那捆么多坏。承有可姐能在溜or净g部标署的适时候拼会遇捷到e兔nu解m这陕是因雹为W侵EB议JM登X使扩用的悉JD旧K是兄1.烫4的凑,而先我们逼现在绍基本梁使用吹1.宅5以贿上的住版本况,只收要用效户自舅己随缝便改丙改变印量名清就可诊以了孤,别殿用e丘nu亩m这蜻个变溪量名钻。促以下字展示捷了两茅幅图蛮:歪这是产Ht闲ml馋Ad礼ap恳to己rS灰er健ve葡r岗的管谁理界极面预(欣여기斑에서芽催간단炒한抵H福TM够L固공용浊영역软이暑J桶MX延获참고鼠阻실시扯로也泄오는僵H邮TM倒LA埋da转pt艇or组袄분대提에皮旨의하戏여含细제공竖한忠)益而这岗就是嫁WE竿BJ真MX专实例敌的管筝理界婚面,嫩是不扒是比霜上面透那个工人性辣化的小多呢炭?(希여기亦에서听W阀bJ控MX支를当挑사용近하여叛J稿SP软에서旬沙동일零한塌M欧Be要an视Se训rv唐er仁의祸资전망摄에冒廊의하纵여董乘표를筹背붙이规는详)困结构色(纸건축始술品)掉WE鬼BJ软MX测标签性包括码这些喘部分碗(J猛MX柏哪꼬리立표乔裁도서恐관은狐其이厨略분대行茎이루欧어져咐盆있다糊)玉*酸一套域JS唯P标起签和沙描述婆标签竭句法膀的T念LD宰的J勤av休a类经。(渴꼬리焰표勉绘통어惭론의守超일销J或SP毯拼꼬리坟표骨薄그리杨고滔T涉LD含竞묘사妹를气丽하는白J碑av御a仍클래仁스의搂丽세트聪)反*咬由一屋个S室ER壮VL誓ET继接受净页面练上表雨单提蝇交过判来的滩数据晚。其命实在述这表麦单的拨数据和是W是eb秒JM傲X标澡记修连改后攻生成亿的。浓这个梁表单摔类似小于这贵样证(掘페이守지에渔S坦ER蚁VL粥ET赤에鹅膀의하播여搞牙모양厦이柱亮복종肃시키旺는纸镰자료煎를膊促받아斯들인裂다幅.尤실제股로饰得이铅欧모양沃&侄#3崭9添후에该;朽s盗자료烟는好W把eb层JM燕X谷표圆棉교정邻啊생성卷한다伸이다昌.但이良缘모양与은练缺유사愚하다订朴이것凶을政记좋아溪하기抄研위하筝여心):粱<j泛mx盼:f抗or骡mM鱼Be良an佩n化am享e=释"c期ha赛ng抗es缠ch廊ed宵ul障er煮na促me勒"娱mb渣ea舱n=甘"m饼be捡an页"季in炕vo汪ke毛="漆re毕sc疼he像du垮le柏Jo胡b"什l氏ab说el时="胜调用稠">贿于我郊们常瞧见的诞FO衰RM稍很不核同。量*机通过写使用著JS纸P标劫签和括Se肚rv介le泡t调裂用A乳da运pt炭er鸡Fa越ct屈or庙y可托以得淋到M度Be哑an偷Se统rv否er丑s毯。(徒MB临e针an贿Se搭rv醉er冷s援를祖网얻기嫂盐위하灯여窜蹲가능岩한腹贡용도份를如衬통해辨S眼er遇vl说et妥J屋SP勤匪상표娱何및浓键이동沸A灶da近pt沾er尿Fa上ct祖or泻y)桌结构壶图:昆(豆구조穿蜜그림侵):狸我们辛可以棉从上控图中酿看到剑,W乐EB罢JM碑X是偏怎么宗工作偶的(店虽然私不是趟流程涌图,赛但其叼实一陶目了瑞然!散)。科用户误通过患WE瓜B浏丝览器织通过伞HT袭TP鹿r闷eq特ue该st渴触浅发A文CT镇IO慨N(讯JM士XA波CT沙IO鼓N窃SE售RV括LE槽T)洲然后运通过荷JM异XS凭er享iv艺ce争Ad见ap茎te渠r访送问M犬BE胆AN胆SE腥RV停ER近(能达访问仿MB欧EA掌NS传ER励VE列R也树以为去着能跳管理橡SE洪RV错ER胡中的俱MB团EA慢N啦验!)唇,那栋JM垦XS淡er桐iv产ce防Ad远ap阳te镜r其捕实是节种适泛配器否,我肤们之弦前介多绍过玉的H犯TM胃LA像da肌pt消er蜘也是贞适配铃器。脉好!呼下面耀就开凡始看非看我湖们的头例子升来真错正认树识一仪下W棉EB唉JM卧X。彻首先锻作为河一个如WE箩B程龙序最用重要零的当骆然是寻WE辅B.项xm吸l啦讨,那改我们煌就从云它开拨始…骄…旅<?拦xm拨l始ve限rs惠io芳n=菜"1喘.0盐"云en钢co镜di蝶ng委="概IS望O-护88开59亿-1蹲"?押>

孤<!膜DO器CT谱YP翼E愈we耍b-译ap码p派PU爬BL仙IC赴"倾-/附/S情un恒M露ic帖ro愤sy雁st英em路s,爆I防nc姜./诚/D车TD项W奉eb布A顺pp猛li叫ca凳ti留on庆2膝.2棕//夏EN炼"唇"滩ht溜tp咬:/争/j哈av确a.新su庆n.济co甩m/逃j2悉ee浅/d刮td骆s/网we嫌b-散ap咽p_攀2_像2.足dt春d楚"><web-app>

丹<!减--松r猪eg外is洋te摘r避th叮e娘JM吨X撤Ac盯ti技on冠U袋RL凑a引s杜an倡a房pp征li佩ca结ti苦on顽p韵ar伟am爷et晨er渴--蚀>

非<c窝on旨te浅xt舒-p宁ar氏am秩>

摆<p拆ar择am纺-n注am恳e>惯jm柱xA龄ct洲io捕n<惨/p参ar扭am成-n伏am滑e>

亩<p臂ar歉am嚷-v逝al伯ue浙>j锦mx社Ac冰ti哭on顾</蜓pa侍ra隔m-哨va急lu悠e>

父<d绍es伤cr唐ip焰ti付on牺>D适ef计au辆lt魔m距ap部pi怪ng盗t塌o相th游e乏JM贵XA巩ct笛io汗n倡se狡rv乖le悟t.岩</嗽de疗sc慨ri乓pt宪io雄n>

艳</义co属nt饲ex湿t-臭pa族ra揉m>

党<!哗--喇J皮MX僵A柱ct痒io博n锣Se肾rv跳le啄t待Co氧nf挥ig上ur少at袜io崇n转--希>

浴<s羊er量vl舒et贼>

躬<s述er宇vl蝇et关-n爱am拌e>饿ag般en袄t<日/s和er患vl宅et瘦-n天am醋e>

挂<s咬er背vl减et天-c祖la嗽ss卷>o锻rg圣.w录eb害jm嚼x.善ex拴am嘱pl筝e.侨Ag阔en可tS滥er仓vl裹et哑</塔se掘rv每le肝t-冤cl恭as灵s>

唤<i堂ni摘t-真pa舌ra耕m>

侦<p泰ar鸟am纹-n衔am爱e>辩lo鹊ca急to者r0爷</屡pa露ra至m-底na风me鼠>

鲜<p灵ar描am音-v薯al您ue柄>l弦oc堡al抬</梯pa蠢ra榜m-滥va守lu拨e>

岛</怒in挥it晒-p蛾ar凝am率>

优<l构oa放d-咳on伯-s惊ta旬rt姐up统/酱>

躬</膛se躁rv闯le姓t>

查<s狗er迟vl缠et君>

尿

廊<s甚er委vl隔et氏-n肯am昂e>禁jm损xA吐ct熔io第n<疲/s摸er迎vl停et嚷-n嫁am抄e>

幻<s融er扎vl扣et罢-c跌la踪ss粗>o娃rg矮.w昏eb片jm践x.安se陪rv级le体t.悔JM股XA酒ct勾io踢n<致/s糠er丝vl厦et芹-c宝la厌ss摆>

败<l处oa锻d-巩on逝-s穴ta跃rt望up勺/蔽>

烂</粒se僚rv渡le限t>

叶<s萌er搏vl摸et袭>

哥<s穗er句vl晓et花-n驴am浓e>糊ac流ti只on舰</抹se跪rv报le肠t-败na引me民>

连<s效er骡vl萍et翅-c奋la包ss替>o采rg厦.a漫pa房ch万e.旱st势ru导ts钥.a皱ct攻io扑n.车Ac吩ti姨on冒Se绍rv亭le决t<前/s属er石vl资et辈-c纠la缠ss羡>

桥<i杏ni挺t-爬pa盏ra抓m>

渴<p尺ar寄am圣-n挂am爽e>滨co畏nf好ig古</陡pa芝ra亩m-禽na确me蚂>

俩<p昨ar寒am君-v北al纸ue算>/英WE丝B-突IN苏F/押st它ru蚊ts崇-c画on懂fi巾g.庄xm陪l<疾/p沟ar逐am惜-v芝al穗ue复>

络</嗽in践it浓-p责ar件am喜>

颈<i灾ni奶t-枪pa字ra甘m>

射<p确ar肥am叔-n卷am再e>夹de纽bu烫g<呀/p尸ar拉am溉-n唉am气e>

次<p亮ar瓶am把-v俗al象ue抽>3注</驱pa筐ra樱m-撕va愉lu绿e>

鸟</既in求it督-p活ar衡am斗>

稿

肚<i滩ni妻t-企pa晌ra锻m>

铲<p涛ar败am得-n杰am躬e>抗de精ta议il讽</卵pa仍ra哀m-歌na屑me上>

拴<p疯ar解am合-v勺al播ue愧>3些</觉pa奋ra宜m-万va却lu穗e>

扬</尊in附it急-p设ar武am方>

燕<l直oa议d-我on催-s饺ta飞rt鲜up饺>0巩</伴lo京ad联-o尽n-太st魂ar傅tu济p>

糟</凝se宗rv旷le佩t>

般<!危--结J疤MX志A廉ct哄io盏n椅Se泛rv缩le纪t蹄Ma黄pp杀in北g枝--府>

肃<s削er帜vl糕et塌-m掏ap齿pi总ng油>

溉<s伍er会vl冲et鸡-n跌am居e>僻jm缓xA怜ct虎io藏n<骨/s呆er吵vl威et祝-n怒am何e>

馋<u死rl桐-p录at堆te弦rn顿>/阁jm秆xA症ct呀io柳n<火/u太rl济-p泄at惯te剃rn鞋>

涛</科se伤rv活le与t-解ma凶pp浅in革g>

戒<s停er后vl海et地-m精ap楼pi械ng损>

梁<s石er柏vl凡et撤-n畅am蜂e>测ac烛ti副on谊</坐se假rv境le钻t-尚na萌me焰>

音<u杂rl调-p澡at所te校rn恩>*枪.d索o<桑/u李rl北-p马at岗te禁rn估>

絮</肆se图rv仰le助t-匪ma壶pp幼in讲g>

市<!惨--秀T砖he阁W宣el鼻co递me撤F们il特e苹Li妨st楚-玩->

疫<w托el市co花me傲-f蒙il乖e-显li众st节>

婶<w锋el君co秤me植-f三il沟e>吴in源de执x.柿ht职ml塞</风we熔lc肥om彩e-比fi拨le悉>

史</扬we劈lc宫om次e-咐fi丝le蚁-l厕is浙t>

彼<!颗--坏J垫MX衡T索ag板L傅ib站ra害ry屯D撒es项cr看ip请to辛r根--辣>

丧<t铲ag地li退b>

桑<t族ag店li浆b-姓ur弦i>害/W押EB宇-I枕NF秧/j巩mx额.t怎ld擦</冻ta市gl缘ib获-u抽ri筛>

图<t冰ag铃li棵b-董lo践ca洞ti燥on镰>/父WE妄B-歉IN篇F/楼jm型x.祥tl壳d<辨/t强ag啦li际b-搞lo富ca愈ti佳on铲>

死</呀ta孕gl宪ib午>

肠<!秧--盛S但tr右ut乐s益Ta效g向Li意br站ar临y僻De幕sc禁ri救pt怜or轰-熟->

巩<t明ag叼li侦b>

听<t眯ag组li衬b-僵ur姐i>狼/W砖EB个-I仆NF跌/s宽tr床ut棚s-皱be欧an枪.t疑ld甲</碑ta哗gl仙ib顾-u喉ri再>

婆<t丈ag分li纺b-泽lo鸣ca恒ti勤on猪>/翻WE篮B-乐IN镜F/胞st槽ru为ts故-b朗ea童n.弯tl井d<银/t芝ag炉li郊b-惠lo锹ca伪ti礼on绍>

弦</店ta孔gl炎ib毕>

怕<t示ag竿li砖b>

锄<t妻ag哑li剪b-择ur碎i>辈/W瓶EB收-I历NF芽/s送tr件ut帅s-催lo衫gi尼c.锋tl暗d<缎/t英ag诸li卡b-轻ur偿i>

层<t柴ag别li响b-腥lo旺ca通ti务on晌>/神WE饼B-纪IN宵F/搂st段ru援ts狮-l腾og边ic咳.t邮ld挎</久ta现gl膨ib尚-l裕oc临at障io撞n>

丰</私ta洗gl逆ib泰>

贞</慰we恰b-幼ap离p>非常关键的一个片段:……<servlet>

<servlet-name>agent</servlet-name>

<servlet-class>org.webjmx.example.AgentServlet</servlet-class>

<init-param>

<param-name>locator0</param-name>

<param-value>local</param-value>

</init-param>

<load-on-startup/>

</servlet>……我们可以看到有一个叫agent的servlet被声明了。那在TOMCAT启动的时候同时也被加载了。然后我们来跟踪一下这个servlet的内容。AgentServlet.java先来看看他的init()publicvoidinit(ServletConfigconfig)throwsServletException{

super.init(config);

doInit();

}很明显,他在初始化的时候调用了doInit(),然后我们再看看doInit()/**

*instanitatesometestMBeans.

*/

publicvoiddoInit()throwsServletException{

if(Boolean.getBoolean(DEBUG_PROP))

log("AgentServletinit()");

Listl=MBeanServerFactory.findMBeanServer(null);

if(Boolean.getBoolean(DEBUG_PROP))

log("MBeanServercount:"+l.size());

if(l.size()>0)

server=(MBeanServer)l.get(0);

else

server=MBeanServerFactory.createMBeanServer("Local");

if(Boolean.getBoolean(DEBUG_PROP))

log("initalizinglocalserverinstance:"+server);

HtmlAdaptorServerhtml=newHtmlAdaptorServer(8086);

ObjectNameob_name=null;

try{

ob_name=newObjectName("Adaptor:name=html,port=8086");

if(Boolean.getBoolean(DEBUG_PROP))

log("OBJECTNAME:"+ob_name);

server.registerMBean(html,ob_name);

Enumeratione=getServletConfig().getInitParameterNames();

while(e.hasMoreElements()){

StringparamName=(String)e.nextElement();

if(!paramName.startsWith("locator"))

continue;

Stringlocator=getServletConfig().getInitParameter(paramName);

l=AdapterFactory.findMBeanServer(locator);

if(Boolean.getBoolean(DEBUG_PROP))

log("serverlist:"+l);

if(l.size()==0)

return;

if(Boolean.getBoolean(DEBUG_PROP))

log("initalizinglocalserverinstance:"+server);

server=(MBeanServer)l.get(0);

if(Boolean.getBoolean(DEBUG_PROP))

log("server:"+server);

ob_name=newObjectName("MBeanInfo","name","SimpleStandard");

if(Boolean.getBoolean(DEBUG_PROP))

log("OBJECTNAME:"+ob_name);

//server.createMBean("org.webjmx.example.SimpleStandard",ob_name);

server.registerMBean(newSimpleStandard(),ob_name);

ob_name=newObjectName("MBeanInfo","name","SimpleDynamic");

if(Boolean.getBoolean(DEBUG_PROP))

log("OBJECTNAME:"+ob_name);

server.registerMBean(newSimpleDynamic(),ob_name);

//server.createMBean("org.webjmx.example.SimpleDynamic",

//ob_name);

}

/*

*ObjectNamesname=new

*ObjectName("JMImplementation:type=MBeanServerDelegate");

*MBeanInfominfo=server.getMBeanInfo(sname);MBeanAttributeInfo

*attrs[]=minfo.getAttributes();System.out.println("attribute

*count:"+attrs.length);for(inti=0;i<attrs.length;i++)

*System.out.println(attrs[i].getName()+":"

*+server.getAttribute(sname,attrs[i].getName()));

*/

}catch(Exceptione){

log("\t!!!CouldnotcreatetheHTMLadaptor!!!");

e.printStackTrace();

return;

}

html.start();

}在方法开头就有注释,告诉你这个方法是干什么的了(instanitatesometestMBeans.)初始化一些测试的MBEN,这个这个还不完全,在方法的内容我们可以看到,不仅仅是初始化了一些MBEAN,更重要的是实例了一个MBEANSERVER并将适配器和需要管理的MBEAN都加载进去了。创建MBEANSERVER:Listl=MBeanServerFactory.findMBeanServer(null);其实这个方法更适合去查找MBEANSERVER,但如果没有找到,则会返回一个默认的MBEANSERVER,创建一个Adaptor:HtmlAdaptorServerhtml=newHtmlAdaptorServer(8086);ob_name=newObjectName("Adaptor:name=html,port=8086");注册这个适配器到MBEANSERVER中server.registerMBean(html,ob_name);好,下面是注册我们自己的MBEAN到MBEANSERVER中去。ob_name=newObjectName("MBeanInfo","name","SimpleStandard");其实这个3参的构造方法跟ob_name=newObjectName(“MBeanInfo:name=SimpleStandard”);是同理的。注册:server.registerMBean(newSimpleStandard(),ob_name);这样,我们的MBEAN就被注册到了MBEANSERVER中去了。然后就是启动我们的适配器,让我们的用户可以通过适配器去访问我们的MBEANSERVER了。html.start();这样,都WEB.XML和必要的servlet都已经写好了。然后就该在我们的页面上运用我们的标记进行访问我们的MBEAN了。在例子的基本页面index.html细节我就些了,我们看关键的东西<ahref="server1.jsp?locator=local&domain=Local&name=Local">://hi.baidu/kekemao1</a>可以看到这个超连接是跳转到server1.jsp并带了几个重要的参数。locator=local,domain=Local还有name=Local。哎?!为什么看起来那么想我们的ObjectName的参数?没错!后面两个参数确实是ObjectName的参数所用的,就是newObjectName(Local:name=Local)。而locator=local这个是WEBJMX特定的,local是指本地的MBEANSERVER访问方式,还有remote方式。在这里我们暂时不说这两种方式,我回在回复栏里细说这两个参数倒底是干什么用的。然后我们看看server1.jsp的内容:头部分:标记的声明<%@pageimport="java.util.*,javax.management.*"%>

<%@tagliburi="/WEB-INF/struts-logic.tld"prefix="logic"%>

<%@tagliburi="/WEB-INF/struts-bean.tld"prefix="bean"%>

<%@tagliburi="/WEB-INF/jmx.tld"prefix="jmx"%>变量的声明,这些变量非常重要,<bean:parameterid="locator"name="locator"/>

<bean:parameterid="domain"name="domain"/>

<bean:parameterid="serverName"name="name"/>

<jmx:getMBeanServerid="server"attribute="locator"/><jmx:getMBeanServerid="server"attribute="locator"/>这个变量也就类似我们获得了之前在我们的servlet中声明好的MBeanServer,可能你会想,那这个MBeanServer是哪来的啊?其实当我们使用<jmx:getMBeanServer>的时候他会根据后面的attribute元素的值去内存中找这个名叫locator的MBeanServer的实例,就好比MBeanServerFactory.findMBeanServer(“locator")。体部分:<jmx:queryNamesid="names"server="server">MBeanInfo:name=SimpleStandard</jmx:queryNames>以名为MBeanInfo:name=SimpleStandard为条件,到server(之前声明好的MBEANSERVER对象)中去找这个ObjectName所对应的MBean,其实ObjectName和MBean是1对1的关系,一个ObjectName对应一个MBean,就好比我们的Map类,一个KEY对应一个Value,用Key找Value一样。他返回的是一个List(其实我个人觉得没必要返回LIST)。获得单个MBean:<logic:iterateid="n"name="names"length="1">再下去的内容我就不说了,没什么用。接下去我们就自己来做个一HelloWorld吧.新建一个WEBOBJECT(我这里使用了MYECLIPSE,东西都是自动就加载的,如果你用其他的编译器那只好你自己看着大概去做了),然后导入STRUTSLIBS(MYECLIPSE自动生成)。接着在WEB-INF目录中放下几个WEBJMX重要的文件AdapterFactoryInit.qjml,AdapterFactoryInit.xml,jmx.tld,QJML.dtd。这些文件在WEBJMX开源项目1.2a中都有。然后是我们的web.xml,内容如下:<?xmlversion="1.0"encoding="UTF-8"?>

<web-appxmlns=""

xmlns:xsi="001/XMLSchema-instance"version="2.5"

xsi:schemaLocation="

"><!--registertheJMXActionURLasanapplicationparameter-->

<context-param>

<param-name>jmxAction</param-name>

<param-value>jmxAction</param-value>

</context-param><servlet>

<servlet-name>action</servlet-name>

<servlet-class>

</servlet-class>

<init-param>

<param-name>config</param-name>

<param-value>/WEB-INF/struts-config.xml</param-value>

</init-param>

<init-param>

<param-name>debug</param-name>

<param-value>3</param-value>

</init-param>

<init-param>

<param-name>detail</param-name>

<param-value>3</param-value>

</init-param>

<load-on-startup>0</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>action</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

<!--JMXActionServletConfiguration-->

<servlet>

<servlet-name>agent</servlet-name>

<servlet-class>

</servlet-class>

<init-param>

<param-name>locator0</param-name>

<param-value>local</param-value>

</init-param>

<load-on-startup/>

</servlet>

<servlet>

<servlet-name>jmxAction</servlet-name>

<servlet-class>org.webjmx.servlet.JMXAction</servlet-class>

<load-on-startup/>

</servlet>

<!--JMXActionServletMapping-->

<servlet-mapping>

<servlet-name>jmxAction</servlet-name>

<url-pattern>/jmxAction</url-pattern>

</servlet-mapping></web-app>大家看到其实和我先前介绍的例子的XML没什么区别,其实这些是必要的。写好WEB.XML后,我们来完成servlet部分,如上描述的那样,我们有一个com.kekemao1.jmxexample.servlet.AgentServlet需要去实现:com.kekemao1.jmxexample.servlet.AgentServlet内容如下:packagecom.kekemao1.jmxexample.servlet;importjava.util.Iterator;

importjava.util.List;

importjava.util.Set;importjavax.management.InstanceAlreadyExistsException;

importjavax.management.MBeanRegistrationException;

importjavax.management.MBeanServer;

importjavax.management.MBeanServerFactory;

importjavax.management.MalformedObjectNameException;

importjavax.management.NotCompliantMBeanException;

importjavax.management.ObjectName;

importjavax.servlet.ServletConfig;

importjavax.servlet.ServletException;

importjavax.servlet..Servlet;

importjavax.servlet..ServletRequest;

importjavax.servlet..ServletResponse;importorg.webjmx.tags.JMXTaglibConstants;importcom.kekemao1.jmxexample.mbeans.Kekemao;

importcom.sun.jdmkm.HtmlAdaptorServer;publicclassAgentServletextendsServletimplementsJMXTaglibConstants{/**

*

*/

privatestaticfinallongserialVersionUID=-5092348467994419208L;privateMBeanServerserver=null;/**

*Initializestheservlet.

*/

publicvoidinit(ServletConfigconfig)throwsServletException{

super.init(config);

try{

doInit();

}catch(MalformedObjectNameExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(InstanceAlreadyExistsExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(MBeanRegistrationExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(NotCompliantMBeanExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(NullPointerExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}privatevoiddoInit()throwsMalformedObjectNameException,

NullPointerException,InstanceAlreadyExistsException,

MBeanRegistrationException,NotCompliantMBeanException{

//TODOAuto-generatedmethodstub

//createMBSERVERnameisWUBINSERVER

Listl=MBeanServerFactory.findMBeanServer(null);

if(l.size()>0){

server=(MBeanServer)l.get(0);

}else{

server=MBeanServerFactory.createMBeanServer("Local");

}

ObjectNameadapterName=newObjectName(

"ManagerAgent:name=htmladapter,port=8083");

HtmlAdaptorServeradapter=newHtmlAdaptorServer();

server.registerMBean(adapter,adapterName);

//yourselfobjectnameregister.

ObjectNamemanager=newObjectName("KEKEMAO:name=miaomiao");

server.registerMBean(newKekemao(),manager);

adapter.start();}/**

*Destroystheservlet.

*/

publicvoiddestroy(){

if(server!=null)

MBeanServerFactory.releaseMBeanServer(server);

}/**

*Processesrequestsforboth<code>GET</code>and<code>POST</code>

*methods.

*

*@paramrequest

*

servletrequest

*@paramresponse

*

servletresponse

*/

protectedvoidprocessRequest(ServletRequestrequest,

ServletResponseresponse)throwsServletException,

java.io.IOException{

response.setContentType("text/html");

java.io.PrintWriterout=response.getWriter();

//outputyourpagehere

out.println("<html>");

out.println("<head>");

out.println("<title>Servlet</title>");

out.println("</head>");

out.println("<body>");

Listl=MBeanServerFactory.findMBeanServer(null);

for(inti=0;i<l.size();i++){

MBeanServers=(MBeanServer)l.get(i);

out.println("Server:"+s+"<br>");

Iteratorit=((Set)s.queryNames(null,null)).iterator();

while(it.hasNext())

out.println("<li>MBean:"+it.next()+"<br>");

out.println("<hr>");

}

out.println("</body>");

out.println("</html>");

out.close();

}/**

*Handlesthe<code>GET</code>method.

*

*@paramrequest

*

servletrequest

*@paramresponse

*

servletresponse

*/

protectedvoiddoGet(ServletRequestrequest,

ServletResponseresponse)throwsServletException,

java.io.IOException{

processRequest(request,response);

}/**

*Handlesthe<code>POST</code>method.

*

*@paramrequest

*

servletrequest

*@paramresponse

*

servletresponse

*/

protectedvoiddoPost(ServletRequestrequest,

ServletResponseresponse)throwsServletException,

java.io.IOException{

processRequest(request,response);

}/**

*Returnsashortdescriptionoftheservlet.

*/

publicStringgetServletInfo(){

return"Shortdescription";

}}这也跟上面的例子没什么不同,声明一个叫KEKEMAO:name=miaomiao的OBJECTNAME并对应Kekemao的对象,然后注册到MBEANSERVER中去。就这么简单,同时启动了代理。注意:在上面的HtmlAdaptorServer的端口不要重用了。接下来就是我们的MBEAN了我简单的写了个MBEAN,基本的MBEAN有2个类组成的,一个是接口,一个是它的实现类。WEBJMX加载MBEAN的方式是动态MBEAN。所以必须有个接口,而且这个MBEAN是有规范的。MBean的接口必须以MBean为最后几个字。而实现类就拿前几个字母。比如XXXMBean,然后实现类就叫XXX。这个还希望大家认真遵循。接口KekemaoMBean:packagecom.kekemao1.jmxexample.mbeans;publicinterfaceKekemaoMBean{

/**

*返回属性用的BEAN方法

*

*/

publicStringgetName();

/**

*没有参数的方法

*

*/

publicvoidsayMiao();

/**

*带一个参数的方法

*@parammiao

*/

publicvoidsayMiaoMiao(Stringmiao);

/**

*Bean的Set方法

*

*/

publicvoidsetName(Stringname);}类Kekemao:packagecom.kekemao1.jmxexample.mbeans;publicclassKekemaoimplementsKekemaoMBean{privateStringname="miaomiao";publicStringgetName(){

//TODOAuto-generatedmethodstub

return;

}publicvoidsayMiao(){

//TODOAuto-generatedmethodstub

System.out.println("简单方法被调用");

}publicvoidsayMiaoMiao(Stringmiao){

//TODOAuto-generatedmethodstub

System.out.println("带参数的方法被调用,参数的值是"+miao);

}publicvoidsetName(Stringname){

//TODOAuto-generatedmethodstub

System.out.println("MBEAN中的Name被SET!");

=name;

}}可以从上面的接口KekemaoMBean和他的实现类Kekemao中看到,MBean不仅仅是普通的JAVABEAN,而且他其中还夹杂这一些方法,只要是MBean中的方法都可以被调用被管理。非常爽吧!!下面我们最后一步,也是最重要的一步了VIEW层:首先是欢迎页面,里头仅仅有个超连接,该超连接跳转到我们的MBEAN管理页面,在跳转的过程做夹带了几个参数,locator=local,domain=KEKEMAO,name=KEKEMAO。index.html<%@pagelanguage="java"import="java.util.*"pageEncoding="ISO-8859-1"%><%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><basehref="<%=basePath%>"><title>MyJSP'index.jsp'startingpage</title><meta-equiv="pragma"content="no-cache"><meta-equiv="cache-control"content="no-cache"><meta-equiv="expires"content="0"><meta-equiv="keywords"content="keyword1,keyword2,keyword3"><meta-equiv="description"content="Thisismypage"><!--<linkrel="stylesheet"type="text/css"href="styles.css">--></head><body><tablebgcolor="#000000"width="100%"cellspacing="5"cellpadding="10"><tr><tdbackground="images/background.gif"><table><tr><tdvalign="middle"width="0"><imgsrc="images/samplelogo.gif"alt="LogoImage"align="top"></td><tdvalign="middle"><bigalign="center"style="color:#ffffff;font-weight:bold;font-size:16pt">NCSRemoteManagementConsole</big></td></tr></table></td></tr><tr><tdbgcolor="#ffffff"><h3>ProductionServers</h3><li><ahref="test1.jsp?locator=local&domain=KEKEMAO&name=KEKEMAO">LocalServer[WebInterface1]</a></li></td></tr></table></body></html>test1.jsp<%@pagelanguage="java"import="java.util.*"pageEncoding="GB2312"%><%@pageimport="java.util.*,javax.management.*"%><%@tagliburi="/WEB-INF/struts-logic.tld"prefix="logic"%><%@tagliburi="/WEB-INF/struts-bean.tld"prefix="bean"%><%@tagliburi="/WEB-INF/jmx.tld"prefix="jmx"%><bean:parameterid="locator"name="locator"/><bean:parameterid="domain"name="domain"/><bean:parameterid="serverName"name="name"/><jmx:getMBeanServerid="server"attribute="locator"/><%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><basehref="<%=basePath%>"><title>MyJSP'test1.jsp'startingpage</title><meta-equiv="pragma"content="no-cache"><meta-equiv="cache-control"content="no-cache"><meta-equiv="expires"content="0"><meta-equiv="keywords"content="keyword1,keyword2,keyword3"><meta-equiv="description"content="Thisismypage"><!--<linkrel="stylesheet"type="text/css"href="styles.css">--></head><body><tablebgcolor="#000000"width="100%"cellspacing="5"cellpadding="10"><tr><tdbackground="images/background.gif"><table><tr><tdvalign="middle"width="0"><imgsrc="images/samplelogo.gif"alt="LogoImage"align="top"></td><tdvalign="middle"><bigalign="center"style="color:#ffffff;font-weight:bold;font-size:16pt">服务器:<bean:writename="serverName"/></big></td></tr></table></td></tr><tr><tdbgcolor="#fffff

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论