清单 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
打开量化投资的黑箱 分享
- 影响力:科技黑箱在无形中影响使用者,使用者可能在不知不觉中被生产方对象化,受到黑箱内部机制的影响。 3. 科技黑箱的效应: - 知识贬值与遗忘:随着科技黑箱的普及,其中包含的基础知识可能会因为广泛共享而...
4. 技术与人的关系:虽然使用者看似在控制科技黑箱,但实际上他们可能受到黑箱内在逻辑的影响,科技在改变人类行为的同时,也在某种程度上限制了选择自由。 总结来说,科技黑箱是现代科技发展的一个重要表现,它...
3. **外部视角**:由于无法直接观察黑箱内部的情况,因此研究者通常会从外部输入和输出的数据中推断黑箱的工作机制。这种方法有助于理解和模拟复杂的系统行为。 #### 二、黑箱理论的应用场景 1. **控制系统**:在...
本文将从“创业黑箱”、“团队建设”、“商业化路径”以及“节奏路径策略”四个方面展开讨论。 首先,创业是一个黑箱,表面看似简单的商业模式背后隐藏着复杂的运作机制。创业者往往只能看到产品和服务,而忽视了...
8. **实战案例**:作者可能通过具体的案例研究,展示如何使用Python实现完整的量化投资流程,从数据获取到策略设计,再到结果评估。 通过阅读《打开量化投资的黑箱》第二版,读者不仅可以了解到量化投资的理论知识...
### 揭秘黑箱:YOLO预测结果的可解释性探究 #### 1. 引言 在深度学习领域,模型的可解释性一直是研究者和开发者关注的重要议题。随着模型变得越来越复杂,如何理解这些模型如何做出决策成为了至关重要的问题。YOLO...
### 透视黑箱:可视化YOLO模型的决策过程 #### YOLO模型概述与特性 YOLO(You Only Look Once)是一种高效的实时对象检测技术,它最初由Joseph Redmon等人于2015年提出。YOLO的核心优势在于将对象检测视为一个回归...
"2022 可解释 AI 发展报告:打开算法黑箱的理念与实践" 本报告旨在探讨可解释 AI 的发展趋势和实践经验,旨在打开算法黑箱,提高 AI 的透明度和可靠性。 一、可解释 AI 的必要性 随着 AI 技术的普及和应用,人们...
- 对于已经集成到科技黑箱中并贬值的科技知识(如基础科学原理),是否还需要学习?这引发了教育方向的思考。 - 技术的快速发展使得使用者依赖科技黑箱,这可能使用户变得被动,受到生产者的对象化。 总结来说,...
人工智能时代的算法黑箱问题已经成为全球范围内备受关注的焦点,其法治化治理是解决技术高速发展与现行法律制度之间矛盾的关键所在。本文将从以下几个方面详细阐述这一主题: 一、算法黑箱的概念与特征 算法黑箱是...
用多用电表判断黑箱内电学元件的问题PPT课件 本PPT课件主要讲解了如何使用多用电表来判断黑箱内电学元件的问题。黑箱问题是电学中的一种常见问题,即不知道黑箱内部电路的结构和组成,需要通过外部接线柱的测试结果...
大模型的发展历程可以分为几个阶段,从早期的卷积神经网络模型发展到以Transformer为代表的全新神经网络模型,再到当前以GPT为代表的预训练大模型阶段。Transformer架构因其自注意力机制而成为大模型的核心技术,它...
黑箱建模作业11 黑箱建模是一种常见的数据分析方法,用于研究变量之间的关系。黑箱建模作业11的主要目标是分析矿石中成分A和成分B的含量之间是否存在线性关系。 首先,让我们来了解什么是线性关系。线性关系是指...
加密excel宏的破解 在忘记密码时 把源代码拷贝到VBA的开发环境运行即可 即经过测试 代码来源于互联网 首先对代码编辑者表示感谢 现在有CSDN平台分享给更多人
在这种情况下,应该选择更高倍率的档位,如从×100Ω转到×1kΩ,以获得更准确的读数。正确的操作顺序是先短接表笔调零,然后选择合适档位,再进行测量。 4. **黑箱电路分析**: 黑箱分析是一种通过外部测量来推断...
在很多实际应用中,逆变分不等式中的函数往往没有显式的形式,也就是说,我们无法直接得到函数的具体表达式,而只能通过某些“黑箱”(black-box)方法来评估或观察函数值。所谓的“黑箱”,在这里指的是一个计算...