wei_qiu
发贴: 0
积分: 0
|
于 2003-02-17 16:27
转帖 转自 计算机世界网 谢杨 编译
J2EE体系包括很多内容,其中每一个组成部分都堪称庞杂。本文将去繁就简,向读者介绍几个对于正确理解J2EE至关重要的核心概念,包括:J2EE平台的多层体系结构、应用组件、企业服务和J2EE运行时环境。 J2EE核心概念 J2EE是一个企业级应用系统开发平台或中间件体系结构,它通过提供一组应用组件和运行时环境来构造可伸缩的企业应用。 典型地,J2EE属于分布式应用环境,一个企业应用系统,可以作为一套分布式组件部署在多台服务器上。 要理解J2EE,我们首先得掌握以下四个核心概念: ·J2EE多层应用体系结构:J2EE平台的基本架构 ·J2EE应用组件:构成J2EE应用的软件元素 ·J2EE企业服务:应用组件需要用到的一些公共服务设施 ·J2EE容器:J2EE运行时环境 J2EE多层应用体系结构 J2EE中间件定义了四个独立的层,分别是:客户层、表示逻辑层、业务逻辑层和企业信息系统层,如图1所示: 图1 J2EE多层应用体系结构 其中表示逻辑层和业务逻辑层同位于应用服务器区域,所谓应用服务器区域也就是J2EE平台的具体实施场所。 J2EE四层中的每一层都可被物理地部署在不同的场地中,而且,即使同在应用服务器区域内,表示逻辑层和业务逻辑层也可以分开来,被安装在不同的服务器上。 例如,我们可以将iPlanet(Sun公司的J2EE应用服务器产品)作为HTTP Web服务器和表示逻辑容器,而在Weblogic(BEA公司的J2EE应用服务器产品)上部署业务逻辑组件。 说到层和容器两者的关系和区别,通常是将表示逻辑层和Servlet以及JSP容器相关联,而将业务逻辑层和企业Javabean容器相关联。或者,为了更易于理解,我们可以把层看作是概念实体——其功用是为了方便设计,而把容器看作物理意义上的软件实例——也就是说,容器是为应用组件提供的运行时环境。 J2EE多层体系结构的灵感来自模型/视图/控制器(Model-View-Controller,MVC)架构。MVC模式是软件设计的典型结构。在这种设计结构下,一个复杂应用被分解为模型、视图和控制器三部分,分别对应于业务逻辑和数据、用户界面、用户请求处理和数据同步。三个部分各自负责相应的功能。 MVC设计理念认为,在一个应用系统中,用户界面发生变动的可能性最大,控制部分变动次之,而业务逻辑是最稳定的。因此为业务逻辑编写的代码不应和反映用户界面的代码混杂在一起,而是彼此应该尽可能地独立,由控制器来担当两者交互的中介。 例如,设想一个基于Internet的银行转帐过程,根据MVC,该过程可以划分为以下四个独立子任务,如图2所示。 ·任务1:在浏览器中启动转帐服务(视图) ·任务2:调用执行帐目转帐的机制(控制器) ·任务3:真正执行帐目转帐(业务过程或模型) ·任务4:将转帐结果状态(成功或失败)显示至浏览器(视图) 图2 网上银行转帐的MVC流程 MVC认为,核心业务过程(如上述任务3)应该完全不依赖于特定的客户端程序,除了浏览器,该任务也应可被其他应用或银行办公系统调用。业务逻辑和视图元素之间的数据交互分配给控制器完成。 基于MVC设计方法,J2EE体系结构很自然地将业务逻辑层和表示逻辑层分开,控制器可置于其中任意一层,也可分置两层中。通过这种方式,J2EE的业务逻辑组件获得相当高的可重用性。 J2EE应用组件 J2EE标准定义了一整套相当完备的应用组件框架。应用组件——企业系统的砖瓦——就是建筑在这个框架之上的。利用这个框架,几乎可以构建从简单的网络门户到复杂的分布式企业级事务应用等任何应用系统。 J2EE组件框架可类比于最基本的建筑材料,它以库、基础类和接口等形式存在;在它之上构建的应用组件则具体实现特定的企业业务逻辑;最后由表示/控制器逻辑进行组件整合,最终组成一个完整的应用系统。 以servlet为例,servlet是J2EE提供的标准应用组件。但一个特定企业应用所需的servlet,需要在基础servlet接口上开发。在这过程中,开发人员可以利用servlet软件包附带的servlet库和服务。很多系统级服务,诸如从HTTP输入流中读取数据或将数据写至HTTP输出流中,都可以从这些库中获得,用起来非常方便。 因此,我们将J2EE提供的组件基础结构称之为应用组件框架,而将在它之上所编写的程序代码称之为应用组件。但为简单起见,这两个术语也常常被交换使用。 J2EE的客户层、表示层和业务逻辑层,都各自有其适用的应用组件,见图3: ·客户层:applet,Javabean ·表示逻辑层:servlet,JSP,Javabean ·业务逻辑层:企业Javabean 图3 J2EE应用组件 这里需要特别指出的一点是,与上述分类无关,标准Java类和Jar文件是可以安装在三层之中的任意一层的。即使不用应用组件,我们也可以使用标准Java类来编写程序代码。 企业信息系统(EIS)层没有可适用的组件,这是因为EIS层处理的是J2EE领域内的所有企业后端资源,诸如数据库、BackOffice或旧有遗留系统、ERP实施等。很明显,我们所需要的是要使得应用组件能访问这些资源,而这种访问的实现是由J2EE企业服务来提供的,因此EIS层本身不需要应用组件。 至此,我们可以看到,企业应用系统是通过开发人员利用组件,编写程序,再部署到各自容器中去的。 在一个特定的企业应用场合,合理运用组件是一项技巧性要求相当高的工作。由于可供使用的组件种类繁多,如何选择适当的组件组合来构造高效优质的应用系统需要开发人员不仅有一定的知识积累,还要有丰富的实战经验。 J2EE的目标就是要通过对组件的合理利用来进行应用系统的设计和开发。组件接口保证了各个组件符合标准规范,能在不同的环境中保持一致性,从而为J2EE服务器产品的互操作奠定基础。 应用组件在各个层中连接松散,以此在互操作的同时能保持自身的灵活性和可重用性。接下去要讲到的所有企业服务,诸如电子邮件、数据库访问、消息服务和事务处理等,都是通过配置应用组件完成的。 最后顺带提一下,与微软的.Net架构不同,所有J2EE应用组件只能用Java语言编程! J2EE企业服务 一般认为,现代企业计算解决方案除了企业的业务逻辑外,还需要提供对一些基本服务的支持,J2EE环境的另一大特色就在于它提供了完善的企业级服务,以满足各类应用的需要。这些服务主要有: 连通性服务 ·JDBC(Java Database Connectivity):提供数据库连接和访问服务 ·JCA(Java Connector Architecture):提供与旧有遗留系统之间的连接 通信服务 ·Java消息服务JMS(Java Messaging Service):提供层与组件之间的消息传递 ·电子邮件服务(JAF/Javamail):提供电子邮件服务 ·Java IDL/RMI-IIOP:CORBA兼容接口,提供J2EE与CORBA的通信服务 ·JAX(Java XML APIs):提供XML语法分析/绑定服务 认证服务 ·JNDI(Java Naming and Directory Interface):提供分布式命名和目录服务 其他服务 ·JTS/JTA(Java Transaction Service):提供事务处理/监控服务 ·JAAS(Java Authentication and Authorization service):提供访问控制等安全服务 在应用服务器市场,我们常可见到某些服务的驱动程序与服务器产品本身捆绑在一起的现象。例如,WebLogic就自带JDBC驱动程序提供J2EE应用和Informix数据库的连接。目前这已经成为企业评估和挑选不同服务器产品的一个重要选择标准。 J2EE运行时环境(容器) J2EE应用组件各自运行在相应的运行时环境中,这些运行时环境在J2EE术语里被称为“容器”。不同服务器厂商推出的容器产品不尽相同,但一定都符合通用接口标准,且均为J2EE中间件组件提供了许多必不可少的底层公共设施。 J2EE标准共定义了以下四种容器,应用组件可通过配置工具部署到对应的容器中: ·Applet容器:运行applet ·客户端应用程序容器:运行标准客户端Java应用程序(包括基于Swing的GUI客户端应用程序) ·Web容器:运行表示逻辑层的servlet和JSP ·EJB容器:运行业务逻辑层的企业Javabean 这里值得指出的一点是,J2EE体系结构的主导思想就是开发人员只需要专注于其业务逻辑的设计及编程,而不必为考虑系统级问题分心,这一设计理念主要就是通过容器的概念体现出来的。 典型地,容器提供的基础设施包括:内存管理、同步/分线程、垃圾收集、可用性、可伸缩性、负载平衡和容错。 容器需要实现的基本接口和基础设施在J2EE规范中都有详细定义,但具体实施方案则因容器供应商的不同而不可能全然相同。因此J2EE在保持代码兼容性的同时,也为支持服务器的特性提供了一定的余地。事实上,正是由于容器的概念,才使得众服务器供应商能在中间件业内一展所长,以各自的特色服务分争市场份额。 结束语 J2EE平台基于MVC设计模式,由多层应用体系结构组成。其中每一层都有各自适用的应用组件模型,在此基础上可以构建各种企业应用。 J2EE还为应用组件提供一整套企业服务,如数据库访问、电子邮件、认证和分布式目录访问等,通过自动化的方式完成应用程序开发中的许多耗时且费力的工作,方便系统整合。
|