J2EE技术架构文档
J2EE 技术架构
《交通事故处理平台》采用先进的J2EE 技术架构,基于多层软件构架(即客户层、表示层、业务层、集成层和资源层) ,采用面向服务的思想、使用WebService 和XML 等技术整合与集成各种应用系统,能够为高校数字校园建设提供先进实用、安全可靠、便于兼容、易于扩展的应用解决方案。技术架构如下:
J2EE(Java 2 Platform Enterprise Edition) 是Java2平台企业版。J2EE 是一套全然不同于传统应用开发的技术架构,包含大量组件,可简化且规范应用系统的开发与部署,进而提高可移植性、伸缩性、安全性与再用价值。 J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种遵循J2EE 架构开发的软件存在良好的兼容性,解决过去使用的软件产品彼此之间无法兼容、导致内部或外部应用难以互通的窘境。
J2EE是使用JAVA 技术开发企业级应用的一种事实上的工业标准,各个平台开发商按照J2EE 规范分别开发了不同的J2EE 应用服务器,使用J2EE 技术开发的企业级应用可以部署在各种J2EE 应用服务器上,具有良好可移植性。
J2EE企业级应用的不同部分纳入不同的容器(Container),每个容器中都包含若干组件(这些组件是需要部署在相应容器中的) ,同时各种组件都能使用各种J2EE Service 与API 。J2EE 容器与相应的组件可以部署在网络中的任一服务器上,具有良好的可伸缩性。J2EE 组件的安全是由各自的容器来负责的,组件的开发人员几乎可以不用或者很少在组件中添加有关安全的代码。这种安全逻辑和业务逻辑相对独立的架构,使得企业级应用系统有更好的灵活性和扩展性。
J2EE是以企业与企业之间的运算为导向的JAVA 开发环境。J2EE 架构定义各类不同组件,如WEB 组件、E JB 组件等,而各类组件可以复用,可以组装成不同的系统。
一、客户层
入、管理客户端与服务器的会话状态。
客户层分为浏览器客户端和桌面应用客户端。浏览器客户端使用HTML 、CSS 、JavaScript 与AJAX 等技术实现;桌面应用客户端使用PowerBuilder 集成开发环境实现。
1、HTML(Hyper Text Mark-up Language) :即超文本标记语言,是WWW 的描述语言,是一种简单、通用的全置标记语言。HTML 文本是由HTML 命令组成的描述性文本,HTML 命令可以说明文字、图形、动画、声音、表格、链接等。HTML 的结构包括头部(Head)、主体(Body)两大部分,其中头部描述浏览器所需的信息,而主体则包含所要说明的具体内容。
2、CSS(Cascading Style Sheets) :即层叠样式表,是一种标记语言,它不需要编译,可以直接由浏览器执行。在标准网页设计中CSS 负责网页内容的表现。
3、JavaScript :是一种由Netscape 的LiveScript 发展而来的脚本语言,JavaScript 使网页增加互动性
。JavaScript 使有规律地重复的HTML 文段简化,减少下载时间。JavaScript 能及时响应用户的操作,对提交表单做即时的检查,无需浪费时间交由CGI(Common Gateway Interface) 验证。
4、AJAX(Asynchronous JavaScript and XML) :即异步JavaScript 和XML ,是指一种创建交互式网页应用的综合开发技术;涉及到:AJAX 的定义,基于WEB 标准的XHTML+CSS表示,使用DOM(Document Object Model) 进行动态显示及交互,使用XML 和XSLT(Extensible Stylesheet Language Transformations) 进行数据交换及相关操作,使用XMLHttpRequest 进行异步数据查询、检索,使用JavaScript 进行绑定。
二、表示层
表示层是整个架构中最活跃的分层,由WEB 服务器及其组件构成,主要用于处理客户端的请求、响应业务层组件的请求。
表示层引入了基于组件开发的Struts 开源框架,采用Servlet 与XML 等技术实现,具有良好的可伸缩性和稳定性,降低了系统开发的复杂度、提高了开发效率,支持所有的J2EE 应用服务器(包括Apache Tomcat 、JBoss Application Server 、IBM WebSphere Application Server 与BEA Weblogic Application Server 等) 。
1、Servlet :是使用Java Servlet 应用程序开发接口(API)及相关类和方法的JAVA 组件。除了JAVA Servlet API ,Servlet 还可以使用用以扩展和添加到API 的JAVA 类软件包。Servlet 在启用JAVA 的WEB 服务器上或应用服务器上运行并扩展了该服务器的能力。Java Servlet API 定义了一个Servlet 和JAVA 服务器之间的一个标准接口,这使得Servlet 具有跨服务器平台的特性。
2、XML(Extensible Markup Language) :即扩展标记语言,是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以很方便地建立。虽然XML 文件比二进制数据占用的空间更多,但XML 极其简单、很容易掌握和使用。XML 可以在任何应用程序中读写数据,这使得XML 成为数据交换的唯一公共语言。
3、JSP(JavaServer Pages) :是由Sun Microsystems 公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP 技术是在传统的网页HTML 文件(*.htm,*.html)中插入Java 程序段(Scriptlet)和JSP 标记(Tag),从而形成JSP 文件(*.jsp)。WEB 服务器在遇到访问JSP 网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP 文件中的HTML 代码一起返回给客户。JSP 可以操作数据库、重新定向网页等,用于实现建立动态网页 客户层是整个架构的最上层,主要用于将操作界面呈现给用户、建立与服务器的连接、接收并验证用户的输
所需要的功能。
4、Struts :是一个MVC(Model View Controller) 框架,用于快速开发JAVA WEB 应用。Struts 实现的重点在C(Controller),包括ActionServlet/RequestProcessor和开发人员定制的Action ,也为V(View)提供了一系列定制标签(Custom Tag) 。Struts 没有涉及M(Model),所以Struts 可以调用JAVA 实现的任何形式的业务逻辑组件。
5、Portal :是一种WEB 应用,通常用来提供个性化、单点登录、聚集各个信息源的内容,并作为信息系统表现层的宿主。Portal 由如下三个部分组成:
(1) Portal Server :一个Portal Server 就是指一个Web-based 系统,通常都会提供个人化设置、单点登录、以及将各种不同来源的信息放在网页之中组合后呈现的功能,门户会根据个性化设置提供定制的网页,不同的使用者浏览页面将获得不同的内容。
(2) Portlet Container :是提供Portlet 执行的环境,包含了许多Portlet 并且管理其生命周期。一个Portlet Con tainer 接收到来自Portal 的请求后,将这个请求传递给存在Container 中的Portlet 执行。Portal Server 和Portlet Container 可以放在一起视为同一个系统的组件或者分开成为两个独立的组件。
(3) Portlet :Portlet 是基于JAVA 的WEB 组件,由Portlet 容器管理,并由容器处理请求,生成动态内容。Po rtal 使用Portlet 作为可插拔的用户接口组件,提供信息系统的表示层。
6、JSR168(Java Standardization Request 168) :定义了一个Portlet 的规范,包括Portlet 容器和Portlet 之间的合约。JSR168由JCP(Java Community Process) 定义。
三、业务层
业务层是整个架构中最核心的分层,由应用服务器及其组件构成,主要用于处理业务逻辑。
业务层引入了基于组件开发的Spring 开源框架,采用WebService 与JavaBean 等技术实现,具有良好的稳定性和可靠性,降低了系统开发复杂度、提高了开发效率,支持所有的J2EE 应用服务器(包括JBoss Application Server 、IBM WebSphere Application Server 与BEA Weblogic Application Server) 。
1、JavaBean :是一种JAVA 语言写成的可重用组件,是一种JAVA 类,通过封装属性和方法成为具有某种功能或者处理某个业务逻辑的对象,其他JAVA 类可以通过自省机制发现和操作JavaBean 的属性。JavaBean 具有以下特点:可以重复使用;易编写、易维护、易使用;可以在任何安装了JAVA 运行环境的平台上的使用,而不需要重新编译。
2、EJB(Enterprise Java Beans) :是企业级JavaBean ,是JAVA 的核心代码,用于开发基于组件的企业应用程序。EJB 包括Session Bean(会话Bean) 、Entity Bean(实体Bean) 和MessageDriven Bean(消息驱动Bean) 。
(1) Session Bean 用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当接收到客户端请求时,容器就会选择一个Session Bean 来为客户端服务。Session Bean 可以直接访问数据库,但更多时候,它会通过Entity Bean 实现数据访问。
(2) Entity Bean 用于实现O/R(Object/Relationl)映射,负责将数据库中的表记录映射为内存中的Entity 对象,创建一个Entity Bean 对象相当于新增一条记录,删除一个Entity Bean 会同时从数据库中删除相应记录,修改一个Entity Bean 时,容器会自动将Entity Bean 的状态和数据库同步。
(3) MessageDriven Bean(MDB)用于接收客户端发送的JMS(Java Message Service) 消息然后做相应的处理。M DB 实际上是一个异步的无状态Session Bean ,客户端调用MDB 后无需等待,立刻返回,MDB 将异步处理客户请求。MDB 适用于需要异步处理请求的场合,避免客户端长时间的等待一个方法调用直到返回结果。
3、WebService :是建立可互操作的分布式应用程序的新平台,作为一套标准,它定义了应用程序如何在WE B 上实现互操作性。
4、Spring :是一个开源框架,由Rod Johnson 创建,用以解决企业应用开发的复杂性。Spring 使用基本的J avaBean 来完成以前只可能由EJB 完成的事情。
5、POJO(Plain Old Java Object) :是一类规则的、易组合的、运行于EJB 容器之外且不依赖于EJB 的对象。
四、集成层
务和数据) ,实现各个应用之间互联互通。 集成层是整个架构中十分重要的分层,由若干接口组件和服务构成,主要用于集成学校的各类应用(系统、服
集成层引入了优秀的Hibernate 开源框架,用于建立对象模型与关系模型的映射、持久化业务对象,支持各种流行的数据库管理系统(Oracle、SQL Server 、DB2等) ;使用JNDI ,用于集成基于目录服务的应用;使用Java Mail ,用于集成邮件系统;使用JMS ,用于集成基于消息中间件的应用。
1、Hibernate :是一个开放源代码的对象关系映射框架,它对JDBC(Java Data Base Connectivity) 进行了非常轻量级的对象封装,使得JAVA 程序员可以随心所欲地使用面向对象的编程思想来操纵数据库。 Hibernate 可以应用在任何使用JDBC 的场合,既可以在JAVA 的客户端程序中使用,也可以在Servlet/JSP的WEB 应用中使用。
2、JNDI(Java Naming and Directory Interface) :即JAVA 命名与目录接口。JNDI 提供统一的客户端API ,通过不同的访问提供者接口SPI(Service Provider Interface) 实现,由管理者将JNDI API 映射为特定的命名服务和目录系统,使得JAVA 应用程序可以和这些命名服务和目录服务之间进行交互。
JNDI可访问的目录服务有:DNS(Domain Name System) 、Xnam(一种开源的目录服务) 、Novell 目录服务、L DAP(Lightweight Directory Access Protocol) 、CORBA(Common Object Request Broker Architecture) 对象服务、文件系统、Windows 注册表、RMI(Remote Method Invocation) 和NIS(Network Information Service) 。 JNDI具有如下优点:
(1) 包含了大量的命名和目录服务,使用通用接口来访问不同种类的服务;
(2) 可以同时连接到多个命名和目录服务上;
(3) 允许把名称同JAVA 对象或资源关联起来,而不必知道对象或资源的物理标识。
3、JavaMail :是用于访问邮件服务器、读取、撰写和发送电子邮件信息的应用程序接口,提供了一套邮件服务器的抽象类,不仅支持SMTP(Simple Mail Transfer Protocol) 服务器,也支持IMAP(Internet Message Acc ess Protocol ) 服务器。
JavaMail利用JAF(JavaBeans Activation Framework) 来处理MIME(Multi-purpose Internet Mail Extensions) 编码的邮件附件;MIME 的字节流可以与JAVA 对象相互转换。
4、JMS(Java Message Service) :是一组JAVA 应用程序接口,提供创建、发送、接收、读取消息的服务。J MS 是一种与厂商无关的API ,用来访问消息收发系统(消息中间件) 。许多厂商目前都支持 JMS ,包括 IBM 的MQSeries 、BEA 的Weblogic JMS Service 等。
JMS 能够通过消息收发服务从一个JMS 客户机向另一个JMS 客户机发送消息。消息是 JMS 中的一种类型对象,由两个部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。根据有效负载的类型,可以将消息划分为:简单文本(TextMessage)、可序列化的对象(ObjectMessage)、属性集合(MapMessage)、字节流(BytesMessage)、原始值流(StreamMessage)和无有效负载的消息(Message)。
消息收发系统是异步的,即JMS 客户机可以发送消息而不必等待回应。这完全不同于基于RPC(Remote Proc edure Call) 的系统,如EJB 、CORBA 和JAVA RMI 等。在RPC 中,客户机调用服务器上某个分布式对象的一个方法,在方法调用返回之前,该客户机被阻塞;该客户机在可以执行下一条指令之前,必须等待方法调用结束。
在JMS 中,客户机将消息发送给一个虚拟通道(主题或队列) ,而其它JMS 客户机则预订或监听这个虚拟通道,当JMS 客户机发送消息时,它并不等待回应,它执行发送操作,然后继续执行下一条指令。消息可能最终转发到一个或许多个客户机,这些客户机都不需要作出回应。
JMS的通用接口集合以异步方式发送或接收消息。JMS 采用一种宽松结合方式整合应用系统的方法,其主要的目的就是创建能够使用跨平台数据信息的、可移植的应用程序,而把开发人员解放出来。
JAVA消息服务支持两种消息模型:点对点消息(P2P)和发布/订阅消息(Publish Subscribe Messaging ,简称Pu b/Sub)。P2P 消息模型是在点对点之间传递消息时使用;如果应用程序开发者希望每一条消息都能够被处理,
那么应该使用P2P 消息模型。与Pub/Sub消息模型不同,P2P 消息总是能够被传送到指定的位置。Pub/Sub模型在一到多的消息广播时使用;如果一定程度的消息传递的不可靠性可以被接受的话,那么应用程序开发者也可以使用Pub/Sub消息模型。
JMS通过允许创建持久订阅来简化时间相关性,即使消息预订者未激活也可以接收到消息。此外,使用持久订阅还可通过队列提供灵活性和可靠性。
五、资源层
资源层是整个架构的最底层,主要用于存储和管理持久化数据。数据的存储与管理系统可以是文件系统 、电子邮件系统、消息系统、目录数据库管理系统和关系数据库管理系统。
目录服务器支持基于LDAP 协议的主流服务器,包括OpenLDAP ;消息中间件使用支持JMS 的消息传输系统;数据库采用Oracle 、SQL Server 和DB2等主流关系型数据库。
LDAP是一个访问在线目录服务的协议。LDAP 的信息是以树型结构存储的,在树根一般定义国家或域名,在其下则往往定义一个或多个组织或组织单元。LDAP 目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适合存储修改频繁的数据,而适合存储机构及人员信息 、数字证书和安全密钥、邮件地址、网址、IP 等数据。