一年多以前,我们讲述过 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简介
本节,我们来简要地概述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开发,允许使用plain old java objects(一般称为 pojo)开发java ee应用程序。
改进的spring开发体验
spring在其核心部分提供了一个易于配置、xml驱动的反向控制(ioc)容器。ioc基于所谓的“好莱坞原则”:“不要打电话过来,请等通知。”在这种模式中,通过容器而不是直接编程将java对象间的关系注入应用程序中。有两种注入方式―构造函数注入和setter注入,具体取决于容器是通过其构造函数还是mutator方法将信息注入已创建的java对象。
在spring中,注入的属性――或到其他bean的引用――是通过一个xml文件进行配置的,这使得配置轻而易举。它耦合了另外一个aop框架,允许非侵入性增加诸如事务处理和安全等属性,这意味着开发人员可以专注于创建业务解决方案,而不必忙于复杂的java ee开发或配置。由于容器是非侵入性的,所以您不必担心业务代码会被特定于供应商(此处也包括spring)的工件所污染。
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 persistence 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 服务的数据访问对象。这些对象可以不费事地跨j2ee环境(web或ejb)、独立应用程序和测试环境进行重用。
spring的分层架构提供了大量灵活性。它的功能都构建在较低的层次上。例如,您可以在不使用mvc框架或没有aop支持的情况下使用javabean配置管理。但是,如果您要使用web mvc框架或aop支持,您会发现它们构建在配置框架之上,所以您可以马上用上有关它的知识。
bea weblogic server 9.2简介
本节,我们来简要概述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进行配置来自动监控和调整应用程序吞吐量,无需人工干预。广泛的安全特性保护了服务的访问,保证了企业数据安全,并阻止了恶意攻击。
weblogic server的增强后的服务质量
就像许多其他的bea产品,weblogic server如同冰山,浮在水面上的只是很少的一部分而已。具体来说,weblogic server提供了许多特性和工具来支持高可用的和可伸缩的应用程序部署:
weblogic server clusters 通过将工作负载分布到多个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实例分布的应用程序之间可靠地传递消息。如果由于网络或系统故障造成消息接受方无效,那么一个本地服务器实例将保存消息,并且当接受方有效时进行转发。
企业级就绪部署工具 使应用程序从开发阶段到生产环境的部署和迁移变得容易。
生产环境重新部署 使企业在不中断旧版程序的工作进程的情况下部署其新的版本。
现在,让我们来看一看这两个系统之间的协作。
在java ee和spring环境中开发应用程序
为了比较和对照java ee和spring开发方法的不同,我们采用用spring 2.0 framework重新编写了medrec示例程序,充分利用spring 2.0的许多创新特性。下一节,我们将给出medrec一般架构的简短概述,然后依次看一下它的java ee形式和spring形式。
medical records应用程序
avitek medical records(或medrec)是一个weblogic server示例程序工具包,简明地示范了java ee平台的各个方面。设计medrec的目的是作为各层次水平java ee开发人员的一个教学工具。它显示了每个java ee组件的使用方法,阐明了适于组件交互和客户端开发的设计模式。medrec也表明了在weblogic server上开发和部署应用程序的最佳实践。
medrec背后的真实世界概念是一个框架,其中患者、医生、管理人员使用各种不同的客户端管理患者数据。对于患者,medrec提供了基于web的应用程序,供他们察看自己的医疗记录和维护档案文件。对于管理人员,medrec提供了基于web的应用程序,用于管理注册登记、医疗记录上传和所有应用程序监控。medrec还提供与独立的医疗机构接合的资源。为了演示这个通信系统,medrec包括一个医生应用程序,用于向medrec系统请求和提交数据。
medrec java ee版本架构概述
java ee和weblogic server版的medrec的设计和实现采用传统的三层架构模型,分为相互独立的客户端、服务器和数据存储三个部分:
表示层:它负责所有的用户交互;有时也称为客户端层。
服务层:它是封装了应用程序业务逻辑的中间层。它处理来自异构客户端的请求,同时与各种后端系统进行交互,包括数据存储器。该层有时也称为服务器层。
企业信息系统(eis)层:它表示那些提供和/或存储遗留的程序和数据库的数据的系统。有时也称为数据存储。
我们为medrec的患者和管理部门程序开发了web应用程序(webapp),公开对于各自用户的服务。webapp符合模型-视图-控制器(model-view-controller)模式,java server page呈现视图给用户,模型封装要呈现给用户和从用户处捕捉而来的数据,而控制器机制则管理除与服务层的交互之外的组件交互。medrec采用jakarta struts来实现该模式。
服务层提供服务给发出请求的客户端,并管理与后端应用程序和资源的交互。medrec的服务层采用session facade模式来封装业务逻辑和业务数据。session facade通过提供一个到分布式服务的接口,简化了应用程序的复杂性。在medrec中,session facade的首要责任是提供数据吞吐量。在medrec的j2ee和weblogic server版本中,session facade被开发为无状态的会话enterprise javabean,而数据则是由实体enterprise javabean来管理的。
为了与外部实体接合,medrec通过web服务公开应用程序功能,从而允许不同系统之间使用一系列开放标准动态交互。通过web 服务公开服务使得medrec能够为独立的各方提供数据,或接收来自各方的数据,这样就实现了集中式医疗记录管理的主要目标。
闽公网安备 35060202000074号