`

从黑箱到企业: Bean,JMX 1.1 样式(续)

    博客分类:
  • JMX
阅读更多

清单 10. 实现 DynamicMBean 接口

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1 package dwjmxservice.basic;
2 import javax.management.MBeanInfo;
3 import javax.management.DynamicMBean;
4 import javax.management.Attribute;
5 import javax.management.AttributeList;
6 import javax.management.MBeanInfo;
7 import javax.management.MBeanAttributeInfo;
8 import javax.management.MBeanConstructorInfo;
9 import javax.management.MBeanOperationInfo;
10 public class ClickMeterDyn extends ClickMeterInstrm implements DynamicMBean {
11   public ClickMeterDyn() {
12   }
13   public static void main(String[] args) {
14    setLandF();
15    ClickMeterDyn cms = new ClickMeterDyn();
16     // can use standard MBean agent - same logic
17     BaseStdAgent myAgent = new BaseStdAgent();
18     myAgent.startAgent((Object) cms);
19   }
20 // implements the dynamic MBean interface
21 public Object getAttribute(String inAttrName) {
22   if (inAttrName.equals("PanelValue"))
23                return ((Object) getPanelValue());
24   else
25            return null;
26 }
27     public void setAttribute(Attribute attribute) {
28       if (attribute.getName().equals("PanelValue"))
29         setPanelValue((Integer)  attribute.getValue());
30 }
31       public AttributeList getAttributes(String[] attributeNames) {
32 AttributeList resultList = new AttributeList();
33 for (int i=0 ; i<attributenames.length ; i++){
34      try {
35   resultlist.add(new attribute(attributenames[i],
36                 (object) getattribute( (string) attributenames[i])
37                 ));
38      } catch (exception e) {
39   e.printstacktrace();
40      }
41 }
42 return(resultlist);
43     }
44     public attributelist setattributes(attributelist attributes) {
45 attributelist resultlist="new" attributelist();
46 for (int i="0;" i<attributes.size(); i++) {
47      attribute attr="(Attribute)" attributes.get(i);
48      try {
49   setattribute(attr);
50   string name="attr.getName();"
51   resultlist.add(new attribute(name,
52                 (object) getattribute(name)));
53      } catch(exception e) {
54   e.printstacktrace();
55      } }
56 return(resultlist);
57   }
58   public object invoke(string opname, object params[], string signature[]) {
59   if (opname.equals("incPanelValue")){
60      incPanelValue();
61 } else {
62         if (opname.equals("decPanelValue")) {
63             decPanelValue();
64             }
65       }
66       return null;
67   }
68   public mbeaninfo getmbeaninfo() {
69      mbeanattributeinfo [] mbai="new" mbeanattributeinfo[1];
70       mbai[0]="new" mbeanattributeinfo("panelvalue",
71       "java.lang.integer",
72       "the panel value",
73       true,
74       true,
75       false);
76     mbeanconstructorinfo [] mbci="new" mbeanconstructorinfo[1];
77     mbci[0]="new" mbeanconstructorinfo("clickmeterdyn",
78     "dynamic mbean click meter", null);
79     mbeanoperationinfo [] mboi="new" mbeanoperationinfo[2];
80     mboi[0]="new" mbeanoperationinfo("incpanelvalue",
81     "increment the meter value", null, "void", mbeanoperationinfo.action);
82     mboi[1]="new" mbeanoperationinfo("decpanelvalue",
83     "decrement the meter value", null, "void", mbeanoperationinfo.action);
84     return  new mbeaninfo("dwjmxservice.basic.clickmeterdyn",
85        "mbean:click meter",
86        mbai,
87        mbci,
88        mboi,
89        null);
90     }
91   }
92

  这里要注意的第一件事是, ClickMeterDyn 按要求的那样直接实现了 DynamicMBean 接口。我们还可以看到动态 MBean 通过对 getMBeanInfo() 方法的调用获得元数据信息。该方法的代码和我们在模型 MBean 例子中看到的很类似,但不完全一样。主要的区别是我们不必将 PanelValue 属性的 getter 方法和 setter 方法重新定义为公开的操作的一部分。

  针对属性的 getter/setter 方法,将入站属性的名称与我们唯一的属性 PanelValue 进行比较,并相应地从 ClickPanelModel 读写值。 invoke() 方法通过比较入站操作的名称和我们所支持的两个操作( incPanelValue 或 decPanelValue )来进行处理。由于这些操作不使用入站参数且不返回值,因此进行匹配时我们只需调用 ClickMeterInstrm 类中相应的 incPanelValue() 方法或 decPanelValue() 方法。

  测试动态 MBean

  请注意,在清单 10 中 ClickMeterDyn 实际上使用了 BaseStdAgent 作为其 JMX 代理。这是因为使用动态 MBean 或标准 MBean 时从代理的角度来看,没有操作上的区别。同样,JMX 体系结构给予它最大的灵活性和可扩展性。

  使用 compile.bat 文件编译动态 MBean 示例,或者执行下列命令行:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1 javac -classpath
2         <jmx install dir>\lib\jmxri.jar;
3         <jmx install dir>\lib\jmxtools.jar
4 -d classes src\dwjmxservice\basic\*.java
5

  使用 rundyn.bat 文件运行动态 MBean 示例,或者在代码子目录中执行下列命令行:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1 java -classpath
2         <jmx install dir>\lib\jmxri.jar;
3         <jmx install dir>\lib\jmxtools.jar;
4 classes dwjmxservice.basic.ClickMeterDyn
5

  当您测试动态 MBean 时,请注意它是如何完全像标准 MBean 示例运行的。

  结束语

  当您将工具添加到现有的设备或软件服务中时,您通常可选择使用标准 MBean 或动态 MBean(包括模型 MBean)。标准 MBean 适合用于快速工具,但是不适合用于更改。动态 MBean 对于公开的属性、操作和事件的更改是有“弹性”的;但是, 对它们进行编程需要做更多的工作。使用模型 MBean 则取两家之长,支持自适应更改而无需大量编码和测试。

分享到:
评论

相关推荐

    Python核心技术与实战 06-Python“黑箱”:输入与输出.pdf

    Python核心技术与实战 06-Python“黑箱”:输入与输出.pdf

    打开量化投资的黑箱

    打开量化投资的黑箱 分享

    黑箱理论主要内容的介绍

    3. **外部视角**:由于无法直接观察黑箱内部的情况,因此研究者通常会从外部输入和输出的数据中推断黑箱的工作机制。这种方法有助于理解和模拟复杂的系统行为。 #### 二、黑箱理论的应用场景 1. **控制系统**:在...

    创业黑箱:理解产品和商业的逻辑.docx

    本文将从“创业黑箱”、“团队建设”、“商业化路径”以及“节奏路径策略”四个方面展开讨论。 首先,创业是一个黑箱,表面看似简单的商业模式背后隐藏着复杂的运作机制。创业者往往只能看到产品和服务,而忽视了...

    打开量化投资的黑箱原书第2版.zip

    8. **实战案例**:作者可能通过具体的案例研究,展示如何使用Python实现完整的量化投资流程,从数据获取到策略设计,再到结果评估。 通过阅读《打开量化投资的黑箱》第二版,读者不仅可以了解到量化投资的理论知识...

    揭秘黑箱:YOLO预测结果的可解释性探究

    ### 揭秘黑箱:YOLO预测结果的可解释性探究 #### 1. 引言 在深度学习领域,模型的可解释性一直是研究者和开发者关注的重要议题。随着模型变得越来越复杂,如何理解这些模型如何做出决策成为了至关重要的问题。YOLO...

    透视黑箱:可视化YOLO模型的决策过程

    ### 透视黑箱:可视化YOLO模型的决策过程 #### YOLO模型概述与特性 YOLO(You Only Look Once)是一种高效的实时对象检测技术,它最初由Joseph Redmon等人于2015年提出。YOLO的核心优势在于将对象检测视为一个回归...

    2022可解释AI发展报告:打开算法黑箱的理念与实践(53页).pdf

    "2022 可解释 AI 发展报告:打开算法黑箱的理念与实践" 本报告旨在探讨可解释 AI 的发展趋势和实践经验,旨在打开算法黑箱,提高 AI 的透明度和可靠性。 一、可解释 AI 的必要性 随着 AI 技术的普及和应用,人们...

    河南省项城三高2017_2018学年高一语文下学期第一次段考试题A卷无答案

    - 对于已经集成到科技黑箱中并贬值的科技知识(如基础科学原理),是否还需要学习?这引发了教育方向的思考。 - 技术的快速发展使得使用者依赖科技黑箱,这可能使用户变得被动,受到生产者的对象化。 总结来说,...

    人工智能时代算法黑箱的法治化治理.pdf

    人工智能时代的算法黑箱问题已经成为全球范围内备受关注的焦点,其法治化治理是解决技术高速发展与现行法律制度之间矛盾的关键所在。本文将从以下几个方面详细阐述这一主题: 一、算法黑箱的概念与特征 算法黑箱是...

    用多用电表判断黑箱内电学元件的问题PPT课件.pptx

    在电学实验和故障排查的过程中,面对一个未知内部结构的黑箱,能够准确地判断其内部电学元件的种类和连接方式是一项极具挑战性的任务。它不仅考验着我们对电学理论的掌握程度,还要求我们具备足够的动手能力和逻辑...

    揭开黑箱:大模型的解释性方法全攻略

    大模型的发展历程可以分为几个阶段,从早期的卷积神经网络模型发展到以Transformer为代表的全新神经网络模型,再到当前以GPT为代表的预训练大模型阶段。Transformer架构因其自注意力机制而成为大模型的核心技术,它...

    黑箱建模作业11

    从矿石成分分析到其他更广泛的领域,黑箱建模作业11展示了其能力,同时也提醒我们在实际应用时需要考虑其局限性。通过进一步的研究与优化,黑箱建模的潜力仍值得期待,它将在数据驱动的决策制定中扮演越来越重要的...

    excel黑箱破解代码

    加密excel宏的破解 在忘记密码时 把源代码拷贝到VBA的开发环境运行即可 即经过测试 代码来源于互联网 首先对代码编辑者表示感谢 现在有CSDN平台分享给更多人

    用多用电表探索黑箱内的元件

    在这种情况下,应该选择更高倍率的档位,如从×100Ω转到×1kΩ,以获得更准确的读数。正确的操作顺序是先短接表笔调零,然后选择合适档位,再进行测量。 4. **黑箱电路分析**: 黑箱分析是一种通过外部测量来推断...

    求解一类带约束的“黑箱”逆变分不等式

    在很多实际应用中,逆变分不等式中的函数往往没有显式的形式,也就是说,我们无法直接得到函数的具体表达式,而只能通过某些“黑箱”(black-box)方法来评估或观察函数值。所谓的“黑箱”,在这里指的是一个计算...

    神经网络教程&案例:解锁机器学习的黑箱-Markdown文章材料.zip

    【神经网络】教程与案例:揭秘机器学习的黑箱 在人工智能飞速发展的今天,神经网络已经成为机器学习领域的核心。然而,对于初学者而言,神经网络常常像是一个难以捉摸的“黑箱”。为了帮助大家揭开这一神秘面纱,...

    “黑箱”——信息时代艺术设计教育的新理念.pdf

    信息时代的艺术设计教育应该适应这些变化,将“黑箱”理解为一种整合了科技、文化、企业价值的设计工具。教育应当培养学生的跨学科理解和创新能力,让他们不仅能掌握设计技巧,还能理解并影响黑箱背后的社会和文化...

Global site tag (gtag.js) - Google Analytics