《中间件技术》 实验指导书
西南交通大学软件学院
2007年3月
目 录
实验一 RPC客户与服务器 ...................................................................... 1
一、实验目的 .............................................................................................................................. 1 二、实验环境 .............................................................................................................................. 1 三、实验原理 .............................................................................................................................. 1 四、实验内容及步骤 .................................................................................................................. 1
内容: .................................................................................................................................. 1 步骤: .................................................................................................................................. 1 五、实验注意事项 ...................................................................................................................... 1 六、实验报告要求 ...................................................................................................................... 1 七、思考题 .................................................................................................................................. 2
实验二 动态链接库 ................................................................................... 2
一、实验目的 .............................................................................................................................. 2 二、实验环境 .............................................................................................................................. 2 三、实验原理 .............................................................................................................................. 2 四、实验内容及步骤 .................................................................................................................. 3
1、创建DLL文件 .............................................................................................................. 3 2、调用DLL ....................................................................................................................... 3 五、实验注意事项 ...................................................................................................................... 3 六、实验报告要求 ...................................................................................................................... 3 七、思考题 .................................................................................................................................. 4
实验三 COM组件 ....................................................................................... 4
一、实验目的 .............................................................................................................................. 4 二、实验环境 .............................................................................................................................. 4 三、实验原理 .............................................................................................................................. 4 四、实验内容及步骤 .................................................................................................................. 4
简单Com实现步骤: ........................................................................................................ 4 客户端实现步骤: .............................................................................................................. 5 五、实验注意事项 ...................................................................................................................... 5 六、实验报告要求 ...................................................................................................................... 5 七、思考题 .................................................................................................................................. 5
实验四 包容 ............................................................................................... 5
一、实验目的 .............................................................................................................................. 5 二、实验环境 .............................................................................................................................. 6 三、实验原理 .............................................................................................................................. 6 四、实验内容及步骤 .................................................................................................................. 6
内容 ...................................................................................................................................... 6 步骤 ...................................................................................................................................... 6 五、实验注意事项 ...................................................................................................................... 6 六、实验报告要求 ...................................................................................................................... 6 七、思考题 .................................................................................................................................. 7
实验五 聚合 ................................................................................................. 7
一、实验目的 .............................................................................................................................. 7 二、实验环境 .............................................................................................................................. 7 三、实验原理 .............................................................................................................................. 7 四、实验内容及步骤 .................................................................................................................. 8
内容 ...................................................................................................................................... 8 步骤 ...................................................................................................................................... 8 五、实验注意事项 ...................................................................................................................... 8 六、实验报告要求 ...................................................................................................................... 8 七、思考题 .................................................................................................................................. 8
实验六 CORBA ........................................................................................... 9
一、实验目的 .............................................................................................................................. 9 二、实验环境 .............................................................................................................................. 9 三、实验原理 .............................................................................................................................. 9 四、实验内容及步骤 .................................................................................................................. 9 五、实验注意事项 .................................................................................................................... 10 六、实验报告要求 .................................................................................................................... 10 七、思考题 ................................................................................................................................ 10
实验七 RMI ............................................................................................. 10
一、实验目的 ............................................................................................................................ 10 二、实验环境 ............................................................................................................................ 10 三、实验原理 ............................................................................................................................ 10 四、实验内容及步骤 ................................................................................................................ 11
编写Java RMI的步骤主要包括以下几步 ....................................................................... 11 编译和运行该RMI系统主要步骤有: ........................................................................... 11 五、实验注意事项 .................................................................................................................... 11 六、实验报告要求 .................................................................................................................... 11 七、思考题 ................................................................................................................................ 11
实验八 EJB .............................................................................................. 12
一、实验目的 ............................................................................................................................ 12 二、实验环境 ............................................................................................................................ 12 三、实验原理 ............................................................................................................................ 12 四、实验内容及步骤 ................................................................................................................ 12
1、在eclipse下使用myeclipse创建EJB服务器端程序 .............................................. 12 2、eclipse下启动JBOSS和发布EJB ............................................................................. 13 3、客户端程序 .................................................................................................................. 13 五、实验注意事项 .................................................................................................................... 13 六、实验报告要求 .................................................................................................................... 13 七、思考题 ................................................................................................................................ 13
实验一 RPC客户与服务器
一、实验目的
通过编写RPC的客户服务程序,并调用相应的函数,掌握RPC的原理和编写RPC程序的基本方法。
二、实验环境
ONCRPC.SDK
三、实验原理
RPC其实也是种C/S的编程模式,类似C/S Socket 编程模式,但要比它更高一层。当在建立RPC服务以后,客户端的调用参数通过底层的RPC传输通道,可以 是UDP,也可以是TCP(也即TI-RPC-无关性传输),并根据传输前所提供的目的地址及RPC 上层应用程序号转至相应的RPC Application Porgramme Server ,且此时的客户端处于等 待状态,直至收到应答或Time Out超时信号。
四、实验内容及步骤
内容:
1、完成RPC的调用
2、书写完成RPC调用的消息过程
步骤:
1、 编写IDL。 2、 编译IDL。
3、 编写客户和服务器程序。 4、运行、调试程序。
五、实验注意事项
1、 程序运行之间,运行RPC并打开端口映射程序。 2、把pwrpc32.dll拷贝到程序运行目录。
六、实验报告要求
1、 书写程序的编写过程。 2、 附程序代码,包括IDL。 3、粘贴程序的运行结果的图片。
1
七、思考题
1、 如何利用RPC传递复合性数据结构?
实验二 动态链接库
一、实验目的
掌握动态链接库的基本原理,并通过实验学习简单无GUI界面的动态链接库的编写和调试方法。
二、实验环境
Visual C++ ,Windows
三、实验原理
DLL文件即动态链接库文件,是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和其他资源。Windows提供的DLL文件中包含了允许基于Windows的程序在Windows环境下操作的许多函数和资源。 DLL多数情况下是带有DLL扩展名的文件,但也可能是EXE或其他扩展名。它们向运行于Windows操作系统下的程序提供代码、数据或函数。程序可根据DLL文件中的指令打开、启用、查询、禁用和关闭驱动程序。 DLL的全称是Dynamic Link Library, 中文叫做“动态链接文件”。在Windows操作系统中, DLL对于程序执行是非常重要的, 因为程序在执行的时候, 必须链接到DLL文件, 才能够正确地运行。而有些DLL文件可以被许多程序共用。因此, 程序设计人员可以利用DLL文件, 使程序不至于太过巨大。但是当安装的程序越来越多, DLL文件也就会越来越多, 如果当你删除程序的时候, 没有用的DLL文件没有被删除的话, 久而久之就造成系统的负担了。
DLL是动态连接库。使用动态连接库的一些好处是: 1.多个应用程序共享代码和数据:比如Office软件的各个组成部分有相似的外观和功能,这就是通过共享动态连接库实现的。
2.在钩子程序过滤系统消息时必须使用动态连接库。
3.动态连接库以一种自然的方式将一个大的应用程序划分为几个小的模块,有利于小组内部成员的分工与合作。而且,各个模块可以升级。如果小组中的一个成员开发了一组实用例程,他就可以把这些例程放在一个动态连接库中,让小组的其他成员使用。
4.为了实现应用程序的国际化,往往需要使用动态连接库。使用动态连接库可以将针对某一国家、语言的信息存放在其中。对于不同的版本,使用不同的动态连接库。在使用AppWizard生成应用程序时,我们可以指定资源文件使用的语言,这就是通过提供不同的动态连接库实现的。
VC++、C++ Builder、Delphi都可以编写DLL文件。Visual Basic 5.0以上版本也可以编写一种特殊的DLL,即ActiveX DLL。 DLL不是运行的程序,它是某个程序的一
2
个部分,它只能由所属的程序调用。用户不能,也不需要打开它。 用VC++编写动态链接有以下四种类型:Win32 DLL、MFC常规DLL(动态链接MFC)、MFC常规DLL(静态链接MFC)、MFC扩展DLL等,关于它们之间的区别,在此不一一介绍,可参阅相关文档。本程序的编写为Win32 DLL。
四、实验内容及步骤
1、创建DLL文件
1)打开visual c++ 6.0通过new创建一个win30 Dynamic-link Libary的工程,命名为FIRSTDLL
2)接着选择最后一个选项,让系统创建一些必要的文件 3)修改FIRSTDLL.cpp的代码。 4)编译、链接生成DLL
2、调用DLL
1)同样通过new创建一个工程,该工程为win30 application,命名USEFIRSTDLL 2)在USEFIRSTDLL.cpp文件中编写如下代码。 4)编译、链接生成可执行程序。 void main(void) {
typedef int(*pMax)(int a,int b); //定义指向和DLL中相同的函数原型指针 HINSTANCE HDLL; //定义句柄 pMax Max;
HDLL=LoadLibrary(\"\\FIRSTDLL.dll\");
//加载动态链接库FIRSTDll.dll文件,注意指明FIRSTDLL的地址哦 if(HDLL==NULL) printf(\"cannot find the dll file\"); Max=(pMax)GetProcAddress(HDLL,\"Max\");
//然后通过GetProcAddress()函数获取导入到应用程序中的函数指针 if(Max==NULL) printf(\"cannot find the Max funtion\"); int A=Max(5,8);
printf(\"比较的结果为: %d \
FreeLibrary(HDLL);//卸载MyDll.dll文件; }
五、实验注意事项
1、 DLL的导出函数的说明方法 2、 使用DLL的方法
六、实验报告要求
1、书写程序的编写过程。 2、附程序代码。
3
3、粘贴程序的运行结果的图片。
七、思考题
1、如何在其他语言如JAVA中使用Visual C++编写的动态链接库?
实验三 COM组件
一、实验目的
通过完成简单的进程内组件和客户程序,掌握COM的基本原理和进行COM组件编程的基本技术和方法。
二、实验环境
Visual C++、 Windows
三、实验原理
COM 是由 Microsoft 提出的组件标准,它不仅定义了组件程序之间进行交互的标准,并且也提供了组件程序运行所需的环境。在 COM 标准中,一个组件程序也被称为一个模块,它可以是一个动态链接库,被称为进程内组件(in-process component);也可以是一个可执行程序(即 EXE 程序),被称作进程外组件(out-of-process component)。一个组件程序可以包含一个或多个组件对象,因为 COM 是以对象为基本单元的模型,所以在程序与程序之间进行通信时,通信的双方应该是组件对象,也叫做 COM 对象,而组件程序(或称作 COM 程序)是提供 COM 对象的代码载体。
COM 对象不同于一般面向对象语言(如 C++ 语言)中的对象概念,COM 对象是建立在二进制可执行代码级的基础上,而 C++ 等语言中的对象是建立在源代码级基础上的,因此 COM 对象是语言无关的。这一特性使用不同编程语言开发的组件对象进行交互成为可能。
四、实验内容及步骤
简单Com实现步骤:
1. 编写接口描述IDL
4
2. 3. 4. 5.
编译IDL生成相应的文件
编写IFace.h,包括接口中的函数声明,和组件声明; 编写用于注册的REGISTRY.H和REGISTRY.CPP
编写组件程序,要实现从IUnkonwn接口继承而来的三个函数QueryInterface,AddRef,和Release以及实例化该组件的类厂函数CreateInstance还有实现从接口继承过来的函数; 6. 注册该组件。
客户端实现步骤:
1、 先用CoCreateInstance()创建该对象,然后通过一个接口的指针调用函数。 2、 通过QueryInterface()找到另外一个接口的指针,通过指针再调用函数。
五、实验注意事项
1、 MIDL的编写方法。
2、 组件DLL中导出函数的编写。 3、 类厂的编写方法。
六、实验报告要求
1、书写程序的编写过程。 2、附程序代码,包括IDL。
3、粘贴程序的运行结果的图片。
七、思考题
1、如何编写进程外组件?
实验四 包容
一、实验目的
通过实验,掌握使用包容的方法进行COM组件的重用。
5
二、实验环境
Visual C++、 Windows
三、实验原理
COM 标准是建立在二进制代码级的,因此 COM 对象的可重用性与一般的面向对象语言如 C++ 中对象的重用过程不同。对于 COM 对象的客户程序来说,它只是通过接口使用对象提供的服务,它并不知道对象内部的实现过程,因此,组件对象的重用性可建立在组件对象的行为方式上,而不是具体实现上,这是建立重用的关键。COM 用两种机制实现对象的重用。我们假定有两个 COM 对象,对象A希望能重用对象B 的功能,我们把对象A 称为外部对象,对象B 称为内部对象。使用包容方式重用时: 对象A 包含了对象B,当对象A 需要用到对象B 的功能时,它可以简单地把实现交给对象B 来完成,虽然对象A 和对象B支持同样的接口,但对象A 在实现接口时实际上调用了对象B 的实现。对象A 只需简单地把对象B 的接口递交
给客户即可,对象A 并没有实现对象B 的接口,但它把对象2 的接口也暴露给客户程序,而客户程序并不知道内部对象B的存在。
四、实验内容及步骤
内容
1、 使用包容的方法,重用实验三完成的组件。 2、 编写简单的测试客户程序。
步骤
1、 编写IDL 2、 编译IDL
3、 完成COM对象的代码 4、 编写类厂 5、 完成导出函数 6、 编译、链接。
五、实验注意事项
1、 外部组件继承内部组件。
2、 两组件的关系以及函数的调用的过程。
六、实验报告要求
1、书写程序的编写过程。 2、附程序代码,包括IDL。
3、粘贴程序的运行结果的图片。
6
七、思考题
1、如何使用多个组件的包容?
实验五 聚合
一、实验目的
通过实验,掌握使用聚合的方法进行COM组件的重用。
二、实验环境
Visual C++、 Windows
三、实验原理
组件对象在接口的查询代码中把接口传递给自已创建的另一个对象的接口查询函数,而不实现该接口的代码。另一个对象必须实现聚合模型(也就是说,它知道自己正在被另一个组件对象聚合),以便 QueryInterface 函数能够正常运作。
在组件对象被聚合的情况下,当客户请求它所不支持的接口或者请求 IUnknown 接口时,它必须把控制交给外部对象,由外部对象决定客户程序的请求结果。
聚合模型体现了组件软件真正意义上的重用。
聚合模型实现的关键在 CoCreateInstance 函数和 IClassFactory 接口:
HRESULT CoCreateInstance(const CLSID& clsid, IUnknown *pUnknownOuter, DWORD dwClsContext, const IID& iid, (void **)ppv); // class IClassFactory : public IUnknown
virtual HRESULT _stdcall CreateInstance(IUnknown *pUnknownOuter, const IID& iid, void **ppv) = 0;
其中 pUnknownOuter 参数用于指定组件对象是否被聚合。如果 pUnknownOuter 参数为 NULL,说明组件对象正常使用,否则说明被聚合使用,pUnknownOuter 是外部组件对象的接口指针。
聚合模型下的被聚合对象的引用计数成员函数也要进行特别处理。在未被聚合的情况下,可以使用一般的引用计数方法。在被聚合时,由客户调用 AddRef/Release 函数时,必须转向外部组件对象的 AddRef/Release 方法。这时,外部组件对象要控制被聚合的对象必须采用其它的引用计数接口。
7
四、实验内容及步骤
内容
1、编写组件A支持聚合 2、编写组件B,聚合组件A 2、编写简单的测试客户程序。
步骤
1、编写IDL 2、编译IDL
3、完成COM对象的代码 4、编写类厂 5、完成导出函数 6、编译、链接。
五、实验注意事项
1、 Iunknown的唯一性。 2、 QueryInterface编写方法。 3、 支持聚合的组件的编写方法。
六、实验报告要求
3、 书写程序的编写过程。 4、 附程序代码,包括IDL。 3、粘贴程序的运行结果的图片。
七、思考题
1、如何聚合多个组件?
8
实验六 CORBA
一、实验目的
通过编写RPC的客户服务程序,并调用相应的函数,掌握RPC的原理和编写RPC程序的基本方法。
二、实验环境
1、JDK
2、OmniORB 3、Visual C++
三、实验原理
CORBA是一个完全中间性的语言,可以使用接口定义语言(IDL)定义开发时使用接口的 Client 和实现接口的 Server 所需要的信息。Client 和 Server 的具体实现代码并不在IDL定义中编写,而是使用某种目标语言的IDL 编译器生成所需的代码存根及helper类,Client 和 Server再使用真正的编程语言来进行具体实现。 为了保证在不同的 CORBA 产品基础之上构建的分布式对象可以相互通信,Client和Server通过ORB(对象请求代理)进行通信。一般的运行流程是Client把请求发送给ORB,ORB再把请求发送给Server,Server把返回结果发送ORB,ORB再把返回结果发送给Client。ORB可以说Client和Server之间的翻译者。即使Client和Server使用不同的编程语言编写,只要是符合相同的IDL定义,ORB也可以完成相互的通信。
四、实验内容及步骤
步骤:
1. 用IDL定义一个接口文件,描绘要实现的功能,也可以说是定义一个要实现功能的一
个模版(SysProp.idl)
2. 使用\"IDL to Java\"编译器(这里是IDLJ)将IDL文件转化为Java编程语言中编写的接
口定义,生成所需的代码存根及helper类
3. 使用Java语言编写客户机和服务器的实现程序。
4. 使用\"IDL to C++\"编译器(这里是omniidl)将IDL文件转化为C++编程语言中编写的
接口定义,生成所需的代码存根及helper类
5. 使用C++语言编写客户机实现程序(当然也可编写服务器程序,但本次试验没有进行) 6. 起动命名服务tnameserv 7. 起动Java编写的服务程序
8. 用Java和C++编写的客户机分别调用相应的服务
9
五、实验注意事项
1、环境变量的设置。
2、注意多语言编程的异同。
六、实验报告要求
1、书写程序的编写过程。 2、附程序代码,包括IDL。
3、粘贴程序的运行结果的图片。
七、思考题
1、如何使用omniNames.exe程序做命名服务器,用C++编写服务器,客户机使用Java和C++编写?
实验七 RMI
一、实验目的
通过编写RPC的客户服务程序,并调用相应的函数,掌握RPC的原理和编写RPC程序的基本方法。
二、实验环境
JDK
三、实验原理
RMI,远程方法调用(Remote Method Invocation)是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。RMI是非常容易使用的,但是它非常的强大。 RMI的基础是接口,RMI构架基于一个重要的原理:定义接口和定义接口的具体实现是分开的。下面我们通过具体的例子,建立一个简单的远程计算服务和使用它的客户程序一个正常工作的RMI系统由下面几个部分组成: ● 远程服务的接口定义 ● 远程服务接口的具体实现
● 桩(Stub)和框架(Skeleton)文件
10
● 一个运行远程服务的服务器
● 一个RMI命名服务,它允许客户端去发现这个远程服务 ● 类文件的提供者(一个HTTP或者FTP服务器) ● 一个需要这个远程服务的客户端程序
四、实验内容及步骤
编写Java RMI的步骤主要包括以下几步
(1) 将远程类的功能定义为Java接口。 (2) 编写和实现服务器类。
(3) 编写使用远程服务的客户机程序。
编译和运行该RMI系统主要步骤有:
(1) 使用javac编译远程接口类,远程接口实现类和客户机程序。 (2) 使用rmic编译器生成实现类的stub和skeleton。 (3) 启动RMI注册服务程序rmiregistry。 (4) 启动服务器端程序。 (5) 启动客户机程序。
五、实验注意事项
1、 远程接口必须声明为public。如果不这样,则除非客户端与远程接口在同一个包内,否则
当试图装入实现该远程接口的远程对象时会得到错误结果。 2、 远程对象扩展java.rmi.Remote接口。
3、 除了所有应用程序特定的例外之外,每个方法还必须抛出java.rmi.RemoteException例外。 4、 任何作为参数或返回值传送的远程对象的数据类型必须声明为远程接口类型,而不是实现
类。
六、实验报告要求
5、 书写程序的编写过程。 6、 附程序代码,包括IDL。 3、粘贴程序的运行结果的图片。
七、思考题
11
实验八 EJB
一、实验目的
掌握简单EJB的编写、部署、使用的基本技术和方法。
二、实验环境
JDK 、J2EE SDK MYECLIPSE JBOSS
三、实验原理
Enterprise JavaBean (EJB)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。
在J2EE里,Enterprise Java Beans(EJB)称为Java 企业柄,是Java的核心代码,分为整体Bean和片段Bean和消息Bean三种。 整体Bean是一种对象: 标准Java对象由创建它的程序创建,当程序终止时,对象也随之丢失,这就意味着当再次运行些程序时,将无法找到先前创建的Bean,而整体Bean会一直存在着直到它被删除。 一个程序可以创建一个整体柄,并且这个程序可以在被保存后随时停止和重启。整体Bean将会依然存在。重启后,程序可以找到与之相对应的整体Bean,并且会继续使用这个整体Bean。
EJB实际上是SUN的J2EE中的一套规范,并且规定了一系列的API用来实现把EJB概念转换成EJB产品。EJB必须生存在EJB容器中,这个容器首先要包装你BEAN,EJB的客户程序实际上是通过HOME/REMOTE接口与EJB交互。
四、实验内容及步骤
1、在eclipse下使用myeclipse创建EJB服务器端程序
public Wo() {
super(); }
public void setSessionContext(SessionContext newContext) throws EJBException { context = newContext; }
public void ejbRemove() throws EJBException, RemoteException { }
12
public void ejbActivate() throws EJBException, RemoteException { }
public void ejbPassivate() throws EJBException, RemoteException { }
public String helloworld() throws EJBException { return \"haha,i am good\"; }//完成实际功能的商务方法 }
2、eclipse下启动JBOSS和发布EJB 3、客户端程序
Hashtable env=new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,\"org.jnp.interfaces.NamingContextFactory\"); env.put(Context.PROVIDER_URL,\"127.0.0.1:1099\"); try{
ff x=ffUtil.getHome(env).create(); ff.setff(x.helloworld()); }
catch(Exception ex) {
System.out.println(ex+\": Invoke Test.SayHello() Error.\"); } }
五、实验注意事项
1、 异常处理。
2、 HOME/REMOTE 接口的意义。
六、实验报告要求
1、书写程序的编写过程。 2、附程序代码。
3、粘贴程序的运行结果的图片。
七、思考题
1、如何使用Jbuilder 编写EJB部署并调用?
13
主要参考文献
1、《COM 技术内幕》 [美]Dale Pogerson 清华大学出版社 2、《Java 2技术内幕》 [美]Stephen Potts 机械工业出版社 3、《基于C++CORBA高级编程》[美] Michi Henning,Steve Vinoski 清华大学出版社
3、 CORBA 规范 http://www.omg.org/technology/documents/corba_spec_catalog.htm
14
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务