分布式多层应用模型
在实际构建的企业信息系统中,需要根据J2EE规范定义的分布式多层应用模型将不同性质和用途的组件部署到不同类型的应用服务器中。J2EE规范根据企业信息系统各个组成部分在功能上的区别,将整个应用系统划分为客户层、中间层(其中可包括WEB层、业务层)和企业信息系统层三层结构,如下图所示。各个应用层分别配置在不同类型的应用服务器中。
图1 基于J2EE规范划分的企业应用系统逻辑层
客户层
客户层用于与企业信息系统的用户进行交互以及显示根据特定商务规则进行计算后的结果。基于J2EE规范的客户端可以是基于WEB的,也可以是不基于WEB的独立(Stand Alone)应用程序。
在基于WEB的J2EE客户端应用中,用户在客户端启动浏览器后,从WEB服务器中下载WEB层中的静态HTML页面或由JSP或Servlets动态生成的HTML页面。
在不基于WEB的J2EE客户端应用中,独立的客户端应用程序可以运行在一些基于网络的系统中,比如手持设备或汽车电话等。同样,这些独立的应用也可以运行在客户端的Java Applet中。这种类型的客户端应用程序可以在不经过WEB层的情况下直接访问部署在EJB容器(EJB Container)中的EJB组件。
WEB层
J2EE规范定义的WEB层由JSP页面、基于WEB的Java Applets以及用于动态生成HTML页面的Servlets构成。这些基本元素在组装过程中通过打包来创建WEB组件。运行在WEB层中的WEB组件依赖WEB容器来支持诸如响应客户请求以及查询EJB组件等功能。
业务层
在基于J2EE规范构建的企业信息系统中,将解决或满足特定业务领域商务规则的代码构建成为业务层中的Enterprise JavaBean(EJB)组件。EJB组件可以完成从客户端应用程序中接收数据、按照商务规则对数据进行处理、将处理结果发送到企业信息系统层进行存储、从存储系统中检索数据以及将数据发送回客户端等功能。
部署和运行在业务层中的EJB组件依赖于EJB容器来管理诸如事务、生命期、状态转换、多线程及资源存储等。这样,由业务层和WEB层构成了多层分布式应用体系中的中间层。
企业信息系统层
在企业应用系统的逻辑层划分中,企业信息系统层通常包括企业资源规划(ERP)系统、大型机事务处理(Mainframe Transaction Processing)系统、关系数据库系统(RDMS)及其它在构建J2EE分布式应用系统时已有的企业信息管理软件。
J2EE平台应用编程环境
按照对基于J2EE规范的企业应用系统逻辑层的划分,通常将分布式应用系统的编程环境划分为如下四种类型:
◇EJB容器
EJB容器用于提供EJB组件的开发、部署和运行环境。
◇WEB容器
WEB组件用于提供应用系统的显示逻辑,而WEB容器则提供适合于Servlet和JSP开发、部署和运行的环境。
◇客户应用容器
客户应用容器用于提供分布式应用系统的客户端运行环境,其本质上是J2SE。
◇Applet容器
提供适合于Java Applet运行的浏览器运行环境。
Enterprise JavaBean规范的基本特征
在J2EE规范将企业应用系统划分的各逻辑层中,将封装商务规则的EJB组件部署在业务层中,用于根据客户端的服务请求进行业务数据的处理。EJB组件是基于分布式事务处理的企业级应用程序组件,其中包含处理业务数据的应用逻辑以及客户端调用EJB组件的商务方法获取服务的客户端接口。当一个遵循EJB规范开发的第三方EJB组件被集成到一个应用系统中时,不需要更改其实现代码或者重新编译。
EJB组件类型
在EJB2.0规范中定义了三种类型的组件:会话组件(Session Bean)、实体组件(Entity Bean)和消息驱动组件(Message-Driven Bean)。
会话组件和实体组件的定义由Home接口、Remote接口和组件类构成。在EJB组件的Home接口中定义了创建、删除和定位EJB组件的方法;EJB组件的Remote接口用于定义组件能够提供的商务方法;EJB组件类则用于实现Home接口中定义的组件生命期方法以及Remote接口中定义的商务方法。
◇会话组件
会话组件代表EJB组件与客户程序的一个短暂交互过程,其完成的功能可能是执行数据库读写操作或者是进行简单的数学计算等。
会话组件可以看成是瞬态的,其生命周期相对短暂,只有在客户程序与会话组件保持联系的过程中会话组件才具有生命力。如果客户程序结束会话过程,EJB容器将会话组件对象实例移出EJB容器中的组件实例池,该会话组件实例将失去生命力。另外,如果在客户程序与会话组件交互过程中EJB容器崩溃,那么用户必须重新创建一个新的会话组件对象实例来继续会话过程。
按照EJB2.0规范的定义,会话组件分为有状态(Stateful)和无状态(Stateless)两种类型。有状态会话组件中包含表示客户程序访问和更新数据的会话状态参数。会话状态参数用于记录会话组件引用的对象状态而不是在关系数据库中存储的数据资源。相对而言,在无状态会话组件中没有用于记录与特定客户程序相关联的状态参数,因此不能够记录客户程序的状态和保持客户程序在服务器端行为。
◇实体组件
实体组件用于提供数据库中数据记录在EJB服务器中的对象类型视图。一个实体组件代表数据库表中一行数据记录。客户端应用程序对实体组件的访问等价于对EIS层中数据库的访问过程。在多客户应用的情况下,通过EJB容器的事务管理功能能够使多个客户进程以共享的方式访问同一个实体组件,进而保持组件对应数据库记录的一致性和完整性。实体组件的状态是持续的,只要数据库中的数据记录存在,实体组件创建后就一直存在于EJB容器中,即使EJB服务器崩溃,实体组件同样具有生命力。