精华内容
下载资源
问答
  • 2020-08-02 22:28:53

    第一章 中间件产生背景与分布式环境

    1. 中间件的定义:中间件是一种软件,处于系统软件(操作系统网络软件)与应用软件之间,它能使应用软件之间进行跨网络的协同工作(也就是互操作),这时允许各应用软件之下所涉及的“系统结构、操作系统、通信协议、数据库和其他应用服务”各不相同。

    2.中间件分类:

        终端仿真/屏幕转换中间件

        数据库访问中间件

        远程过程调用中间件

        面向消息中间件

        事务(交易)中间件

        分布式对象中间件

    3.远程过程调用中间件:

    1). RPC:(远程过程调用中间件)

    定义:本地过程调用的扩展,通过这种调用机制,程序员编写客户方应用时,可根据需要透明地调用位于远端服务器上的过程。

    功能:它以“过程”为基本单位调用,采用C/S模型进行远程通讯,提供了数据表示、可靠传输、服务定位功能,实现了七层协议中会话层的功能,为实现分布式计算提供简单实现途径。是DCE,DCOM,CORBA的通信基础。

         工作原理:

    ①用中间件中的IDL对调用顺序加以描述;

    ②利用IDL编译器对这种定义和描述进行编译,从而生成支持客户机和服务器进行通信的管道;

    ③在服务器端,被调用的远端过程需单独编写,并被置入服务器端框架,同时要在远程过程调用中间件中进行注册,以备调用。

    ④启动本地客户端存根——〉存根捆绑远端过程名和参数——〉利用网络传输到服务器端框架,从而实现数据格式的转换和参数的传递

    ⑤采用调用/返回模式具体地完成远端过程调用

         RPC的语义:

    • Last-of-many:被调用的过程可能执行若干次,但规定其最后一次执行的结果作为返回结果。
    • At-most-once:若调用者收到了回复消息,则称被调用的过程正确地完成了它的一次(仅仅一次)执行。
    • At-least-once:远程调用过程至少执行一次,回复消息可能返回一次或多次。
    • Exactly-once:若服务器正常,则远程过程恰好执行一次,并返回一个调用结果。    

       桩的作用:1.初始化并与远程对象所在的虚拟机连接;2.将参数打包,传递到远程虚拟机;3.等待结果;4.解包返回值和异常;5.将返回值返回给调用者。

      框架的作用:1.解包客户端输入的远程方法参数;2.调用实际的远程对象方法;3.将结果打包返回给调用者。

        用C实现RPC过程:1.用IDL定义远程服务接口;2.用MIDL编译接口并产生 .h , _s.c , _c.c 为后缀三个文件;3.服务端发服务(server.c , .h , _s.c);4.客户端调用服务(client.c, .h , _c.c)。

    2). RMI(远程方法调用):在分布式程序中,其远程对象的方法能够被运行在不同主机上的其他Java虚拟机的方法调用

    特点:可以实现“对象”为基本单位调用,实现远程对象之间的无缝调用,为Java分布式计算提供简单而直接的途径,是EJB的通讯基础。

        桩的作用:与RPC中桩的作用一样。

        框架的作用: 与RPC中的作用一样。

        具体实现过程:1.定义远程服务接口;2.实现远程服务接口;3.用rmic编译产生桩/框架;4.服务端发布服务;5.客户端调用服务。

    第三章 COM相关技术

    COM:组件对象模型,是软件对象组件互相通信的一种方式,它是一种二进制和网络标准,允许任意两个组件相互通信,而不管它们是在什么计算机上。 

    它既提供了组件之间的交互规范(组件模型),也提供了实现交互的环境(COM库)。

    组件:具有一定逻辑功能的可执行代码,是组成应用程序的构件。

    接口:对其他软件和组件能使用的公用功能的定义,是组件与外界的交互通道。

    COM库的实现在os层,其中的函数名通常以Co开头。

    IUnknown接口:所有的的COM组件都必须实现IUnknown接口

    IDispatch接口:从IUnknown接口派生,有了这个接口,COM可以通过一个标准的接口来提供它所支持的服务,而无需提供多个特定与服务的接口。

    COM接口:由128位全局唯一标识符(GUID)标识,称为IID。客户通过GUID获得接口指针,通过此指针,调用接口成员函数,实现服务功能,GUID标识组件时为CLSID。

    接口的特点:二进制特性、接口不变性、继承性、多态性

    使用Microsoft的IDL来定义接口

    类工厂:就是一个能够创建其他组件的组件。

    一个类工厂只能创建某个特定的CLSID相对应的组件。而类工厂实现时并没有为它分配一个唯一标识符CLSID。它也没有在系统的注册表中注册。

    进程内组件——DLL,进程外组件——EXE

    DCOM(分布式组件对象模型):是分布式应用环境中的COM技术,是COM的无缝扩展,处理了底层网络协议的所有细节,支持不同计算机上组件对象与客户程序之间或者组件对象之间的相互通信。

    进程和组件处于不同机器时,DCOM仅仅是用网络协议代替本地进程之前的通信。

    把进程的透明性转换为了位置的透明性

    MTS:COM组件的一致管理系统,为COM技术的企业应用提供基本的组件管理与配置环境,一方面为组件提供新的服务,另一方面代表一种编程模型。

    COM+:是一个面型应用的高级COM运行环境,他在COM这一编程模型的基础上实现了许多面向企业应用的分布式应用所需的服务,并将它们与操作系统集成在一起。

    第四章 J2EE技术

    EJB定义了服务端组件的编写规则、组件之间的交互规则和应用服务器对组件的管理规则。

    RMI:Java远程方法调用,提供跨进程的组件通信和相关的通信服务。

    RMI-IIOP:扩展了RMI,提供与CORBA的继承,用于J2EE的正式API。

    JNDI:Java名称和目录接口,用于网络中定位组件和其他资源。

    JDBC:提供关系数据库的连接和相应的数据库操作。

    JTA和JTS:使组件支持事务处理的规范。

    JMS:用于分布式对象的异步通信。

    Java Servlets和JSP:适用于请求/应答模式分布式计算的网络组件。

    Java IDL:用于基于Java的CORBA实现,使Java与其他编程语言集成。

    Connectors:是J2EE可以运行高端事务处理的主机系统集成。

    JCA/JCE/JSSE/JAAS:安全服务体系,专门处理身份验证及权限控制的标准服务。

    EJB的定义:用于开发和部署多层结构的、分布式的、面向对象的Java应用系统的跨平台的构件体系结构。

    显式中间件:调用服务时,需要手工编写代码开实现调用服务的中间件。

    隐式中间件调用服务时,不需要手工编写一行代码就可以调用该服务的中间件。

    EJB容器通过请求拦截器(EJB对象)实现隐式中间件。请求拦截器通过EJB在部署描述文件中描述的需求信息,知道怎样去使用中间件。

    EJB容器的定义:是EJB组件的运行环境,是一层代替bean执行相应服务的接口。

    作用:EJB容器负责将客户端程序连接到Beans,执行事务协调,提供数据存储,管理Bean的生命周期,透明地管理分布式组件体系结构的系统开销,无论是Bean还是调用Bean的客户程序都不显式地对EJB容器的API进行编码,从本质上讲,EJB容器是客户端程序和Bean之间看不见的中间人。

    HOME接口:允许客户建立或者删除EJB

    REMOTE接口:由Bean提供商编写的一个特殊的接口,复制对应的Bean类公开的所有商务方法。EJB容器依据这些信息自动生成对应的EJB对象

    第五章 CORBA

    OMA对象模型体系结构:包括对象模型和参考模型

    对象模型:定义如何描述分布式异质环境中的对象;

    参考模型:描述对象之间的交互

    CORBA公共对象请求代理体系结构,是由OMG提出的应用软件体系结构和对象技术规范,器核心是一套标准的语言、接口和协议,以支持易购分布应该程序见的互操作性及独立于平台和编程语言的对象重用。

    ORB核心(软总线,跨平台):对象请求代理,是对象总线,它能使对象透明地向其他本地或远程对象发出请求或获得应答。而客户方并不需要了解服务对象的通信、激活或存储机制

    CORBA体系结构

    ORB规范包含的内容:

    1、ORB 核心——软总线(跨平台)

    2、OMG界面定义语言——IDL(跨语言)

    3、语言映射——C++ 或Java

    4、界面仓库和实现仓库——动态调用

    5、静态存根和框架——静态调用

    6、动态存根和框架——动态调用

    7、对象适配器——适配层

    8、ORB之间的互操作——GIOP/IIOP

    ORB运行过程:

    ⑴客户通过某种方式找到特定对象实现的对象引用;

    ⑵如果该对象实现有相应的静态存根,则客户可以通过该静态存根向对象实现发送请求,否则,在界面仓库的协助下,客户可以使用动态调用界面DII来向对象实现发出请求;

    ⑶当对象调用请求通过静态存根或动态调用界面DII到达ORB核心以后,ORB核心负责请求的传送,将其送给相应的对象适配器,其具体的请求传递方式由ORB的具体实现决定;

    ⑷对象适配器接到请求后,判断一下所请求的对象实现是否有静态框架存在,如果有,则对象适配器通过静态框架调用执行对象实现中的操作,否则,对象适配器将通过动态框架界面DSI中的动态实现例程来调用对象实现中的操作;

    ⑸对象实现的特定操作方法执行完成后,结果将按照对象请求传递和执行路径逆向返回给客户对象;

    OMG IDL IDL是一个纯说明性语言,非编程语言,从而将界面与对象实现分离。不能用OMG IDL语言直接实现分布式应用,所以要把IDL的特性映射为具体语言的实现,这就是语言映射的人物。

    静态存根和框架(静态调用):存根代表客户创建并发出请求;框架则把请求交给CORBA对象实现。

    存根负责接收客户程序的请求、对请求的参数进行封装和发送以及对返回结果的接收和解封装;框架负责将请求参数解封装,识别客户所请求的服务,调用对象实现,并把执行结果封装然后返回客户方。

    动态存根和框架(动态调用)

    动态调用界面(DII)——通用存根,支持客户方的动态请求调用。

    动态框架界面(DSI)——通用框架,支持服务方的动态对象调用。

    对象适配器OA(适配层):联系对象实现和ORB本身的纽带,提供了服务器端对象实现和ORB核心直接的适配层,为对象实现大部分所需的ORB功能。

    ORB之间的互操作(GIOP/IIOP):有两种方式:直接互操作和基于桥的互操作。

    GIOP:是互操作体系结构的基础,定义了用于ORB间通信的一种标准传输语法和一组消息格式;IIOP:互联网ORB互通协议,是GIOP的一种映射,说明如何在TCP/IP网络上交换GIOP消息。

    IOR:可操作对象引用,对象的IOR所提供的信息可用于在多个不同的ORB间确定对象的位置。

    静态调用:通过存根和框架的调用(在请求真实发生之前,存根和框架早已分别被直接连接到客户程序和对象实现中去);

    动态调用:构造并发送一个请求,请求中的参数说明只有在运行时才能知道

    CORBA基本服务:名字服务、事件服务、交易器服务、负载均衡、容错服务

    CORBA核心服务:对象定位、消息传输、安全服务

    第七章 分布式事务处理

    事务:是指对特定的共享资源的一组不可分割的操作,具有ACID性 

    原子性(Atomicity)事务中多有操作是一个不可分割的整体。

    一致性(consistency)事务中涉及的资源从一个合法状态转变成另外一个合法状态,中间不能出现数据不一致的情况。

    孤立性(Isolation):一个事务只有在结束后才对其他事务产生影响,期中间结果对其他事务是不可见的。

    持久性(Durability):事务一旦完成,其影响是持久的。

    分布式事务处理:在分布的、异构的环境中,数据是分布的,一个事务的执行涉及对分布在多个不同结点的数据的更改。

    X/Open DTP模型是一个用于规范在分布、异构的环境下应用程序与不同资源之间相互协调进行事务处理的标准。

    分布事务处理模型X/Open DTP模型的组成:

    ⑴应用程序(AP):事务的使用者,它发出开始、提交或回滚事务的请求。它规定了一个事务的界限,并给出事务所包含的操作

    ⑵资源管理器(RM):提供对共享资源的访问。

    ⑶事务管理器(TM:AP与RM之间的协调员。它给每个事务分配标识符,监视它们的进展,保证事务处理的顺利进行,并负责事务在失败情况下的恢复。

    X/Open DTP模型各组成部分之间的作用关系:

    AP-RM之间采用RM的特有API接口,X/Open对这部分的规范较少。

    AP-TM之间采用TX接口。AP利用这个接口向TM发出开始和结束一个事务的请求,进行全局事务的管理。

    TM-RM之间采用XA双向接口(RM->TM为xa 反之为ax)。TM利用这个接口使各个RM合作完成一个全局事务。

    分布事务处理模型X/Open DTP——事务处理过程:

    ①AP首先通过TX接口告诉TM要开始一个新事务

    ②TM分配全局事务ID,调用XA接口通知各RM新事务开始;

    ③AP访问RM

    ④操作完成后,AP要求TM提交事务

    ⑤TM调用XA接口协调各RM进行事务提交

    事务类型:平坦事务,链式事务,嵌套事务

    作用域的角度,事务划分成:全局事务和本地事务

    两阶段提交协议:

    思路:在TM向所有RM发出正式提交请求之前,先询问所有的RM是否已准备好提交仅当所有的RM都给出肯定的回答时,TM才发出提交的请求;如果有一个RM给出否定的回答,TM就指示所有的RM进行回滚

    两阶段提交协议(2PC)的两个阶段:

    阶段一:准备阶段

    TM询问所有的RM是否已经准备好提交

    阶段二:提交阶段

    TM检查所有RM的回答,只要有一个RM给出否定的回答,TM就指示所有的RM进行回滚。否则TM将指示所有的RM提交。

    第九章 无线、移动中间件

    无线CORBA的核心技术:

    终端域:移动终端活动的区域,处于移动网络中,一般为客户端,是整个服务的发起者。CORBA服务代理:实现命名服务绑定的自动更新和迁移;移动事件提供者:提供消息响应机制;终端桥:终端域与访问域之间的接口,主要完成终端启动自举、初始化访问、迁移和访问的恢复以及GIOP/UDP、GIOP/WAP的映射。

    访问域: CORBA服务提供域,一般存在于固定网络环境中,但在特定场合下也会移动。服务:安全服务、交易服务、持久服务、通知服务等;访问桥:终端桥的对应部分,负责初始化访问、提供透明的IOR、完成连接迁移和访问的恢复以及为止相关的一下函数;GIOP隧道:实现系统的透明通信。

    宿主域:位置向导,提供位置透明服务,一般存在于固定网络环境中,且不会移动,具有较强的容错能力,命名服务:提供基本的名字服务、交易器服务;宿主位置代理:在命名服务的基础上,提供位置向导代理,从而实现位置的透明性。

    移动IOR:用来发送请求道宿主域。先让客户请求传送到宿主域;宿主域将服务所属的访问桥、移动终端信息等返回给客户;客户收到消息后,得知服务所在的访问桥,进而将请求转发到该服务。移动IOR是实现移动透明性的基础

    移动客户调用移动服务流程:P169

    第十章 反射中间件

    反射:既然一个过程,借助于包含一个组成过程(解释器)来形式化地操纵外部世界的表示,从而可以推理外部世界;那么这个计算过程也可以设计为能推理期自身,同样借助于包含一个组成过程(解释器)来操纵其自身的操作和结构。

    反射的实现:虚拟机的存在。虚拟机根据对该类的了解封装成一个对象,这个对象可供其他程序访问。

    通过反射,一个程序可以访问、推理和改变其自身的解释。

    反射中间件:通过适当的因果相联的自表示,能够检查和调整期行为的中间件系统。1.检查系统的结构、状态和行为;2.灵活性和适应性;3.关注分离。

    第十一章 网络即插即用中间件

    Jini系统的目标:⑴提供一个能够帮助不同网络用户在任何网络群体自然地完成发现、加入和参与的基础设施。⑵提供一种基础设施,实现零安装和零配置。“即插即用”而非“即插即请求”。⑶通过把所有的对象都处理为服务,提供一种以服务网络为中心的体系结构。⑷提供一种能处理部分失败,实现自愈合的网络体系结构。

    Jini的组成:基础设施  编程模型  服务。

    第十二章 其他中间件技术

    Web服务:是在Internet上进行分布式计算的基本构造块。

    Web Service:一个通过URL识别的软件应该程序,期界面及绑定能用XML文档来定义、面述和发现,并且基于Internet协议上的消息传递,使用XML支持和其他软件应用程序的直接交互。

    Web三大模块:

    传输模块(SOPA协议):在线交互的标准

    描述模块(WSDL):用于描述服务个体或服务的收集

    发现模块(通用发现、说明和集成UDDI):用于服务的发现

    SOAP:Web服务的通信协议,SOAP用来定义消息的XML格式,包含在一对SOAP元素中的、结构正确的XML段就是SOAP消息L文件是一个XML文档,用于说明一组SOAP消息以及如何交换这些消息。

    UDDI:通用发现、说明和集成,是Web服务的黄页。可以搜索提供所需服务的公司,进行阅读以便了解其所提供的服务,然后再与某人联系以获得更多信息。

    消息中间件

    考其基本结构、工作模式及其特点。

     

    更多相关内容
  • 一OPC结构概述众所周知,从计算机技术介入到工业(控制)应用领域开始,伴生的“信息孤岛”问题就一直困绕着业界。“信息孤岛”相当严重地限制了信息交换继而约束了应用领域的拓展。“信息孤岛”问题概括体现在用户...
  • mycat数据库中间件、支持分库分表。本文档对数据库的水平拆分配置、环境搭建、分片规则等做了详细描述
  • 实现异构数据库间数据共享和互操作,采用中间件技术,简化了信息系统的开发,通过对CIS需求的分析和对中间件介绍,描述了基于J2EE中间件技术的CIS体系结构设计方案;特别是对于非结构化数据库和结构化数据库并存的...
  • 无线射频识别”的缩写,是一种非接触自动识别和数据采集技术,该技术最早诞生于1948年,美国人HarryStrockman在IRE无线电工程师协会学报上发表论文对其理论和实现方法进行了详细描述,迄今已有60年。在进入20世纪90年代...
  • 高可用之中间件技术

    2019-02-12 23:32:51
    美团的高可用之中间件技术pdf文献,详细描述了美团微服务架构的设计和演变。
  • 在【中间件技术】第二部分 CORBA规范与中间件(4) 编写对象接口第6节曾经提到过,在系统中经常会区分实体型接口和会话型接口,在J2EE中直接把这种思想纳入了规范本身,开发人员所开发的EJB就包含代表实际业务系统中...


    6.1 概述

    6.1.1 Java 2平台

    Java 2为「从嵌入式环境、小型桌面环境到大型企业级平台的各层次软件系统开发」,提供了针对性的开发与运行环境支持。图6-1给出了Java 2平台的整体示意图:
    图6-1 Java 2平台示意图
    由于Java是一种解释性语言,因此Java 2平台的最底层是面向不同环境的Java虚拟机 Virtual Machine ,为相应环境下的Java应用程序,提供基本的解释执行Java字节码的运行支撑

    • Card VM 是面向智能卡 java card 的虚拟机,它为智能卡定义了一组Java语言子集和虚拟机;典型的 Java Card 设备拥有 8 8 8 位或 16 16 16 位处理器, 1 M ∼ 5 MHz 1\textrm{M}\sim 5\textrm{MHz} 1M5MHz 的运行频率, 1.2 KB 1.2\textrm{KB} 1.2KB 的RAM和 32 KB 32\textrm{KB} 32KB 的ROM。Card VM 仅支持最小的Java语言子集。
    • Card VM 高一个层次的是 KVM ,是面向手机的虚拟机(一般运行环境在 512 K 512\textrm{K} 512K 以内);现在全世界有上亿部手机中的应用程序,是用Java开发的,这些应用程序的运行通常基于 KVM
    • Classic VM 是面向PDA、机顶盒等设备的虚拟机。
    • Hotspot 是面向企业级应用的虚拟机。

    Card VM, KVM, Classic VMHotSpot VM ,它们所基于的硬件环境拥有越来越多的资源(更高速度的处理器、更多的内存),因此也支持越来越复杂、规模越来越大的应用软件。应注意,新版本的Java虚拟机结构有所变化,去掉了 Classic VM ;另外,早期版本中还存在一个 Exact VM

    基于底层的虚拟机支持,Java 2平台为开发人员提供了三种不同版本的开发/运行环境,帮助开发、管理基于不同环境的Java应用。

    • Java 2 Micro Edition, J2ME :Java最初是为消费电子设备编程而设计的嵌入式语言,J2ME 就是Java 2平台针对「基于消费电子设备(如手机、PDA、智能卡等)的应用开发」所推出的平台。
    • Java 2 Standard Edition, J2SE :用来支持开发小型的桌面应用的Java平台,也就是通常所说的JDK。
    • Java 2 Enterprise Edition, J2EE :即Java企业版,是用来支持大型企业级应用开发与运行的平台,以下简称J2EE。

    应注意,上述三个版本是同时存在的,用来支持不同领域或规模的应用

    J2EE的目标是用来支持以构件化的方法开发、部署、管理多层结构的分布式企业应用,尤其是基于Web的多层应用。J2EE围绕这一目标,提供了一种统一的、开放标准的多层平台。这一点和CORBA类似,J2EE为开发人员提供的是一种工业标准、而不是某个厂商自己的产品,尽管J2EE规范是由 Sun 负责制定和发布的,但它确实是一套业界普遍支持和采纳的开放标准,规范本身也是由很多个大型厂商,比如BEA、IBM 等来共同推动的。基于一种工业标准所开发的应用,一般不会局限于某个厂商特定的应用服务器产品,开发人员无须额外的开销,即可获得较高的可移植性。同时,遵循统一规范的不同产品之间的竞争环境,也有利于提高产品的质量。

    在J2EE规范中,容器的概念非常突出,J2EE构件要依赖于容器所提供的系统级支持。与基于J2ME、J2SE的应用不同,基于J2EE的应用系统不能直接基于Java虚拟机运行,还需要容器构成的 Java企业版平台的支持才能运行。容器为运行于其中的构件,提供生命周期管理等大量的服务,支持部署人员将构件部署到其中,同时为构件的运行指派线程。

    在J2EE中,许多构件的行为都可以在部署时,以声明的方式进行定制,这是J2EE的一个很大的特色。就是说系统开发完后,部署时还可以在源代码以外的地方进行定制来配置构件,使得它能够满足特定的应用需要,即开发人员一次开发的构件,可以通过定制去装配到不同需求的应用环境中。另一方面,当应用背景或需求发生变化的时候,很多情况下,可以不需要去修改源程序,当然更不需要重新编译,而是在源代码以外的地方进行定制,就可以使得原有的构件适应新的环境或需求

    6.1.2 J2EE平台技术

    J2EE平台为开发企业级应用,提供三个方面的技术支持,如图6-2所示,包括应用构件、公共服务与通信三个方面。
    图6-2 J2EE 平台提供的支持

    第一个侧面就是对应用构件或者组件的支持,在J2EE中,应用构件是由开发人员实现、用来构成应用系统的软件模块,这和软件系统的一般意义上的构件含义相同;另外,J2EE构件都是运行在J2EE平台之上的,更确切地讲,这些构件都是包含在某一类容器中的

    J2EE中的应用构件可分为两大类:客户端构件和服务端构件。客户端构件又包含 AppletsApplication Clients ;服务端构件又包含Web构件 JSP, Servlets 和EJB Enterprise Java Bean 构件,第2节将对每种J2EE构件进行简要的解释。

    第二个侧面是对服务的支持,即【中间件技术】第一部分 概述(1) 软件构件与中间件基本概念中提到的公共服务。具体到J2EE平台,服务是指J2EE应用构件所使用的功能,这些功能由J2EE平台提供商实现。这和CORBA中类似,在CORBA中,开发人员也可以使用大量的服务,比如对象服务中包含的命名服务、安全性控制等,公共设施中包含的打印、电子邮件等,以及一些领域接口;这些服务不需要程序员自己实现。但在J2EE平台上,服务有一个重要的区别,就是J2EE中除了像CORBA中那样、以API的方式提供的服务外,还提供了丰富的运行时服务。J2EE平台提供的服务,一部分我们可以像在CORBA中那样,通过「J2EE规范约定的标准接口」在程序中使用,还有一部分可以在源代码以外的地方,通过声明的方式来使用,这些就是运行时服务。

    J2EE平台技术的第三个侧面就是对通信的支持,主要用来支持构件之间的交互,通信机制也是由容器来提供的

    6.1.3 J2EE平台的执行模型

    J2EE典型地支持三层/多层分布式应用的开发与运行,图6-3所示的J2EE 平台的执行模型,描述了「基于J2EE的应用系统」在运行时的基本结构:
    图6-3 J2EE 平台的执行模型
    首先,从构成系统的构件来讲:

    • 在客户层,可以包含 AppletApplication Client 两种构件;类似使用 Applet 的、基于浏览器的客户端,通常称为瘦客户端 thin client ,因为这种客户端不需要在客户机器上安装任何应用代码,只需一个浏览器;而使用独立的客户端程序的客户端,称之为胖客户端 thick client ,因为其需要在每一个客户端机器上安装客户端程序。J2EE中的胖客户端通常是一个独立的Java程序。
    • 在中间层,应用中可以包含像 servlet, JSP 这样的Web构件,也可以包含EJB构件。一般又会把J2EE应用的核心中间层,划分成「包含Web构件的 Web子层」和「包含EJB构件的EJB子层」。
    • 在数据层,包含应用使用的各种企业数据,这些数据有些存储在数据库中,有些可能包含在企业的原有系统中,比如:企业中可能已经有一套基于SAP的ERP系统,其中的数据要被新开发的这套J2EE系统使用。

    其次,在J2EE平台中广泛使用构件/容器体系结构,即构成J2EE应用系统的构件都运行在某种J2EE容器中。还要注意的是,J2EE平台中每一个容器底层都需要J2SE的支持。比如,大家经常使用的浏览器就是一种常用的 Applet 容器。另外,在中间层,有两类非常重要的容器——Web 容器和EJB容器,分别为Web构件和EJB构件提供运行环境

    在构件/容器体系结构下,将底层常用的、且通常是比较复杂的服务打包在容器中,由容器向其中的构件提供运行环境与公共服务的支持。容器由J2EE平台提供商提供,为构件提供特定的开发用服务运行时服务(如生命周期管理、安全性管理、事务处理等),不同类型的J2EE容器提供不同的服务。容器除了为构件提供公共服务之外,还为构件之间的交互、或者是构件访问后台数据提供了基本的支持,包括客户端与中间层Web构件或EJB构件的交互、Web构件与EJB构件的交互、以及构件访问数据层数据等。


    6.2 J2EE应用构件

    本节简要解释「构成J2EE应用系统的构件」,重点关注其中的核心——EJB构件,其它构件的详细内容可参阅其它资料。

    6.2.1 客户端构件

    1. Applet

    Applet 是具有图形用户界面的特殊的Java类,一般运行在Web浏览器中,也可以运行在支持 Applet 编程模型的容器中(如J2SE中的 appletviewer )。在J2EE应用中,Applets 一般用来提供用户界面,图6-4给出了一个 applet 运行时的界面,当用户在 applet 提供的图形界面上操作时,可能会导致服务端的构件(比如EJB)被调用。
    图6-4 Applet 示例
    与具有图形用户界面的独立Java程序不同,applet 类自身不包含 main 入口函数,它被容器调度执行。applet 代码不需要提前在运行的客户端机器上安装,而是applet 容器在运行时从服务器下载到本地执行

    2. Application Client

    Application Client 指有图形用户界面的独立Java程序,在J2EE应用中所起的作用与 Applet 类似——用来提供用户界面。当用户在 Application clients 提供的图形界面上操作时,也可能会导致服务端的构件(比如EJB)被调用。

    applet 不同,Application Client 通常包含 main 入口函数,且需要在每个使用的客户端机器上安装。图6-5给出了一个 application client 运行时的界面。
    图6-5 Application Client 示例
    应注意,很多J2EE应用中均不使用 application clientapplet 作为客户端程序,客户端的用户界面一般由Web页面来提供,要么是静态的HTML页面,要么是服务端的Web构件动态生成的页面。这其中除了胖客户端需要在每个客户端机器上布署客户端程序的原因外,页面设计的快捷与美观也成为越来越重要的原因,同时,「基于浏览器的客户端」只能访问中间层的Web构件,这使J2EE应用被划分成更为清晰的「由客户层、Web层、EJB层和数据层构成的四层结构」

    6.2.2 服务端构件

    1. Web构件 Servlet

    Servlet 也是一种特殊的Java类,applet 不同,servlet 是运行在服务端的,因此它不需要图形用户界面Servlet 在J2EE应用中的主要作用是,接收客户端的HTTP请求(如通过浏览器发出的请求),动态生成HTTP响应(如一个页面)。程序6-1给出了一个处理HTTP请求的 servlet 的例子,该 servlet 的主要功能就是根据客户端的请求,为其动态生成一个HTTP响应——HTML页面

    // 程序 6-1 Servket 代码示例
    // 演示如何处理 HTTP GET 请求
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    public class GetDemo extends HttpServlet {
    	public void doGet(HttpServletRequest req, HttpServletResponse resp) 
    		throws ServletException, IOException {
    		resp.setContentType("text/html");
    		PrintWriter out = resp.getWriter();
    		String username = req.getParameter("uname");
    		String password = req.getParameter("userpw");
    		out.println("<HTML>");
    		out.println("<HEAD><TITLE>GetDemo</TITLE></HEAD>");
    		out.println("<BODY>");
    		out.println("Hello " + username + "<br>");
    		out.println("Your password was : " + password +"<br>");
    		out.println("</BODY>");
    		out.println("</HTML>");
    		out.close();
    	}
    }
    

    上面的 servlet 经过布署后,可以被客户端通过浏览器访问,该 servlet 根据用户访问时提供的用户名与密码信息,为其动态生成一个页面,该页面上包含用户提供的信息,该 servlet 的某次被访问时呈现的页面如图6-6 所示。
    图6-6 servlet 被访问时产生的动态页面

    可以看出,servlet 为J2EE应用提供了基本的动态页面支持。

    2. Web构件 JSP

    Java Server Page, JSP 是一类特殊的HTML文档,它通过在HTML文档中嵌入 JSP 特定的标签,允许程序员在页面中加入Java代码,通过Java代码的执行,动态生成页面的内容。程序6-2给出了一个 JSP 的例子,该JSP在客户端访问时,会在页面上显示服务器端的当前时间。

    // 程序 6-2 JSP 代码示例
    // 演示 JSP
    <html>
    	<head>
    		<title>Ch6 Simple jsp</title>
    	</head>
    	<body>
    		<%@ page import="java.util.*" %>
    		<h2>Date and Time: <%= new Date().toString() %></h2>
    		<hr>
    		<% for(int i=0; i<10; i++) %>
    		hello<br>
    		<% %>
    		how are u?<br>
    	</body>
    </html>
    

    在服务端,JSP 页面被编译成 servlet 执行。显然,使用 JSP 开发动态页面要比使用 servlet 方便,因为在JSP中,页面上静态的内容可以直接用HTML语言编写,从而可以利用现有的页面设计工具、以可视化的方式完成,只有动态的部分才需要嵌入Java代码来实现。而有了 JSPservlet 本身就通常不再完成具体的动态页面生成工作,在第4节会看到,servlet 通常会在J2EE应用中,充当分发请求的控制器

    3. EJB构件

    EJB是 Enterprise Java Bean 的缩写,通常是构成J2EE应用系统的核心构件,是用来支持大型的企业级应用开发的。在J2EE规范中,开发人员可以编写 3 3 3 种类型的EJB:实体构件 Entity Bean 、会话构件 Session Bean 和消息驱动构件 Message Driven Bean

    【中间件技术】第二部分 CORBA规范与中间件(4) 编写对象接口第6节曾经提到过,在系统中经常会区分实体型接口和会话型接口,在J2EE中直接把这种思想纳入了规范本身,开发人员所开发的EJB就包含代表实际业务系统中的共享实体的实体构件支持客户端交互的会话构件。其中实体构件又分为 Container Managed Persistence, CMP 构件和 Bean Managed Persistence, BMP 构件,会话构件又分为无状态会话构件 Stateless Session Bean 和有状态会话构件 Stateful Session Bean

    EJB 2.0 之后引入了消息驱动构件,消息驱动构件是在EJB中用来支持异步模式编程的,这种构件通常不被客户端直接调用,而是当有事件发生,即有消息收到时才会执行相应动作。第8章将详细介绍EJB构件的开发与使用。


    6.3 J2EE中的公共服务

    J2EE平台为应用构件提供公共服务与通信的基本支持,其中公共服务又分为通过API调用方式使用的 Service API通过配置方式使用的运行时服务 Run-time Service,本节简要解释J2EE平台提供的常见 Service API 和运行时服务。

    6.3.1 Service API

    1. JNDI

    Java Naming and Directory Interface, JNDI 是J2EE平台提供的命名服务接口,它为开发人员提供的主要功能是在程序中查找/定位构件或系统资源。比如,如果需要访问某个EJB,可以利用 JNDI 服务找到要使用的EJB。如果需要访问数据库,可以利用 JNDI 服务找到要访问的数据库资源。JNDI 服务使用的名字,是一个带树型结构目录的名字,类似于CORBA中 POA 名字。

    在J2EE规范推出之前,就已经存在多种可以使用的目录服务,支持我们完成类似的功能,比如基于轻量级目录访问协议 Lightweight Directory Access Protocol, LDAP 的目录服务。如果开发应用时在程序中使用了某种特定的目录服务,那么一般情况下就很难直接迁移到另一种目录服务上,因为不同的目录服务所提供的接口是不一样的

    JNDI 所提供的服务,非常类似于一种通用的目录服务。如图6-7所示,基于 JNDI 的支持,在J2EE应用中可通过这种统一的API来使用目录服务的功能,它为应用屏蔽了不同目录服务之间的差异,这使得利用 JNDI 开发的应用,可以不用修改代码、而应用到不同的目录服务上。
    图6-7 JNDI 服务

    在J2EE中,大多数的 Service API 都具备这样的特征——这些API为应用使用这些服务提供了一个标准的接口,开发人员不用关心「这些接口之下的实现」会存在什么差异,只要按照接口的约定来使用这些服务;厂商实现这些API时可以任意选择,比如厂商可以选择将自己原有的目录服务器,利用 JNDI 进行封装,为J2EE开发者提供目录服务。可以看到,这些 service API 和CORBA规范中标准化的接口起的是同样的作用:开发人员按照标准的接口来使用,厂商按照自己的方式来实现接口中的功能

    2. JDBC

    JDBC 为应用提供与厂商无关的数据库连接,它通常提供一种通用的方法,用来查询、更新关系型数据库表,并且把数据库操作的结果转化成Java的数据类型。一个 JDBC 驱动支持应用跨数据库平台、完成以下三件事情:

    1. 建立与数据库的连接;
    2. 向数据源发送查询和更新语句;
    3. 处理结果。

    JDBC 2.0 包含了一个内嵌的数据库连接池,数据库连接池是J2EE构件访问数据库的常用方式。在传统的Java程序中,应用需要访问数据库时,通常首先加载一个驱动程序,然后建立数据库连接,进行数据库操作,操作完成后再释放数据库连接。在这个过程中,建立和释放数据库连接的过程是非常耗时的,有时甚至比真正的数据库操作所占用的时间还多。

    而数据库连接池则为应用提供了一种更为快捷的数据库访问方式,在这种模式下,平台把数据库连接当作是一种系统资源来存放在数据库连接池中,平台初始化时会自动建好一些数据库连接,当应用需要操作数据库时,直接从池中获取一个建好的连接,用完后再把连接放回连接池供后续使用,这就为应用节省了建立数据库连接和释放数据库连接的过程,从而达到一个较高的访问数据库的效率。

    3. JTA

    Java Transaction API, JTA 用来支持应用中的事务控制。事务通常包含一组操作的集合,事务管理支持可靠的服务端计算,这在很多关键系统中都是必需的。事务具有如下特性:

    • 原子性:所有相关的操作必须全部成功;如果任何一个操作失败,则所有操作全部撤销。
    • 一致性:一致性保证事务所作的任何改变不会使系统处于无效状态。
    • 隔离性:并发的事务不会互相影响。事务访问的任何数据不会受其它事务所作的修改的影响,直到第一个事务完成。
    • 持久性:事务提交时,对数据所作的任何改变都要记录到持久存储器中。通常由事务日志实现。

    分布式事务可能会跨越多个组件、多台机器,并可能涉及多个数据源,因此需要更复杂的控制机制

    JTA 是在 J2EE 应用中使用的一种支持分布式事务处理的标准API。厂商可以选择自己合适的实现方式来提供事务控制的功能,比如在 websphere 中,利用一种支持两阶段提交的数据库驱动来实现 JTA在J2EE应用中,除了在代码中利用 JTA 来控制事务外,还可以通过配置方式来实现事务控制,参考本节后续的运行时服务。

    4. JCA

    在基于J2EE开发一套新的应用系统时,经常需要在新的系统中去访问企业原有的旧系统,我们把这种系统称为外部信息系统 External Information System, EIS 。企业原有系统各种各样,比如有基于 SAP 实现的信息系统,有基于 CICS 实现的信息系统。

    一般来说,要访问不同的系统,所用的手段和编写的程序是不一样的,因为不同的系统所提供的接口不一样。 J2EE Connector Architecture, JCA 是在J2EE中支持访问不同信息系统的一种统一API。如图6-8所示,基于 JCA ,J2EE应用可以使用统一的API访问不同类型的信息系统
    图6-8 JCA原理
    基于 JCA 访问不同系统时,通常通过连接不同类型系统的适配 Adapter 来屏蔽不同系统的差异,这些适配器一般由开发 EIS 的厂商、或者第三方厂商提供。理想情况下,外部信息系统某种标准中间件开发,则可以期望由中间件厂商来实现该适配器。如果外部信息系统不是基于这些中间件开发的,更糟糕的是可能没有办法找到系统的开发者,相应的适配器就很难实现了。

    5. Java Mail API

    Java Mail API 定义了一组在程序中用来调用邮件功能的API。这组API屏蔽了真正的邮件服务所使用的协议。Sun提供了一种 Java Mail API 的实现,支持我们在应用中使用Email功能,可以从Sun网站上免费获得该 Java Mail API 的实现。

    与其它 Service API 类似,Java Mail API 为J2EE应用提供了一种统一的API,这种API使得Email可以在Internet中跨越平台和邮件协议传输。

    6. Java IDL

    Java IDL Service API 是用Java实现的CORBA规范,该API提供异类环境构件的互操作,允许在J2EE应用中访问CORBA构件。

    6.3.2 运行时服务

    1. 生命周期管理

    生命周期管理主要指的是EJB构件的生命周期管理。该服务的主要含义是由容器来管理运行于其中的构件的生命周期。EJB规范统一规定了EJB生命周期管理策略,厂商实现J2EE平台时,要按照规范实现生命周期管理功能,开发人员编写EJB构件时,要注意构件的生存期特性。和CORBA相比,有了容器提供的生命周期管理服务,开发人员就不需要自己写服务程序了,容器会自动在需要的时候将EJB构件准备好,由窗口来决定什么时候实例化分布式对象、以及实例化多少个对象。

    当然,这是两方面的,不编写服务程序就意味着开发人员放弃了对服务端程序的更多的控制力,如果容器提供的生命周期管理服务不能满足应用的某些特定需要,可能能添加的干预也很有限

    2. 事务控制

    在J2EE中,除了利用前面提到的 JTA 来实现事务控制外,还可以将事务交给容器自动控制、而开发人员不用编写任何Java代码。容器会根据部署时指定的事务属性,自动完成控制的事务。当然,容器控制的事务是有局限性的,只能是方法级的,即其维护的事务的粒度是方法。

    容器维护的事务称为 Container Managed Transaction, CMT ,对应地,开发人员在代码中通过 JTA 来控制事务的方式称为 Bean Managed Transaction, BMT

    3. 安全服务

    J2EE中的安全性控制分为两个级别:第一级是认证 authentication ,就是首先要验证访问者的身份。经过身份认证后,第二级就是授权authorization 控制,所谓授权就是判断特定的访问者是否具有在特定资源上执行某种操作的权限,比如,是否有权限访问系统中的某个 JSP 页面,是否有权限调用系统中某个EJB提供的特定方法等。

    在J2EE中,实现安全性控制的常用方式是声明的方式。声明方式的安全性控制完全由容器自动控制,不需要程序员编写任何Java代码。开发人员主要通过以下配置工作来定制安全性控制的规则:

    • 声明需要的安全性角色 security-role ,并且把角色映射到实际的安全域中。这里的安全性角色是指为应用系统所指定的逻辑用户组,比如经理角色、职员角色等。
      在实际的安全域中,一般会有多个用户映射到同一个角色。比如,我们可以为一个公司使用的应用系统建立一套用户管理系统,其中张经理使用的用户 managerzhang 映射到经理角色,李经理使用的用户 managerli 也映射到经理角色。同时还会有多个员工使用的用户映射到职员这一角色。
    • 声明安全控制规则,通过这些规则告诉容器,如何为应用实现安全性控制。比如,我们可以通过规则告知容器:“经理”角色可以执行“员工管理” Bean 的“辞退员工”方法,还告知容器:“所有人(未经过身份认证)”可以访问商品信息页面等。

    除了声明的方式外,我们还可以自己写代码来进行安全性控制。这种方式要结合声明的方式使用,还需要声明需要的安全性角色,然后在程序中根据读到的角色来控制它是否有权限执行请求的操作。

    4. 持久性服务

    持久性服务主要指与实体构件 Entity Bean 相关的数据库操作J2EE中的实体构件主要用来实现数据库的访问。基于容器提供的持久性服务,开发人员可以通过实体构件,将相关的数据库操作交给容器来自动完成,这种方式称为 Container Managed Persistence, CMP ;当然,实体构件相关的数据库操作也可以由开发人员编写Java代码来完成,这种方式称为 Bean Managed Persistence, BMP

    5. 资源管理

    资源管理是指由J2EE运行平台负责维护/管理「应用所用到的系统资源」,如数据库连接资源、线程资源等。比如,前面提到的数据库连接池就是用来管理数据库连接这种系统资源的,类似的还有系统线程池,用来维护一定数量的已创建好的线程。

    资源管理为应用带来的好处主要有两个:

    • 提高系统资源的利用率和效率:有限的资源通过平台管理起来,在众多的构件之间共享,可以提高资源的利用率;另外,资源管理为资源的使用作了一些预处理操作(如预先建好数据库连接等),可以有效提高资源的使用效率。
    • 使得应用程序与具体的资源相对无关:比如,应用使用不同的数据库管理系统时,程序员所写的代码是一样的,当使用的数据库管理系统发生变化时(比如由DB2变为Oracle),不需要修改源程序,只要改一下资源的配置信息就可以实现。

    6.3.3 通信支持

    1. RMI/IIOP

    RMI/IIOP 是基于「CORBA之中提出的 IIOP 协议」实现的远程方法调用 Remote Method Invocation ,主要是用于支持EJB构件客户端对EJB的远程调用

    应注意,RMI/IIOP【中间件技术】第一部分 概述(1) 软件构件与中间件基本概念例子中使用的 Java RMI 不同,Java RMI 是Java SE提供的、用来支持远程访问 Java RMI 对象的标准,该标准基于 Java Remote Messaging Protocol, JRMP 实现。Java RMI 对象与EJB都是用Java语言实现的分布式对象,它们之间最大的区别就是:EJB可以使用J2EE平台提供的各种公共服务,而 Java RMI 对象不可以

    2. JMS

    JMSJava Messaging Service 的缩写,代表J2EE平台为应用构件提供的异步消息服务JMS 定义了 Service ,定义了一组统一的API,支持在程序中发送和接收异步消息。和其它的 Service API 类似,不同的厂商根据API来实现异步消息处理机制,一般的做法是提供一个消息服务器。


    6.4 J2EE应用开发

    本节简要介绍J2EE应用程序的基本结构,以及J2EE应用的基本开发过程

    6.4.1 J2EE应用程序

    在J2EE规范下,开发者所开发的各种J2EE构件,需要被组装成完整的J2EE应用,才能部署到J2EE服务器上。如图6-9所示,应用构件通过组装被打包到一个J2EE应用文件(.ear 文件)中,然后布署到J2EE中间件平台上运行。在打包过程中,需要应用组装者编写一种特殊的组装配置文件——布署描述符 Deployment Descriptor, DD
    图6-9 J2EE 应用打包与布署的基本过程
    在J2EE中,开发者开发的不同构件会按照类型与层次,被打包到不同的目标文件中,J2EE平台上的目标文件主要有以下三种类型:

    • Java目标文件 Java Archive :Java语言的目标程序(.class 文件)包,对应磁盘上后缀名为 .jar 的文件,在J2EE应用中用来打包EJB构件、Application Client 以及它们需要的辅助Java目标文件。
    • Web目标文件 Web Archive :Web构件的目标程序包,对应磁盘上后缀名为 .war 的文件,在J2EE应用中用来打包Web构件(Servlet, JSP)以及静态页面相关的文件(如HTML文档、图片等)。
    • 企业目标文件 Enterprise Archive :J2EE应用目标程序包,对应磁盘上后缀名为 .ear 的文件,在J2EE应用中用来打包完整的J2EE应用。一个完整的J2EE应用中,可以包含若干个Java目标文件和若干个Web目标文件。

    在打包Java目标文件、Web目标文件与企业目标文件时,都需要提供相应的布署描述符。

    基于上述三种程序包,J2EE应用程序的基本结构如图6-10所示,一个J2EE应用对应一个企业目标文件,其中可以包含若干个打包了EJB的EJB模块(一个EJB模块对应一个Java目标文件)、若干个打包了Web构件的Web模块(一个Web模块对应一个Web目标文件)和若干个打包了客户端程序的客户端模块(一个客户端模块对应一个Java目标文件)
    图6-10 J2EE 应用程序的基本结构
    将每个模块中包含的构件进一步细化,我们可以得到图6-11所示的J2EE应用程序的完整结构:
    图6-11 J2EE 应用程序的完整结构
    每个EJB模块包含若干个EJB构件、与一个当前模块的布署描述符;每个 Web模块包含若干个 Servlet, JSP 构件、若干静态页面与相关图片等资源,以及一个当前模块的布署描述符;每个客户端模块包含若干个客户端程序使用的Java类、与一个当前模块的布署描述符。除了每个模块包含一个布署描述符外,整个J2EE应用还包含一个布署描述符。

    一个布署描述符是一个 XML 格式的文件,该文件中描述了「当前模块中所包含的内容(构件或模块)」和「模块所需要的环境」,J2EE平台的丰富源代码以外的可定制性,大部分都体现在部署描述符中。每个模块或 .ear 文件都有一个部署描述符。J2EE中,布署描述符的名称是硬编码的,即每种类型的目标文件都包含一个固定名字的布署描述符。

    一般来说,J2EE平台提供商会提供相应的工具来自动生成部署描述符,并且支持以可视化的方式进行编辑。因为部署描述符是一个 XML 格式的文件,所以可以手工创建和编辑,只要你熟悉部署描述符的格式。下面简要介绍常用布署描述符中的内容:

    • EJB模块的布署描述符的名称是 ejb-jar.xml同一EJB模块中的所有EJB构件,共享该模块的布署描述符。在该布署描述符中,对于每一个EJB构件描述了该EJB的 Home 接口、Remote 接口、以及真正提供服务的类的名字;如果是 Session Beans ,说明是哪种类型的 Session Bean ;如果是 Entity Bean ,说明需要容器提供的持久性管理服务及相关的信息;说明该EJB是否需要由容器来控制事务,如果需要,怎样控制;说明该EJB的安全控制策略等等。
      可以看出,EJB构件的很多特性都是在部署描述符中确定的,比如如何管理持久性(也就是 Entity Bean 的数据库操作)、怎样控制事务、怎样控制安全性等信息,都在部署描述符中有所体现。当这些相关的特性发生变化时,可以不修改EJB的源程序,而仅通过修改部署描述符,就可以使得EJB去适应新的环境
    • Web模块的布署描述符的名称是 web.xml同一Web模块中的所有构件,共享该模块的布署描述符。Web模块的布署描述符首先描述了当前模块包含的构件(包括 Servlet, JSP 、表态页面等);可以为当前模块中的构件说明安全控制规则。此外,J2EE应用的Web模块中,经常需要配置应用使用的用户认证方式,因为在典型的J2EE应用中,客户端通常通过浏览器直接访问Web模块中的构件,Web模块中的构件首先与访问者接触,因此通常在Web模块中完成对用户身份的认证。
    • J2EE应用的布署描述符的名称是 application.xml 。J2EE应用的布署描述符描述了「当前应用中包含的所有模块」,此外还可能定义「应用使用的安全性角色」。

    6.4.2 基于角色的开发过程

    J2EE规范将应用系统「从开发到布署维护的生命周期」映射到了 6 6 6 个角色:

    • J2EE平台提供者 J2EE Product Provider ,其工作就是按照J2EE规范实现J2EE平台,如IBM、BEA、Sun等厂商,他们提供的主流J2EE平台包括IBM的 Webshpere Application Server 、BEA的 WebLogic Application Server 、Sun的 iPlanet Application Server 等,除非特别声明,第三部分的例子均基于Sun提供的免费J2EE平台——J2EE参考实现 J2EE Reference Implementation
    • 工具提供者 Tool Provider ,其任务是为其他角色提供各种工具来帮助其完成J2EE平台上的任务,如 Websphere Application Server, WSADWeblogic BuilderJBuilderNetBean 等开发工具,用于组装J2EE应用的组装工具,用于管理、监控J2EE平台与应用的管理/监视工具等。
    • 应用构件提供者 Application Component Provider ,其工作是按照应用需求、实现构成应用的各种构件,另外还可能参与编写布署描述符
    • 应用组装者 Application Assembler ,其工作是将构件提供者提供的构件组装成应用
    • 布署者 Deployer ,其工作是将应用安装配置到运行环境中
    • 系统管理员 System Administrator ,其工作比较繁杂,包括备份配置数据、配置企业级应用、进行应用统计分析和性能分析、创建服务器组和服务器克隆以优化系统性能、管理并控制应用的安全性等。

    在这些角色中,一个角色的输出经常是另一个角色的输入,如 Application AssemblerApplication Component Provider 开发的构件组装成应用,而 Deployer 则将 Application Assembler 组装的应用部署到运行平台上。同一个(组)人可能会执行两个或多个角色的任务,一个角色的任务也可能由几个(组)人完成。

    6.4.3 J2EE应用中的 MVC 设计模式

    模型-视图-控制器 Modeling-View-Controller, MVC 设计模式明确划分了不同的构件在应用系统中的作用。如图6-12所示:

    • 在J2EE应用中,模型 Modeling系统的模型或系统基本的业务功能,通常由EJB构件实现;
    • 视图 View ,即系统的人机交互界面,通常由JSP构件实现;
    • 控制器 Controller ,即分发客户请求,决定每次客户端请求调用哪个EJB构件完成、结果由哪个JSP构件呈现的控制器,通常由Servlet构件实现。
      图6-12 J2EE应用中的MVC模式

    MVC 模式下,J2EE应用呈现更为清晰的四层结构:客户层、Web层、EJB层与数据层客户通过浏览器发出的请求,通常被Servlet构件接收,Servlet调用合适的EJB构件完成客户请求,然后再将处理结果利用JSP呈现。此时,客户端只能访问Web构件,Web构件不会直接访问数据库,J2EE应用呈现出典型的四层结构。


    思考与练习

    6-1 J2EE应用中构件/容器能够为应用构件提供哪些好处?
    6-2 组成J2EE应用的应用构件主要有哪几种?每种应用构件在J2EE应用中的基本作用是什么?MVC 模式如何在J2EE中实现?
    6-3 请简单描述J2EE应用程序的基本结构,说明布署描述符的主要作用。

    展开全文
  • 一文读懂中间件

    2022-05-16 00:17:07
    中间件”一词被用来描述各种各样的软件产品,在不同文献中有着许多不同的中间件定义,包括操作系统(和/或网络)和应用程序之间的软件层,以及两个应用程序之间的“粘合剂”。它也被描述为一种重要的集成工具,或...

    在码农的日常工作中, 经常会提到中间件,然而大家对中间件的理解并不一致,导致了一些不必要的分歧和误解。“中间件”一词被用来描述各种各样的软件产品,在不同文献中有着许多不同的中间件定义,包括操作系统(和/或网络)和应用程序之间的软件层,以及两个应用程序之间的“粘合剂”。它也被描述为一种重要的集成工具,或支持与分布式软件的模块化连接。

    7e9e2cdb738aac2b3a9b40bfc2676495.png

    那么——

    • 中间件到底是什么?

    • 中间件有哪些类型?

    • 典型的应用场景是什么?

    • 中间件和XaaS 有什么异同?.

    • ..... 

    中间件已经成为分布式计算的一个不可或缺的部分。如果不涉及中间件,实际上不可能构建大规模的分布式应用程序。相比之下,试图构建一个没有中间件的分布式应用程序就像试图在没有操作系统的个人计算机上编写一个简单的应用程序。随着中间件的发展,它所提供的主要目标、设计、体系结构和特性也在不断演变。温故知新,本文希望能够对中间件有一个系统的理解。

    1. 什么是中间件

    在计算机科学中,系统通常分为两类: 软件和硬件。然而,在这两者之间还有一个额外的层,称为中间件,它是一个软件“管道”,一个操作、一个进程或者一个在操作系统和最终用户之间的应用程序。这个术语是在20世纪80年代初引入的,当时包含了复杂的软件解决方案,通过软件和应用组件等新特性对遗留系统进行现代化改造。最初,它仅用于扩展网络层和应用程序层。随后,扩展到作为操作系统和网络层之上的一层,以及应用层之下的一层。这意味着中间件现在可以促进应用程序组件和分布式网络之间的通信。

    CORBA 于1991年问世,为应用集成和数据接口问题提供了一个很好的解决方案,从而产生了第一个具体的中间件定义。从那时起,中间件这个术语就与 CORBA 纠缠在一起,并且在接下来的许多年里,如果有人提到中间件,那么每个人都会自动地认为是 CORBA。然而,随着时间的推移,出现了一些问题和限制,CORBA 无法为所有类型的分布式应用程序提供解决方案。此外,它对应用程序施加了高开销,这使得它不适用于网格、云、无线传感器网络和移动应用程序。因此,术语中间件开始摆脱与 CORBA 的关联,并开始覆盖更广泛的工具和服务,以支持不同的分布式计算/服务需求。

    中间件的一个可能定义是“中间件是帮助应用程序与其他应用程序、网络、硬件和/或操作系统进行交互或通信的软件,提供了提高服务质量(QoS)的工具”。该定义可能描述了目前可用的大多数中间件产品。2000年的一次IETF研讨会将中间件定义为“在传输(即通过TCP/IP)层服务集之上,但在应用程序环境之下的那些服务”(即在应用程序级API之下)。在这个更具体的意义上,中间件可以被描述为客户端—服务器中的“—”,包括web服务器、应用服务器、内容管理系统以及支持应用程序开发和交付的类似工具。通过中间件,程序员可以选择实现分布式的解决方案,而不必分析不同的组件在进行交互,很有些外观模式升级版的味道。

    中间件是一种软件,它在一个或多个应用程序和其他应用程序之间,或者在一个或多个应用程序和基础设施之间起着“粘合剂、中介、代理、中间人、解释器、抽象提供者、合并者、集成者、促进者或连接器”的作用。

    在实际工作中,根据所在领域的不同,人们对中间件使用了不同的定义。例如,软件工程师和 DevOps 工程师都将中间件描述为通过不同的系统组件“粘合”软件的层,网络工程师会说中间件是网络连接的容错和错误检查的集成,换句话说,将中间件定义为通信管理软件。与此同时,数据工程师将中间件视为负责协调、触发、处理和发布来自各种来源的数据的技术。鉴于没有统一的中间件定义,而沟通的前提是概念的统一,所以在谈论中间件的时候最好限定于特定的领域分类。

    6e01aae4cd97dab13aab2734a6a8dcc5.png

    2. 中间件的分类

    对于中间件而言,一般可以从两个视角进行分类:架构视角和应用程序的视角。架构视角适合于按照每个体系结构的集成来精确定义中间件,而不是它的应用程序属性。

    2.1 系统架构视角

    在系统架构的视角,中间件以特定方式集成到其异构系统环境中,每一类中间件在其他软件之间都有不同的通信协议或操作方式。

    2.1.1 面向过程的中间件

    面向过程的中间件使用同步通信,特点是使用客户端stub和服务器skeleton。客户端stub将过程的参数转换为消息,并将该消息发送到服务器。服务器skeleton将消息转换回参数,并将过程调用发送到处理它的服务器应用程序。一旦执行了该程序,就会发生相反的过程。客户端stub还会检查错误,将结果发送到调用软件,然后挂起线程。

    这一类中间件的优点是使用标准类型的名称服务,远程处理进程,即使出现网络问题也能返回响应,支持异常,并且可以管理多种类型的数据格式和异构的系统级服务。缺点是不可伸缩,因为它不包含复制机制,不具有反射性,并且是一个非常严格的过程,与过程紧密耦合。

    2.1.2 面向对象的中间件

    面向对象中间件结合了面向对象程序设计/设计原则,支持分布式对象请求,使用线程策略,对象(客户端对象和服务器对象)之间的通信可以是同步、延迟同步和异步的。对象中间件通过将来自多个客户端对象的类似请求分组到一个事务中来支持多个事务。首先,中间件使用客户端对象对远程对象进行逻辑方法调用。本地ORB代理封装数据并将其传输到代理。代理可以联系多个数据源,获取它们的参考ID,收集数据,有时还可以重新组织数据。服务器对象从代理接收消息,远程代理解析数据。数据被提交到一个远程服务对象,在那里执行特定的过程,返回的结果与上述相反。

    这一类中间件的优点包括对服务器对象的负载管理和可伸缩性的支持,并解决了面向过程中间件的缺点。它还可以对许多不同的数据类型、形式和状态进行操作,并且是分布式对象的自我管理器。缺点是要在执行前预链接,以及对于一些遗留系统需要封装代码。

    2.1.3 面向消息的中间件

    面向消息的中间件可以细分为两种类型——消息传递和消息发布/订阅。在消息传递类型中,应用程序使用客户端发送消息(针对一个或多个客户端),服务器以某种预定顺序(FIFO、基于优先级方案或基于负载平衡方法)从队列中拾取请求。中间件服务充当消息的路由器,通常不与消息交互。

    发布/订阅类型的工作原理略有不同,这是一个事件驱动的过程。如果客户想要参与,它首先加入一条消息总线。然后,根据其作为发布者、订阅者或两者的功能,它在总线中注册一个事件侦听器。发布者向总线(在中间件服务器上)发送事件通知。然后,中间件服务已注册的订户发送一条通知,说明数据可用。当订阅者向特定的发布者请求一些数据时,该请求被包装在一条消息中并发送到总线。然后,总线向发布者发送一个请求数据的事件。

    2.1.4 基于组件或反射型中间件

    组件被描述为“执行特定功能的程序,其设计方式便于与其他组件和应用程序一起操作”。这种类型的中间件是一种组件配置。这些组件要么在构建时选择,要么在运行时选择。这种类型的中间件拥有广泛的组件库和组件工厂,支持在多个平台上构建。由于分布式计算环境中的变化(即资源可用性、新要求的协议、网络连接)一直都在增加,因此需要组件或反射型中间件提供不断增加的QoS要求。

    该中间件的优势在于可配置性,配置可以在运行时完成,这为满足大量应用程序的需求提供了很大的灵活性。

    2.1.5 代理型中间件

    代理型中间件由几个组件组成:实体(对象、线程)、介质(一个代理和另一个代理之间的通信)和规则(代理通信协调规则)。介质可以是监视器、通信链路或更复杂的类型(例如管道)。规则确定了代理的交互性质,例如同步或命名的类型。代理型中间件能够自主地执行操作以满足其设计目标,涵盖了广泛的策略基础,范围覆盖了算法、负载平衡策略、资源适应性等。

    代理型中间件的优点是代理可以代表用户执行任务,并且可以根据周围的环境适应范围广泛的策略。然而,操作的复杂性、理解操作的困难,以及将其纳入系统所需的大量人力,一直是这一类型中间件的主要弱点。

    162425cb47979aee065cb8898a1155d8.png

    2.2 应用的视角

    应用程序可以包含适合特定功能的中间件,例如数据访问、基于Web、实时操作等专门用于应用程序的中间件。

    2.2.1 数据访问中间件

    数据访问中间件用于应用程序与本地和/或远程数据库(关系数据库和非关系数据库)、数据仓库或其他数据源的交互。这类中间件包括事务处理监视器、数据库网关和分布式事务处理中间件。这种类型的中间件可以帮助满足特殊的数据库需求,如安全性(身份验证、机密性和访问控制)、保护和ACID属性。如果DBMS不可用或无法处理事务,该数据库中间件甚至可以自己执行请求的事务。由于数据可能会保留在多个数据库中,因此中间件(特别是事务处理监视器)会跟踪每个事务的进度,并在请求的一部分失败时请求回滚。中间件通知请求的状态,并传递所有返回的数据。一些中间件甚至修改了返回数据的外观,使数据更易于应用程序或用户使用。

    数据访问中间件在多个源和数据库之间的透明通信,将应用程序编程语言转换为目标数据库可接受的语言,以及将响应集转换为请求应用程序可接受的格式,能够直接查询数据库或与DBMS通信。

    2.2.2 桌面中间件

    桌面中间件可以根据用户的要求,通过跟踪和协助应用程序,对数据的表示方式进行更改,管理任何传输服务(例如终端仿真、文件传输、打印服务),并在中断最少的情况下提供备份保护和其他操作后台功能。中间件服务包括图形管理、排序、字符和字符串操作、记录和文件管理、目录服务、数据库信息管理、线程管理、作业调度、事件通知服务、软件安装管理、加密服务和访问控制等等。

    2.2.3 基于Web的中间件

    基于Web的中间件帮助用户进行浏览,使用界面提前搜索感兴趣的页面,并从浏览历史中识别用户感兴趣的变化。它为大量应用程序提供身份验证服务,并提供独立于底层操作系统、网络协议和硬件平台的进程间通信。与网络紧密相连的中间件被称为应用服务器,它们提高了对性能、可用性、可扩展性、安全性、信息检索以及对协作管理和使用的支持。当服务器和客户端之间获得更好的通信时,中间件可以直接连接到应用程序。基于web的中间件提供的一些核心服务包括目录服务、电子邮件、计费、大规模供应管理、远程数据访问(包括下载、程序访问和浏览)和远程应用程序等。

    例如,电子商务中间件涉及了通过网络进行的两个或多个企业(或用户和企业)之间的通信。该中间件控制对客户配置文件信息的访问,允许业务功能(如购买和销售物品)的操作,并协助应用程序之间的财务信息交易。这种中间件可以提供一个模块化平台来构建web应用程序[,对安全性、QoS、经济高效且快速的交易以及不同环境下的透明度的需求至关重要。

    面向移动应用的中间件是基于Web中间件的另一个主要分支。它集成了分布式应用程序和服务器,为移动用户提供对电子邮件、日历、联系信息、任务列表等的安全无线访问。

    2.3.4 实时型中间件

    实时型中间件支持时间敏感的请求和调度策略,通过提高用户应用程序效率的服务来实现这一点。实时中间件可分为实时数据库应用、传感器处理和信息传递等。

    随着物联网的普及,实时信息处理中间件的数量急剧增加。实时型中间件提供了一个决策过程,确定了解决时间敏感过程的最佳方法,并可以帮助操作系统分配资源,以帮助时间敏感的应用程序满足其实时性需求。

    2.3.5专有用途中间件

    专有用途中间件一般为满足特定需求而创建的,把不便于分类的中间件类型归类于此。

    6eda98cad1589bb1cebc847e3ff3e071.png

    3.中间件的用途

    在互联网的广泛使用和高速连接的改造之前,大多数应用程序是作为单体独立的软件解决方案开发的。这个软件为了特定的目的和活动而构建,因此不设计为连接和软件组件的交互。单体软件需要一个复杂的中间件解决方案,以便与不同的模块(如客户机/服务器)共享信息,或者向主机/资源管理软件发出请求。

    在互联网彻底改变了运作方式,越来越多的业务由连接到大型分布式计算机网络的多个计算设备所驱动。分布式计算引入了面向服务的体系结构, 由多层软件解决方案组成,这些解决方案实现了实体和服务的分离,从而将每个组件分解为微服务。这是通过降低系统的复杂性和进一步增加其模块性来实现的。在这个场景中,每个实体被视为唯一且自治的。

    这时,中间件是一种将单个应用程序开发成的一套小型服务,每个应用程序都在自己的进程中运行,并与轻量级机制(通常是 HTTP 资源 API)通信。中间件与 API紧密相连,使用不同API软件包。这意味着中间件可以简化复杂的应用程序,因此开发人员不仅关注组件的通信,还关注业务逻辑和系统的交互。

    另外,在开发应用程序的时候,一般需要考虑的三个必要因素是可伸缩性、维护和自动化。首先横向扩展只是增加资源以扩展主系统的功能,在整个网络上最优地分配作业调度。至于维护,关注点分离原则非常重要,不管是使每个实体可重用(模块化)还是捆绑它的属性(封装)。典型的模块化示例包括 Linux 内核,其中不同的元素可以被多次使用来构建一个系统。此外,重点一般会放在自动化操作上,以减少错误,并使应用程序全天候可用。

    中间件可以作为实现可伸缩性、维护和自动化的促进者。这意味着中间件在软件开发过程中提供了灵活性,同时减少了整个软件周期的时间,也为开发人员提供了更容易扩展性。此外,中间件可以通过结合“快速失败,快速成功”的原则来支持快速的原型实现,还可以降低项目成本,普遍促进创业和创新。

    综上所述,中间件提供的注意用途如下:

    • 提供工具和函数以简化复杂应用程序的开发。

    • 提供高级抽象和接口,以促进应用程序的集成、重用和开发。

    • 隐藏底层平台和操作环境的异构性。

    • 隐藏基础环境中的分发机制和通信细节。

    • 促进基础设施的不同分布式组件之间的通信。

    • 为不同应用程序所需的通用功能提供共同服务,以减少开发工作和避免服务重复。

    • 提供一个公共体系结构来添加新的服务和特性,而不必更改应用程序。

    • 提供增值特性和非功能特性,如安全性、可靠性和 QoS。

    • 提供必要的工具,以增强分布式应用程序的性能并提高其稳定性和可伸缩性。

    c1a5b081790b83b042e91784881ac369.png

    4. 中间件示例:物联网中间件

    物联网描述了一个由多个智能感应设备融合的实时数据收集的大型互联设备网络。为了实现这一目标,电子设备将数据发送到外部服务,这些服务托管在云端或边缘计算的基础设施中。物联网网络不仅可以与周围环境互动,而且不需要用户的干预就可以自主行动。在这个范围内,普适计算被定义为“源于数字世界的、通过物理世界感知的服务整体”。

    此外,开发物联网应用的体系结构原则包括安全性、能源消耗和监控、可靠性、可解释性和通信。根据其软件许可,它可以分为企业维护、开源或设备专用。物联网中间件是基于以下关注点分离来处理其操作的:

    • 硬件层包括所有的传感设备,以及它们运行的传感器网络。这一层负责收集和处理可用的数据。

    • 操作系统层执行必要的数据转换操作,以便相应地提取和加载信息。

    • 网络层通过保护连续、安全和无干扰的通信流,将数据发送到下一层。

    • 中间件层处理消息通信协议和服务。具体来说,除了为应用程序提供访问协议之外,该层还检查系统的操作和数据传输故障。

    • 应用程序层完全负责向最终用户提供服务(通常是通过 API) ,方法是启用服务广播到各个应用程序的终端。

    一些关于物联网中间件的最有前途的开源项目,包括: 针对云传感器系统的 OpenIoT; 针对设备间通信协议的 FIWARE; 针对数据存储和机器学习的快速部署和高可扩展性的 LinkSmart; 针对通信、控制和管理的自动化层的物联网抽象的 DeviceHive; 针对针对智能应用的工业物联网框架 ThingSpeak等等。类似地,IBM、 AWS 、Azure、谷歌和甲骨文都开发了企业中间件,专注于自动化特定任务或核心业务活动流程。

    42c9952d580dbb299177ddc9e8496a44.png

    c565d5463130ea4673dc31df0130023b.png

    5. 中间件与云服务

    随着云服务的普及,中间件促进了在单一多用途环境中的分布式部署。尤其是容器的指数级增长,这种情况变得更加明显,软件环境可以通过同一台服务器在一个沙箱环境中快速而方便地部署多次。容器是一个独立的软件环境,具有唯一的代码、库、运行时环境和依赖关系。中间件层也已经从虚拟化转移到了集装箱化,用于优化通信和抽象通信协议以开发软件管道。

    云原生是一种利用基础云计算技术的应用程序开发方法,其目标是在内部部署、私有云或公共云环境中提供一致的开发、部署和管理。实际上,云原生应用是从微服务构建的应用程序,部署在使用Kubernetes编排的容器中。微服务是松散耦合的应用程序组件,包含了自己的堆栈,可以彼此独立部署和更新,并使用REST API、消息代理和事件流的组合相互通信。容器将应用程序代码(如微服务)以及在任何传统IT或云基础设施上运行该代码所需的操作系统库和依赖项打包在一起。

    中间件可以解决其中一些复杂性,但使用传统中间件运行容器化应用程序会增加其自身的复杂性。出于这个原因,流行的云应用开发平台,已经演变为包含了容器化中间件,即模块化中间件,以便只需将所需功能打包到一个容器中。

    从开发者的角度来看,向云计算解决方案的转变意味着代码更少。云基础设施中的大部分工作都是在“引擎下”完成的。以前由本地中间层处理的分布式编程现在可以远程处理,更具体地,需要处理的常见问题包括扩展性、弹性、可观察性、资源管理以及持续的集成和交付。这意味着企业将限制中间件开发人员的数量,更关注架构和应用程序开发,而不是部署。

    814e6905ce0ba823ed2de8055544f468.png

    6.小结

    中间件一词已被用于包含许多不同类型的软件,因此很难确定到底指的是什么。简单地说, 中间件是连接分布式环境中的任何组件集,以提供更好的功能。

    实际上,从体系结构、开发到部署,中间件可以在其软件周期中使用。对业务数字化转换的持续需求表明中间件将继续存在。无论是微服务,还是在计算机之间的传输数据,或者创建一个通用网关,都可以依靠中间件来实现不同设备、应用程序和软件层之间的通信。通过微服务架构,通过中间件可以相对轻松地开发一个全局的分布式生态系统。

    尽管中间件这一术语本身的使用越来越少,但它仍然存在于移动和传感器网络、面向服务的架构、网格计算、云计算、在线多人游戏、网络机器人、物联网等等。因此,中间件实际上仍然无处不在,并且很可能在很长一段时间内无处不在。

    【参考资料与关联阅读】 

    展开全文
  • J2EE与中间件技术

    千次阅读 2015-04-25 10:24:31
    J2EE的四层模型描述 J2EE规范 一个多层次的分布式应用模型和一系列开发技术规范 简化和加速企业级应用开发 J2EE Blue Prints 是一组集成的企业API库软件和开发工具 参考实现 快速原型化J2EE应用 ...

    Web应用工作方式

    内容在发送到浏览器之前由Web站点动态生成
    基于浏览器/服务器模式(B/S)
    浏览器
    Microsoft Internet Explorer, Netscape Navigator, Safari
    服务器

    • Web Server

    如MS IIS/IBM Http Server/Apache

    • Web Application Server

    如 IBM WebSphere Application Server

    访问Internet的基本机制

    客户通过指定URL地址,向位于特定位置的计算机提交文件访问请求
    存储请求文件的计算机称为服务器
    服务器为向其发起文件服务请求的任何客户提供服务
    服务器必须一直运行

    Web应用结构组成

    Web服务器
    是安装在Web服务器计算机上的一个软件包
    负责接收用户请求并响应之
    HTTP
    基于请求/应答模式
    是一个支持web浏览器与Web应用之间通信的应用层协议
    无状态、面向对象

    HTTP会话处理

    当用户在浏览器地址栏输入URL时
    客户浏览器建立到服务器的TCP/IP连接
    浏览器向服务器发送服务请求
    服务器发送应答信息给客户
    服务器关闭连接
    注意

    请求页面发送给客户后,服务器通常主动关闭连接,而不管该客户是否会继续向该服务器发送服务请求

    工业界对Web应用的关注

    Web技术变得越来越重要,Web应用成为未来的标准应用模式
    在客户端,IE占有主流地位
    在服务器端,J2EE和.NET成为两个主流且相互竞争的Web服务器架构技术

    企业级应用开发面临的问题

    面向Web环境
    分布式、可移植、可装配
    旧系统集成支持
    满足企业计算要求

    • 一致性
    • 事务性
    • 安全性

    要有好的特性

    • 可伸缩
    • 可扩展
    • 易维护

    “企业”是指一个为了实现某个共同目的而在一起工作的人或实体的组织
    这些组织的形式和大小并不限定,有大有小、是盈利性的或非营利性的、可能是政府机关也可能是非政府机构
    一般使用术语“企业”时,极有可能指的就是大型营利性组织,如Intel、GE、Wal-Mart、摩根银行或eBay等等
    企业通常都有一些共同的需求,例如信息共享与处理、资产管理与跟踪、资源规划、客户机用户管理、商业机密保护等等
    术语“企业软件”就是能够支持企业共同需求的这类软件的总称

    企业软件与中间件
    在软件开发过程中,出现面向对象开发软件的方法后,可以实现代码重用,但只能部分实现,原因之一是对象都细粒度化,造成对象间紧密耦合状态,从而使得大范围的重用变得很困难
    解决途径——设计软件组件
    与对象不同,软件组件是在更高的抽象级别中设计的,可以提供一个完整的功能或服务
    组件间的耦合更为松散。利用组件的接口,可以将组件迅速组合在一起构建更大的应用程序,这样所用的成本也比较合算

    J2EE的优势

    提供一套完整的解决所有这些问题的框架方案
    提供分布式、可移植组件的框架
    为组件与应用服务器提供标准API
    简化服务器端中间层组件的设计
    对开发者及用户而言
    更短的开发时间
    可重用组件
    JSP(Java Server Pages)
    EJB(Enterprise JavaBeans)
    更简化的连接
    XML,JDBC,RMI-IIOP

    客户/服务器结构

    “胖”客户端
    用户界面和程序逻辑绑在一起,代码难以重用
    服务器的数据库必须同每一个活动的客户保持连接,消耗大量的运算资源,随着客户数目的增加性能不断下降,且存在死锁及崩溃的可能
    数据模型“紧耦合”在每一客户端,数据库结构改变将导致全体客户端改变,不利于更新和维护
    客户端应用程序越来越大,对使用者的要求越来越高

    浏览器/服务器模式

    WWW浏览方式带来的变化
    “Browser-based” 的客户端与 “Internetworking”(网际互连)
    计算方式向服务器端的集中转化
    客户端
    业务数据模型与UI分开,更“瘦”
    业务逻辑在中间层
    通过连接池,多线程可以处理多客户端
    早期应用编程困难且性能比较差
    CGI(C/C++, VB, Perl等等),ISAPI ,NSAPI

    N层计算模式

    从逻辑角度看,系统分成客户端、Web服务器、应用服务器、数据库服务器四层
    从物理角度看,应用服务器可以视用户并发数从1到N台进行扩充,以保证客户端用户的响应要求

    每一层可以被单独改变,而无需其它层的改变
    降低部署与维护的开销,提高灵活性、可伸缩性
    引入“瘦客户端”,计算被集中至服务器端,使性能提高成为可能

    J2EE的三层结构部件视图

    这里写图片描述

    N层计算模型特征分析

    优点
    应用程序各部分松耦合,各部分的更新相互独立
    业务逻辑集中放在服务器上由所有用户共享,使得系统的维护和更新变得简单,也更安全
    弱化客户端,计算被集中至服务器端,使性能提高成为可能
    数据库不再和每一个活动的用户保持一个连接,而是由应用程序组件负责与数据库打交道,降低数据库服务器的负担,提高了性能
    缺点
    对企业级应用开发人员要求太高:需熟悉分布式协议(IIOP、IIOPS、HTTP、HTTPS、ISAPI、NSAPI),进行一致性事务处理,负载平衡,考虑安全性……

    J2EE的四层模型描述

    J2EE规范
    一个多层次的分布式应用模型和一系列开发技术规范
    简化和加速企业级应用开发
    J2EE Blue Prints
    是一组集成的企业API库软件和开发工具
    参考实现
    快速原型化J2EE应用
    提供对J2EE平台的操作定义
    兼容性测试组件
    测试J2EE平台产品是否与J2EE规范兼容
    WebSphere Application Server 5.0与J2EE 1.3兼容
    WebSphere Application Server 6.0与J2EE 1.4兼容

    客户层(Client Tier)
    通常是一台桌面计算机,客户可以使用GUI与应用程序进行交互
    中间层(Middle Tier)
    由表示层和业务层组成
    通常由一个或者多个Web服务器和应用服务器组成
    应用服务器处理客户的请求,执行复杂的表示形式和业务逻辑,然后将结果返回给客户层
    企业信息系统层(Enterprise Information System,EIS)
    也称为数据层
    是驻留业务数据的地方,在处理业务逻辑时,由中间层访问EIS层

    J2EE应用程序构成

    J2EE技术提供了一个基于组件的方法来设计、开发、装配和部署企业级应用程序
    一个J2EE应用程序可能包含一个或多个EJB组件、Web组件,或应用程序客户端组件
    组件(component)是一个应用程序级的软件单元
    J2EE组件
    客户端组件
    客户端应用程序和Applet
    服务器端Web组件
    Java Servlet和JSP
    服务器端的商业组件
    Enterprise JavaBeans

    Web客户端 vs. Applet

    Web客户端
    瘦客户
    包括Web组件生成的动态页面及服务器返回的页面
    Applet
    用Java编写的小的客户端程序,嵌入在Web浏览器
    两者比较
    易用性
    Web表现方式丰富、形式多样; Applet交互性强
    性能
    Web页面更新需要经过servlet从服务器获取;Applet直接访问数据库,可保留静态数据,提高了效率
    可维护性和可扩展性
    Web易于定制界面;Swing技术开发Applet较为复杂
    安全性
    Applet需要配置访问策略来控制对本地资源的访问;而Web可通过HTTP来控制
    

    J2EE容器

    运行在服务器上的软件实体,为J2EE组件提供执行环境
    通过容器,J2EE体系结构能在开发和部署间提供无关性,并在不同类型中间层服务器间提供可移植性
    依赖于容器的类型,还可访问一些或全部J2EE API
    每个Web组件、EJB或者应用程序客户端组件都必须在执行前被装配到一个J2EE应用程序中,并部署到相应容器

    设置并定制由J2EE服务器提供的底层支持
    J2EE安全模型:配置Web组件或Enterprise Bean,支持授权访问
    J2EE事务管理:让用户指定组成一个事务中所有方法之间的关系,并将这些方法看成一个整体
    JNDI寻址服务:为企业内的多重名字和目录服务提供一个统一的接口,以便访问名字和目录服务
    J2EE远程连接:管理客户端与EJB间的交互
    生存周期管理:管理EJB的创建/删除
    数据库连接池:提高数据库访问效率

    展开全文
  • 中间件技术介绍整理

    千次阅读 2016-03-02 09:49:53
    中间件=平台+通信 主要分类 中间件所包括的范围十分广泛,针对不同的应用需求涌现出多种各具特色的中间件产品。但至今中间件还没有一个比较精确的定义,因此,在不同的角度或不同的层次上,对中间件的分类...
  • 本文档描述的是基于JAVA平台的中间件技术,适合初学者学习应用,详细讲解了从开发到调试的过程!
  • 在1990年代中期,随着网络技术快速发展,中间件的概念日益普及。中间件在学术界和产业界均得到长期、广泛的研究与实践,尽管目前尚没有统一的中间件定义,但对于中间件的意义与内涵已有基本共识。如,IEEE的分布系统...
  • 一、说明 Ø提交方[研发]:软件开发部 Ø维护方[运维]:运维部 ...Ø提供(适用于当前实际部署情况的较详细的)中间件维护操作手册,以及中间件官方的相关手册或技术资料; Ø提供该中间件的监控告警方案,以...
  • 【导读】描述了Weblogic中间件是如何在Windows2003平台环境下安装部署的。中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,...
  • 中间件技术简介

    千次阅读 2013-01-04 16:53:25
    什么是中间件  随着计算机技术的发展,IT厂商出于商业和技术利益的考虑,各自产品之间形成了差异,技术在不断进步,但差异却并没有因此减少。计算机用户出于历史原因和降低风险的考虑,必然也无法避免多厂商产品...
  • Express中间件

    千次阅读 2022-03-26 10:52:05
    中间件(Middleware):特指业务流程的中间处理环节。本质上就是一个function处理函数
  • 分析了未来通信系统中业务适配的必要性以及增值业务的提供架构,构建了一个基于中间件结构的适配业务提供平台,描述了业务上下文感知与适配的实现流程,从而满足了用户对业务的个性化需求。
  • MQ消息中间件技术

    万次阅读 多人点赞 2016-03-30 14:46:14
    JMS(Java Messaging Service)是Java平台上有关面向消息中间件技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。  JMS本身只定义了...
  • 吉林大学软件学院软件构件与中间件技术

    千次阅读 多人点赞 2019-06-13 21:05:07
    软件构件与中间件技术 目录 知识点 填空&选择 填空 选择 简答题 题目&答案 参考 知识点 servlet 什么是servlet servlet 是一种 Java 程序类,是一种用来扩展以请求-应答模式运行应用程序的服务器的...
  • 消息中间件简介 消息中间件的使用场景 消息中间件的产生背景、特点和常用协议 常用消息中间件介绍(RabbitMQ、Kafka 、RocketMQ、ActiveMQ) 常用消息中间件的对比 常用消息中间件,如何技术选型?
  • 消息中间件详解

    千次阅读 热门讨论 2021-07-11 18:03:28
    集群模式5 - Master - Slave 与 Breoker - Cluster 组合 概述 消息中间件是基于队列与消息传递技术,在网络环境中为应用系统提供同步或异步、可靠的消息传输的支撑性软件系统。 那 MQ 解决了什么问题? 对于电商app...
  • 题外话:本篇文章讲的是软件架构设计中的最后一章节,构件与中间件技术以及Web架构设计等内容。 一:构件与中间件技术 1、构建的定义: 定义1:软件构件是一种组装单元,它具有规范的接口规约和显式的语境依赖...
  • 中间件软件技术规格要求

    千次阅读 2016-04-18 11:06:05
    提供生成部署描述符的工具 支持SNMP协议,能够与SNMP管理工具进行有效集成 支持两阶段的部署协议,确保企业环境下应用的部署完整性 ★支持生产环境下的应用重新部署,...
  • 那么,为什么不考虑在数据应用领域也采用中间件技术呢? 数据计算中间件 为什么提出数据计算中间件这个概念?因为在开发数据应用的过程,大家通常都会被以下的问题所困扰。 - 需要跨系统跨平台操作,从...
  • 中间件概述

    千次阅读 2021-11-30 16:50:39
    1.中间件 1.1中间件基础 平台+通信,通过遵循协议和规范和底层操作系统硬件打交道。 特性:跨平台 举例: 1,RMI(Remote Method Invocations, 远程调用) 2,Load Balancing(负载均衡,将访问负荷分散到各个...
  • 移动中间件技术简介

    千次阅读 2011-09-20 00:32:08
    移动中间件技术是伴随着网络技术、通信技术、嵌入式操作系统和中间件技术的发展和融合而出现的新兴技术,是当前移动数据业务、未来3G业务以及广大智能终端增值业务的关键共性技术。移动中间件为使包括计算机、笔记本...
  • 消息中间件简介

    2021-06-15 21:12:18
    消息中间件(MQ)的定义 其实并没有标准定义,一般认为,消息中间件属于分布式系统中一个子系统,关注于数据的发送和接收,利用高效可靠的异步消息传递机制对分布 式系统中的其余各个子系统进行集成。 几个关键词: ...
  • 复赛的题目要求设计一个单机百万队列以上的存储引擎,单机内存有限,需要充分利用数据结构与存储技术,最大化吞吐量。 2. 题目描述 2.1 题目内容 实现一个进程内的队列引擎,单机可支持100万队列以上。 2.2 语言限定...
  • 中间件技术及其应用

    千次阅读 2014-10-13 14:47:59
    中间件技术及其应用  作者:谷和启 来源:51CMM  一、概述 1、中间件的概念  随着计算机技术的飞速发展,各种各样的应用软件需要在各种平台之间

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,273
精华内容 23,309
关键字:

中间件技术描述