版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、BEATUXEDO简易培训教程编写、整理:文栈良2003-1-21第一章认识tuxedo1.1 TUXEDOM什么?BEATUXEDO在企业、Internet这样的分布式运算环境中开发和管理三层结构的客户/服务器型关键任务应用系统的强有力工具。它具备分布式事务处理和应用通信功能,并提供完善的各种服务来建立、运行和管理关键任务应用系统。开发人员能够用它建立跨多个硬件平台、数据库和操作系统的可互操作的应用系统。BEATUXED是企业、Internet分布式应用中的基础主干平台。它提供了一个开放的环境,支持各种各样的客户、数据库、网络、遗留系统和通讯方式。BEATUXEDO使分布式关键任务应用系统具
2、有大型主机的性能,从而使这些应用系统能够应付数以千计的用户,大交易吞吐量,多并行数据库存取和大量数据,同时保持较短的反应时间,较高数据完整性和安全性,并且确保全年365天,每周7天,每天24小时的系统可用性。同时,BEATUXEDO还能让开发人员和系统管理人员享用分布式运算环境提供的好处,如技术成本的低增长率,灵活性提高,快速应用开发和安装以及业务信息存取得以改善。1.2 BEATUXEDO的组件软件模型关键业务应用通常是面向事务的,要求具有准确的数据完整性、较好的性能和管理需求。这些需求要求对应用的开发、调度和操作给出一个结构化的方案。由像BEATUXEDO样的中间件支持的组件软件模型为分布
3、式环境处理关键性业务应用提供了一个结构化的解决方案。BEATUXED口基于组件的应用设计从异构的计算资源中创建了一个虚拟主机:在分布式应用系统级提供可管理的相互关联的资源。许多组织在进行了一段时间的分布式应用工作后,现在已经认识到组件软件模型是他们的必然选择。分布式应用的直接动力是主机应用和集中式中规模的应用系统基础上又逐渐配备有大量的台式系统和服务器系统,这些分布式系统在标准网络传送协议的支持下,呈松散耦合的态势,事实上它们构成了网络计算资源的基础。在开始的时候,分布式系统主要服务于把集中式系统的前台应用迁移到网络环境主要用台式处理器和文件服务器实现文档处理和电子邮件通讯应用系统。接着,两层
4、的客户/服务器数据库应用在部门级被采用,这类应用把交互式文件共享进化到并发数据元素访问,在数据级支持更细粒度的管理。虽然这些客户/服务器应用具体化了真正分布式应用处理的概念,它们仍留有为某一目标定制的特性,规模和管理能力都有限。更重要的,这些应用只停留在较细粒度的数据访问上,使得整个应用系统宛如磐石,不能有效地利用网络资源。面对更大规模的关键业务应用,如要进行有效的分布式处理,就要求从客户/数据库方案转变到三层客户/应用系统/数据服务器结构。以后者为核心的组件软件模型是客户/服务器计算的拓展,它支持应用分区,能有效地开发和调度应用业务逻辑,管理分布式应用的可靠执行。BEATUXEDOI用三层结
5、构的组彳牛软件模型。图1表示BEATUXEDO的组件软件模型的概要。该结构分为三层:图1BEATUXEDO的组件软件模型概要1.3 TUXEDO的特点BEATUXEDO)三层结构组件软件模型将用户界面的表示部分和业务逻辑部分按客户组件服务器组件分开,使开发人员能够按组件的思想专注入于业务逻辑的开发,用户界面部分可用流行的前端开发工具来快速完成。而客户和服务器之间、服务器和服务器之间的通讯,异构平台之间的数据变换,以及服务器和数据库之间的集成和事务控制都由BEATUXEDO来完成。当数据库或服务器端的业务逻辑改变时,客户端则不一定要改变;反之当客户改变或增加新的客户界面时,服务器端则不一定要改变
6、,大大增加了应用系统的各部分的可复用性。BEATUXEDO!供的简洁API使用户程序能够物理地点透明地在客户和服务器之间、服务器和服务器之间进行各种方式的通讯,极大地减轻开发人员的负担。BEATUXEDO供的通讯方式有同步RPM用,异步RPM用,对话通信方式,广播通讯方式,异步存储转发队列通讯,事件通讯方式等。在BEATUXEDO的三层结构组件软件模型下开发的应用程序以服务器组件和客户组件为安装、升级的单位,当一个组件需要更新时,管理人员甚至能够在运行系统不停机的情况下完成系统的升级,这在客户端为数以千计的关键任务应用中尤为重要。BEATUXED保统提供从一个中心点对整个分布式系统进行全局监控
7、及管理的能力,管理员根据一个整体系统视图(而不仅是单个节点或单元)提供的信息,可以作出决定和采取动作。BEATUXEDOS但提供了一些管理命令,而且提供了一个集成的图形界面管理工具,集中地监视和管理应用系统的运行,并且可动态地修改系统配置。通过Java的applets,还可利用Internet的浏览器比如Netscape或Microsoft的Explorer来运行该图形界面管理工具。止匕外,BEATUXEDOI供了描述系统中各对象的管理信息数据库(MIBS)和存取管理这些管理信息数据库的管理API,用户可利用这些管理API,编写自己特有的管理工具。一方面,BEATUXED能够使多个客户连接到一
8、个服务器进程,由这个服务器进程存取数据库,为客户的请求服务。这样,数据库为处理连接所需的资源大大减少。另一方面,客户和服务器之间,服务器和服务器之间的通讯中,网络上流动的只有相对较少的客户或服务器的请求和服务器处理的结果,而不再是两层结构中客户和DBMM间的大量SQL请求和应答。止匕外,利用BEATUXEDO有的一些机制也能极大提高应用系统的性能。比如利用异步RPC机制实现扇出并行,利用转发机制实现流水线并行,利用多服务器单队列实现多处理并行等。所有这些因素使BEATUXED的应用系统具有极高的性能。世界上大部分硬件服务器的TPC性能指标都是在BEATUXEDO:完成的。BEATUXEDO时知
9、道它控制下的资源的情况,并利用这些信息为应用提供最大可用性。分布式系统使资源故障的影响复杂化。在一个分布式系统中,多个节点代表更多的潜在故障点的可能,但也可以代表在资源恢复开始时在其他节点上重新分配工作的更大潜力。BEATUXEDO这种分布式系统故障恢复上具有优势。TUXEDO重启应用进程,并且能在硬件故障情况下在其它结点上重新运行进程。BEATUXEDO计了数据资源的绝对完整性。目前出现的客户/服务器应用中,重要数据资源很可能是广泛的,而且受异构系统的控制。应用可以设计成用严格的保证数据一致性的两阶段提交,或者用更多的缓冲存储和转发技术来管理异构的(或者同构的)数据库的更新。在各种情况下,B
10、EATUXEDO够确保异构的(或者同构的)数据库以及它资源管理器之间的完整性。BEATUXEDO通过结构化用户界面支持应用服务的验证、授权和存取控制,允许用户加入自己的验证服务模块。BEATUXEDO还提供信息加密服务,允许对网络上传输的信息按RSA的RC4算法加密。目前美国本土内可按128位,本土外可按40位加密。BEATUXEDO一个非常开放的平台,支持三十多种服务器平台,包括大多数的UNIX服务器,WindowsNT服务器,IBM的S/370,S/390,力口上AS/400和Tandem司的NonStop系统。它的客户支持几乎所有的工作站,包括UNIX,MS-DOS,Windows3.1
11、/95,WindowsNT,OS/2,Macintosh等。BEATUXEDO持X/OpenS织的分布式事务处理模型DTP事务定界标准TX,应用程序事务处理接口标准XATMI以及和资源管理器(像数据库系统)的接口标准XA并且还支持事务处理器之间的互操作标准OSI-TP。BEATUXEDO客户端通过DLL可以和VisualC+、VisualBasic、PowerBuilder、SQLWindowsDelphi、Develop/2000以及其他4GLF口CASE工具互连。止匕外,BEATUXEDO得到其他第三方开发管理工具厂商的支持。简单地说,软件可伸缩性就是可以很容易地增加被支持的用户数和应用的
12、全局吞吐量。一个可伸缩的软件系统是利用网络分布系统优势的关键。BEATUXE这样一个系统,它可以利用在一个网络上所能找到的所有的异构的资源以获得最大的效益。BEATUXEDO供这一点,而且提供许多可伸缩性选项。垂直方向的可伸缩性代表的含义与通常相同,即将系统转变(升级)为一个更大,更有力的相同或不同结构的平台。水平方向的可伸缩性多是在分布式系统结构中,它以增加适当规模的附加系统来增强网络应用。所增加的附加系统与原有系统可能是同构的,也可是异构的(那就是不同的处理机或操作系统)。BEATUXEDO持二维的可伸缩性。二维可伸缩性可在结构上的任意位置添加异质资源,而不改变已存在的应用的结构。允许对一
13、个复杂的混合结构的支持,为联机网络系统提供了广泛的规模选择范围。任何与数据表示有关的(如不同的处理器表示)可以由BEATUXED透明地解决。BEATUXEDOS可根据系统负荷的变化动态地增加或减少应用服务器的个数。除了像CC+nCOBO这样的第三代语言编程环境,BEATUXEDO系统享受最广泛的第三方工具的支持,下面是开发BEATUXEDO:用目前可用工具的一个列表。表1TUXEDOA许的开发工具选择公司开发工具客户端服务器端Ally.*Ally4GLInformixIFORMIX5.0(XA)Informix*TPToolkitITI.*TPToolsOracleORACLE7.0(XA)D
14、evelop/2000GuptaSQLWindowsNovellVisualAppbuilderNovellUSLWKSHUnify_*Accell4GLJyacc*JAM/JPLTI_*IEFCASEMagna一、*MagnaXPowersoftPowerBuilder*DelphiDelphiMicrosoftVisualBasicVisualC+止匕外BEATUXEDO勺关联产品BEACONNECT许BEATUXEDO!旧M的CICSIMS、Unisys的System2000进行互操作,BEAJolt支持从Internet浏览器上请求BEATUXEDO勺服务。BEABuilder和BEA
15、Manager将BEATUXEDO用的开发与管理更为简化。1.4BEATUXEDO的组成与功能BEATUXEDO用程序既可服务于带有少量客户和服务的单个服务器系统,又可服务于由成千客户、成百服务器和众多服务器组件和服务构成的大规模的分布式环境。一个这样的应用程序是以业务逻辑服务、由这些逻辑服务组织成的高层服务器组件和在服务器结点环境中的组件分布为特征的。支持这种虚拟主机环境的BEATUXEDO元素包括配置信息库和实现运行时应用管理的核心子系统1配置信息库BEATUXEDO应用程序由配置文件指定,这些配置文件被转换成若干紧耦合的运行时共享信息库。这些共享库(在BEATUXEDO中称公告牌,Bul
16、letinBoard)驻留在每个参与应用的服务器结点上。BEATUXEDO子系统访问和操作这些库。( 1) 应用程序配置一个BEATUXEDO应用程序包括在一个高度分布的环境中运行该应用所需的资源。开发人员编写服务的代码,应用管理员通过构造定义操作参数和资源分配的配置文件创建应用程序。配置信息驻留在一个可编程访问的管理信息库(MIB)中。MIB最少包括下列配置信息:系统范围的资源,包括有关全局应用属性(如安全性级别)、是否进行负载平衡、启动一个应用系统所需的资源定义和故障恢复时所需的资源定义。参与应用的每个服务器机器的定义和驻留在这些机器上的BEATUXEDO文件的规格说明。单个服务器可与其他
17、组成员共享的资源组,如事务管理;组也定义了服务器和所操作的资源管理器之间的映射。服务应用程序所需的映射成进程的服务器,在这些服务器进程中实现了应用业务逻辑。一个BEATUXEDO配置允许一个管理服务器或者从分布在一台/多台机器的一个/多个组中配置多个服务於器。应用服务器进程定义的服务;服务级的属性包括负载因子、服务处理时间的相对量、该服务相对于服务器中提供的其他服务的优先级。头三个配置属性定义了应用的处理元素(如处理结点)、全局属性和某一主资源的特殊指定。组、服务器和服务集中在BEATUXEDO软件组件模型的分布式应用资源上:BEATUXEDO应用程序定义了提供所需服务的服务器组件分组;可配置
18、的服务器实例数量能在多个机器上调整;而且,BEATUXEDO能管理广播的单个服务和它们的相对优先级。( 2) 公告牌BEATUXEDO应用配置文件被映射到一个运行时数据结构:公告牌(BB)。BB作为一个从配置文件中派生出来的共享信息库。BB驻留在每个参与到由配置文件指定的应用程序的BEATUXEDO的服务器结点上。BB作为分布式应用的名字服务数据库。它作为应用统计数据的运行时仓库,提供分布式环境下的应用对象的位置信息。BB由BEATUXEDO核心例程(对应用开发者透明)访问,由核心例程读/修改BB库。这个信息库提供BEATUXEDO完成动态客户/服务器映射所需的信息,同时也提供完成诸如负载平衡
19、、安全性和事务协调等功能的信息。2事务管理器事务管理器是BEATUXED琳系结构的中心,它是每个BEATUXEDO服务器的核心,提供重要的分布式应用服务、命名、消息路由、负载平衡、配置管理、事务管理和安全性。它也包含BB结构,使用维(bulletinBoard)ServerInfoServiceInFoClienttnfo护和访问BB信息的服务。换句话说,BB内包含有可靠执行和管理大规模的基于组件的应用程序所需的所有信息,它将对事务管理器进程起作用。事务管理器的基本操作见下图的图示。事实上,事务管理器是负责客户/服务器绑定和支持BEATUXEDO!拟主机属性等特色的子系统。图4来自网上的客户请
20、的客户代理进程,服务器通过注册参加到该应用中。作为客户方通讯的一部分,事务管理器访问BB,然后选择服务器,接着,服务器消息队列的地址被返回,客户方的请求被马上传送到合适的队列等待服务为它进行处理。1)名字服务/位置透明性BB作为BEATUXED用程序的名字服务器,复制到每个参与的结点上。为了便于快速访问,名字服务器作为在共享内存中的一个结构存在。事务管理器使用BB名字信息、配置信息和环境统计信息自动把服务请求平衡到可用的服务器上,并且根据数据内容为客户请求选择路由,为服务请求选择优先级。编程员把应用程序编成对逻辑入口项(称有名服务)的函数调用。事务管理器把这些逻辑请求映射到服务器结点/服务器进
21、程环境内指定的服务实例。2)数据依赖型路由数据依赖型路由是根据数据缓冲区中一个指定域的值,把一个服务请求映射到一个指定的服务器组的机制。因为BEATUXEDOI务器组映射成指定的资源管理器/数据库实例,所以请求被导向到一个指定服务/资源管理器的组合。例如,一个银行的数据库可把存储在不同数据库实例中的不同范围的帐号进行水平分区。用户可用事务管理器进行路由选择,而不用把特定分区信息编码成访问帐号的应用代码。事实上,事务管理器查看指定的数据值,参考存储在BB中的路由信息,然后把请求发送到能在正确数据分区上操作的服务。如果用户需要改变数据库分区(把一个分区移到一个新服务器上,或在已有分区实例上改变帐号
22、分布),那么,他只需改变事务管理器的路由信息,应用程序的代码不受影响。图5数据依赖型路由:帐号操作的请求与数据分区是独立的,事务管理器访问BB路由表信息,把请求映射到访问相应分区的服务器组,然后返回该组指定服务的绑定。3)负载平衡为了确保应用流量最大,事务管理器自动地在系统中完成负载平衡和调度。通过使用每个服务的负载因子,事务管理器把请求发送给能最快处理该请求的服务器。事务管理器通过为当前排队的请求总计负载因子来决定给定服务器上的负载。下图给出了事物管理器负载平衡能力如何帮助优化应用流量的一个例子。图6负载平衡:服务A,B,C由不同的服务器提供,每个服务器有一个基于当前排队请求的负载值。事务管
23、理器决定哪一个服务器提供服务,哪一个服务是负载最小。事务管理器将在一个给定结点内或在提供服务的若干结点上,进行负载平衡。4)优先权请求优先权是事务管理器提供的另一个核心能力。某一服务请求经常需要比其他服务更高的优先权。例如,航空公司取消订座的优先级要比订座的优先级高:对大多数航空公司来说,要尽可能地再次买出被取消的座位。优先权在服务队列级有用,参见下图的图示。图7优先权:右例中,服务器1提供服务A,B,C。A,B服务的优先级是50,C的优先级是70。在上一个请求完成时,服务器在队列中选择下一个请求。下一个请求是由优先级决定的,而不是根据请求在队列中的位置。为了防止低优先级请求总是得不到服务,每
24、隔十个请求,就按FIFO次序进行一次请求选择。5)稳固的运行环境事务管理器包括许多支持应用可用性的特征,如进程可用性检查、超时检查、自动服务器重启和恢复过程、用户可定义的恢复过程。事务管理器不仅仅控制应用程序的活动流而且能确保其流畅有效的操作。6)安全性事务管理器通过一个结构化的安全性接口提供应用服务的验证、授权和访问控制。该接口概括了Kerberos安全模型,允许Kerberos或类似的最终用户验证机制与应用集成。用户能用访问控制列表保护服务、队列或事件免遭未授权的访问。7)分布式事务处理分布式事务处理(DTB能力能保证跨几个场地访问的数据和由不同数据库产品管理的数据的完整性。事务管理器协调
25、分布式事务使之完成网络环境下针对异构数据库的多场地修改。事务管理器用全局事务跟踪事务参与者,管理两阶段提交协议。这样就可确保每个场地都能正确处理事务的提交和回退。事务管理器还在出现场地故障、网络故障或全局资源死锁时协调全局事务的恢复。事务管理器使用开放小组的X/OpenXA接口,进行不同资源管理器之间的通讯。该接口已被X/Open接纳为分布式事务控制的标准接口。因为高性能和事务流量对OLT陈统产品是关键因素,所以事务管理器DTP软件使用了最小化磁盘写的算法。在其他属性中,事务管理器DTPFF发了一些众所周知的技术如协调者迁移、只读和一阶段提交优化。事务管理器由几个关键子系统支持,这些子系统扩展
26、了BEATUXEDO客户/服务器功能和与异构应用系统的互操作性。下面的几个段落将描述这些关键子系统:管理BEATUXEDOf分布式应用管理的关键性问题给出了一个结构化的解决方案。BEATUXEDO勺管理接口包括一个综合性的命令行/脚本接口,一个编程接口和一个管理信息库(MIB),它们把BEATUXEDO实现成一个更大管理环境中的受控应用程序。一个易用的基于GUI的管理应用程序可利用这些管理接口,在BEATUXED邸境上提供了高层控制。BEATUXED资源,从高层的域属性向下贯穿一个单服务器进程的特性,支持图形化表示和拖放功能。集中式的应用定义事务管理器使得应用管理员可在一个文件中定义组成BEA
27、TUXEDO应用程序的硬件、软件和网络资源。应用设计者能叙述在何处运行服务器和服务以及在处理器出故障时服务应该迁移到何处。他们可把各种不同的特性,包括调度信息、进程恢复标准和超时时间段等,赋给应用服务器。事务管理器为动态启动、停止或管理一个分布式应用程序提供中央配置管理和工具。动态重配置用户可动态启动或停止服务;用户可选择可用的服务。用户可在一个配置中增加新的机器、组、服务器和服务。另外,事务管理器可用不同的参数如超时故障等,使得一个无法使用的处理器上的服务器和服务在不中断运行程序的条件下移向另一个处理器上。第二章开发与应用2.1 开发BEATuxedo应用程序在开发BEATuxedo应用程序
28、之前,你需要先搞清楚一系列和设计开发相关的概念,如识别什么是客户机,有哪些方法可以从外界收集数据并提交服务器进行业务处理;识别什么是服务器,哪些程序包容了可以处理客户机输入的商业逻辑;识别什么是类型缓冲区,客户程序在向其这程序发送数据前如何分配内存区域;什么是BEATuxedo的消息范例等。最后你还要弄明白客户程序是通过调用ATMI库来访问BEATuxedo系统的。创建BEATuxedo的客户程序与在C和C+编程语言中创建其它应用程序一样,BEATuxedo提供了一个其于C语言的编程接口,即应用程序事务监控接口ATMI,这套接口很容易使用,以便用于开发客户程序和服务程序。除了C语言接口外,BE
29、ATuxedo还提供了COBOL接口。2.1.1创建服务程序尽管开发者使用ATM编程接口来创建BEATuxed旃户程序和服务程序,但服务程序不全部由开发者来编写,开发者只需写一些称为服务的商业函数,封装业务逻辑,然后和BEATuxedo的一些二进制程序联编成一个可执行的服务程序。BEATuxedo服务程序启动后,它总是保持运行状态,只到接收到一个shutdown消息为止。一个典型的BEATuxedo服务程序在shutdown或reboot之前都在执行着数千个服务。为了更好的了解服务端的所有任务以编写服务端应用,有必要重新认识服务端在C/S模式中扮演的角色。首先,服务是系统资源的联系点。例如,一
30、个数据库服务联系实际数据库并对其进行查询和修改。为有效进行,应建立一个数据库连接。其次,服务必须发布系统内可以访问的交易,保证客户端可以知道把请求发往何处。以上两步结束后,服务进入一个循环接收请求、处理请求并返回结果。接收请求包括进入消息队列,得到交易请求。处理请求包括检查请求数据缓冲,运行商业规则和逻辑,可能还包括访问数据库和返回结果数据缓冲。当系统管理员需要关闭系统,可以通过系统管理工具将关闭系统的消息发给服务。服务完成所有交易,取消交易发布,关闭资源连接然后结束。(1) 在BEATuxedo服务程序启动时,执行tpsvrinit()函数,可以在里面打开一些如数据库之类的资源供以后使用;(
31、2) 在BEATuxedo服务程序关闭时,执行tpsvrdown()函数,可以在里面关闭tpsvrinit()中打开的资料;(3) BEATuxedo服务程序以服务的形式来响应客户程序的请求,客户程序不是通过名字来调用服务程序的,而是调用服务,客户程序不知道处理它请求的服务程序的位置;(4) 服务程序调用tpreturn()函数来结束服务请求,并返回一个缓冲区,必要时,将它传给客户程序;注:如果是在tpsvrinit()中连接数据库,为了保证数据库的正常连接,在执行服务的时候,最好能够判断数据库是否断开连接,如果断开连接,则重新连接数据库。这样可以从根本上保证系统能够持续稳定的长期运行,基本上
32、不需要人工干预。也就不再会出现“数据库重启了,中间件必须重启”的情况。在一般的C程序中,函数通过调用return()将控制返回,函数调用堆栈清空,控制返回调用点。TUXEDO系统的交易函数必须结束于将回应返回给客户端或前转到另一交易。函数tpreturn()用来结束交易将回应数据缓冲发给客户端。函数tpforward()将交易前转给另一个交易,由其负责回应原来的客户端。下图是tpreturn()的示意图。tpreturn()设计来代替常规的return(),结束绝大多数函数。它将回应数据缓冲返回请求的客户端,控制权返回给服务程序的标准main()(由TUXEDO提供)。tpreturn()使用
33、下列参数:第一个值表示交易是否成功,有3种可能:TPSUCCESS交易完全成功,如果是一个会话,TPEV_SVCSUCC被生成TPFAIL交易失败,tperrno将被设成TPESVCFAIL。如果是事务模式,事务被标志成abort-only,如果是会话,TPEV_SVCFAIL被生成。TPEXIT与TPFAIL类似,但服务会中断,如果服务设成可以重启动,则可以由TUXEDO系统将其重启动。第二个值是应用定义返回码,此处使交易可以发送一个整形代码到客户端,给出交易处理结果的详细信息。该值与/T系统无关,通过全程变量tpurcode送到客户端程序。第三个值是回应数据缓冲的的指针第四个值是回应数据缓
34、冲的长度(仅缓冲类型为CARRY时需要)第五个值是标志位,通常不用tpsvrinit()和tpsvrdone()分别用来启动和关闭服务。如果应用不提供这两个函数,可以使用替代函数。tpsvrinit()用tpopen()缺省打开RMH1B接。tpsvrdone()用tpclose()关闭RMTH1接。tpsrvinit()象标准C语言的main()一样使用参数argc,argv。服务的命令行参数可以传入该函数,被getopt()解析。该部分的用法参见应用配置部分。本函数出错时返回-1,成功返回0。tpsvrdone()无参数,无返回值。当C语言的交易程序编码完后,需要连接正确的库并编译。使用b
35、uildserver可以使该过程容易一点。该命令引用了C语言编译器并按正确的次序连接TUXEDO(统的库,连接TUXEDOS的main()等。buildserver还用-s参数产生合适的交易名/函数名映射表。要使用buildserver,必须先正确设定环境变量TUXDIR,PATH,LD_LIBRARY_PATH令语法如下:buildserver-v-oexecutable-sservice2,service3:func-fsource/object-lobject/libraryfile例:buildserver-sDEPOSIT-oTLR-fTLR.o-fappinit.o参数解释如下:-
36、 o生成的可执行文件名- f需要在连接TUXEDO之前传给编译器的文件名。如有多于一个的文件名,名字应用空格分隔并用引号引起。也可以使用多个-f参数。- l需要在连接TUXEDO之前传给编译器的文件名。语法同上。- v编译过程显示。- b指定SHMgMP莫式。如无此项,两种模式都包括;使用此项可以使生成的可执行文件小一点-r连接此处指出的RM。该RM勺名字必须含在$TUXDIR/udataobj/RM文件中。对于服务程序的调试,确实是一件非常令人头痛的事.在Unix环境下,目前还找不到很好的方法,一般经常使用的方法是print,Userlog”跟踪法,但是这种方法太累了.因此,有人想出了在wi
37、ndows#境下跟踪调试,发现没有任何错误后再放到UNIX环境进行编译,并正式使用.目前,我们公司采用的就是这种调试方法,在window浒境下(C+Builder)编写一个tuxedo模拟测试服务程序,使其能正确的识别客户端调用的服务,并正确的调用相应的服务.(1) 源代码文件名:simpserv.c#include#include#include/*TUXEDOHeaderFile*/#include/*TUXEDOHeaderFile*/*当服务器启动时,在处理请求之前,tpsvrinit被执行,这个不是必须的,对应的函数是shutdown*/#ifdefined(_STDC_)|defi
38、ned(_cplusplus)tpsvrinit(intargc,char*argv)#elsetpsvrinit(argc,argv)intargc;char*argv;#endif/*当argc,argv没有被使用时,一些系统会发了警告*/argc=argc;argv=argv;/*userlog用于将TUXEDO消息写到日志文件中*/userlog(Welcometothesimpleserver);return(0);/*TOUPPER真正处理客户请求,它接收的参数是一个缓冲区指针*/#ifdefcplusplusexternC#endifvoid#ifdefined(_STDC_)|
39、defined(_cplusplus)TOUPPER(TPSVClNFO*rqst#elseTOUPPER(rqst)TPSVCINFO*rqst;#endifinti;for(i=0;ilen-1;i+)rqst-datai=toupper(rqst-datai);/*返回转换后的类型缓冲区*/tpreturn(TPSUCCESS,0,rqst-data,0L,0);程序说明语句说明wholefile整个服务程呼不提供main函数,在build时,由BEATuxedo系统提供。tpsvrinit()在服务器初始化即处理请求之前被调用。若没有提供该函数,BEATuxedo系统会提供一个缺省的,
40、它向USERLOG中写一条消息,说明服务器已经被启动。userlog(3c)是系统提供的一个与日志的方法。TOUPPER()simpserv提供的唯一一个服务,它接收一个TPSVCINFO结构,它包含了要被转换成大写的字符串。forloopBEATuxedo系统的循环,用于逐一转换。tpreturn()(3)程序编译:$buildserver-osimpserv-fsimpserv.c-sTOUPPER(-sTOUPPE腾明了在服务器启动时需要提供的服务)2.1.2创建客户程序创建BEATuxedo的客户程序与在C和C+编程语言中创建其它应用程序一样,BEATuxedo提供了一个其于C语言的编
41、程接口,即应用程序事务监控接口ATMI,这套接口很容易使用,以便用于开发客户程序和服务程序。除了C语言接口外,BEATuxedo还提供了COBOL接口。客户端在C/S模式中的作用为了更好的了解客户端的所有任务以编写客户端应用,有必要重新认识客户端在C/S模式中扮演的角色。首先,客户端是用户界面。意思是当用户在系统上用程序进行一次操作的整个过程就是一个客户端过程。前端过程是对客户端的另一个描述。客户端的首要任务就是获得执行操作应该得到的数据。一旦客户端得到了应有的信息,应该将数据按服务能够识别并适合传输的格式打包。然后,向服务端发送请求并等待回应。收到回应数据后,将其按一定格式返回给终端用户客户
42、端开发过程客户端程序的设计和实现可以被分成2部分考虑:用户处理过程和TUXEDO能部分。下文的客户端程序只描述了TUXEDO能部分。禾I用TUXEDOATMIAPI调用可以做至U:基本的TUXEDO试技巧(tperrno,tpstrerror,userlog)TUXEDO程管理(tpinit,tpterm)基本数据缓冲管理(tpalloc,tprealloc,tpfree)基本通讯(tpcall,tpacall,tpgetrply)客户程序一般执行如下任务:(1)用tpchkauth()决定加入一个应用程序所需的安全级别。可能出现的响应包括:没有安全级别,应用程序口令,应用程序授权,访问控制列
43、表,连接级加密,公钥加密,审计。这些可以根据你的需求进行选择;在实际的应用中很多的软件开发商通常对这一步都不做处理。(2)调用tpinit()来连接到一个BEATuxedo应用程序,所需的安全信息作为tpinit()的参数传给了应用程序;(3)执行服务请求;(4)调用tpterm()来断开和BEATuxedo应用程序的连接调试和错误处理当调用ATMI出错时,返回值为-1,全程变量tperrno被设值,该变量提供系统定义的出错原因。函数tpstrerror()以此变量为参数,返回错误的字符说明信息。完整的错误号和文本错误信息存在于文件$TUXDIR/include/atmi.h。函数userlo
44、g()重定向输出文件为ULOG.mmddyy用方法同printf()。该函数每次输出都写硬盘,这样在系统失败时也能保留调试信息。代码范例ret=tpterm();if(ret=-1)printf(“Errorinexitingapplicatnio”n);usrlog(“ATMIerrorlogged%d%s”,tperrno,tpstrerror(tperrno);进程管理tuxedo接到一个tpinit的请求后,就启动一个服务进程,接收到tpterm()后,就会中止该服务进程.在实际应用中,tpinit()和tpterm()必须成对出现,而且要相互对应.如果只在程序中调用了tpinit()
45、而没有调用tpterm(),则tuxedo系统会认为该进程一直处于活动状态,这样的话可能会因为服务进程达到系统允许的上限而导致系统的崩溃.inttpinit(TPINIT*tpinfo)客户端通过调用tpinit()与应用连接,进行交互,有以下事件发生:调用安全接口检查客户端是否需要认证连接BB,使进一步的ATMI函数得到信息使BBL了解BB中已经存在请求建立客户端消息队列使服务可以发回返回信息,系统可以送出广播通知等.错误时返回-1,可能由以下原因引起:TPEINVAL参数错误TPENOENTBB无空间TPEPERM无连接权限TPEPROTO协议错误-被服务调用inttpterm()客户端调
46、用tpterm()切断与应用的连接,结束了客户端的TUXEDO进程,该过程发生以下事件:BB入口删除,使BBL知道客户端已经离开客户端离开BB,客户端的信号量被移除客户端消息队列被移除错误时返回-1,可能由以下原因引起:TPEPROTO协议错误-被服务调用TPESYSTEM/T系统下错误TPEOS操作系统错根据tpinit()和tpterm()在客户程序中不同位置的调用,可以把tuxedo的进程连接分为长连接和短连接两种.长连接是指在程序开始的时候调用tpinit()建立服务连接,在程序中止的时候调用tpterm()中止服务连接.这样做的好处是,当用户频繁的进行业务操作时,不用频繁的进行进程连
47、接,大大的缩短了操作时间,提高了程序的执行效率.但是,这也一个缺点,那就是,只有用户不从客户程序中退出来,不管做不做业务,都会在系统中占用一个进程连接,从而会影响其他用户的连接.短连接指的是用户每做一次业务,都需要调用tpinit(),业务完成后调用tpterm().这样做的好处是,1000个终端用户和10000个终端用户同时操作,对系统来说,基本上是一个概念.但是这样做会浪费大量的时间在进程连接上,从而影响了业务的处理效率.为了协调长连接和短连接之间的矛盾,我曾经给出了一个很好的解决方案,那就是在长连接的基础上进行优化处理,当客户程序5分钟(这个值可以自定义)没有向服务程序发送任何服务请求,
48、则调用tpterm()断开服务连接.仅仅这样还是不行的,我们还必须在客户程序向服务程序发送业务请求之前,首先判断进程连接是否断开,如果断开,则重新连接.数据缓冲管理在BeaTuxedo系统中的所有通信过程都是通过类型缓冲区来完成的,BeaTuxedo系统提供了大量的类型缓冲区来供开发者使用。所有类型缓冲区都必须通过BeaTuxedo的tpalloc(),tprealloc(),tpfree()这些ATMI来分配回收,它们都有特定的头部。以下是TUXEDO基本的数据缓冲类型:STRING以空值结尾的单域字符数据。CARRAY有长度定义的单域二进制数据,不进行编、解码。VIEW类C结构或COBOL
49、记录的多域组织。FML无固定结构的自定义缓冲。tpalloc(),tprealloc()在出错时返回空值,可能由以下原因引起:TPEOS操作系统TPEINVAL非法或不正确的类型TPESYSTEMTUXEDO之下的错误统一定义的类型缓冲区可以使它们在跨越不同网络、不同协议、不同CPU勾架以及不同操作系统之间得到统一的处理,这就使得开发者在分布式计算环境中有效地避开了异构网络和异构计算机系统带来的差异,把精力集中在商业逻辑的开发上。(1)源代码文件名:simpcl.c#include#includeatmi.h/*TUXEDO的头文件*/#ifdefined(_STDC_)|defined(_c
50、plusplus)main(intargc,char*argv口)#elsemain(argc,argv)intargc;char*argv口;#endifchar*sendbuf,*rcvbuf;longsendlen,rcvlen;intret;if(argc!=2)(void)fprintf(stderr,Usage:simpclstringn);exit(1);/*作为一个客户过程连接到System/T*/if(tpinit(TPINIT*)NULL)=-1)(void)fprintf(stderr,Tpinitfailedn);exit(1);sendlen=strlen(argv1
51、);/*分配一个供请求响应使用的STRING缓冲区*/if(sendbuf=(char*)tpalloc(STRING,NULL,sendlen+1)=NULL)(void)fprintf(stderr,Errorallocatingsendbuffern);tpterm();exit(1);if(rcvbuf=(char*)tpalloc(STRING,NULL,sendlen+1)=NULL)(void)fprintf(stderr,Errorallocatingreceivebuffern);tpfree(sendbuf);tpterm();exit(1);(void)strcpy(se
52、ndbuf,argv1);/*RequesttheserviceTOUPPER,waitingforareply*/ret=tpcall(TOUPPER”,(char*)sendbuf,0,(char*)&rcvbuf,&rcvlen,(long)0);if(ret=-1)(void)fprintf(stderr,CantsendrequesttoserviceTOUPPERn);(void)fprintf(stderr,Tperrno=%dn,tperrno);tpfree(sendbuf);tpfree(rcvbuf);tpterm();exit(1);(void)fprintf(stdo
53、ut,Returnedstringis:%sn,rcvbuf);/*FreeBuffers&DetachfromSystem/T*/tpfree(sendbuf);tpfree(rcvbuf);tpterm();return(0);程序说明:语句说明atmi.h调用ATMI函数必须的头文件tpinit()客户程序调用它来加入应用程序tpalloc()用于分配类型缓冲区的ATMI函数,STRING是五种BEATuxedo缓冲区数据典型之一,sendlen+1表不缓冲区类型,因为以空字符结尾,所以长度加1tpcall()把消息缓冲区送到TOUPPERI务,它提供了响应缓冲区的地址,它直等待着返回消
54、息tpterm()用于退出应用程序的ATMI函数,tpfree()释放分配的缓冲区,是和tpalloc()相对应的函数(3)程序编译:$buildclient-osimpcl-fsimpcl.c-o指明输出目标文件名,-f指出源文件名2.1.3在应用程序中使用消息范例BEATuxed源统提供多种通信模式.同步Request/Response模式;.异步Request/Response模式;.嵌套调用;.调用转发;.会话通信;主动消息通告;基于事件的通信;基于队列的通信;使用事务。同步通讯要进行同步调用,BeaTuxedo客户程序使用ATMI函数tpcall()把一个请求送到服务程序,它不是通过名字来调用服务程序的,而是通过特定的服务来完成。客户程序要等到服务程序作出响应后才处理后面的工作,也就是说,它在收到服务程序的响应之前一直处于阻塞状态。函数tpcall()有6个参数。如下:交易名请求数据缓冲请求数据缓冲的长度(仅缓冲类型为CARRY时需要)返回数据缓冲的地址。缓冲大小可以根据收到数据而改变。返回数据缓冲大小的地址标志量标志量可以是以下值:TPN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度版权购买合同:影视作品版权购买与授权
- 2024年度成建制劳务分包商的违约责任合同
- 2024年度不锈钢栏杆工程承包合同
- 2024年度农业企业社会责任履行与评估合同
- 2024年度智能制造生产线购销合同
- 比基尼泳装市场发展现状调查及供需格局分析预测报告
- 2024年度城中村改造拆除合同
- 2024年度企业并购重组顾问合同(标的:亿元并购咨询服务)
- 2024年度人力资源服务合同标的为人才招聘外包
- 2024年度版权许可合同:音乐作品《梦回2024》的线上线下播放权许可
- 人力表单46 - 全体职工大会会议纪要(裁员)
- 2024黑龙江省交通投资集团招聘38人高频500题难、易错点模拟试题附带答案详解
- 2024年反洗钱知识竞赛参考题库400题(含答案)
- GB/T 44413-2024城市轨道交通分类
- GB 19041-2024光气及光气化产品生产安全规范
- 我与班集体共成长主题班会
- 人教版九年级数学下册《反比例函数(第1课时)》示范教学课件
- 注册资本金代缴协议书范本
- 机加车间工作思路
- 国家自然科学基金项目申报建议
- 三中全会专题研讨交流发言
评论
0/150
提交评论