- 浏览: 238426 次
- 性别:
- 来自: 北京
最新评论
-
Xgeeeeek:
讲的很细致,多谢~
JAVA RMI 实例 -
zontim:
...
JAVA RMI 实例 -
czl026:
简单明了,谢谢
[JMX一步步来] 1、JMX的Hello World -
manxisuo:
jtianguo 写道服务端和客户端在同一个包下,这句代码He ...
JAVA RMI 实例 -
manxisuo:
非常好,多谢!!
JAVA RMI 实例
在上一节是用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一样,就不再帖出来了,去第一篇去看吧
二、总结
我们发现模型Mbean(Model MBean)要比标准MBean(standard mbean)复杂多了,那有什么理由让我们选择使用模型MBean吗?我认为,最大的理由就是模型MBean可以动态配置。试想一下这个应用场景:由于安全或其他原因,系统要把某个MBean公开的可管理方法隐藏起来。这时,如果你是用标准MBean,这需要修改接口类,然后重新编译发布;如果用 Apache commons-modeler来写的模型MBean,则只需要修改XML文件就行了,不需要重新编译发布(可能要重启一下系统)。这就是模型Mbean 优势之所在了。
细心的人会发现动态MBean和这一节的模型Mbean非常相似,但它们还是有很大不同的:动态MBean没有Hello类,它要自己实现Hello类中的方法逻辑。
发表评论
-
Lucene全文检索样例(解决大文本建索引)
2008-01-31 10:05 6529建索引:package com.pccw; i ... -
txt读取字符串(为实习生作的例子)
2008-01-29 18:27 1983try { FileInputStream fi = n ... -
关于Lucene索引合并解决方法
2008-01-28 10:21 9336由于Clustor的问题造成无法对索引进行同步,脑子中马上浮现 ... -
Spring 2.0 AOP 与事务配置
2007-11-20 16:13 2815Spring 2.0 AOP 与事务配置 ********* ... -
关于Soeckt 流操作的数据转换工具方法
2007-11-02 10:50 2225java 代码 package com ... -
Java socket开发实例入门
2007-08-21 16:08 12230socket用中文意思就是我 ... -
不使用webwork标签直接用Jsp取得Action中的值
2007-05-22 14:23 3097今天突然一个同事问我webwork如果不用标签只用JSP ... -
23种模式趣味解释
2007-05-22 10:36 2033创建型模式 1、FACTORY ... -
关于领域逻辑的三个主要模式
2007-05-13 22:36 2734事务脚本 事务脚本比较好理解,简单来说,就是将大多是事务,以过 ... -
又谈领域模型
2007-04-29 09:58 2270昨天,突然和阿敏谈起领域模型,发现自己的理解还是 ... -
简单Socket编程,来理解Socket
2007-02-27 09:34 2260Server端: java 代码 p ... -
[JMX一步步来] 9、基于JBoss来写MBean
2007-02-02 13:31 13853前面都是用JDK自带的JMX ... -
[JMX一步步来] 8、编写程序来连接MBean
2007-02-02 13:18 5969前面用Html、jconsole等方法连接上了MBeanSer ... -
[JMX一步步来] 7、用JDK5.0的JConsole来连接MBean
2007-02-02 13:09 8671前面所有看效果都是通过Html网页来看的。JDK5.0自带了一 ... -
[JMX一步步来] 5、用Apache的commons-modeler来辅助开发JMX
2007-02-02 12:59 7007一、前言 每一个MBean都要有一个接口,比如前面的H ... -
[JMX一步步来] 4、动态MBean:DynamicMBean
2007-02-02 12:48 6565一、前言 动态MBean是在运行期才定义它的属性和方法 ... -
[JMX一步步来] 3、Notification的使用
2007-02-02 12:36 6237一、简介 Mbean之间的通信是必不可少的, ... -
[JMX一步步来] 2、JMX简介
2007-02-02 11:25 8812一、JMX简介 JMX是一 ... -
[JMX一步步来] 1、JMX的Hello World
2007-02-02 11:23 10218一、JMX简介 什么是JMX?在一篇网文中是这样说的: ... -
JAVA RMI 实例
2007-02-02 10:51 39374JAVA RMI 快速入门实例 本实例为参考多篇文章写就而成 ...
相关推荐
4. **Model MBean**:是Dynamic MBean的一种增强,它提供了一种模型化的方式,允许将任何Java对象封装为MBean,而无需直接实现`DynamicMBean`接口。Model MBean通过实现`javax.management.modelmbean.ModelMBeanInfo...
JMX(Java Management Extensions)是一种Java平台上的管理框架,它提供了一种标准的方式来管理和监控应用程序、设备和服务。JMX的核心概念包括MBean(Management Bean)、MBean服务器和管理接口。 **概述** JMX是...
JMX是Java平台的一个核心部分,它提供了一种标准的方式来管理和监控Java应用程序。通过JMX,开发者可以创建、注册和管理各种管理对象(MBeans),这些对象代表了应用程序中的可管理资源,如系统资源、服务状态或...
- **MBean(Managed Bean)**:这是JMX的核心概念之一,它是一种Java对象,用于封装被管理实体的功能和属性。 - **MBean服务器(MBean Server)**:负责管理和存储MBeans的对象,它是所有JMX操作的基础。 - **对象...
- **通知模型**:MBeans可以通过发送通知来报告状态变化。 - **MBean元数据类**:描述MBean的结构和行为。 #### 五、Standard MBeans实例 - **接口定义**:Standard MBeans通常通过接口定义其公共API,接口中包含...
Java Management Extensions (JMX) 是Java平台上的一个标准,它允许开发者管理和监控Java应用程序,包括JVM自身。JMX能够帮助我们获取JVM内存状态、CPU利用率、线程信息以及垃圾收集情况等关键指标。此外,它还支持...
JMX的核心概念是MBean(Managed Bean),它是一个Java对象,代表要管理的资源。MBean可以是简单的数据对象,也可以是复杂的带有方法的对象,这些方法允许对资源执行操作。MBean通过MBean服务器进行注册,从而使其可...
JMX 还提供了通知模型(Notification Model),允许 MBean 广播管理事件,这种操作称之为通知。管理应用和其他对象注册成监听器。元信息类包含描述所有 MBean 管理接口的组件接口,其中包括属性、操作、通知和构造器...
JMX提供了一种标准的方式来管理Java应用及其组件。在JBoss中,JMX层次结构用于管理JBoss的各个组件和服务,确保它们能够高效运行。 ##### 2.2 JBoss主要模块 JBoss的核心模块包括: - **EJB容器**:负责管理和协调...
6. **Web Flow集成**:Spring Web Flow是一个用于管理用户交互流程的框架,Spring 3.0对其进行了集成,方便构建复杂的Web应用程序。 7. **Groovy支持**:引入了对Groovy的支持,可以用Groovy编写配置和脚本,提高了...
- **JMX增强**:提供更方便的JMX集成,简化管理 bean 的监控和管理。 - **`java8`支持**:全面支持Java 8新特性,如日期时间API和函数式编程接口。 - **WebSocket增强**:提供了更好的WebSocket支持,包括STOMP...
3. **JavaServer Faces (JSF)**:JSF是MVC(Model-View-Controller)框架的一部分,用于构建用户界面,提供声明式编程模型。 4. **Enterprise JavaBeans (EJB)**:EJB是Java EE中的核心组件,用于构建可复用的...
#### 目标6:熟悉不同类型的数据库系统 - **数据库类型**:Oracle、MySQL、Microsoft SQL Server等主流关系型数据库。 - **能力提升**:具备跨数据库平台开发的能力。 #### 目标7:深入理解安全模型 - **安全机制...
在本文中,我们将深入探讨如何使用MyEclipse6这一强大的集成开发环境来开发基于Struts和Spring框架的应用程序。这两个框架在Java企业级应用开发中占据着重要地位,Struts提供了MVC(Model-View-Controller)架构,而...
3. **EJB**:分为会话bean、实体bean和消息驱动bean,提供事务管理、安全性、状态管理和持久化等功能。 4. **JMS**(Java Message Service):支持消息队列和发布/订阅模型,实现异步通信。 5. **JTA**(Java ...
8. **容器增强**:Spring3.2引入了对Bean的元数据增强,如@Profile,可以基于环境条件来激活或禁用Bean。 9. **Web MVC增强**:包括更强大的数据绑定、表单标签库、RESTful支持和JSON绑定等。 10. **JMX支持**:...
6. **Java Servlet和JSF(JavaServer Faces)**:Servlet是Java EE的基础,处理HTTP请求,而JSF是一种MVC(Model-View-Controller)框架,简化了用户界面的开发。 7. **JavaServer Pages(JSP)和Expression ...