中间件技术综述与实现

 

 

 

 

 

        

         班    级:  05算2

         学    号:  0500402211

         姓    名:  樊振华

         成    绩:

 

 

 

 

           2008 01 11 

一、              中间件技术综述

计算机技术迅速发展。从硬件技术看,CPU速度越来越高,处理能力越来越强;从软件技术看,应用程序的规模不断扩大,特别是Internet及WWW的出现,使计算机的应用范围更为广阔,许多应用程序需在网络环境的异构平台上运行。这一切都对新一代的软件开发提出了新的需求。在这种分布异构环境中,通常存在多种硬件系统平台(如PC,工作站,小型机等),在这些硬件平台上又存在各种各样的系统软件(如不同的操作系统、数据库、语言编译器等),以及多种风格各异的用户界面,这些硬件系统平台 还可能采用不同的网络协议和网络体系结构连接。如何把这些系统集成起来并开发新的应用是一个非常现实而困难的问题。

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

中间件可以满足大量应用的需要,可运行于多种硬件和os平台,它支持分布式计算,提供跨网络、硬件和os平台的透明性的应用或服务的交互功能,支持标准的协议,支持标准的接口。

中间件具有两个部分:

1.    执行环境(Execution Environment)软件: 如果一个网络的各个节点上安装了EE软件,各节点上的应用软件之间就可以实现相互合作。这时允许各节点可为不同的机器和操作系统。也即EE软件使各节点下层的设备对应用软件来说变成了透明的。所以EE软件是实现可互操作功能的关键,是中间件中的主体部分。应用开发(Application Development)工具。

2.应用软件要能透明地动用远方合作者的资源,该软件中应有作出此种透明动用的相应指示。为此必定要有一组工具,它可以用来开发含“透明动用对方”成分的应用软件,或改造原有的无透明动用能力的应用软件。这组AD工具含有一些专用语言(如界面描述语言和界面调整语言等)和有关的编译器。有了它,用户(特别是应用软件开发人员)将得到极大的方便,所以AD工具是一个完善的中间件所必备的部分。

中间件的分类:

按照IDC的分类方法,中间件分为:远程过程调用中间件,数据库访问中间件,事务处理中间件,消息中间件,分布式中间件。这里主要介绍分布式对象中间件。

简单地说,对象中间件就是用面向对象技术实现的、支持面向对象开发和集成应用的中间件。

对象技术的封装、继承及多态性提供了良好的代码重用功能,并且对象的对外透明性也符合中间件技术的要求。面向对象的中间件技术基本思想是提供一种统一的接口.使对象之间的调用和数据共享不再关心对象的位置、实现语言及所驻留的软硬件系统。分布式对象技术就目前主流主要有三个OMG组织的CORBA、Microsoft的COM/DCOM、SUN的J2EE等,当前,CORBA、DCOM、RMI等RPC中间件技术已广泛应用于各个领域。下面主要以CORBA为例介绍分布式对象技术。
     CORBA(Common Object Request Broker Architecture公共对象请求代理体系结构)是由OMG组织制订的一种标准的面向对象应用程序体系规范。OMG组织是一个国际性的非盈利组织,其职责促进在分布式系统开发中面向对象技术的理论与实践的发展。由OMG制定的最关键的规范——对象管理结构(Object Management Architecture, OMA)和它的核心(也就是CORBA规范),提供了一个完整的体系结构。这个结构以足够的灵活性、丰富的形式适用了各类分布式统。C-ORB-A: “Common” + “ORB” + “Architecture”  通用“orb”体系结构。由三部分组成:作为分布式对象通信基础设施的对象请求代理ORB的体系结构,接口定义语言IDL的语法和语义以及到各种程序设计语言的映射,保证可互操作性的标准ORB间的通信协议GIOP/IIOP。

二、中间件技术实现

一个Corba 应用程序开发过程及环境如下:

运行平台:

§         集成遗留系统

§         性能和通用性的权衡

网络传输:

§         编程模式:DEC RPC, java RMI, GIOP/IIOP

§         通信协议:TCP/IP

§         通信介质

§       连接的持续性:固定、移动。

通信方式:

§       同步

§      延迟同步

§      单向

CORBA应用实现过程

对象实现:对象接口实际上是分布式对象向外提供服务的规格说明,是客户程序与对象实现之间的一种合约,双方必须严格遵守对象接口定义中的约定,包括操作名字,参数表,返回表,异常表,上下文等,对象接口定义存放在一个或多个IDL文本文件中,指明每一对象对外提供的服务,以及客户程序如何使用这些服务或处理服务的返回结果。IDL是一种说明性语言,定义组件接口,不定义实现,再通过编译器将IDL映射到具体程序设计语言,产生桩代码和框架代码。这里使用JAVA语言编写对象实现和服务程序,产品提供商(sun)提供IDL到语言的映射,代码必须继承或使用某些生成的接口和类。

服务程序:利用POA激活伺服对象供客户程序使用,一般是一个循环执行的进程,不断监听客户请求并为之服务

客户程序: 1.初始化ORB:获取ORB伪对象的引用,调用ORB内核所提供的操作,基础设施中的一个对象,本地的统一观点,不依赖于对象适配器的操作,获取初始对象引用、创建策略对象、运行和终止进程等。2.获取分布式对象的引用,利用提供的服务。

创建并部署应用程序:1.编译:客户代码和生成的IDL桩代码及对象实现、服务程序和框架代码。2.部署:工具和步骤一般和ORB产品有关。

下面以远程出入库管理系统来说明一个Corba 应用程序开发过程(编程语言使用java实现)。

远程仓库出入库管理系统:

远程仓库管理公司大量的货物,提供基本的注册开户(不同种类货物使用不同账户)、存货、取货、查询货物数量的功能,一个仓库管理员管理。

首先写一个storehouse.idl的程序,定义仓库管理系统的对象接口, 此程序经由IDL编译器(Visibroker for java提供的编译器idl2java)映射到java语言,产生java语言的桩代码和框架代码(Stub与Skeleton),还有一些辅助文件。VisiBroker for Java的IDL编译器idl2java为每个接口自动生成7个文件(生成在一个storehouse的包中):AccountOperations.java,Account.java,_AccountStub.java,AccountPOA.java,AccountPOATie.java,AccountHelper.java,AccountHolder.java ,其中Account.java和AccountOperations.java定义了IDL接口Account的完整基调。AccountOperations.java(操作接口)定义了Account接口中定义的所有常量和方法。AccountStub.java是Account对象在客户端的桩代码,它实现了Account接口,AccountPOA.java是Account对象的服务端框架代码, AccountHolder.java声明的AccountHolder类为传递对象提供支持。

然后再根据生成的桩代码和框架代码,编写货物账户和仓库管理员程序。

最后,可以再编写一个名为Server.java的服务程序,服务程序创建伺服对象供客户端使用。

按一定顺序执行应用程序即可。

§       一个账户的实体模型。

§       balance:表示此货物当前的数量。

§       deposit:存货

§       withdraw:取货

§       getBalance:查询货物剩余量

¨        仓库管理员的实体模型。

¨        accountList :记录当前已开设的所有帐户。

¨        open:根据帐户标识查找某一帐户,如果该标识的帐户不存在则创建一个新帐户。

附上原代码:

Storehose.idl

// idl文件,本程序的作用是仓库帐户管理系统的对象接口定义

module Storehouse {

interface Account {        // 帐户

void deposit(in float amount);     // 存货

boolean withdraw(in float amount);        // 取款

float getBalance();             // 查询货物剩余量

};

interface AccountManager {     // 仓库管理员

Account open(in string name);    // 查询指定名字的帐户,查无则新开帐户

};

};

AccountStorehouse.java

public class AccountStorehouse extends Storehouse.AccountPOA

{                 //货物账户的对象实现

protected float balance;     // 属性定义,货物余量

public AccountStorehouse(float bal){     // 构造方法,按货物余量创建新的帐户

balance = bal;

}

public void deposit(float amount){         // 往货物账户中存货

balance += amount;

}

public boolean withdraw(float amount){    //  // 从货物账户中取货,不足则返回false

if (balance < amount)  return false;

else {

balance -= amount;

return true;

}

}

public float getBalance(){    // 查询货物账户货物剩余量

return balance

}

}

AccountManager.java

public class AccountManager          //账户管理员的对象实现

extends Storehouse.AccountManagerPOA

{

protected Hashtable accountList;     // 该帐户管理员所负责的帐户清单

public AccountManager(){

accountList = new Hashtable();

}

public synchronized StoreHouse.Account open(String name){

StoreHouse.Account account=(StoreHouse.Account)accountList.get(name);

if (account == null) {

Random random = new Random();

float balance = Math.abs(random.nextInt())%100000/100f;

AccountImpl accountServant = new AccountStorehouse(balance);

try {

org.omg.CORBA.Object obj = default_POA().servant_to_reference(accountServant);

account = StoreHouse.AccountHelper.narrow(obj);

} catch(Exception exc) {

exc.printStackTrace();

}

accountList.put(name, account);

System.out.println("新开帐户:" + name);

}

    return account;

  }

}

Server.java

public class Server                 //服务程序, 服务程序创建伺服对象供客户端使用

{

public static void main(String[] args)

{

try {

org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);        //初始化ORB

POA rootPOA = POAHelper.narrow( orb.resolve_initial_references("RootPOA"));

org.omg.CORBA.Policy[] policies = {

rootPOA.create_lifespan_policy(LifespanPolicyValue.PERSISTENT)

};

//创建一个POA

POA myPOA = rootPOA.create_POA("StoreHousePOA", rootPOA.the_POAManager(), policies);       AccountManager managerServant = new AccountManager();  //创建提供服务的伺服对象

myPOA.activate_object_with_id( "StoreHouseManager".getBytes(), managerServant);  //激活伺服对象

rootPOA.the_POAManager().activate();          //激活POA管理器

System.out.println("帐户管理员StoreHouseManager已就绪 .../n");

orb.run();                                   //等待客户程序发来请求

} catch(Exception exc) {

exc.printStackTrace();

}//catch

}//main

}//Server

Client.java

public class Client         //客户端程序

{

public static void main(String[] args)

{

org.omg.CORBA.ORB orb=org.omg.CORBA.ORB.init(args, null);

// 利用POA全称与对象标识"StorehouseManager"查找帐户管理员

StoreHouse.AccountManager manager = StoreHouse.AccountManagerHelper.bind(

orb, "/StoreHousePOA", "StoreHouseManager".getBytes());

String name = args.length > 0 ? args[0] : "fanzhenhua";

// 请求帐户管理员找出一个指定名字的帐户,无此帐户则新开一个

StoreHouse.Account account = manager.open(name);

System.out.println(name + “的帐户的货物剩余量为” + account.getBalance() + "件");

account.deposit(200);

System.out.println(“存货200件后,货物剩余量为” + account.getBalance() + “件()”);

if (account.withdraw(600)) {

System.out.println(“取货600件后,货物剩余量为” +

account.getBalance() + "件");

} else {

System.out.println("货物剩余量不足600件,取货失败,余量保持不变");

}

}

}

三、参考文献

1.《中间件技术原理与应用》:清华大学出版社(张云勇,张智江等著)

2.《分布式对象技术》:机械工业出版社(李文军著)

3. 《精通Java中间件编程》: 中国水利水电出版社(李华飚等著)

4. 《IT体系结构与中间件——建设大型集成系统的策略》:人民邮电出版社([美]布里顿 著,刁联旺,李彬 译)

5.《分布式系统技术内幕》:首都经济贸易大学出版社(张军编著)

6.《网络时代的关键技术-“中间件”》 作者:梁兰芝,李月霞;

7.《计算机控制系统》,清华大学出版社(何克忠,李伟)

8.《Web Services技术、架构和应用》[M] 作者:柴晓路 梁宇奇,电子工业出版社2003年1月第1版

9.《承上启下中间件》作者:车勇,选自《互联网周刊》2000年47期;

10. 《新一代面向Internet的数据库访问技术研究》[J]作者:盛明颖. 顾君忠,选自《计算机应用》 2003年06期

11.  《新一代的分布式计算技术——Web服务》[J] 作者:宁葵,腾金芳选自《计算机工程》2003年3月 第29卷第3期

12. 《CORBA 实现系统性能优化策略研究》谢俊清、蔡敏、顾冠群,选自《计算机研究与发展》,1999,36(7),824-829;

13.《 New Features for CORBA 3.0》作者:S. Vinoski. 选自《Communications of the ACM》, 1998,41(10), 44-52

今天写了篇中间件的论文相关推荐

  1. 如何写一篇合格的论文(清华大学刘知远)

    目录 你需要知道的真相: 一篇论文的典型结构 Introduction 怎么写(先写introduction再写abstract) (1)起手介绍研究任务和意义 (2)随后简介面向这个任务的已有方法 ...

  2. 怎么写一篇计算机SCI论文初稿? - 易智编译EaseEditing

    一.SCI论文的要求 SCI论文的核心是创新性.对于这个方面来说主要就是针对于论文的观点正确,文字通畅,逻辑严密,结构合理,结论有创新等等. 二.SCI论文格式规范 每一个SCI期刊都有自己特定的宗旨 ...

  3. [如何写一篇优秀的论文] 书写初稿

    最后,你终于准备自己的第一份草稿了.这意味着你需要在纸上书写单词或者更多. 在开始之前,你可能需要决定文章的格式和版式.在你写的时候,你必须思考如何表现你的 idea ,使得能够总是吸引读者的兴趣.在 ...

  4. [如何写一篇优秀的论文] 文章的提纲

    什么是提纲? 从笔记到提纲 提纲的规则 准备开头和结尾 准备给研究论文定型了.下一步是将这些卡片变成文章的提纲. 有了一个好的提纲,你才可以写一篇有逻辑性的组织严谨的论文.你甚至能够感觉到文章马上就可 ...

  5. 如何用ChatGPT写一篇惊艳论文?!

    作为一项人工智能技术,ChatGPT正在以飞快的速度向前发展,其强大的学习能力甚至可以用超乎想象来形容. OpenAI公司带着最新的GPT-4开始"大杀四方"了~OpenAI推出G ...

  6. 【IMRaD】如何“科学地”写一篇科学研究论文

    零.先感慨一下时间如瀑布 不到一周就要返校了,到校注册后便是一名大四少年,时间过得真快,迷迷糊糊地便成为了大四学生.听说写毕业论文的过程是相当艰苦的,所以现在提前做好准备,瞅瞅如何写一篇科学研究型论文 ...

  7. 如何在两个月的时间内发表一篇EI/SCI论文-我的时间管理心得

    在松松垮垮的三年研究生时期,要说有点像样的成果,也只有我的小论文可以谈谈了.可能有些厉害的角色研究生是丰富而多彩的,而大多数的同学在研究生阶段可能同我一样,是慢悠悠的渡过的,而且可能有的还不如我,我还 ...

  8. 如何以初学者角度写好一篇国际学术论文?

    来源:AI科技评论 本文约7000字,建议阅读15分钟 本文为你分享写好一篇国际学术论文应该注意哪些方面? 人工智能顶会论文之争越来越激烈了,CVPR.AAAI.ICLR等各大会议虽然录取率逐年降低, ...

  9. 如何写一篇MBA论文-涉及matlab建模

    如何写一篇MBA论文? 知乎 · 19 个回答方向,具体一点,不要太大.战略管理.薪酬管理.绩效考核.营销管理,客户关系管理.供应链管理.供应商选择与评价,库存问题..论文模式第1章:绪论第2章:现状 ...

最新文章

  1. 用 C 语言开发一门编程语言 — 跨平台的可移植性
  2. 2021暑假实习-SSM超市积分管理系统-day09笔记
  3. springboot 实现策略模式
  4. lesson5 元组
  5. iOS之深入解析静态库和动态库
  6. scratch少儿编程第一季——07、人要衣装佛靠金装——外观模块
  7. 洛谷P2480 [SDOI2010]古代猪文(卢卡斯定理+中国剩余定理)
  8. jQuery的事件change
  9. python相关参考地址收藏
  10. 商品房价不会下跌的六大理由
  11. 学习笔记——STM32摄像头OV7725(一)
  12. android开发股票数据接口,股票数据接口-股票数据接口api
  13. 利用rclone同步google storage cloud和aws s3存储
  14. 数字阅读市场陷入两强之争 掌阅能不能守住半壁江山?
  15. 文华财经(第一面)HR面
  16. git学习三——打发布标签(tag)
  17. MATLAB 二次规划函数的使用以及扩展
  18. CXF3.0.2+Spring3.2.14 Web Service入门实例二
  19. 怎么查看计算机网卡地址,电脑如何查看本机ip,怎样在电脑看网卡lp地址
  20. {分享}《Matrix67:趣题:非常具有启发性的概率问题》

热门文章

  1. 助教总结 -【福大软工实践-2017-2018-K班】
  2. valleyview gen7 linux驱动,天敏睿盒iBox win8.1界面大曝光!!
  3. 靠期货真的能实现财务自由么?
  4. 【Android应用】 苏州实时公交
  5. 第 3 章 程序的机器级表示
  6. 微信中下载app共有两种实现方式,然而安卓手机跟苹果手机还尽然不同。
  7. 《“网上邻居”无法互访问题解决方法大全 》
  8. npm i运行报错-4048
  9. 【知识图谱】关系抽取与总结展望
  10. 思考如何概括“技术美术”(Technical Artist)的职责