首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

扩展 Spring 的 JMX 支持(1)

扩展 Spring 的 JMX 支持(1)

虽然 Spring 框架的 JMX 管理基础架构的默认配置已经很不错了,但是仍然有定制的余地,特别是涉及 Model MBean 提供的更高层功能时。在本文中,我使用了一种相对简单的操作 —— 为基于 Spring 的应用程序的方法和属性增加通知事件 —— 以帮助您熟悉对 Spring JMX 的定制。从头到尾完成我的例子后,您将可以根据自己应用程序的需要调整 Spring JMX 管理基础架构。
我首先对 JMX API、Spring 框架和 Spring JMX 进行简单回顾,然后转入开发扩展。第一个扩展让我可以用一个外部 XML 格式配置 MBean 元数据,这个格式(像 Hibernate 映射文件)可以与 Java 对象一起存储在类路径中。我的第二个扩展为 ModelMBean 类增加一个简单的命名规范,以透明地配置定制的通知消息。在属性改变时或者调用了特定的方法之前或者之后触发新的通知消息。
文章的最后是一个基于 mockup 服务对象的实际例子,需要管理它的启动和停止方法和读写属性。我用一个专门为此设计的小型客户机/服务器应用程序测试了这个实现。应用服务器是一个标准 Java 5.0 MBeanServer,并补充了源自 MX4J 开放源码项目的 HTTP 适配器。关于文章源代码请参阅 ,而技术下载请参阅 。
JMX 概述Java Management Extensions(JMX)是管理和监视网络上的服务的、基于 Java 的标准。JMX API 的核心是受管 bean,即 MBean。MBean 为受管资源(如应用程序、服务和设备)提供了设施层。简而言之,MBean 提供了一种灵活的、基于适配器的体系结构,用于开放基于 Java 的(或者 Java 包装的)资源的属性和操作。开放后,就可以用浏览器和 HTTP 连接或者通过像 SMTP 或者 SOAP 这样的协议监视和管理这些资源。
编写和部署的 MBean 是通过 MBeanServer 接口开放的,以使不同的应用程序视图具有交互性。MBeanServer 实例还可以结合到任意的联合关系中,构成更复杂的分布式环境。
JMX 标准提供了四种不同的 MBean:
  • Standard MBean 直接实现用于管理对象的方法,既可以通过实现一个由程序员定义的、类名以 “MBean” 结束的接口,也可以使用一个以一个类作为构造函数参数的 Standard MBean 实例,加上一个可选的接口类规范。这个接口可以开放用于管理的部分对象方法。
  • Dynamic MBean 用属性访问器动态地访问属性,并用一个一般化的 invoke() 方法调用方法。可用的方法是在 MBeanInfo 接口中指定的。这种方式更灵活,但是不具有像 Standard MBean 那样的类型安全性。它极大地降低了耦合性,可管理的 POJO(纯粹的老式 Java 对象)不需要实现特定的接口。
  • Model MBean 提供了一个改进的抽象层,并扩展了 Dynamic MBean 模型以进一步减少对给定实现的依赖性。这对于可能使用多个版本的 JVM 或者需要用松散耦合管理第三方类的情况会有帮助。Dynamic MBean 与 Model MBean 之间的主要区别是,在 Model MBean 中有额外的元数据。
  • Open MBean 是受限的 Model MBean,它限制类型为固定的一组类型,以得到最大的可移植性。通过限制数据类型,可以使用更多的适配器,并且像 SMTP 这样的技术可以更容易适应 Java 应用程序的管理。这种变体还指定了数组和表等标准结构以改进复合对象的管理。
如果要同时控制客户机和服务器,那么 Standard MBean 是最容易实现的一种变体。它们的优点是有类型,但是如果在更一般化的管理控制台环境中使用时会缺少一些灵活性。如果计划使用 Dynamic MBean,那么您也可以更一步使用 Model MBean,在大多数情况下它会改善抽象层而几乎不会增加复杂性。Open MBean是是可移植性最高的一种变体,如果需要开放复合对象,那么它是惟一的方法。不幸的是,在 Open MBean 中开放复合结构所需要的代码数量过多,只有在需要高级的商业管理解决方案时才合算。
JMX 还支持使用带过滤器和广播器的事件模型的通知。为此目的,Standard MBean 需要声明一个 MBeanInfo 元数据描述。Standard MBean 实现通常在内部构造这些内容,开发人员不能直接看到它们。在本文后面,您会看到如何用 Model MBean 元数据的 XML 描述符格式和 Spring 的 JMX 支持进行实际上透明的配置。
Spring 提供帮助像 J2EE 一样,Spring 框架在一个体系结构中提供了许多强大的 Java 开发功能。与 J2EE 不同的是,Spring 开放型的技术来源提供了范围广泛的选择,不再有依赖性的负担。例如,Spring的对象关系映射工具可以复制 EnterpriseJavaBean 的行为,同时不会导致不灵活。虽然EJB 规范限制了这种方式,但是 Spring 提供了大量技术接口,使您可以选择最适合应用程序要求的接口,或者在需要时创建自己的接口。与此类似,利用 Spring 的动态代理类为 Java 对象增加事务性或者安全限制,使它们保持整洁并针对应用程序空间而不是基础架构要求。
Spring 的支持 AOP 的、以复合为中心的(IOC)bean 可以很大程度上使基础架构和业务对象彼此分离。因此,横切关注点(如日志、事务和安全)不会再干扰应用程序代码。
IOC(控制反转)是减少耦合度的主要策略。Spring 的 IOC 实现使用依赖性注入有效地将控制从应用程序代码“反转”到 Spring 容器。Spring 不是在创建时将类耦合到应用程序的对象图,它使您可以用 XML 或者属性文件(尽管 XML 被认为是最好的方法)配置类及它们的依赖性。然后用标准访问器将引用“注入”到类所依赖的对象中。可以将它看成具体化复合(externalizingcomposition),在典型应用程序中,它的比重远远大于继承。
AOP 是在应用程序开发中管理横切关注点的关键。就像在传统面向对象编程中实现的那样,这些关注点是作为单独的实例处理的,有可能在应用程序类中产生互不相关的代码(就是混乱)。Spring 使用 AOP 规范和一个 XML 配置文件具体化横切关注点,因而保持了 Java 代码的纯洁性。
返回列表