BEA Tuxedo的TxRPC特性
更新时间:2024-04-24 08:53:01 阅读量: 综合文库 文档下载
- beautiful推荐度:
- 相关推荐
第一章 TxRPC简介
什么是TxRPC
TxRPC允许程序员使用远程过程调用(RPC)接口,一个客户进程可以使用本地函数调用另一个进程中的过程(也就是远程服务)。程序员必须通过接口定义语言IDL明确规定过程及数据类型。IDL编译器用于生成成两个代理。当客户程序调用IDL文件中定义的函数时,它并未直接调用它,而是调用驻留在客户机上的stub代理,客户stub接收输入参数,并把它们转换成单个缓冲区,然后把它发送到服务器,等待响应。远程过程处理完毕后,以缓冲区形式进行响应,客户程序从中取出返回值和输出参数。客户进程和服务器进程之间的通信,不论是同一台机器内部还是跨越了多台机器,都由Tuxedo系统运行时来处理。
在服务器端,运行时调用服务器端代理stub。服务器代理把客户代理发送来的数据解包,取出输入参数,调用服务,等待响应结果。远程过程执行完毕后,服务器stub将返回值和输出参数放入缓冲区,发送回客户stub。从应用程序的角度来看,就好象简单地调用了一个本地方法一样。stubs和运行时把对远程过程的调用隐藏到一个非本地地址空间中。
构建一个RPC应用程序和构建一个普通应用程序步骤相同,大部分时间都用在写客户程序和服务器程序上。Tuxedo运行时系统使用程序不必关心网络通信,以及如何将客户机使用的数据翻译成服务器上使用的类型等。TxRPC也可以用于服务器之间的通信。
必须做的工作是定义客户机和服务器之间的接口格式,也就是编制IDL文件。IDL文件中包含了数据类型和调用远程过程使用的操作。IDL文件扩展名为.idl。它个接口都必须在它自己的唯一标识——全球唯一标识UUID,它由128bits构成,唯一标识着一个接口,可以通过UUIDGEN来生成。-i指示生成一个接口文件。UUID在运行时用于确保客户机stub和服务器stub相匹配。除了UUID以外,第个接口还有一个版本号,如果版本号没有作为接口的一部分指定,缺省为0.0。因此,同一个接口可以有多个版本。客户机总是请求与自己版本号相同的服务器。不同版本意味着输入参数、返回值可能不同,而且某些操作可能已经从接口中删除了。因此,RPC要成功,客户机的版本号必须和服务器的版本号匹配。用uuidgen生成一个IDL的模板后,程序员需要往里面加入数据类型及操作。IDL语法和C++语法相似。数据类型通过typedef定义,操作通过函数的原型说明来声明。其它信息通过IDL
属性提供。属性出现在方括号里,如[in],它可以提供诸如打印机等信息。对于参数,需要指明参数是input, output, 还是两者都是。
除了IDL文件外,一个可选的属性配置文件ACF也可以用于为接口提供其它属性。ACF中的变量不影响客户和服务器之间的通信,但对应用程序代码和生成的stubs之间的接口有一个总体的影响。
使用Tuxedo的运行时,客户和服务器之间的绑定是透明的,不需要为它们提供任何信息,而在使用OSF DCE运行时,程序员必须花费很大的精力来解决绑定管理。由于BEA Tuxedo不支持OSF DCE运行时函数,因此,绑定属性在IDL和ACF文件中被忽略了。
IDL和ACF文件都用IDL编译器进行编译。编译器先生成一个头文件,它包含了IDL文件中定义的所有类型和函数原型说明。如果输入文件是file.idl和file.acf,则生成的头文件为file.h,stub文件为:file_cstub.c和file_sstub.c。stub文件在RPC通信中用于打包和通信。编译器一般直接将它们编译成.obj文件,而把源文件.c删除。
完成接口定义之后,主要的工作是编写应用程序代码了。客户机要调用接口中定义的函数,服务器必须实现接口中定义的操作。当编码完成后,需要将它们和BEA Tuxedo的运行库进行编译连接,两个程序可以用过简化整个过程:buildserver建立服务器程序,buildclient用于建立客户程序,建立服务器过程如下图所示:
1. 运行UUIDGEN生成IDL文件的框架(simp.idl,具有UUID)。编辑IDL文件,定义客
户和服务器之间的接口。 2. 运行IDL编译器tidl,以simp.idl和simp.acf作为输入文件,创建接口头文件simp.h和
服务器、客户机目标文件simp_sstub.obj, simp_cstub.obj。
3. 写完服务器程序server.c后,运行buildserver编译它,并将它和服务器stub文件、BEA Tuxedo运行时库进行连接,生成server.exe。 建立客户机的过程如下图所示:
4. 使用1中创建的IDL文件,运行IDL编译器tidl,生成接口头文件和客户机stub。 5. 运行buildclient,把client.c和stub文件,头文件,BEA Tuxedo运行时库,TxRPC运行
时库进行连接,生成client.exe。
第二章 使用接口定义语言IDL
§2.1 使用uuidgen创建IDL模板
UUID用于唯一标识一个接口,uuidgen命令用于生成UUID。生成过程如下: $ uuidgen -i > simp.idl
$ cat simp.idl
[uuid(C996A680-9FC2-110F-9AEF-930269370000)] interface INTERFACE {
}
编辑simp.idl文件,将接口名改为changecase,并添加两个函数的原型说明: [uuid(C996A680-9FC2-110F-9AEF-930269370000), version(1.0) ] interface changecase {
void to_upper([in, out, string] char *str); void to_lower([in, out, string] char *str); }
§2.2 使用IDL编译器tidl
在兼容性方面,tidl和DCE的idl有很多相似的地方,但也存在一些不同,如;DCE中用的是idl,BEA Tuxedo使用tidl。
第三章 编写RPC客户和服务器程序
§3.1 处理过程
TxRPC的目的就是在客户机和服务器之间提供一个透明的过程调用,由于与客户机与服务器不在同一进程空间,所以存在如下一些问题:
1. 由于客户机和服务器可能在不同的机器上,所以不能使用共享内存,全局变量就不可用
了,状态信息需要由客户端传给服务器端,然后再传回来。 2. 把客户端和服务器开发工作分开有一些优点,如更加模块化。但是却带来了一些复杂性,
如分布式处理,通信问题等。
§3.2 处理状态和例外
在X/OPEN RPC规范中,非应用程序错误通过状态参数返回,如果有一个RPC服务器
失败,fault_status值就被返回,如果通信失败,就会有一个comm_status值被返回,
§3.3 使用RPC的头文件
为了确保DCE/RPC和TxRPC的stub可以在同一个环境中编译,TxRPC在实现时使用了不同的头文件,这些头文件都包含在IDL编译器生成的simp.h文件中。
§3.4 和ATMI协同工作
TxRPC可执行文件利用ATMI进行通信。作为客户端,可以使用所有的通信机制进行通信,而在同一个服务器中,不能同时实现会话服务和RPC服务。虽然在同一个服务器中可以混合STMI请求/响应机制和RPC服务,但并不推荐这么做,原因主要是RPC操作不能调用tpreturn()或者tpforward(),如果调用了,错误就会返回客户端,可能是rpc_x_fault_unspec或者rpc_s_fault_unspec。
适用于服务器但不适用于客户机的两个函数是tpsvrinit()和tpsvrdone(),它们在服务器启动或停止时被调用,因为服务器在接受任何TxRPC操作前,都必须调用tx_open(),因此tpsvrinit()是一个调用tx_open()的好地方!
§3.5 和TX协同工作
TX函数提供了事务处理的函数:tx_begin(), tx_commit(), tx_rollback()。TX具有如下功能:
1. 提供了一个接口或操作,它带有一个属性[transaction_optional],可以指示着RPC调用是否在一个事务中,函数调用中所作的操作都是事务的一部发。 2. 提供了一个接口或操作,它带有一个属性[transaction_mandatory],它指示着RPC调用必须在一个事务中,否则就会返回一个rxrpc_x_not_in_transaction的例外。 3. 如果以上属性都未指定,那么调用的操作不是事务的任何一个部分。
4. 如果TxRPC操作在服务器中调用,而之前没有调用tx_open(),则一个txrpc_x_no_tx_open_done例外就返回客户端。
5. TxRPC允许tx_rollback()被其它操作调用来把事务设置为只能回滚的,这就会导致所有
事务中的操作最后都被回滚。
第四章 Build RPC客户和服务器程序
§4.1 Build一个RPC服务器
RPC服务的名字公告有所不同。对于请求/响应服务器,一个服务名被映射到一个过程,而对于RPC服务器,一个服务名被映射到一个IDL接口名,RPC服务的公告是这个样子:
RPC服务器用buildserver进行创建,通过-f指出RPC运行库。
§4.2 Build一个RPC客户机
本地RPC客户机通过buildclient进行创建,它自动地连接Tuxdo库,但RPC运行时库必须明确指定,这个工作通过-f来指定。
正在阅读:
BEA Tuxedo的TxRPC特性04-24
西溪湿地英文导游词12-31
福大实验2 - 顺序题目及解答past06-01
古代汉语习题集10-24
苏教版六年级下册科学第二单元-《遗传与变异》复习资料11-10
区民政局社区规划工作总结报告08-04
宿舍楼装修工程施工组织设计12-31
国际私法单选、多选题大全(含全部答案)10-09
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 特性
- Tuxedo
- TxRPC
- BEA
- 第六章 一元一次方程单元测试卷F
- csfb常见问题
- 南京市规划建设展览馆参观认识实习报告
- 风华少年教育培训中心章程
- 关于《数字视频安防监控系统基本技术要求》的说明文件 - 图文
- 环氧磷酸锌防锈底漆的选用
- 模电复习题和答案
- 新概念英语第二册1-15课测试卷
- 《现代货币金融学说》平时作业参考答案
- 腹腔镜肾部分切除术知情同意书
- 测量不确定度评定实列 - 图文
- 大学物理 - 马文蔚 - - 第五版 - 下册 - 第九章到第十一章课后
- 安全保障体系和安全管理制度
- 广州规划管理建筑面积计算办法修订
- EPLAN P8最常遇见的几个问题 -
- 四级翻译讲义
- 车钩缓冲器拆装机说明书 - 图文
- 大气污染控制工程答案
- 课程大纲
- 2017年新疆农业大学普通生物化学考研大纲硕士研究生入学考试大纲