主题
企业架构
作者:Andy Piper、Eric Hsiao、Rod Johnson 和 Chris Wall
04/23/2007
一年多以前,我们讲述过 Spring 1.2.x 与 WebLogic Server 9.2 的集成。其后,我们又验证了 Spring 和 BEA WebLogic Server 的更新的版本,一直到 WebLogic Server 9.2 和 Spring 2.0 的组合。表现出在功能性、可用性和性能上的重大飞跃,因此我们决定对文章进行更新以反映这一变化。
BEA WebLogic Server 9.2 是 Sun Microsystems 的 Java EE 1.4 平台的领先实现。然而,WebLogic Server 的核心价值主张则体现在 Java EE 规范没有覆盖的领域 — 增强的管理、易用性、高可用性、可伸缩性、可靠性和性能。实际上,WebLogic Server 的价值不依赖于任何特定的编程模型,所以它也自然适用于新出现的非 Java EE 的 Java 编程模型。近年来出现的最令人激动的事物莫过于基于控制反转 (IoC) 的模型,Spring Framework 就是它 事实上的 实现。本文介绍了 Spring 2.0 Framework、WebLogic Server 以及这两者的集成的新特性。我们会看到,整体大于部分之和。
文章的前两节概述 Spring 和 WebLogic Server 以及它们各自的特性。如果您熟悉 Spring Framework,那么可以跳过第一节。如果您熟悉 WebLogic Server,那么可以跳过第二节。本文主要目的是介绍这两种技术的集成,所以本文后续的部分都是讲述这一主题的。首先,我们分析 MedRec — WebLogic Server 上的一个示例程序 — 分别以它的原始的 Java EE 形式和使用 Spring Framework 重构后的形式。之后,是关于特定的集成点的一些细节。在 WebLogic Server 上开发 Spring 应用程序,那么,几乎可以肯定,这些细节会对您有所帮助。如果您只是想有个大致的概念,可以先阅读标题,内容留待以后再看。最后,我们展望了一些正在考虑中的未来开发工作。
在本节中,我们将简要地概述 Spring Framework 的特性,包括 2.0 版以来的一些新特性。
Spring 是基于 Rod Johnson 在 Expert One-on-One J2EE Design and Development(Wrox,2002)公布的代码的一个分层的Java/Java EE 应用程序框架。Spring 的存在是因为我们相信 Java EE 应该更容易使用,并且有可能创造更简单的 Java EE 开发方法而不会牺牲平台性能。
Spring 支持灵活的 Java EE 开发,允许使用传统 Java 对象(一般称为 POJO)开发 Java EE 应用程序。
Spring 在其核心部分提供了一个易于配置、XML 驱动的控制反转 (IoC) 容器。IoC 基于所谓的“好莱坞”原则:“不要打电话过来,请等通知。” 在该模式中,通过容器而不是直接编程将 Java 对象间的关系 注入 应用程序中。有两种注入方式 — 构造函数注入和 setter 注入,具体取决于容器是通过其构造函数还是 mutator 方法将信息注入已创建的 Java 对象。
在 Spring 中,注入的属性 — 或到其他 bean 的引用 — 是通过一个 XML 文件进行配置的,这使得配置轻而易举。它耦合了另外一个 AOP 框架,允许非侵入性增加诸如事务处理和安全等属性,这意味着开发人员可以专注于创建业务解决方案,而不必忙于复杂的 Java EE 开发或配置。由于容器是非侵入性的,所以您不必担心业务代码会被特定于供应商(此处也包括 Spring)的构件所污染。
如上所述,Spring 提供了一个轻型容器,用于提供集中式、自动化的配置并连接应用程序对象。该容器是 非侵入性的,能够以一致、透明的方式通过 IoC 将一组松耦合的组件 (POJO) 组装成复杂的系统。 因为该容器允许首先独立地开发和测试各软件组件,然后在任意环境(Java SE 或 Java EE)中进行扩展部署,所以它具有灵活性和高利用率,并提高了应用程序的可测试性和可伸缩性 此外,Spring 提供了许多其他对开发人员友好的特性,下面我们一一列举:
用于事务管理的通用抽象层:支持可插入的事务管理器,使事务划分更轻松,同时无需处理底层的问题。该层中还包括 JTA 策略和一个 JDBC DataSource。相比普通的 JTA 或 EJB CMT,Spring 的事务支持不依赖于 Java EE 环境。考虑到是一个十分灵活的非侵入性解决方案,事务语义通过 AOP 应用于 POJO,通过 XML 或 Java SE 5 注释进行配置。
JDBC 抽象层:提供了一个有意义的异常层次结构(不再从 SQLException 抽取供应商代码),简化了错误处理,极大地减少了代码编写量。无需为了再次使用 JDBC 编写另外的 finally 代码块。面向 JDBC 的异常遵循 Spring 的一般 DAO 异常层次结构。
与业界领先的对象关系映射解决方案的集成:在资源拥有者、DAO 实现支持和事务策略方面。 对大量 IoC 便利特性的一流支持,解决了许多典型的 O-R 映射集成问题。所有这些都遵循 Spring 的一般事务和 DAO 异常层次结构。而且,Spring 2.0 提供了与 Java 持久性 API (JPA) 的完全集成。
AOP 功能:完全集成到 Spring 配置管理中。您可以对 Spring 所管理的任何对象启用 AOP,增加了声明性事务管理等方面。 借助于 Spring,您能够拥有没有 EJB 的声明性事务管理 — 甚至也可以没有 JTA。
灵活的 MVC Web 应用程序框架:构建在核心的 Sping 功能之上。该框架是通过策略接口高度可配置的,并且适用于多种视图技术,如 JSP、Velocity、Tiles、iText 和 POI。注意,Spring 中间层可以轻松地与基于任何其他 Web MVC 框架(如 Struts、WebWork 或 Tapestry)的 Web 层组合。
用户可扩展的配置层:允许用户在 vanilla Spring 配置中加入自己定制的 XML 标记。整个 Spring 2.0 核心库已经广泛地使用此功能,以提供增强的语法和通用 Spring 特性的可用性。
异步编程抽象:包括与 JMS 提供者的进行框架无关的事务集成的消息驱动的 POJO (MDP);与异步调度机制的集成,如 commonj、Java SE 并行程序和 Quartz;本地事件支持。
所有的 Spring 功能都可以在任何 Java EE 服务器上使用,大部分功能可以在非托管环境中使用。Spring 的一个重心是支持可重用业务和不依赖于特定的 Java EE 服务的数据访问对象。这些对象可以不费事地跨 Java EE 环境(Web 或 EJB)、独立应用程序和测试环境进行重用。
Spring 的分层体系结构提供了大量灵活性。 其所有功能都构建在较低的层次上。例如,您可以在不使用 MVC 框架或没有 AOP 支持的情况下使用 JavaBeans 配置管理。但是,如果您要使用 Web MVC 框架或 AOP 支持,您会发现它们构建在配置框架之上,所以您可以马上应用有关它的知识。
在本节,我们将简要概述 BEA WebLogic Server 的特性,重点强调其提供的底层基础架构,而不是编程模型。
WebLogic Server 是可伸缩的企业级 Java EE 应用服务器。WebLogic Server 基础架构支持各类分布式应用程序的部署,是构建各种应用程序的理想基础。
Sun Microsystem 公司的 Java EE 1.4 规范在 WebLogic Server 上的实现提供了一组标准的 API,用以创建能够访问多种服务(如数据库、消息传递服务和外部企业系统连接)的分布式 Java 应用程序。终端用户客户程序使用 Web 浏览器客户端或 Java 客户端访问这些应用程序。由于 Java EE 是如此有名,这里我们就不进一步讨论了。参见关于编程模型的 WebLogic Server 文档,可以获得更多信息。
除了实现 Java EE 之外,WebLogic Server 还使企业能够在一个健壮的、安全的、高可用的、可伸缩的环境中部署任务关键型应用程序。这些特性允许企业配置 WebLogic Server 实例集群以分布负载,并在发生硬件或其他故障时提供额外的容量。新的诊断工具允许系统管理员监视和调优已部署的应用程序和 WebLogic Server 环境本身的性能。您还可以对 WebLogic Server 进行配置以自动监视和调整应用程序吞吐量,无需人工干预。广泛的安全特性保护了对服务的访问,保证了企业数据安全,并阻止了恶意攻击。
与许多其他 BEA 产品一样,WebLogic Server 如同冰山,浮在水面上的只是很少的一部分而已。具体来说,WebLogic Server 提供了许多特性和工具来支持高可用、可伸缩的应用程序部署:
WebLogic Server 集群通过将工作负载分布到多个 WebLogic Server 实例之间,为您的应用程序提供可伸缩性和可靠性。基于要处理的工作量,传入的请求可以路由到集群中的一个 WebLogic Server 实例。如果出现硬件或其他故障,会话状态对其他可恢复故障节点工作的集群节点可用。此外,可以实现集群,使服务驻留在这样的单台计算机上:如果出现故障,该计算机可以选择将服务迁移到集群中的另一个节点上。
除了在一个集群内跨服务器复制 HTTP 会话状态之外,WebLogic Server 还能够跨多个集群复制 HTTP 会话状态,从而在多个地理区域、电网和 Internet 服务提供商中扩展可用性和容错能力。
Work Manager 基于您定义的规则划分工作优先级,并监视实际的运行时性能统计信息。然后利用这些信息优化应用程序的性能。Work Manager 可以全局应用于一个 WebLogic Server 域或者一个特定的应用程序组件。
过载保护使 WebLogic Server 能够检测和避免过载情况,并从中得以恢复正常。
网络通道基于流量类型将网络流量分散到各个通道中,有利于网络资源的有效使用。
WebLogic Server 持久存储 是一个性能卓越的内置存储器解决方案,针对需要持久存储的 WebLogic Server 子系统和服务。例如,它可以存储持久的 JMS 消息,或者临时存储使用存储-转发特性发送的消息。持久存储支持到基于文件的存储器或到支持 JDBC 的数据库的持久性。
存储-转发服务使 WebLogic Server 可以在跨 WebLogic Server 实例分布的应用程序之间可靠地传递消息。如果发送消息时由于网络或系统故障造成消息目标不可用,那么一个本地服务器实例将保存消息,并且当远程目标可用时转发。
企业级就绪部署工具使应用程序简化了从开发阶段到生产环境的部署和移植。
生产环境重新部署使企业能够在不中断旧版程序工作进程的情况下部署新版本。