学习了两天中间件,虽然对于中间件这个概念还是比较模糊,但也不算白学。
中间件(Middleware)是处于操作系统和应用程序之间的软件,也有人认为它应该属于操作系统中的一部分。人们在使用中间件时,往往是一组中间件集成在一起,构成一个平台(包括开发平台和运行平台),但在这组中间件中必需要有一个通信中间件,即中间件=平台+通信,这个定义也限定了只有用于分布式系统中才能称为中间件,同时还可以把它与支撑软件和实用软件区分开来。
中间件是基础软件,处于操作系统(或网络协议)与分布式应用之间。
分类:
消息中间件(MOM:Message-Oriented Middleware)
数据中间件(Database Middleware)
http://baike.baidu.com/view/25611.htm
http://www.cnblogs.com/yangy608/archive/2010/11/09/1872823.html
http://www.openfoundry.org/en/tech-column/1325
http://it.china-b.com/zx/mssql/20090609/70440_1.html
远程过程调用中间件(RPC:Remote Process Call)
对象请求代理中间件(ORB:Object Request Broker)
事务处理中间件(TP Monitor:Transaction Process Monitor)
J2EE中间件
分布式软件系统:
1.不同的模块运行在不同的物理位置
2.并行处理同一个请求
分布式对象,实际上是软件构件:
1、面向对象
2、对象之间的交互,通过消息交换。(对象方法的调用)
3、语言的无关性
4、可插入性强、封装的更彻底,不关注源代码的处理
分布式系统中数据交换只能是流数据(网络上进行传输的数据,串行化数据 )。
接触到几个概念:
1、构件:
构件是一个严格定义的可插入单元:类似于硬件模块,一旦开发完成,就可以方便的用来组装系统。构件一般是基于对象实现的,但也可以不作为对象实现;
构件将封装运用到了极限:构件通过封装来隐藏构件的实现以达到;
构件通常在容器中进行管理:按照上面的讨论,构件要屏蔽实现语言、实现方式等,很多实现细节,使用一个构件时可以不关心具体实现和位置;
构件可以从容器中获得属性或服务: 如构件可以使用容器的背景色作为自己的背景色;
构件允许对所支持的接口进行动态发现和调用: 客户程序可以在运行状态下确定一个构件支持何种功能,然后调用该功能。
2 中间件概念:
终端仿真/屏幕转换中间件:用以实现客户端图形用户接口与已有的字符接口方式的服务器应用程序的互操作。在该种中间件支持下,可以很容易地为原有字符界面的应用程序提供图形用户界面。
数据访问中间件:在数据库管理系统的基础上,对异构环境下的数据库实现联接或文件系统实现联接的中间件,为应用程序访问数据库提供开发支撑。 远程过程/方法调用中间件:用以实现远程过程或方法调用的中间件。向应用程序提供远程调用时的底层通信支持,帮助应用程序完成编组与解组等工作,程序员方便地编写客户端应用程序,像调用本地过程或对象那样方便调用位于远端服务器上的过程或对象方法。
消息中间件:为应用程序提供发送和接收异步消息支持的中间件。基于消息的交互方式提供了基本的异步编程模式,即客户端可以通过发送消息来请求某种服务,在服务端处理请求期间,客户端不必等待对方完成,可以执行其它操作,服务端完成后会以消息的形式通知客户端。在消息中间件的支持下,应用程序可以很容易地实现消息的发送和接收,而不必关心消息交换过程中的具体细节。
事务(交易)中间件:提供事务控制机制的中间件。事务(交易)管理支持可靠的服务端计算,这在很多关键系统中都是必需的。事务的基本特征是维护一系列操作的原子性,如银行业务系统中转账功能所包含的扣除源账户余额与增加目标账户余额两个操作, 这两个操作从业务逻辑上讲应该是原子的,即要么全部都完成,要么全部都不做。基于事务中间件,应用程序可以佷方便地实现事务控制,而不必关心具体事务控制的细节。
构件中间件:提供构件化支持的中间件。在分布、异构的网络计算环境中将各种分布对象有机地结合在一起,完成系统的快速集成,实现对象重用。 有了各种中间件的支撑,在应用软件中用到中间件对应的功能时,不需要开发人员自己实现,可直接利用中间件将其已实现好的功能快速集成到应用软件中。
现有的集成中间件典型地为三层/多层结构的分布式软件系统提供各种开发支撑,因为
三层结构的分布式软件的核心为中间层,因此支撑主要集中在对中间层开发的支撑上。目前
应用最广泛的集成中间件有三类:
基于 OMG(Object Management Group,对象管理组织)CORBA规范的集成中间件
基于 Sun JEE(Java Enterprise Edition,Java 企业版)规范的集成中间件
基于微软.NET 架构的集成中间件
3互操作:
广义的互操作包括中间层应用构件与数据库、客户层构件与中间层应用构件、中间层应用构件与公共服务构件、中间层应用构件之间的互操作等多个层次,本书主要关注应用构件之间的互操作,即软件系统开发人员编写的程序之间的互操作。
在 Stub/Skeleton 结构的支撑下,客户程序与服务程序按照图中所示的 8 个步骤完成一次服务的调用:
①:客户程序将调用请求发送给客户端桩,对于客户程序来说,桩就是服务程序在客户
端的代理。
②:客户端桩负责将远程调用请求进行编组并通过通信总线发送给服务端。
③:调用请求经通信总线传送到服务端框架。
④:服务端框架将调用请求解组并分派给真正的远程对象实现(服务程序) 。
⑤:服务程序完成客户端的调用请求,将结果返回给服务端框架。
⑥:服务端框架将调用结果编组并通过通信总线发送给客户端桩。
⑦:客户端桩将调用结果解组并返回给客户程序。
⑧:客户程序得到调用结果。
对象管理体系结构:CORBA 所基于的概念框架是对象管理体系结构(Object Management Architecture,OMA) ,OMA 描述了一个基于 CORBA 的应用系统的基本结构与构成系统的构件的特性。
2对象请求代理:(Object Request Broker,ORB)是OMA的核心基础设施,CORBA规范
规定了 ORB的标准体系结构。ORB 负责完成查找请求的对象实现、让对象实现准备好接收
请求、传递构成请求的数据等完成远程调用时底层通信任务所需的全部机制。
3 CORBA互操作
CORBA 的目标是支持多个层次的可互操作性,CORBA 规范经过多次改进与发展才达
到这一目标。CORBA支持在可互操作性主要包括如下几个层次:
(1). 不同平台(如操作系统)与语言之间的可互操作性:这是早期的 CORBA 版本强
调解决的主要问题, 解决方法包括制定IDL标准以及IDL到程序设计语言的映射。
这使得使用同一供应商的 ORB 产品开发的客户程序与服务程序之间可以交互, 但
使用不同供应商的 ORB产品开发的客户程序与服务程序则未必是可互操作的。
(2). 不同厂商 ORB 产品之间的可互操作性:CORBA 2.0 版引入了GIOP 和 IIOP,从而
实现了不同供应商的 ORB 产品之间的可互操作性,所有供应商的 ORB 产品如果
与 CORBA 2.0 兼容则彼此之间可互操作。
(3). 不同体系结构之间的可互操作性:更完善的可互操作性还应包括不同体系结构之
间的可互操作, 例如一个CORBA对象可通过协议桥接操作一个DCOM对象, OMG
通过引入ESIOP来解决这一问题。 但ESIOP只能解决CORBA与特定体系结构 (如
DCOM)之间的互操作,并不能通过一套 ESIOP解决所有的问题。
4 CORBA开发过程
(1)编写分布式对象的接口,利用OMG的IDL编写对象的规格说明,放到一个文本文件中称为IDL文件。
(2).编译IDL文件生成桩与框架,IDL编译器为IDL文件中定义的每一个接口自动生成7个.java文件。
(3).编写对象实现,CORBA应用程序的对象实现最常用、最简单的实现方式是使用继承
(4.)编写服务程序,典型的服务
程序通常执行以下步骤:
① 初始化对象请求代理(ORB) 。
② 用所需策略创建一个可移植对象适配器(POA) 。程序中的BankPOA是我们为 POA
起的名字,客户程序必须使用相同的 POA名字。
③ 创建一个提供服务的伺服对象。伺服对象是服务端的本地对象,当伺服对象通过对
象适配器注册到 ORB 后,就成为一个可供远程调用的 CORBA对象。
④ 激活新创建的伺服对象,即利用 POA 将伺服对象以一个字符串表示的标识注册到
ORB 上。
⑤ 激活 POA管理器
⑥ 等待客户程序发来请求。
(5). 编写客户程序
① 初始化 ORB。
② 绑定到一个对象。
③ 通过调用对象上的方法
(6)编译应用程序
(7).运行应用程序
(8).互操作尝试
5.设计POA策略

一、J2EE应用构件:
客户端构件:
1.Applet
2.Application Client
服务端构件:
1.Web构件——servlet
2.Web构件——jsp
3.EJB构件
J2EE中的公共服务:
1.Service API:
JNDI、JDBC、JTA、JCA、Java Mail API、Java IDL
2.运行时服务
生命周期管理
事务控制
安全服务
持久性服务
资源管理
3.通信支持
RMI/IIOP、JMS
二、EJB 体系结构中的构件
广义地讲,EJB 体系结构中涉及以下 6 类软件构件:
Enterprise Java Bean(简称 Enterprise Bean)
Home 接口
Remote 接口
EJB 容器
EJB 容器
EJB 客户端
三、EJB构件开发
1. 定义 Remote接口
2. 定义 Home 接口
3. 定义 Enterprise Bean类
4. 编译源代码
部署/发布EJB构件:
打包 J2EE 应用
验证并布署 J2EE应用
创建客户端程序
编译/运行客户端程序
四、开发有状态会话bean、无状态会话bean、实体bean
五、EJB高级特性
环境条目、事务控制、安全性控制
分类:
(1) 面向商业应用的 Web Service(Business-Oriented Web Service)
(2) 面向最终用户的 Web Service(Customer-Oriented Web Service)
(3) 面向特定设备的 Web Service(Device-Oriented Web Service)
(4) 系统级 Web Service(System-Oriented Web Service)
SOAP
SOAP 是在松散的、分布的环境中使用 XML 交换结构化的和类型化的信息的一种简单协议。SOAP 本身并不定义任何应用语义,如编程模型或特定语义实现,它只定义了一种简单的以模块化的方式包装数据的机制。
一个 SOAP 消息是由 XML 消息头和一个 SOAP 封装(SOAP Envelope)组成的 XML 文档。SOAP 封装描述了该消息所包含的基本信息,SOAP 封装中包括一个可选的 SOAP 消息头(SOAP Header)和必需的 SOAP 消息体(SOAP Body) 。SOAP 封装定义了一个 SOAP错误(SOAP Fault)来报告出错信息。
WSDL:
WSDL 是一种用 XML 文档来描述 Web 服务的标准,是 Web 服务的接口定义语言。其内容包含了 Web 服务的基本属性信息,如 Web服务所提供的操作、和 Web 服务进行消息交换的数据格式和协议标准、Web 服务的网络位置等信息。
UDDI:
UDDI 是一套基于 Web 的、分布式的并为 Web 服务提供注册的信息注册中心的实现规
范,同时也包含了一组使企业能将自身提供的 Web 服务进行注册以使其它企业能够发现的访问协议实现标准。UDDI 标准包含一个独立于平台的框架,用于通过使用 Internet 来描述服务,发现企业,并对企业服务进行集成。通过使用 UDDI,Web 服务提供者能够注册 Web服务,应用程序或服务使用者能够查找到所需要的 Web 服务并了解如何与之连接和交互。
UDDI 商业注册所提供的信息包括以下三部分内容:
白页(White Page) :有关企业的基本信息,包括了企业名称、经营范围的描述、联系信息和已知的企业标识等;
黄页(Yellow Page) :提供基于标准分类法的行业类别,能够使使用者在更大的范围内查找在注册中心注册的企业或服务;
绿页(Green Page) :关于该企业所提供的 Web 服务的技术信息和 Web 服务说明信息,并提供了指向这些服务所在实现的技术规范的引用和一些指针,指向基于文件的 URL 的不同发现机制。