2.3 DM WAS体系结构
2.3.1服务器总体设计框架
JAVA平台从功能上大体可以划分为两个大的组成部分:Web服务器和EJB服务器。Web服务器主要是为JSP和Servlet提供运行平台,实现企业应用程序的Web表示层;EJB服务器主要是提供EJB组件的运行环境,为业务逻辑事务层服务。各个厂商一般会根据需要有选择地实现全部或部分JAVA规范,如OpenEJB是一个实现了EJB规范的纯EJB容器,Tomcat是一个主要提供Servlet和JSP服务的Web容器,当然它也实现了JNDI、连接池、事务处理等相关服务。
在总结国内外Web应用服务器研究的基础之上,结合具体的需求分析,我们提出如下系统总体框架,如图2.1所示。
图2.1 DM WAS总体框架图
由图中可以看出,整个Web应用服务器的功能是由一个个的组件提供的。采用组件技术,能够提高系统的可扩展性。整个系统由11种组件组成。
1.服务器启停组件
服务器启停组件实现服务器的启动与停止。服务器启动时,完成如下一些工作:
初始化类装载器,初始化JNDI服务,读入服务器配置文件server.xml(由XML组件中的xml解析器完成解析),根据配置文件的内容配置相应的资源服务(如数据源的初始化),启动“停止服务器”监听线程并注册虚拟机停止钩子(hook),初始化Web应用程序上下文,初始化并启动Http连接管理组件,初始化其它内置服务(如内置的数据库等)。
2.Http连接管理组件
Http连接管理组件负责建立一个或多个ServerSocket并监听来自客户端的连接请求。它在初始化过程中获取服务器启停组件读入的服务器配置信息,如服务器绑定的IP地址和端口号、线程池能够允许的最大线程数和最小线程数等,建立ServerSocket,并循环地接收客户端的连接。当某个客户端发出连接请求时,它建立一个Socket对象并将该对象包装成request和response对象赋给请求处理任务的实例,交由线程池处理。
3.静态资源处理器
静态资源处理器完成对静态页面html、图片等静态资源的请求处理。如果用户请求的是一个目录,它可根据服务器的配置决定是否显示欢迎页面、显示目录内容或给出出错信息。
4.Servlet容器
Servlet容器是服务器的核心,它实现并扩展了Servlet2.3规范中的绝大多数接口。Servlet容器在系统启动过程中完成初始化,包括Web应用程序上下文的配置、Web描述符的解析以及根据Web描述符的配置决定是否预先装入某些Servlet。
它实现了基于Session和Cookie的会话管理机制,能够有效地对用户会话进行跟踪。
Servlet实例池能够对用户的请求做出快速响应。根据Web描述符能够处理任何匿名或非匿名的Servlet请求。
5.JSP引擎
JSP引擎是服务器的另一个核心组件,用来处理对JSP页面的请求。当Servlet容器监听到客户端请求的是一个JSP页面时,它将请求转发给JSP引擎。JSP引擎将对JSP文件进行解析并生成相应的Servlet代码,随后对生成的Servlet进行
编译并加载到内存中,然后将该Servlet交给Servlet容器进行处理。上述过程会随时因发生错误(如JSP文件写法不规范,找不到引用类等)而终止。对于所有的随后而来的对该JSP文件的请求,JSP引擎将检查该JSP文件自最后一次被存取后是否经过修改。如果没有修改则请求将交给还在内存中的Servlet以一种同时发生的方式加以处理。由于Servlet始终驻于内存,所以响应是非常快的。如果JSP文件被修改了,JSP引擎将自动地对该文件重新编译,并将结果取代内存中的Servlet,并继续上述处理过程。
6.数据库连接管理组件
数据库连接管理组件管理数据库的连接操作,它包括一个事务管理器和一个数据库连接池。事务管理器采用JTA和JTS为开发者提供数据库的事务支持,开发人员可以有选择地通过JNDI访问事务管理器控制事务或自己使用JDBC接口控制事务。
数据库连接池实现了javax.sql.DataSource接口并对开发人员屏蔽了引用的细节,开发人员只需要通过JDNI查找DataSource的逻辑名称就可以获得数据库连接从而操纵数据库。
7.XML组件
XML组件包括XML解析器、XSL转换器、XMLJDBC组件等。它负责系统中所有XML文件的解析工作,能够完成XML文件与关系数据库之间数据的存取与转换,以及与XML数据库的连接。
8.JNDI组件
JNDI组件为用户访问Java名字和目录服务提供了便利,任何有关JNDI的查找和绑定工作都由该组件完成。
9.安全管理组件
安全管理组件采用基于安全域(security realm)的方式实现服务器中用户的认证和授权。在身份认证方面,使用基于HTTP基本验证方式和基于表单(FORM)的认证方式;在授权方面,使用基于角色的访问控制。所有安全操作由服务器管理,用户只需在Web应用描述符中进行配置。
10.日志管理组件
日志管理组件负责系统的日志记录工作。我们采用了优秀的日志记录软件
Log4j并对其进行了扩展以满足本地化需求。日志管理组件提供分级方法在程序中嵌入日志记录语句。日志信息具有多种输出格式和多个输出级别,用户可根据需要进行定制,以捕捉有关应用程序运行时行为的细节。
11.服务器接口组件
服务器接口组件负责与DM EJB服务器的连接工作。它通过JNDI与DM EJB服务器进行通信,从而实现DM WAS和DM EJB服务器的互连,形成一个完整的JAVA应用服务器。
2.3.2服务器总体方案的特点
基于JAVA的DM WAS处于Web浏览器/DM WAS/DM数据库服务器三层体系结构的中间层,该服务器具有6个基本特点。
1.规范性
DM WAS严格遵循JAVA规范,任何符合JAVA规范的Web应用程序都能够在我们的服务器中正确地配置和运行。
2.适应性
DM WAS严格来说是一个Web容器,但我们提供与DM EJB服务器的整合,从而可以给用户提供完整的JAVA开发环境。
3.安全性
在服务器中可以配置各种组件的安全性,只有被授权的用户才能访问系统资源。每一个客户隶属于一个特定的角色,而每个角色只能访问特定的资源。开发人员可以在应用部署描述符中声明角色和可被访问的资源,而不必在应用程序中硬编码安全规则。
4.可配置性
用户可以通过服务器配置文件方便地对各项参数进行修改,从而达到最佳运行效果。
5.可管理性
我们提供良好的操作管理界面帮助服务器管理人员管理服务器以及部署在服务器中的Web应用程序。
6.易用性
服务器应用程序目录结构规范,Web应用程序部署方便简单,具有对WAR
文件的自动解压,简单的批处理文件使得启停服务器变得异常方便。
2.4 DM WAS的运行过程
DM WAS基于HTTP/1.1协议,支持JAVA中Servlet、JSP、JDBC、JNDI等相关规范,能够部署大多数基于Web的Java应用。DM WAS由服务器核心类、Java核心类库、第三方软件包、一组配置文件和多个Web应用程序组成。
服务器在启动时读入并解析服务器配置文件,并初始化一系列服务,包括类装载器、数据库连接池、JNDI、数据源等资源在JNDI上的绑定、线程池、Web应用程序的上下文等,最后建立ServerSocket,等待客户端连接。