在上一节是用apache的commons-modeler来开发的一个model,只不过commons-modeler帮助我们实现了很多的代码,而我们只需要写描述XML文件就行了。这一节,来一个实打实的Model Bean,不借助任何第三方工具包。例子还是沿用Hello这个类,以便于和以前的实现相比较。
一、Model MBean实例
1、Hello.java还是和以前的一样。这里它没有再加上一个MBean接口了,只是一个很普通的类。
public class Hello{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void printHello() {
System.out.println("Hello World, " + name);
}
public void printHello(String whoName) {
System.out.println("Hello , " + whoName);
}
}
2、接下来是HelloAgent的写法,和以前就差一句:把“new Hello()”这一句删除了,加上了ModelMbeanUtils.createModlerMbean();
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import javax.management.modelmbean.RequiredModelMBean;
import com.sun.jdmk.comm.HtmlAdaptorServer;
public class HelloAgent {
public static void main(String[] args) throws Exception {
MBeanServer server = MBeanServerFactory.createMBeanServer();
ObjectName helloName = new ObjectName("chengang:name=HelloWorld");
//Hello hello = new Hello();
RequiredModelMBean hello = ModelMBeanUtils.createModlerMBean();
server.registerMBean(hello, helloName);
ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter,port=8082");
HtmlAdaptorServer adapter = new HtmlAdaptorServer();
server.registerMBean(adapter, adapterName);
adapter.start();
System.out.println("start.....");
}
}
3、ModelMbeanUtils这个类是要我们自己来实现的,也是写model Bean最麻烦的地方,它主要是返回一个RequiredModelMBean类,此类主要包括了一个ModelMBeanInfo类的信息。在ModelMBeanInfo中定义了所有对需要管理的属性和方法的描述。具体代码如下:
import javax.management.MBeanParameterInfo;
import javax.management.modelmbean.ModelMBeanAttributeInfo;
import javax.management.modelmbean.ModelMBeanInfo;
import javax.management.modelmbean.ModelMBeanInfoSupport;
import javax.management.modelmbean.ModelMBeanOperationInfo;
import javax.management.modelmbean.RequiredModelMBean;
public class ModelMBeanUtils {
private static final boolean READABLE = true;
private static final boolean WRITABLE = true;
private static final boolean BOOLEAN = true;
private static final String STRING_CLASS = "java.lang.String";
public static RequiredModelMBean createModlerMBean() {
RequiredModelMBean model = null;
try {
model = new RequiredModelMBean();
model.setManagedResource(new Hello(), "ObjectReference");
ModelMBeanInfo info = createModelMBeanInfo();
model.setModelMBeanInfo(info);
} catch (Exception e) {
e.printStackTrace();
}
return model;
}
private static ModelMBeanInfo createModelMBeanInfo() {
//////////////////////////////////////////////////////////////////
// 属性 //
//////////////////////////////////////////////////////////////////
// 构造name属性信息
ModelMBeanAttributeInfo nameAttrInfo = new ModelMBeanAttributeInfo(//
"Name", // 属性名
STRING_CLASS, //属性类型
"people name", // 描述文字
READABLE, WRITABLE, !BOOLEAN, // 读写
null // 属性描述子
);
//////////////////////////////////////////////////////////////////
// 方法 //
//////////////////////////////////////////////////////////////////
//构造 printHello()操作的信息
ModelMBeanOperationInfo print1Info = new ModelMBeanOperationInfo(//
"printHello", //
null, //
null, //
"void", //
MBeanOperationInfo.INFO, //
null //
);
// 构造printHello(String whoName)操作信息
ModelMBeanOperationInfo print2Info;
MBeanParameterInfo[] param2 = new MBeanParameterInfo[1];
param2[0] = new MBeanParameterInfo("whoName", STRING_CLASS, "say hello to who");
print2Info = new ModelMBeanOperationInfo(//
"printHello", //
null,//
param2,//
"void", //
MBeanOperationInfo.INFO, //
null//
);
//////////////////////////////////////////////////////////////////
// 最后总合 //
//////////////////////////////////////////////////////////////////
// create ModelMBeanInfo
ModelMBeanInfo mbeanInfo = new ModelMBeanInfoSupport(//
RequiredModelMBean.class.getName(), // MBean类
null, // 描述文字
new ModelMBeanAttributeInfo[] { // 所有的属性信息(数组)
nameAttrInfo },//只有一个属性
null, // 所有的构造函数信息
new ModelMBeanOperationInfo[] { // 所有的操作信息(数组)
print1Info,
print2Info },//
null, // 所有的通知信息(本例无)
null//MBean描述子
);
return mbeanInfo;
}
}
4、看效果的方法和以前一样,运行HelloAgent,用浏览器打开:http://localhost:8082 。效果图和standard mbean一样,就不再帖出来了,去第一篇去看吧http://blog.sohu.com/members/somebody076/545896.html
二、总结
我们发现模型Mbean(Model MBean)要比标准MBean(standard mbean)复杂多了,那有什么理由让我们选择使用模型MBean吗?我认为,最大的理由就是模型MBean可以动态配置。试想一下这个应用场景:由于安全或其他原因,系统要把某个MBean公开的可管理方法隐藏起来。这时,如果你是用标准MBean,这需要修改接口类,然后重新编译发布;如果用Apache commons-modeler来写的模型MBean,则只需要修改XML文件就行了,不需要重新编译发布(可能要重启一下系统)。这就是模型Mbean优势之所在了。
细心的人会发现动态MBean和这一节的模型Mbean非常相似,但它们还是有很大不同的:动态MBean没有Hello类,它要自己实现Hello类中的方法逻辑。
分享到:
相关推荐
在Struts1中,MVC的三个组成部分被明确地分离出来:模型(Model)负责处理数据和业务逻辑;视图(View)负责展示数据;控制器(Controller)则作为用户请求和模型之间的桥梁,处理用户的输入并调用模型来完成相应的...
最后,模型表示方法的测试需要 verifies its feasibility by model representation framework procedure. 基于Java Bean组件技术的模型表示方法是一种有效的解决模型管理问题的方法,可以应用于不同的应用场景中。
系统可能采用了MVC(Model-View-Controller)设计模式,其中Model代表数据模型,由JavaBean实现;View负责展示,可能是JSP页面;Controller是控制器,处理用户的请求并调用相应的Bean方法。 开发者可以通过解压这个...
- **Model 2 MVC**:在Web开发中,MVC(Model-View-Controller)模式的Model层常由普通的Java类(非Bean)组成。 综上所述,Java Bean是Java开发中的重要组成部分,尤其在早期的Java EE应用中占据核心地位。虽然...
Struts是一个开源的MVC(Model-View-Controller)框架,用于简化Java Web应用的开发。它通过将应用程序逻辑划分为模型、视图和控制器三部分,实现了业务逻辑与用户界面的有效分离。Struts提供了丰富的标签库来帮助...
Struts 1.2 是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架。在Struts 1.2中,标签库是一个关键特性,它提供了丰富的标签来简化视图层的开发,使得开发者能更方便地与模型和控制器进行交互...
Struts1是一个经典的Java Web开发框架,它引入了一种MVC(Model-View-Controller)设计模式,使得开发者能够更有效地构建动态Web应用程序。在这个框架中,HTML、Bean和Logic标签是Struts1中用于视图层的重要组件,...
Java Bean是一种基于Java的软件组件模型,主要用于封装可重用的业务逻辑或数据。它类似于Microsoft的COM(Component Object Model)组件,可以在Java虚拟机(Java Virtual Machine, JVM)上运行,至少需要JDK 1.1或...
6. **Bean的作用域** JSP中的Bean可以有四种作用域:page、request、session和application。Page作用域的Bean仅在当前JSP页面有效,request作用域的Bean在一次HTTP请求中有效,session作用域的Bean在用户会话期间...
6. **MVC(Model-View-Controller)**:如果这个系统遵循MVC模式,那么控制器负责处理用户请求,模型代表Bean对象,视图负责展示数据。在这个场景下,Bean类是模型,JSP页面是视图,而处理HTTP请求的部分可能是控制...
4. Tomcat 6:一个开源的、基于Apache软件基金会的Servlet容器,用于运行Java Servlet和JavaServer Pages(JSP)。 在开始创建Struts应用之前,你需要按照以下步骤操作: 1. 创建一个新的Web Project,名为...
- **实体类**:可能包含了与Session Bean交互的数据模型。 - **Session Bean接口和实现类**:定义了公开给客户端的方法,以及具体的业务逻辑实现。 - **JNDI查找**:客户端通过Java Naming and Directory Interface ...
Struts是一个著名的Java Web开发框架,它以Model-View-Controller(MVC)设计模式为核心,简化了Web应用的开发。在"模拟Struts功能--最后的一些实体bean以及源码下载"这个主题中,我们可以深入探讨Struts框架的核心...
【标题】"jsp+bean+servlet"所涉及的知识点主要集中在Java Web开发领域,这是一个基于JSP(JavaServer Pages)、Bean(JavaBeans)和Servlet技术构建的简单Web应用程序模型。这个模型通常被称为MVC(Model-View-...
- **Model(模型)**:负责存储数据和业务逻辑处理。 - **View(视图)**:展示用户界面,由JSP页面实现。 - **Controller(控制器)**:处理用户请求,调用模型进行业务处理,并选择视图进行结果展示。 #### ...
这种bean通常用于实现灵活的数据模型或处理不确定的数据结构。Java的反射API(Reflection API)允许程序在运行时检查类的信息,创建和操作动态Bean。另外,Spring框架的Prototype bean定义也可以实现类似的功能,...
MDA中的两种关键模型类型是平台无关模型(Platform Independent Model,简称PIM)和平合相关模型(Platform Specific Model,简称PSM)。PIM主要关注业务逻辑和数据流,不涉及任何具体的实现细节或技术平台。而PSM则...
Spring MVC支持JSR 303/JSR 349 Bean Validation标准,可以对模型对象进行数据验证。通过`@Valid`注解,可以在控制器方法调用前自动验证模型对象。 6. **视图解析(View Resolution)** 模型数据被传递到视图之后...