第十五章 基于中间件的开发
15.1 中间件技术
中间件是基础软件的一大类,属于可复用软件的范畴。中间件处在操作系统、网络和数据库之上,应用软件的下层。
15.1.1 中间件的概念
中间件应具有如下的一些特点:
- 满足大量应用的需要
- 运行于多种硬件和OS平台
- 支持分不计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互
- 支持标准的协议
- 支持标准的结构
中间件的十大优越性
- 缩短应用的开发周期
- 节约应用的开发成本
- 减少系统初期的建设成本
- 降低应用开发的失败率
- 保护已有的投资
- 简化应用集成
- 减少维护费用
- 提高应用的开发质量
- 保证技术进步的连续性
- 增强应用的生命力
15.1.2 中间件的分类
- 通信处理(消息)中间件。
- 事务处理(交易)中间件
- 数据存取管理中间件
- Web服务器中间件
- 安全中间件
- 跨平台和架构的中间件
- 专用平台中间件
- 网络中间件。
15.1.3 中间件产品介绍
1. IBM MQSeries
2. BEA Tuxedo
15.2 应用服务器技术
15.2.1 应用服务器的概念
并非一种传统意义上的软件,而是一个可以提供通过Internet来实施电子商务的平台。而且拥有极高的稳定性、可扩展性和安全性,它能够;
- 更合理的分工企业级应用开发,加快应用的开发速度,减少应用的开发量。
- 应用设计、开发、部署、运行、管理、维护的平台。应用服务器既是应用开发的平台,包括表示层、应用层和数据层的设计模式和编程环境;同时又是多层结构应用中的部署、运行平台,对多层结构应用进行配置、启动、监控、调整,并在开发的不同阶段承担不同的职责。
- 设计:应用服务器完成底层通信、服务、并屏蔽掉复杂的底层技术细节,向用户提供结构简单、功能完善的编程接口,让用户可以专心于商务逻辑的设计。
- 开发:应用服务器提供了完全开放的编程语言和应用接口,用户可以用任何自己习惯的开发工具来工作,另外应用服务器自己也提供快速开发的工具和手段,帮助用户提高开发效率。
- 部署:应用服务器可以部署在任何硬件平台、任何操作系统上,而且可以分布在异构网络中,应用服务器帮助用户在复杂的网络环境中配置系统参数,使系统发挥最大的性能,拥有最好的稳定可靠性。
- 运行:应用服务器采用的是开放技术标准,它提供了一个完整的标准实现,即提供了系统的运行环境,任何基于同样标准的系统都能很好的运行与这个环境中。在运行中提供应用系统的名字解析、路由选择、负载平衡、事务控制等服务,并提供系统容错、修复、迁移、升级扩展等功能。
- 管理:应用服务器让用户通过图形化的界面方便的管理自己的资源,而且在系统运行时也能动态的监控和管理。
- 使得应用与底层平台无关。
- 为企业引用提供现成的、稳定而强健的、灵活的、成熟的基础架构。应用服务器通过分布式体系来保障系统提供24小时不间断的服务,在大负荷量和长时间运转情况下的稳定性,表现为:
- 当系统处理能力不够使,可以通过简单的增加硬件来解决。
- 动态调整不同主机间的负载可以最大的利用系统资源,同时提高单机的稳定性
- 当系统中的某台机器出现故障时,它的工作可由其他机器来承担,不会影响整个系统的运行,即无丹丹故障。
15.2.2 主要的应用服务器
15.3 J2EE
J2EE是针对Web Service、业务对象、数据访问和消息报传送的一组规范。J2EE注重两件事,一是建立标准,使Web应用的部署和服务器无关;二是使服务器能控制构件的生命周期和其他资源,以便能够处理扩展、并发、事务处理管理和安全性问题。
15.3.1 表示层
分布式企业应用可以同时包括多种客户端,并且这些客户端都可以访问相同的业务逻辑。当客户端是HTML时,JSP/Servlet组合将成为能实现业务目标的真正客户端。当客户端是Java程序或基于COM程序时,他可以直接访问业务逻辑。
15.3.2 应用服务层
一般情况下,应用服务器层包含表示层请求的表示逻辑和业务逻辑,表示层由显示HTML页面的JSP页面和Servlets实现。业务逻辑通过RMI对象和EJB实现。EJB依靠容器来实现事务处理、生命周期和状态管理、资源池、安全等问题。容器是EJB运行的环境。
1. Servlet
是指可以扩展Web服务器功能的程序,Servlet从客户端接受请求,动态生成响应,然后将包含HTML或XML文档的请求发送给客户端。Servlet类似于CGI(公共网关接口),但Servlet使用Java类和流,更易于编写;由于Servlet可编译为Java字节码,在运行时,Servlet例程驻留在内存中,每一个用户请求都生成一个新线程,故而他们的执行速度也更快。
2. JSP
JSP页面是基于文本的Servlet开发方式。JSP页面具有Servlet的所有优点,如果与JavaBeans类结合在一起,合一很容易的将内容和显示逻辑分开。这使得无需了解Java代码就能更新页面的外观,更新JavaBeans的人也无需深入了解Web页面的设计。相对CGI而言,由于CGI依赖于平台,小号资源更多,而且程序不能容易的访问参数数据等缺点,故而JSP页面和Servlet都比CGI应用广泛。
3. EJB
EJB构件用于封装业务逻辑,使开发人员无需再担心数据访问、事务处理支持、安全性、高速缓存和并发等琐碎任务的编程。在EJB规范中,他们由EJB容器负责。EJB包含接口和类。客户端通过EJB的本地接口和编程接口访问EJB方法。本地接口提供的方法可以用于生成、删除和查找EJB ,远程接口则提供业务方法。部署时,容器从这些接口生成类,这些类使客户端可以访问、生成、删除、查找和调用EJB上的业务方法。EJB类为业务方法、生成方法和查找方法提供实施,如果Bean管理自己的存储,还得提供生成生命周期方法的实施。
EJB共有三种类型,具体如下
- EntityBean 实体Bean。表示数据库中的数据及作用于数据的方法。实体Bean是具有持久性的事务处理型EJB,只要数据存在于数据库中,实体Bean就存在。
- SessionBean 会话Bean。代表与客户间的短暂对话。在执行数据库读写时,会话Bean可以请求JDBC调用,也可以使用实体Bean执行调用,这时会话Bean是实体Bean的客户端。会话B二胺的字段中包含对话的状态,如果服务器或客户端出现故障,会话Bean将消失
会话Bean可以有状态,也可以无状态。有状态会话Bean包含客户端方的对话状态。对话状态是会话Bean实例的字段值加上可以从会话Bean字段阅读的所有对象。有状态的会话Bean不表示持久数据库中的数据,但能够以客户端的名义访问和更新数据。
无状态会话Bean没有客户端的任何状态信息,他们一般不提供保留任何状态的服务器行为。无状态会话Bean需要的系统资源较少。提供通用服务或表示共享数据视图的业务对象适合作为无状态的会话Bean - Message Driven Bean 消息驱动Bean。EJB2.0规范中的消息驱动Bean能处理从JMS消息队列中接收到的异步消息。JMS将消息路由到消息驱动Bean,有消息驱动Bean从池中选择某个实例处理消息。
4. JMS
是支持Java程序之间信息交换的J2EE机制。这也是Java支持异步通信的方法——发送者和接收者无需相互了解,因此可以独立操作。JMS支持两种消息传播模式:
- 点到点。基于消息队列,消息穿绳这将消息发送到队列中。消息消费者可以将自身与队列连接,以倾听消息,当消息到达队列时,客户可以从队列中区中,并给出响应。消息只能发送给一个队列,只能由一个消费者使用。消费者可以过滤消息,以便获得希望获得的消息。
- 出版和订阅。消息生产者将消息发送到一个话题(topic),注册到此话题的消费者都能接收到这些消息。这种情况下,许多消费者都能接收到同样的消息。
5. JNDI
Java命名和目录接口。客户端和应用代码使用JNDI查找用户定义对象(如EJB)和环境实体。在JDBC2.0中,数据源可以绑定到JNDI上,并允许应用程序访问。
6. 事务处理
J2EE事务处理模型可以在部署过程中定义组成一个事务处理的方法之间的联系,以便事务处理中的所有方法可以作为一个整体存在。如果用户希望完成这一任务,因为事务处理是一系列步骤,要么全部执行成功,要么全部回滚。
事务处理的属性在应用构件的集成过程中确定。他可以将各种方法组合城应用构件间的事务处理,即用户可以在J2EE应用中方便的重新分配应用构件的事务处理属性,无需修改代码和重新编译。J2EE事务处理API(JTA)和Java事务处理服务(JTS)形成J2EE中事务处理支持的基础,而且更适合EJB和JDBC2.0。JTS是低级事务处理管理API,主要作用是将Java映射到对象管理组(OMG)的对象事务处理服务。JTA是高级API,包括两个部分:
- 事务处理接口。允许事务处理定界,通过分布式构件由进行全局事务处理登记来完成工作。这种方法可以另多组操作组成一个事务处理。
- XA资源管理。基于能处理分布式事务处理的X/Open/XA接口,有时也成为两步提交事务处理,需要多种资源之间的协调,如数据库或序列。分布式事务处理由两步提交协议协调,可跨越用XA兼容的JDBC驱动程序访问的多个数据库。
15.4 .NET
15.4.1 .NET平台
.NET平台包括4个重要特点:
- 软件变服务
- 基于XML的共同语言
- 融合多种设备和平台
- 新一代的人机界面
15.4.2 .NET框架
1. 通用语言运行时 CLR
为多种语言提供了统一的运行环境。
基于通用语言运行时开发的代码称为受控代码。它的运行步骤大体如下:首先使用一种语言运行时支持的语言编写源代码,然后使用针对通用语言运行时的编译器生成独立于机器的微软中间语言MIL,同事产生运行所需的元数据,在代码运行时再使用即时编译器JITC生成相应的机器代码来执行。
2. 基础类库
包括从输入输出到数据访问等方面,提供了一个统一的面向对象的、层次化的、可扩展的编程接口。
3. ADO.NET
访问数据库的技术。
4. ASP.NET
网络编程结构。可以从以下几个方面了解ASP.NET:
- Web表单。目的是使开发者能够非常容易的创建Web表单。
- ASP.NET Web服务器。
- ASP.NET应用框架
5. WinForms
6. 开发语言
7. 其他特征
15.5 企业应用集成 EAI
EAI是指通过将业务流程,应用软件、硬件和各种标准联合起来,对企业中完成不同业务功能的应用系统进行无缝集成,使他们想一个整体一样进行业务处理和信息共享,从而提高企业效率,为客户提供灵活的业务服务。
EAI可以通过中间件技术来连接企业级各种应用,使异构应用系统之间能够相互“交流”与“协作”
首先,中间件产品对各种硬件平台、操作系统、网络数据库产品及客户端实现了兼容和开放
其次,中间件保持了平台的透明性,使开发者不必考虑操作系统的问题。
第三,中间件实现了对交易的一致性和完整性的保护,提高了系统的可靠性
第四,中间件产品可以缩短开发周期50%~75%,从而大大降低了开发成本,提高了工作效率
EAI包括的内容个很复杂,涉及结构、硬件、软件及流程等企业系统的各个层面,根据EAI集成的深度来划分可以分为应用集成、业务过程集成、数据集成。
1. 应用集成
主要为两个以上的应用中的数据和函数提供接近实时的集成。在网络环境中的跨平台应用程序之间的应用到应用的集成。应用层次的集成一般来说是通过处理多个应用系统之间的消息交换,实现系统间的集成,各个应用能够处于同步模式,即基于客户(请求程序)和服务器(响应程序)之间的请求响应交互机制。应用系统能够自己处理消息的转换,并且它将影响被集成系统的数据转换和有效性。但是,这需要对系统进行修改以建立发送和接收消息的接口。
2. 业务过程集成
需要处理企业范围内的业务过程和把企业存在的应用系统整合到这些业务过程中。
当对业务过程进行集成的时候,企业必须在各种业务想听中定义、授权和管理各种业务信息的交换,以便改进操作、减少成本、提高响应速度。业务过程集成包括业务管理、进程模拟,以及综合任务、流程、组织和进出信息的工作流,还包括业务处理中每一步都需要的工作。业务过程集成至少包括以下两种形式的流程。
- 交互式流程。包含了跨两个系统之间的事务处理。这种流程是完整的且不间断的,不包含任何需要人为参与的工作和间断的流程。
- 多步流程。多步流程有系列的步骤并同多个系统相关,能在一定时间内完成。这种流程可以是一对多、多对一或多对多的关系。
3. 数据集成
要完成应用集成和业务过程集成,必须首先解决数据和数据库的继承问题。
15.6 轻量级架构和重量级架构
15.6.1 Struts框架
是一个基于SUN J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。
15.6.2 Spring框架
轻量级J2EE应用程序框架。包括声明性事务管理,通过RMI或Web Service远程访问业务逻辑,mail支持工具,一级对于数据库和数据库之间持久层的各种配置的支持。Spring允许自由选择和组装各部分功能,会提供和其他软件集成的接口。
核心本身是一个容器,管理物件的生命周期、物件的组态、相依注入等,并控制物件在创建时是以原型或单例的方式来创建。
核心概念是控制反转IoC,更具体而易懂的名字是依赖注入。Spring的目标是实现一个全方位的整合框架,在Spring框架下实现多个子框架的组合,这些自框架之间可以彼此独立,也可以使用其他的框架方案加以替代。
Spring模块建立在核心容器智商,核心容器定义了创建、配置和管理Bean的方式。Core封装包的主要构件是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正的允许从程序逻辑中分理处依赖关系和配置。
DAO提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。并且,JDBC封装包还提供了一种比编程性更好的声明性事务管理办法,不仅实现了特定接口,而且对所有的POJOs都适用。
ORM框架提供了对象关系映射工具,其中包括JDO(Java持有对象)、Hibernate、Ibstis、JPA(Java持有API)。所有这些都遵从Spring的通用事务和DAO异常层次结构。
Context(上下文)是一个配置文件。Spring的上下文包括企业服务。
Web包提供了基础的针对Web开发的集成特性。当与Web或Struts一起使用Spring时,这个包使Spring可与其他框架结合。
通过策略解耦,MVC框架变为高度可配置的,容纳了大量视图技术。
15.6.3 Hibernate框架
是一种对象和关系之间映射的框架,是Java应用和关系数据库之间的桥梁。可以将数据库资源映射为一个或多个POJO。
在Hibernate中对象/关系映射机制的核心是一个XML文件,通常命名为*.hbm.xml
。这个映射文件描述了数据库模式是怎么与一组Java类绑定在一起的。Hibernate提供工具从已有的数据库模式和Java代码生成*.hbm.xml
。一旦有了*.hbm.xml
文件,就可以生成Java代码,或数据库模式,或两者兼得。
Hibernate只是一个将持久化类与数据库表映射的工具,Hibernate只需要将每个持有化实例对应于数据库表中的一个数据行即可。
15.6.4 基于Struts、Spring和Hibernate的轻量级架构
- 表示层。由Struts实现,主要完成如下任务:管理用户请求和响应;提供一个控制器代理以调用业务逻辑和各层的锤炼;处理从其它层抛给StrutsAction的异常;为显示提供数据模型;借助Struts Validator框架帮助完成Web层的验证工作。
- 持久层。有Hibernate实现。通过一个面向对象的查询语言(HQL)正则表达式的API检索对象的相关信息。
- 业务层。由Spring来实现。优点是:利用延时注入思想组装代码,提高了系统扩展性和灵活性,实现插件式变成。利用AOP思想,集中处理业务逻辑,减少重复代码,构建了较理想的解决方案。
网友评论