还剩86页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
BEATUXEDO简易培训教程编写、整理:文栈良2003-1-21第一章认识tuxedo
1.1TUXEDO是什么?BEATUXEDO是在企业、Internet这样的分布式运算环境中__和管理三层结构的客户/服务器型关键任务应用系统的强有力工具它具备分布式事务处理和应用通信功能,并提供完善的各种服务来建立、运行和管理关键任务应用系统__人员能够用它建立跨多个硬件平台、数据库和操作系统的可互操作的应用系统BEATUXEDO是企业、Internet分布式应用中的基础主干平台它提供了一个开放的环境,支持各种各样的客户、数据库、网络、遗留系统和通讯方式BEATUXEDO使分布式关键任务应用系统具有大型主机的性能,从而使这些应用系统能够应付数以千计的用户,大交易吞吐量,多并行数据库存取和大量数据,同时保持较短的反应时间,较高数据完整性和安全性,并且确保全年365天,每周7天,每天24小时的系统可用性同时,BEATUXEDO还能让__人员和系统管理人员享用分布式运算环境提供的好处,如技术成本的低增长率,灵活性提高,快速应用__和__以及业务信息存取得以改善
1.2BEATUXEDO的组件软件模型关键业务应用通常是面向事务的,要求具有准确的数据完整性、较好的性能和管理需求这些需求要求对应用的__、调度和操作给出一个结构化的方案由像BEATUXEDO这样的中间件支持的组件软件模型为分布式环境处理关键性业务应用提供了一个结构化的解决方案BEATUXEDO和基于组件的应用设计从异构的计算资源中创建了一个虚拟主机在分布式应用系统级提供可管理的相互关联的资源许多组织在进行了一段时间的分布式应用工作后,现在已经认识到组件软件模型是他们的必然选择分布式应用的直接动力是主机应用和集中式中规模的应用系统基础上又逐渐配备有大量的台式系统和服务器系统,这些分布式系统在标准网络传送协议的支持下,呈松散耦合的态势,事实上它们构成了网络计算资源的基础在开始的时候,分布式系统主要服务于把集中式系统的前台应用迁移到网络环境----主要用台式处理器和文件服务器实现文档处理和____通讯应用系统接着,两层的客户/服务器数据库应用在部门级被采用,这类应用把交互式文件共享进化到并发数据元素访问,在数据级支持更细粒度的管理虽然这些客户/服务器应用具体化了真正分布式应用处理的概念,它们仍留有为某一目标定制的特性,规模和管理能力都有限更重要的,这些应用只停留在较细粒度的数据访问上,使得整个应用系统宛如磐石,不能有效地利用网络资源面对更大规模的关键业务应用,如要进行有效的分布式处理,就要求从客户/数据库方案转变到三层客户/应用系统/数据服务器结构以后者为核心的组件软件模型是客户/服务器计算的拓展,它支持应用分区,能有效地__和调度应用业务逻辑,管理分布式应用的可靠执行BEATUXEDO采用三层结构的组件软件模型图1表示BEATUXEDO的组件软件模型的概要该结构分为三层图1BEATUXEDO的组件软件模型概要
1.3TUXEDO的特点BEATUXEDO的三层结构组件软件模型将用户界面的表示部分和业务逻辑部分按客户组件服务器组件分开,使__人员能够按组件的思想专注入于业务逻辑的__,用户界面部分可用流行的前端__工具来快速完成而客户和服务器之间、服务器和服务器之间的通讯,异构平台之间的数据变换,以及服务器和数据库之间的集成和事务控制都由BEATUXEDO来完成当数据库或服务器端的业务逻辑改变时,客户端则不一定要改变;反之当客户改变或增加新的客户界面时,服务器端则不一定要改变,大大增加了应用系统的各部分的可复用性BEATUXEDO提供的简洁API使用户程序能够物理地点透明地在客户和服务器之间、服务器和服务器之间进行各种方式的通讯,极大地减轻__人员的负担BEATUXEDO提供的通讯方式有同步RPC调用,异步RPC调用,对话通信方式,广播通讯方式,异步存储转发队列通讯,__通讯方式等在BEATUXEDO的三层结构组件软件模型下__的应用程序以服务器组件和客户组件为__、升级的单位,当一个组件需要更新时,管理人员甚至能够在运行系统不停机的情况下完成系统的升级,这在客户端为数以千计的关键任务应用中尤为重要BEATUXEDO系统提供从一个中心点对整个分布式系统进行全局监控及管理的能力,___根据一个整体系统视图(而不仅是单个节点或单元)提供的信息,可以作出决定和采取动作BEATUXEDO不但提供了一些管理命令,而且提供了一个集成的图形界面管理工具,集中地监视和管理应用系统的运行,并且可动态地修改系统配置通过J__a的applets,还可利用Internet的浏览器比如Netscape或Microsoft的Explorer来运行该图形界面管理工具此外,BEATUXEDO还提供了描述系统中各对象的管理信息数据库(MIBS)和存取管理这些管理信息数据库的管理API,用户可利用这些管理API,编写自己特有的管理工具一方面,BEATUXEDO能够使多个客户连接到一个服务器进程,由这个服务器进程存取数据库,为客户的请求服务这样,数据库为处理连接所需的资源大大减少另一方面,客户和服务器之间,服务器和服务器之间的通讯中,网络上流动的只有相对较少的客户或服务器的请求和服务器处理的结果,而不再是两层结构中客户和DBMS之间的大量SQL请求和应答此外,利用BEATUXEDO特有的一些机制也能极大提高应用系统的性能比如利用异步RPC机制实现扇出并行,利用转发机制实现流水线并行,利用多服务器单队列实现多处理并行等所有这些因素使BEATUXEDO的应用系统具有极高的性能世界上大部分硬件服务器的TPC性能指标都是在BEATUXEDO上完成的BEATUXEDO随时知道它控制下的资源的情况,并利用这些信息为应用提供最大可用性分布式系统使资源故障的影响复杂化在一个分布式系统中,多个节点代表更多的潜在故障点的可能,但也可以代表在资源恢复开始时在其他节点上重新分配工作的更大潜力BEATUXEDO在这种分布式系统故障恢复上具有优势TUXEDO将重启应用进程并且能在硬件故障情况下在其它结点上重新运行进程BEATUXEDO设计了数据资源的绝对完整性目前出现的客户/服务器应用中,重要数据资源很可能是广泛的,而且受异构系统的控制应用可以设计成用严格的保证数据一致性的两阶段提交,或者用更多的缓冲存储和转发技术来管理异构的(或者同构的)数据库的更新在各种情况下,BEATUXEDO能够确保异构的(或者同构的)数据库以及它资源管理器之间的完整性BEATUXEDO通过结构化用户界面支持应用服务的验证、授权和存取控制,允许用户加入自己的验证服务模块BEATUXEDO还提供信息加密服务,允许对网络上传输的信息按RSA的RC4算法加密目前美国本土内可按128位,本土外可按40位加密BEATUXEDO是一个非常开放的平台,支持三十多种服务器平台,包括大多数的UNIX服务器,WindowsNT服务器IBM的S/370S/390加上AS/400和Tandem公司的NonStop系统它的客户支持几乎所有的工作站,包括UNIXMS-DOSWindows
3.1/95WindowsNTOS/2__cintosh等BEATUXEDO支持X/Open组织的分布式事务处理模型DTP,事务定界标准TX应用程序事务处理接口标准XATMI以及和资源管理器(像数据库系统)的接口标准XA,并且还支持事务处理器之间的互操作标准OSI-TPBEATUXEDO的客户端通过DLL可以和VisualC++、VisualBasic、PowerBuilder、SQLWindows、Delphi、Develop/2000以及其他4GL和CASE工具互连此外,BEATUXEDO还得到其他第三方__管理工具厂商的支持简单地说,软件可伸缩性就是可以很容易地增加被支持的用户数和应用的全局吞吐量一个可伸缩的软件系统是利用网络分布系统优势的关键BEATUXEDO提供的就是这样一个系统,它可以利用在一个网络上所能找到的所有的异构的资源以获得最大的效益BEATUXEDO提供这一点,而且提供许多可伸缩性选项垂直方向的可伸缩性代表的含义与通常相同,即将系统转变(升级)为一个更大,更有力的相同或不同结构的平台水平方向的可伸缩性多是在分布式系统结构中,它以增加适当规模的附加系统来增强网络应用所增加的附加系统与原有系统可能是同构的,也可是异构的(那就是不同的处理机或操作系统)BEATUXEDO支持二维的可伸缩性二维可伸缩性可在结构上的任意位置添加异质资源,而不改变已存在的应用的结构允许对一个复杂的混合结构的支持,为联机网络系统提供了广泛的规模选择范围任何与数据表示有关的(如不同的处理器表示)可以由BEATUXEDO透明地解决BEATUXEDO还可根据系统负荷的变化动态地增加或减少应用服务器的个数除了像C,C++和COBOL这样的第三代语言编程环境,BEATUXEDO系统享受最广泛的第三方工具的支持,下面是__BEATUXEDO应用目前可用工具的一个列表表1TUXEDO允许的__工具选择公司__工具客户端服务器端AllyAlly4GL*InformixIFORMIX
5.0XAInformixTPToolkit*ITITPTools*OracleORACLE
7.0XADevelop/2000GuptaSQLWindowsNovellVisualAppbuilderNovellUSLWKSHUnifyAc__ll4GL*JyaccJAM/JPL*TIIEFCASE*__gna__gnaX*PowersoftPowerBuilder*DelphiDelphiMicrosoftVisualBasicVisualC++此外BEATUXEDO的关联产品BEACONNECT允许BEATUXEDO和IBM的CICS、IMS、Unisys的System2000进行互操作,BEAJolt支持从Internet浏览器上请求BEATUXEDO的服务BEABuilder和BEA__nager将BEATUXEDO应用的__与管理更为简化
1.4BEATUXEDO的组成与功能BEATUXEDO应用程序既可服务于带有少量客户和服务的单个服务器系统,又可服务于由成千客户、成百服务器和众多服务器组件和服务构成的大规模的分布式环境一个这样的应用程序是以业务逻辑服务、由这些逻辑服务组织成的高层服务器组件和在服务器结点环境中的组件分布为特征的支持这种虚拟主机环境的BEATUXEDO元素包括配置信息库和实现运行时应用管理的核心子系统1.配置信息库BEATUXEDO应用程序由配置文件指定,这些配置文件被转换成若干紧耦合的运行时共享信息库这些共享库(在BEATUXEDO中称公告牌,BulletinBoard)驻留在每个参与应用的服务器结点上BEATUXEDO子系统访问和操作这些库
(1)应用程序配置一个BEATUXEDO应用程序包括在一个高度分布的环境中运行该应用所需的资源开发人员编写服务的代码,应用___通过构造定义操作参数和资源分配的配置文件创建应用程序配置信息驻留在一个可编程访问的管理信息库(MIB)中MIB最少包括下列配置信息系统范围的资源,包括有关全局应用属性(如安全性级别)、是否进行负载平衡、启动一个应用系统所需的资源定义和故障恢复时所需的资源定义参与应用的每个服务器机器的定义和驻留在这些机器上的BEATUXEDO文件的规格说明单个服务器可与其他组成员共享的资源组,如事务管理;组也定义了服务器和所操作的资源管理器之间的映射服务应用程序所需的映射成进程的服务器,在这些服务器进程中实现了应用业务逻辑一个BEATUXEDO配置允许一个管理服务器或者从分布在一台/多台机器的一个/多个组中配置多个服务器应用服务器进程定义的服务;服务级的属性包括负载因子、服务处理时间的相对量、该服务相对于服务器中提供的其他服务的优先级头三个配置属性定义了应用的处理元素(如处理结点)、全局属性和某一主资源的特殊指定组、服务器和服务集中在BEATUXEDO软件组件模型的分布式应用资源上BEATUXEDO应用程序定义了提供所需服务的服务器组件分组;可配置的服务器实例数量能在多个机器上调整;而且,BEATUXEDO能管理广播的单个服务和它们的相对优先级
(2)公告牌BEATUXEDO应用配置文件被映射到一个运行时数据结构:公告牌(BB)BB作为一个从配置文件中派生出来的共享信息库BB驻留在每个参与到由配置文件指定的应用程序的BEATUXEDO的服务器结点上BB作为分布式应用的名字服务数据库它作为应用统计数据的运行时仓库,提供分布式环境下的应用对象的位置信息BB由BEATUXEDO核心例程(对应用__者透明)访问,由核心例程读/修改BB库这个信息库提供BEATUXEDO完成动态客户/服务器映射所需的信息,同时也提供完成诸如负载平衡、安全性和事务协调等功能的信息2.事务管理器事务管理器是BEATUXEDO体系结构的中心,它是每个BEATUXEDO服务器的核心,提供重要的分布式应用服务、命名、消息路由、负载平衡、配置管理、事务管理和安全性它也包含BB结构,使用维护和访问BB信息的服务换句话说,BB内包含有可靠执行和管理大规模的基于组件的应用程序所需的所有信息,它将对事务管理器进程起作用事务管理器的基本操作见下图的图示事实上,事务管理器是负责客户/服务器绑定和支持BEATUXEDO虚拟主机属性等特色的子系统图4来自网上的客户请的客户代理进程,服务器通过注册参加到该应用中作为客户方通讯的一部分,事务管理器访问BB,然后选择服务器,接着,服务器消息队列的地址被返回,客户方的请求被马上传送到合适的队列等待服务为它进行处理1)名字服务/位置透明性BB作为BEATUXEDO应用程序的名字服务器,__到每个参与的结点上为了便于快速访问,名字服务器作为在共享内存中的一个结构存在事务管理器使用BB名字信息、配置信息和环境统计信息自动把服务请求平衡到可用的服务器上,并且根据数据内容为客户请求选择路由,为服务请求选择优先级编程员把应用程序编成对逻辑入口项(称有名服务)的函数调用事务管理器把这些逻辑请求映射到服务器结点/服务器进程环境内指定的服务实例2)数据依赖型路由数据依赖型路由是根据数据缓冲区中一个指定域的值,把一个服务请求映射到一个指定的服务器组的机制因为BEATUXEDO服务器组映射成指定的资源管理器/数据库实例,所以请求被导向到一个指定服务/资源管理器的组合例如,一个银行的数据库可把存储在不同数据库实例中的不同范围的帐号进行水平分区用户可用事务管理器进行路由选择,而不用把特定分区信息编码成访问帐号的应用代码事实上,事务管理器查看指定的数据值,参考存储在BB中的路由信息,然后把请求发送到能在正确数据分区上操作的服务如果用户需要改变数据库分区(把一个分区移到一个新服务器上,或在已有分区实例上改变帐号分布),那么,他只需改变事务管理器的路由信息,应用程序的代码不受影响图5数据依赖型路由帐号操作的请求与数据分区是__的,事务管理器访问BB路由表信息,把请求映射到访问相应分区的服务器组,然后返回该组指定服务的绑定3)负载平衡为了确保应用流量最大,事务管理器自动地在系统中完成负载平衡和调度通过使用每个服务的负载因子,事务管理器把请求发送给能最快处理该请求的服务器事务管理器通过为当前排队的请求总计负载因子来决定给定服务器上的负载下图给出了事物管理器负载平衡能力如何帮助优化应用流量的一个例子图6负载平衡服务A,B,C由不同的服务器提供,每个服务器有一个基于当前排队请求的负载值事务管理器决定哪一个服务器提供服务,哪一个服务是负载最小事务管理器将在一个给定结点内或在提供服务的若干结点上,进行负载平衡4)优先权请求优先权是事务管理器提供的另一个核心能力某一服务请求经常需要比其他服务更高的优先权例如,__公司取消订座的优先级要比订座的优先级高对大多数__公司来说,要尽可能地再次买出被取消的座位优先权在服务队列级有用,参见下图的图示图7优先权右例中,服务器1提供服务A,B,CA,B服务的优先级是50,C的优先级是70在上一个请求完成时,服务器在队列中选择下一个请求下一个请求是由优先级决定的,而不是根据请求在队列中的位置为了防止低优先级请求总是得不到服务,每隔十个请求,就按FIFO次序进行一次请求选择5)稳固的运行环境事务管理器包括许多支持应用可用性的特征,如进程可用性检查、超时检查、自动服务器重启和恢复过程、用户可定义的恢复过程事务管理器不仅仅控制应用程序的活动流而且能确保其流畅有效的操作6)安全性事务管理器通过一个结构化的安全性接口提供应用服务的验证、授权和访问控制该接口概括了Kerberos安全模型,允许Kerberos或类似的最终用户验证机制与应用集成用户能用访问控制列表保护服务、队列或__免遭未授权的访问7)分布式事务处理分布式事务处理(DTP)能力能保证跨几个场地访问的数据和由不同数据库产品管理的数据的完整性事务管理器协调分布式事务使之完成网络环境下针对异构数据库的多场地修改事务管理器用全局事务跟踪事务参与者,管理两阶段提交协议这样就可确保每个场地都能正确处理事务的提交和回退事务管理器还在出现场地故障、网络故障或全局资源死锁时协调全局事务的恢复事务管理器使用开放小组的X/OpenXA接口,进行不同资源管理器之间的通讯该接口已被X/Open接纳为分布式事务控制的标准接口因为高性能和事务流量对OLTP系统产品是关键因素,所以事务管理器DTP软件使用了最小化磁盘写的算法在其他属性中,事务管理器DTP__了一些众所周知的技术如协调者迁移、只读和一阶段提交优化事务管理器由几个关键子系统支持,这些子系统扩展了BEATUXEDO客户/服务器功能和与异构应用系统的互操作性下面的几个段落将描述这些关键子系统◎管理BEATUXEDO对分布式应用管理的关键性问题给出了一个结构化的解决方案BEATUXEDO的管理接口包括一个综合性的命令行/脚本接口,一个编程接口和一个管理信息库(MIB),它们把BEATUXEDO实现成一个更大管理环境中的受控应用程序一个易用的基于GUI的管理应用程序可利用这些管理接口,在BEATUXEDO环境上提供了高层控制BEATUXEDO资源,从高层的域属性向下贯穿一个单服务器进程的特性,支持图形化表示和拖放功能◎集中式的应用定义事务管理器使得应用___可在一个文件中定义组成BEATUXEDO应用程序的硬件、软件和网络资源应用设计者能叙述在何处运行服务器和服务以及在处理器出故障时服务应该迁移到何处他们可把各种不同的特性,包括调度信息、进程恢复标准和超时时间段等,赋给应用服务器事务管理器为动态启动、停止或管理一个分布式应用程序提供__配置管理和工具◎动态重配置用户可动态启动或停止服务;用户可选择可用的服务用户可在一个配置中增加新的机器、组、服务器和服务另外,事务管理器可用不同的参数如超时故障等,使得一个无法使用的处理器上的服务器和服务在不中断运行程序的条件下移向另一个处理器上第二章__与应用
2.1__BEATuxedo应用程序在__BEATuxedo应用程序之前,你需要先搞清楚一系列和设计__相关的概念,如识别什么是客户机,有哪些方法可以从外界收集数据并提交服务器进行业务处理;识别什么是服务器,哪些程序包容了可以处理客户机输入的商业逻辑;识别什么是类型缓冲区,客户程序在向其这程序发送数据前如何分配内存区域;什么是BEATuxedo的消息范例等最后你还要弄明白客户程序是通过调用ATMI库来访问BEATuxedo系统的创建BEATuxedo的客户程序与在C和C++编程语言中创建其它应用程序一样,BEATuxedo提供了一个其于C语言的编程接口,即应用程序事务监控接口ATMI,这套接口很容易使用,以便用于__客户程序和服务程序除了C语言接口外,BEATuxedo还提供了COBOL接口尽管__者使用ATMI编程接口来创建BEATuxedo客户程序和服务程序,但服务程序不全部由__者来编写,__者只需写一些称为服务的商业函数,封装业务逻辑,然后和BEATuxedo的一些二进制程序联编成一个可执行的服务程序BEATuxedo服务程序启动后,它总是保持运行状态,只到接收到一个shutdown消息为止一个典型的BEATuxedo服务程序在shutdown或reboot之前都在执行着数千个服务为了更好的了解服务端的所有任务以编写服务端应用,有必要重新认识服务端在C/S模式中扮演的角色首先,服务是系统资源的__点例如,一个数据库服务__实际数据库并对其进行查询和修改为有效进行,应建立一个数据库连接其次,服务必须发布系统内可以访问的交易,保证客户端可以知道把请求发往何处以上两步结束后,服务进入一个循环——接收请求、处理请求并返回结果接收请求包括进入消息队列,得到交易请求处理请求包括检查请求数据缓冲,运行商业规则和逻辑,可能还包括访问数据库和返回结果数据缓冲当系统___需要关闭系统,可以通过系统管理工具将关闭系统的消息发给服务服务完成所有交易,取消交易发布,关闭资源连接然后结束1在BEATuxedo服务程序启动时,执行tpsvrinit函数,可以在里面打开一些如数据库之类的资源供以后使用;2在BEATuxedo服务程序关闭时,执行tpsvrdown函数,可以在里面关闭tpsvrinit中打开的资料;3BEATuxedo服务程序以服务的形式来响应客户程序的请求,客户程序不是通过名字来调用服务程序的,而是调用服务,客户程序不知道处理它请求的服务程序的位置;4服务程序调用tpreturn函数来结束服务请求,并返回一个缓冲区,必要时,将它传给客户程序;注如果是在tpsvrinit()中连接数据库,为了保证数据库的正常连接,在执行服务的时候,最好能够判断数据库是否断开连接,如果断开连接,则重新连接数据库这样可以从根本上保证系统能够持续稳定的__运行,基本上不需要人工干预也就不再会出现“数据库重启了,中间件必须重启”的情况在一般的C程序中,函数通过调用return将控制返回,函数调用堆栈清空,控制返回调用点TUXEDO系统的交易函数必须结束于将回应返回给客户端或前转到另一交易函数tpreturn用来结束交易将回应数据缓冲发给客户端函数tpforward将交易前转给另一个交易,由其负责回应原来的客户端下图是tpreturn的示意图tpreturn设计来代替常规的return,结束绝大多数函数它将回应数据缓冲返回请求的客户端,控制权返回给服务程序的标准__in(由TUXEDO提供)tpreturn使用下列参数:第一个值表示交易是否成功,有3种可能TPSUC__SS交易完全成功,如果是一个会话,TPEV_SVCSUCC被生成TPFAIL交易失败,tperrno将被设成TPESVCFAIL如果是事务模式,事务被标志成abort-only,如果是会话,TPEV_SVCFAIL被生成TPEXIT与TPFAIL类似,但服务会中断,如果服务设成可以重启动,则可以由TUXEDO系统将其重启动第二个值是应用定义返回码,此处使交易可以发送一个整形代码到客户端,给出交易处理结果的详细信息该值与/T系统无关,通过全程变量tpurcode送到客户端程序第三个值是回应数据缓冲的的指针第四个值是回应数据缓冲的长度(仅缓冲类型为CARRY时需要)第五个值是标志位,通常不用tpsvrinit和tpsvrdone分别用来启动和关闭服务如果应用不提供这两个函数,可以使用替代函数tpsvrinit用tpopen缺省打开RM连接tpsvrdone用tpclose关闭RM连接tpsrvinit象标准C语言的__in()一样使用参数ar__argv服务的命令行参数可以传入该函数,被getopt解析该部分的用法参见应用配置部分本函数出错时返回-1,成功返回0tpsvrdone无参数,无返回值当C语言的交易程序编码完后,需要连接正确的库并编译使用buildserver可以使该过程容易一点该命令引用了C语言编译器并按正确的次序连接TUXEDO系统的库连接TUXEDO生成的__in()等buildserver还用-s参数产生合适的交易名/函数名映射表要使用buildserver,必须先正确设定环境变量TUXDIR,PATH,LD_LIBRARY_PATH命令语法如下buildserver[-v][–oexecutable][-sservi__2servi__3:func][-fsour__/o__ect][-lo__ect/libraryfile]例buildserver–sDEPOSIT–oTLR–fTLR.o–fappinit.o参数解释如下-o生成的可执行文件名-f需要在连接TUXEDO库之前传给编译器的文件名如有多于一个的文件名,名字应用空格分隔并用引号引起也可以使用多个-f参数-l需要在连接TUXEDO库之前传给编译器的文件名语法同上-v编译过程显示-b指定SHM或MP模式如无此项,两种模式都包括;使用此项可以使生成的可执行文件小一点-r连接此处指出的RM库该RM的名字必须含在$TUXDIR/udatao__/RM文件中对于服务程序的调试确实是一件非常令人头痛的事.在Unix环境下目前还找不到很好的方法一般经常使用的方法是”printUserlog”跟踪法但是这种方法太累了.因此有人想出了在windows环境下跟踪调试发现没有任何错误后再放到UNIX环境进行编译并正式使用.目前我们公司采用的就是这种调试方法在windows环境下C++Builder编写一个tuxedo模拟测试服务程序使其能正确的识别客户端调用的服务并正确的调用相应的服务.1源代码文件名:simpserv.c#includestdio.h#includectype.h#includeatmi.h/*TUXEDOHeaderFile*/#includeuserlog.h/*TUXEDOHeaderFile*//*当服务器启动时,在处理请求之前,tpsvrinit被执行,这个不是必须的,对应的函数是shutdown*/#ifdefined__STDC__||defined__cplusplustpsvrinitintar__char*argv[]#elsetpsvrinitar__argvintar__;char**argv;#endif{/*当ar__argv没有被使用时,一些系统会发了警告*/ar__=ar__;argv=argv;/*userlog用于将TUXEDO消息写到日志文件中*/userlogWelcometothe______server;return0;}/*TOUPPER真正处理客户请求,它接收的参数是一个缓冲区指针*/#ifdef__cplusplusexternC#endifvoid#ifdefined__STDC__||defined__cplusplusTOUPPERTPSVCINFO*rqst#elseTOUPPERrqstTPSVCINFO*rqst;#endif{inti;fori=0;irqst-len-1;i++rqst-data[i]=toupperrqst-data[i];/*返回转换后的类型缓冲区*/tpreturnTPSUC__SS0rqst-data0L0;}2程序说明语句说明wholefile整个服务程序不提供__in函数,在build时,由BEATuxedo系统提供tpsvrinit在服务器初始化即处理请求之前被调用若没有提供该函数,BEATuxedo系统会提供一个缺省的,它向USERLOG中写一条消息,说明服务器已经被启动userlog3c是系统提供的一个写日志的方法TOUPPERsimpserv提供的唯一一个服务,它接收一个TPSVCINFO结构,它包含了要被转换成大写的字符串forloopBEATuxedo系统的循环,用于逐一转换tpreturn3程序编译:$buildserver–osimpserv–fsimpserv.c–sTOUPPER–sTOUPPER指明了在服务器启动时需要提供的服务创建BEATuxedo的客户程序与在C和C++编程语言中创建其它应用程序一样,BEATuxedo提供了一个其于C语言的编程接口,即应用程序事务监控接口ATMI,这套接口很容易使用,以便用于__客户程序和服务程序除了C语言接口外,BEATuxedo还提供了COBOL接口客户端在C/S模式中的作用为了更好的了解客户端的所有任务以编写客户端应用,有必要重新认识客户端在C/S模式中扮演的角色首先,客户端是用户界面意思是当用户在系统上用程序进行一次操作的整个过程就是一个客户端过程前端过程是对客户端的另一个描述客户端的首要任务就是获得执行操作应该得到的数据一旦客户端得到了应有的信息,应该将数据按服务能够识别并适合传输的格式打包然后,向服务端发送请求并等待回应收到回应数据后,将其按一定格式返回给终端用户客户端__过程客户端程序的设计和实现可以被分成2部分考虑用户处理过程和TUXEDO功能部分下文的客户端程序只描述了TUXEDO功能部分利用TUXEDO的ATMIAPI调用可以做到——基本的TUXEDO调试技巧(tperrnotpstrerroruserlog)——TUXEDO进程管理tpinittpterm——基本数据缓冲管理tpalloctprealloctpfree——基本通讯tpcalltpacalltpgetrply客户程序一般执行如下任务
(1)用tpchkauth决定加入一个应用程序所需的安全级别可能出现的响应包括没有安全级别,应用程序口令,应用程序授权,访问控制列表,连接级加密,公钥加密,审计这些可以根据你的需求进行选择;在实际的应用中很多的软件__商通常对这一步都不做处理
(2)调用tpinit来连接到一个BEATuxedo应用程序,所需的安全信息作为tpinit的参数传给了应用程序;
(3)执行服务请求;
(4)调用tpterm来断开和BEATuxedo应用程序的连接调试和错误处理当调用ATMI出错时,返回值为-1,全程变量tperrno被设值,该变量提供系统定义的出错原因函数tpstrerror以此变量为参数,返回错误的字符说明信息完整的错误号和文本错误信息存在于文件$TUXDIR/include/atmi.h函数userlog重定向输出文件为ULOG.mmddyy使用方法同printf该函数每次输出都写硬盘,这样在系统失败时也能保留调试信息代码范例ret=tpterm;ifret==-1{printf“Errorinexitingapplication\n”;usrlog“ATMIerrorlogged%d%s”tperrnotpstrerrortperrno;}进程管理tuxedo接到一个tpinit的请求后就启动一个服务进程接收到tpterm后就会中止该服务进程.在实际应用中tpinit和tpterm必须成对出现而且要相互对应.如果只在程序中调用了tpinit而没有调用tpterm则tuxedo系统会认为该进程一直处于活动状态这样的话可能会因为服务进程达到系统允许的上限而导致系统的崩溃.inttpinitTPINIT*tpinfo客户端通过调用tpinit与应用连接,进行交互,有以下__发生调用安全接口检查客户端是否需要认证连接BB,使进一步的ATMI函数得到信息使BBL了解BB中已经存在请求建立客户端消息队列使服务可以发回返回信息,系统可以送出广播通知等.错误时返回-1,可能由以下原因引起TPEINVAL参数错误TPENOENTBB无空间TPEPERM无连接权限TPEPROTO协议错误–被服务调用inttpterm客户端调用tpterm切断与应用的连接,结束了客户端的TUXEDO进程,该过程发生以下__BB入口删除,使BBL知道客户端已经离开客户端离开BB,客户端的__量被移除客户端消息队列被移除错误时返回-1,可能由以下原因引起TPEPROTO协议错误–被服务调用TPESYSTEM/T系统下错误TPEOS操作系统错根据tpinit和tpterm在客户程序中不同位置的调用可以把tuxedo的进程连接分为长连接和短连接两种.长连接是指在程序开始的时候调用tpinit建立服务连接在程序中止的时候调用tpterm中止服务连接.这样做的好处是当用户频繁的进行业务操作时不用频繁的进行进程连接大大的缩短了操作时间提高了程序的执行效率.但是这也一个缺点那就是只有用户不从客户程序中退出来不管做不做业务都会在系统中占用一个进程连接从而会影响其他用户的连接.短连接指的是用户每做一次业务都需要调用tpinit业务完成后调用tpterm.这样做的好处是1000个终端用户和_____个终端用户同时操作对系统来说基本上是一个概念.但是这样做会浪费大量的时间在进程连接上从而影响了业务的处理效率.为了协调长连接和短连接之间的矛盾我曾经给出了一个很好的解决方案那就是在长连接的基础上进行优化处理当客户程序5分钟这个值可以自定义没有向服务程序发送任何服务请求则调用tpterm断开服务连接.仅仅这样还是不行的我们还必须在客户程序向服务程序发送业务请求之前首先判断进程连接是否断开如果断开则重新连接.数据缓冲管理在BeaTuxedo系统中的所有通信过程都是通过类型缓冲区来完成的,BeaTuxedo系统提供了大量的类型缓冲区来供__者使用所有类型缓冲区都必须通过BeaTuxedo的tpalloctprealloctpfree这些ATMI来分配回收,它们都有特定的头部以下是TUXEDO基本的数据缓冲类型STRING以空值结尾的单域字符数据CARRAY有长度定义的单域二进制数据,不进行编、解码VIEW类C结构或COBOL记录的多域组织FML无固定结构的自定义缓冲tpalloctprealloc在出错时返回空值,可能由以下原因引起TPEOS操作系统TPEINVAL非法或不正确的类型TPESYSTEMTUXEDO之下的错误统一定义的类型缓冲区可以使它们在跨越不同网络、不同协议、不同CPU构架以及不同操作系统之间得到统一的处理,这就使得__者在分布式计算环境中有效地避开了异构网络和异构计算机系统带来的差异,把精力集中在商业逻辑的__上1源代码文件名:simpcl.c#includestdio.h#includeatmi.h/*TUXEDO的头文件*/#ifdefined__STDC__||defined__cplusplus__inintar__char*argv[]#else__inar__argvintar__;char*argv[];#endif{char*sendbuf*rcvbuf;longsendlenrcvlen;intret;ifar__!=2{voidfprintfstderrUsage:simpclstring\n;exit1;}/*作为一个客户过程连接到System/T*/iftpinitTPINIT*NULL==-1{voidfprintfstderrTpinitfailed\n;exit1;}sendlen=strlenargv
[1];/*分配一个供请求响应使用的STRING缓冲区*/ifsendbuf=char*tpallocSTRINGNULLsendlen+1==NULL{voidfprintfstderrErrorallocatingsendbuffer\n;tpterm;exit1;}ifrcvbuf=char*tpallocSTRINGNULLsendlen+1==NULL{voidfprintfstderrErrorallocatingre__ivebuffer\n;tpfreesendbuf;tpterm;exit1;}voidstrcpysendbufargv
[1];/*Requesttheservi__TOUPPERwaitingforareply*/ret=tpcallTOUPPERchar*sendbuf0char**rcvbufrcvlenlong0;ifret==-1{voidfprintfstderrCantsendrequesttoservi__TOUPPER\n;voidfprintfstderrTperrno=%d\ntperrno;tpfreesendbuf;tpfreercvbuf;tpterm;exit1;}voidfprintfstdoutReturnedstringis:%s\nrcvbuf;/*FreeBuffersDetachfromSystem/T*/tpfreesendbuf;tpfreercvbuf;tpterm;return0;}2程序说明:语句说明atmi.h调用ATMI函数必须的头文件tpinit客户程序调用它来加入应用程序tpalloc用于分配类型缓冲区的ATMI函数,STRING是五种BEATuxedo缓冲区数据类型之一,sendlen+1表示缓冲区类型,因为以空字符结尾,所以长度加1tpcall把消息缓冲区送到TOUPPER服务,它提供了响应缓冲区的地址,它一直等待着返回消息tpterm用于退出应用程序的ATMI函数,tpfree释放分配的缓冲区,是和tpalloc相对应的函数3程序编译:$buildclient-osimpcl-fsimpcl.c-o指明输出目标文件名,-f指出源文件名BEATuxedo系统提供多种通信模式1.同步Request/Response模式;2.异步Request/Response模式;3.嵌套调用;4.调用转发;5.会话通信;6.主动消息通告;7.基于__的通信;8.基于队列的通信;9.使用事务.1同步通讯要进行同步调用,BeaTuxedo客户程序使用ATMI函数tpcall把一个请求送到服务程序,它不是通过名字来调用服务程序的,而是通过特定的服务来完成客户程序要等到服务程序作出响应后才处理后面的工作,也就是说,它在收到服务程序的响应之前一直处于阻塞状态函数tpcall有6个参数如下交易名请求数据缓冲请求数据缓冲的长度(仅缓冲类型为CARRY时需要)返回数据缓冲的地址缓冲大小可以根据收到数据而改变返回数据缓冲大小的地址标志量标志量可以是以下值TPNOTRAN如有交易不调用TPNOBLOCK如有阻塞不等待TPNOTIME愿意等待直到超时TPSIGRSTRT系统中断__在TUXEDO完成后再发布出错返回-1,错误原因如下TPEINVAL参数错误TPETRAN交易相关错误TPETIME超时代码范例__in{intret;longlen=0flags=0;char*bufptr;iftpinitTPINIT*NULL==-1{exit1;}ifbuf=tpalloc“STRING”NULL801*1024==NULL{tpterm;exit2;}ret=tpcall“TOUPPER”bufptrlenbufptrlenflags;ifret==-1{userlog“Errorrequesting%d%s”tperrnotpstrerrortperrno;tpfreebufptr;exit-2;}tpfreebufptr;iftpterm==-1{userlog“tptermerror%d%s”tperrnotpstrerrortperrno;}}inttpcallchar*servi__namechar*bufptrlonglengthchar**bufptrlong*lengthlongflags要进行异步调用,客户程序必须调用两个ATMI函数tpacall3c函数,用于请求一个服务;tpgetrply3c函数,用于取得服务程序的响应客户程序在请求和响应之间要完成特定任务时,可以采用这种模式tpacall有4个参数交易名请求数据缓冲请求数据缓冲的长度(仅缓冲类型为CARRY时需要)标志量(同tpcall)返回值是一个非负描述符(句柄),用于其后的tpgetrply调用如果tpacall调用失败,句柄是-1,错误原因设置在tperrno,可能是以下值TPELIMIT过多未处理的tpacallTPETIME超时tpacall后总跟随一个tpgetrply,有4个参数变量地址,可以传入tpcall所得句柄,或另设一个返回数据缓冲的地址缓冲大小可以根据收到数据而改变返回数据缓冲大小的地址标志量标志量的值可以是如下之一TPGETANY取第一个返回值,设句柄TPNOCHANGE取发送请求的匹配的类型的信息参见tpcall中的值返回值0表示成功,-1表示失败,错误原因可能如下TPEINVAL参数错误TPEOTYPE返回数据缓冲类型错误TPETIME超时__in{iftpinitTPINIT*NULL==-1……bufptr=tpalloc“STRING”NULL100;ifbufptr==NULL……cd=tpacall“TOUPPER”bufptrlenflags;iftpgetrplycdbufptrlenflags==-1……tpfreebufptr;iftpterm==-1……}inttpacallchar*servi__char*bufptrlonglenlongflags;flag:TPNOBLOCKTPSIGRSTRTTPNOTIMETPNOTRANTPNOCHANGETPGETANYinttpgetrplyint*handlechar**bufptrlong*lenlongflags;flag:TPNOBLOCKTPSIGRSTRTTPNOTIMETPNOTRAN使用嵌套调用一个服务可以充当BEATuxedo客户程序,去调用其它BEATuxedo服务,换句话说,你请求的服务需要调用其它服务才能处理请求BEATuxedo客户程序调用了服务X,等待它的响应,服务X调用服务Y后也处于等待状态,当服务X得到响应后,再给客户程序一个响应,这种机制的特点是效率高使用调用转发在嵌套服务中,最里层嵌套服务可以直接给客户程序一个响应,没有必要按照调用栈逐级返回,这就使其它嵌套服务可以处理其它请求,当第一个服务是一个分发代理时,这种模式是非常有用的在嵌套调用中,被客户调用的服务X使用tpforward3c函数把请求传给服务Y,服务X没有tpreturn3c函数客户程序不用管请求是由谁来完成的,因此,转发调用对客户程序是透明的会话通信适合于有多个缓冲区需要以有状态的方式在BEATuxedo客户程序和服务之间传递的场合恰当地使用BEATuxedo的会话,因为参与会话的服务器在会话结束之前是不可用的要完成会话通信,你的代码需要遵循如下步骤1.客户程序使用tpconnect启动会话;2.客户程序和服务使用tpsend和tprecv函数进行数据交换,一个特殊的标记指示着当前由哪一方来控制着会话;当服务程序调用tpreturn或tpdiscon函数时,会话正常终止主动消息通告要处理服务器的消息通知,客户程序必须使用tpsetunsol函数来创建一个消息处理器,要发送主动消息,BEATuxedo客户程序或服务程序可以调用tpnotify来把消息传递给单个客户程序,也可以通过tpbroadcast函数来把消息同时广播给多个客户程序当客户程序收到主动消息后,BEATuxedo系统调用客户程序的主动消息处理器来处理在一个基于__系统中,客户程序没有必要处理所有的主动消息,然而,在一个非__系统中,客户程序必须使用tpchkunsol函数来检查主动消息当客户程序调用一个服务请求时,tpchkunsol被隐含地调用在调用tpnotify时,如果你设置了tpack标记位,你将会收到一个请求通知基于__的通信在基于__的通信中,__可以被发送到应用程序队列、LOG文件和系统命令当BEATuxedo服务或客户程序调用tppost函数时,任何一个BEATuxedo客户程序都可以使用tpsubscribe函数订阅用户自定义__;当BEATuxedo系统检测__时,客户程序也可以订阅系统定义__当一个服务器死了,.SysServer___d__就会被发布,它由BEATuxedo系统自动完成,不需要应用服务器干预为了实现了和/Q系统的接口,BEATuxedo客户程序使用两个ATMI函数,使用tpenqueue把消息放入队列空间,使用tpdequeue来把消息从队列空间中取走下面演示了点对点异步消息机制一个客户程序使用tpenqueue函数将消息传给服务,响应队列和失败队列的名字可以作为参数包含在tpenqueue调用中,由于在队列中的数据是持续的,因此,所有和排队消息相关的响应消息和失败消息都可以从相应的响应队列和失败队列中取得客户程序可以使用缺省的排队顺利,即按放放顺利排队,先进先出;也可以改变排队规则,如把一个消息放在队列开始,或放到另一个队列前面Tpenqueue调用把消息送到TMQUEUE服务器,并被放入固定存储体中进行排队,然后给客户程序发送一个通知消息队列管理器给消息分配一个标识符,使用它可以随时将消息踢出队列,也可以用于tpenqueue中,指示将新消息紧挨着标识符标识的消息在消息出队时,要出队消息的事务必须成功地提交客户程序使用tpdequeue来使消息出队下面演示了消息被转发到另一个服务器客户程序发出一个消息,要调用服务器上的X服务,X服务接收消息后,处理消息中的指令,然后把响应放入队列空间,客户程序再从队列空间中取出排队系统对于服务来说是透明的,也就是说,不论服务请求是从队列发出的,还是通过tpacall发出的,服务都能接受要使用事务,应用程序__者需要使用如下ATMI函数1.tpbegin,用于开始一个事务;2.tpcommit,开始一个二阶段提交处理;3.tpabort,产即终止事务任何放在begin,commit/abord之外的代码不包含事务中在下面的例子中,客户程序打开了一个事务,请求了两个服务,并且提交了事务因为服务请求是在事务开始和提交之间完成的,所以两个服务的行为都被了事务记录应用配置总览应用的描述信息配置在系统核心位置,用一个文件描述,通常称为ubbconfig文件,在主控机器上整个TUXEDO系统的管理任务可以在一台机器上完成,在配置中被定为主控节点在运行时,这些信息被装入一段共享内存(一个IPC资源),称为公告牌(BulletinBoard—BB);包含有配置中不同机器的信息,在这些机器上运行的服务的信息,这些服务提供的交易的信息以及其他相关信息客户端在运行时连接公告牌当客户端程序调用一个交易,将根据公告牌找到合适的服务队列所以,公告牌是——供客户端寻找适当的服务运行一个交易请求——包含应用信息机器,服务,交易,网络等——创建于ubbconfig文件TUXEDO提供一个管理进程,称为BBLBulletinBoardLiaison包含了一个公告牌的本地拷贝和本地服务器上应用的状态TUXEDO提供的另一个管理进程DBBLDistinguishedBulletinBoardLiaison,用于多服务器配置时DBBL与BBL协同,保证所有部分的公告牌内容的一致性配置文件任何TUXEDO应用系统的最基本的管理任务,是建立并维护配置文件该文件通常称为ubbconfig文件负责该工作的系统___必须很好的了解分布于各台机器上的应用服务的数据流,消息队列的构造,资源间的相互关系ubbconfig文件可视作包含应用启动信息的容器,需编译成二进制文件tuxconfig,作为启动时的参考其内信息包括系统范围信息(*RESOUR__S节)机器信息(*__CHINES节)组信息(*GROUPS节)服务信息(*SERVERS节)交易信息(*SERVI__S节)网络组信息(*NETGROUPS节)网络信息(*NETWORK节)路由原则信息(*ROUTING节)当完成了ubbconfig文件后,用tmloadcf命令生成tuxconfig另一种从ubbconfig生成tuxconfig的方法是使用图形管理界面GAI—GraphicalAdministrationInte_____应用的信息*RESOUR__S节包含整个应用范围的信息本节必须在配置文件第一节,不可缺少信息说明如下参数意义*RESOUR__S*RESOUR__S节IPCKEY共享内存idUIDTUXEDO___用户idGIDTUXEDO___用户idPERMTUXEDO___组用户的权限__XAC__SSERS服务端和客户端的最大进程数__XSERVERS限制可以启动服务总数__XSERVI__S限制可以发布交易总数__STER指出主控节点的逻辑名,第二个是备份节点MODEL应用构架,MP表示多机OPTIONSLAN,MIGRATE表示是一个网络应用,服务可以移植到替代处理器上SECURITY安全级别(5个)AUTHSVC客户端可以通过交易“AUTHSVC”获得认证NOTIFYDIPIN,客户端通过dip-in收到广播通知SYSTEM_AC__SSPROTECTED,NO_OVERRIDE,应用代码不得干扰共享内存LDBAL设Y则进行负载平衡__XBUF[S]TYPE数据缓冲类型及子类的最大数SCANUNIT内部时间间隔单位,单位是秒SANITYSCAN检索公告牌的内部时间间隔,单位是SCANUNITBLOCKTIME交易超时时间,单位是SCANUNITBBLQUERYDBBL查询所有BLL的时间间隔DBBLWAITDBBL等待BBL回应的超时时间__XCONV同时最大会话数注意本处未列出全部参数这些系统范围内参数可以被后序节内参数超越机器信息*__CHINES节包含应用有关的每个处理器的信息本节必须在*RESOUR__S节后列出参数意义*__CHINES__CHINES节gumby物理处理器名,可以通过”uname–n”或节点名得到TUXDIRTUXEDO系统软件__位置APPDIR应用服务位置全路径TUXCONFIGTUXEDO配置文件全路径ENVFILE环境文件全路径ULOGPFX应用日志文件全路径__XAC__SSERS本机最多处理器数,可以超越*RESOUR__S节定义__XCONV本机最大会话数,可以超越*RESOUR__S节定义范例*__CHINESgumbyLMID=SITE1TUXDIR=”/usr/tuxedo”APPDIR=”/usr/apps/at__pp”TUXCONFIG=”/usr/apps/at__pp/at__pp.tux”ENVFILE=”/usr/apps/at__pp/ENVFILE”ULOGPFX=”/usr/apps/at__pp/logs/ULOG”__XAC__SSERS=100__XCONV=15组定义*GROUP节包含服务组的定义一台机器至少要定义一个服务组如果没有定义组,管理命令t__dmin可能依然能运行每个组只要定义组名,映射组名的组号和逻辑机器名组为分布式交易系统和数据依赖路由等灵活性措施提供了支持数据依赖路由等灵活性措施提供了支持参数意义*GROUPSGROUP节BANKB1组的唯一标识符,可以是字母数字GRPNO组的唯一数字标识符LMID组所在的机器范例*GROUPSBANKB1GRPNO=200LMID=SITE1BANKB2GRPNO=220LMID=SITE1SYSGRPGRPNO=110LMID=SITE1EVTGRP1GRPNO=120LMID=SITE16服务定义ubbconfig的*SERVERS节包含的是服务进程的信息本节中每一个入口代表一个应用启动时加载的服务这些信息包含服务名,命令行参数,服务环境,重启动等等由于每个服务功能各不相同,其配置参数也因此相同或相异参数意义*SERVERSSERVER节,列出所有服务程序DEFAULT:本处列出的参数为其下列出的服务的缺省值,但可以被单列条目替代相应值RESTART如果设成Y,则服务可以重启动__XGEN在GRA__定义时间之内,服务可以重启动__XGEN次GRA__周期,单位是秒RCMD每次服务重启动,本处定义的脚本或命令被执行ENVFILE列有环境变量的文件,在交易启动前设入环境TLR一个服务名,用buildserver建立,应在APPDIR或$TUXDIR/binSRVGRP服务属于一个在*GROUPS节中定义的服务组;如果需要移植服务,也可以定义在多个组中SRVID服务组中代表服务的唯一值MIN最少在启动时启动的服务数__X运行时,最多可以起的实例数CLOPT跟随服务启动的其他参数-A服务内建交易全发布–r指定服务记录时间戳,用于以后计算交易处理时间-e定义标准错误重定向文件-o定义标准输出重定向文件--TUXEDO参数和服务特定参数的分隔符…传给tpsvrinit的参数SYSTEM_AC__SS设定后,应用错误不干扰公告牌RQADDR当设定此项后,所有本服务的实例都使用相同的请求队列这是在应用中设置MSSQ(MultipleServerSingleQueue)的方便办法,可以改善处理流量任何时候,所有MSSQ集中的实例发布相同的交易集XFER另一个服务REPLYQ设成Y,则服务又作为一个MSSQ集配置,任何其中的交易调用其他交易,就建立一个单独的回应队列范例*SERVERSDEFAULT:RESTART=Y__XGEN=5GRA__=3600RCMD=”/sur/apps/at__pp/scripts/beeper”CLOPT=”-A”ENVFILE=”/usr/apps/at__pp/envfile”TLRSRVGRP=BANKB1SRVID=10MIN=1__X=2CLOPT=”-A–r-e/usr/apps/at__pp/logs/TLR
1.err-o/usr/apps/at__pp/logs/TLR
1.out---T101–e300–ddbfile”SYSTEM_AC__SS=PROTECTEDRQADDR=”TLR_Q1”交易定义*SERVI__S节提供了应用的特殊交易的信息包括负载平衡(LOAD)和数据缓冲类型检查(BUFTYPE)如果全部都是缺省值则本节可以省略参数意义*SERVI__S交易节#注释行符号大写字母交易名,由应用服务提供BUFTYPE任何向该交易的请求,数据应该是此处定义类型GROUP交易所在服务所在的组LOAD负载因子,表示处理请求的时间,用于计算负载平衡PRIO优先级范例*SERVI__S#commentlineDEPOSITBUFTYPE=”FML”SRVGRP=BANKB1LOAD=25PRIO=70生成TUXCONFIG文件UBBCONFIG文件是一个可以编辑成需要的应用配置的文本文件但是,在实际应用上TUXEDO读取的是二进制TUXCONFIG文件用于操作命令tmloadcf可以把UBBCONFIG文件转化成TUXCONFIG文件tmloadcf命令接受以下4个参数-c计算运行应用需要的IPC资源,该信息将提供给___,用于在各机器上配置资源-n进行语法检查并不生成TUXCONFIG-b控制TUXCONFIG占用的物理页数-y无条件覆盖TUXCONFIG环境变量TUXCONFIG必须设定指向二进制TUXCONFIG文件在安全要求高的应用中,tmloadcf不能从标准输入接受,环境变量APP_PW必须包含应用__tmunloadcf将TUXCONFIG转换成ASCII格式用于检查该工具读取环境变量TUXCONFIG指向的文件输出包含所有的参数,包括TUXEDO设定的缺省值,是UBBCONFIG文件的一个超集分布式事务处理DistributedTransationPro__ssing-DTP是运行一组需要访问一定量资源的交易或工作的必须的功能要求保证交易动作必须全部成功或者全部失败,不能存在‘部分成功’的情况TUXEDO系统使用XA协议在本地与远程机器间协同事务活动分布式事务处理和XA接口分布式事务处理DistributedTransationPro__ssing-DTP有能力处理多数据库间、全局事务而不必考虑交易各方及其资源的位置服务使用嵌入式SQL接口去访问数据库在一个“全局交易”中TM和RM使用XA接口保证执行所有的资源访问动作全局事务通常最初被ATMI调用,包含一个以上的组;由客户端和服务端启动、提交或撤消TUXEDO通过全局事务标识符GlobalTransactionIdentifier-GTRID控制所有参与部分RM资源管理者(Resour____nager),本例中是一个数据库XA控制RM提交或回滚所有动作的协议TMSTUXEDO的事务管理服务(Transaction__nagementServer),能够按XA协议与RM__TMS负责协调系统范围内事务相关资源管理应用程序员可以通过ATMI事务API与TMS__GTRID全局事务标识符GlobalTransactionIdentifierTLOG事务日志,用于跟踪交易所有部分分布式事务处理的配置与普通的配置不一样最根本的区别在于分布式事务处理需要建立日志设备和数据库资源管理器.下面给出一个简单的示例并作相应的说明.分布式事务处理的UBBCONFIG范例#ANULLTMSExample*RESOUR__S__XGTT20CMTRETCOMPLETE*__CHINESlcspn1LMID=SITE1TUXDIR=”/usr/tuxedo”APPDIR=”/usr/apps/at__pp”TUXCONFIG=”/usr/apps/at__pp/at__pp.tux”ENVFILE=”/usr/apps/at__pp/ENVFILE”TLOGDEVI__=”/usr/apps/at__pp/logs/TLOG”TLOGNAME=TLOGTLOGSIZE=100*GROUPSDEFAULT:T___AME=TMSTMSCOUNT=2OPENINFO=”“CLOSEINFO=”“BANKB1LMID=SITE1GRPNO=200BANKB2LMID=SITE2GRPNO=220*SERVI__STRANSFERAUTOTRAN=YTRANTIME=30*RESOUR__S节说明__XGTT限制了一台机器上同时可以提供的GTRID数最大值是2048,最小是0,缺省100;CMTRET设成LOGGED时表示tpcommit在所有部分都成功预提交时返回;设成COMPLETE时表示tpcommit在所有部分都成功提交才返回设成COMPLETE时表示tpcommit在所有部分都成功提交才返回*__CHINES节说明TLOGDEVI__指出了该机器包含事务日志(TLOG)的文件系统TLOGNAME指出了该机器的事务日志名字TLOGSIZE指出了该机器事务日志的大小,单位是物理页数最大值是2048,最小是0,缺省100*GROUPS节说明T___AME是事务管理服务的可执行文件名TMSCOUNT是TMS启动的数量(最小2,最大10,缺省3)OPENINFO是一个用于打开RM的信息的字符串对不同的数据库其串的格式是不一样的.CLOSEINFO是一个用于关闭RM的信息的字符串AUTOTRAN设成N则该交易初始化成无事务方式,Y则反之TRANTIME事务创建的超时时间,单位为秒为支持分布式事务处理,必须创建一个格式化的设备记录事务信息在tuxedo管理平台键入t__dmin进入执行以下两个命令:crdl–b500–z/usr/apps/at__pp/logs/TLOG–O0;crlog–mSTIE
12.2Tuxedo与数据库互联在银行、__、金融等行业的大型计算机应用系统中,中间件的使用日益普及,中间件已与操作系统、数据库并列为三大基础软件BEATuxedo作为最优秀的中间件产品,在我国的很多行业中广泛使用,本文通过一个简单的例子介绍如何在TUXEDO中访问ORACLE数据库在两层的C/S结构中,客户端直接访问数据库,当采用TUXEDO中间件后,形成三层结构这时,客户端不直接访问数据库,而是改为调用中间件TUXEDO服务端上的服务,由TUXEDO服务端访问数据库,并把结果返回给客户端TUXEDO服务端可以和ORACLE在同一台服务器上,也可以在不同的机器上,如果在不同的机器上,在TUXEDO的服务端所在的机器要__一个ORACLE的客户端TUXEDO服务端与ORACLE数据库连接有两种方式
1、不通过XA接口直接互连适用于整个系统只有一个数据库的情况
2、通过XA接口互连,对整个系统有一个数据库或多个数据库都适用,建议采用.下面将着重介绍第二种连接方法.TUXEDO版本:
7.1__目录d:\tuxedo71操作系统win20001.用internal用户(缺省的口令是oracle)进入SQLPLUSC:\sqlplusinternal/oracle2.运行ORACLE的__路径下的/rdbms/admin/x__iew.sqlSQL@d:\ora81\rdbms\admin\x__iew.sql3.授权SQLgrantselectonv$xatrans$topublicwithgrantoption;SQLgrantselectonv$pending_xatrans$topublicwithgrantoption;
4.用system用户(缺省的口令是__nager)连接并授权SQLconnectsystem/__nagerSQLgrantselectanytabletopublic;1.修改TUXEDO__路径的udatao__目录下的RM文件,把以Oracle_XA:xaosw:开头的一行用#注释掉,并加入一行Oracle_XA;xaosw;d:\ora81\rdbms\xa\oraxa
8.libd:\ora81\precomp\lib\msvc\orasql
8.lib如果是在UNIX环境下,则为Oracle_XA:xaosw:-L${ORACLE_HOME}/lib-lclntsh
2.在TUXEDO用户下创建TMS文件:TMS_ORA8i,TUXEDO通过TMS_ORA8i与ORACLE数据库采用XA协议进行通讯buildtms-od:\tuxedo71\bin\TMS_ORA8i-rOracle_XA
3.配置UBBCONFIG
(1)在*__CHINES节中增加TLOGDEVI__=/home/oracle/temp/simpdb/TLOGTLOGNAME=TLOGTLOGSIZE=200
(2)改*GROUPS节的配置为scott/tiger为本数据库所采用的用户及口令,可根据需要更改*GROUPSGROUP1LMID=______GRPNO=1OPENINFO=Oracle_XA:Oracle_XA+Acc=P/scott/tiger+SesTm=600+__xCur=5+LogDir=.T___AME=TMS_ORA8iTMSCOUNT=2修改后的配置文件ubb内容如下,用tmloadcf-yubb重新生成tuxconfigIPCKEY123456DO__INIDsimpapp__STER________XAC__SSERS100__XSERVERS50__XSERVI__S100MODELSHMLDBALN*__CHINESserverLMID=______APPDIR=d:\testTUXCONFIG=d:\test\tuxconfigTUXDIR=d:\tux71TLOGDEVI__=d:\test\TLOGTLOGNAME=TLOGTLOGSIZE=100*GROUPSGROUP1LMID=______GRPNO=1OPENINFO=Oracle_XA:Oracle_XA+Acc=P/scott/tiger+SesTm=600+__xCur=5+LogDir=.T___AME=TMS_ORA8iTMSCOUNT=2*SERVERSDEFAULT:CLOPT=-AtestSRVGRP=GROUP1SRVID=1*SERVI__S
4.重命名下列文件,因为下列文件名与ORACLE带的文件名有冲突,所以要改名
(1)TUXEDO__路径include目录下的下面文件
(2)重命名TUXEDO__路径lib目录下的下面文件
5.用T__DMIN创建TLOG文件,TUXEDO用一个文件TLOG记录对数据库操作的日志用于协调分布式数据库的提交与回滚D:\t__dmincrdl-b500-zd:\test\TLOGcrlog-m______q功能:根据客户端传的EMPNO到表EMP中取ENAME的值,并把它返回给客户端#includestdio.h#includeatmi.h#includeuserlog.hEXECSQLINCLUDEsqlca;EXECSQLBEGINDECLARESECTION;longal_empno=0;charac_ename
[11]=;EXECSQLVARac_enameISSTRING11;EXECSQLENDDECLARESECTION;TESTTPSVCINFO*rqst{/*接收客户端来的数据*/al_empno=FBFR32*rqst-data;EXECSQLselectenameinto:ac_enamefromEMPwhereempno=:al_empno;ifsqlca.sqlcode!=0{tpreturnTPFAIL,0,rqst-data,0,0;}/*把取出的结果返回给客户端*/strcpyrqst-data,ac_ename;tpreturnTPSUC__SS,0,rqst-data,0,0;}功能:调用TUXEDO服务端的服务TEST,取EMPNO=1000所对应的ENAME的值,并显示出来#includestdio.h#includeatmi.h__inar__,argv{longreqlen=1024;char*reqbuf;/*与TUXEDO服务端建立连接*/iftpinitTPINIT*NULL==-1{voidfprintfstderr,Tpinitfailed\n;exit1;}/*分配发送缓冲区*/reqbuf=char*tpallocSTRING,NULL,reqlen;ifreqbuf==char*NULL{printftpallocfailed\n;tpterm;}strcpyreqbuf,1000;/*调用TUXEDO的服务TEST*/iftpcallTEST,char*reqbuf,0L,char**reqbuf,long*reqlen,00{printftpcallfailed,tperrno=%ld,tperrtext=%s\n,tperrno,tpstrerrortperrno;tpfreereqbuf;tpterm;exit1;}printfname=%s\n,reqbuf;tpfreereqbuf;tpterm;return0;}d:\testproctest.pcinclude=%TUXDIR%/included:\testbuildserver-osimpserv-fsimpserver.c-rOracle_XA-sTESTd:\testbuildclient-otestcli-ftestcli.c应能看到所有的SERVER都启动成功这时,我们的服务端程序test会自动与ORACLE数据库建立连接,并一直保持这个连接,直到TUXEDO系统或ORACLE数据库关闭所以在我们的程序test.pc中看不到与数据库连接的语句,因为现在与数据库的连接由TUXEDO自动管理如果TMS_ORA8i启动失败会在当前目录生成一个*.trc文件,记录失败的原因,同时TUXEDO的ULOG文件中也会有一些错误信息可参考这些错误信息进行错误分析d:\testtmboot-yexecTMS_ORA8i-A:pro__ssid=
1072...Started.execTMS_ORA8i-A:pro__ssid=
528...Started.exectest-A:pro__ssid=
876...Started.运行后应能看到服务端返回的结果d:\testtestcliname=bill到此,整个配置过程就大功告成了ORACLE的其他版本的配置及在其他操作系统上的配置基本与本文所述差不多,差别主要在RM文件中所连的库文件可能会不样第3章Tuxedo管理
3.1管理工作和工具主要有以下两个管理工具使用图形界面的图形管理接口(GraphicalAdministrationInte_____—GAI)t__dmin通常管理工作有以下3类监视运行系统一般监视以下信息应用、服务、客户端、交易、队列、组、会话、网络等动态修改服务或交易参数使用GAI或t__dmin可以动态进行以下调整——交易可以挂起、恢复、发布和取消——交易参数可以修改,如LOAD和PRIORITY——指定交易的超时时间——交易口令进行启动,关闭,__服务等___的任务下面我们将对t__dmin工具作一简单介绍.1命令:printserver或者简写psr2结果示例:ProgNameQueueNameGrpNameIDRqDoneLoadDoneCurrentServi__-----------------------------------------------------------rz_Ec__
00004.04000APGP2400000IDLEBBL70020______0150IDLEIFMTMSAPGP2_TMSAPGP230001150IDLEftpserv
3200002.00001FTPGP1603000IDLE3结果说明:列号描述
1.服务的可执行文件名
2.服务连接的队列名
3.组名
4.服务的数字id
5.服务已经处理的请求数
6.服务处理的全部请求的参数和1命令:printservi__简写:psc2结果示例:Servi__NameRoutineNameProgNameGrpNameID__chine#DoneStatus--------------------------------------------------------------416701rz_Ec__rz_Ec__APGP24000______0__AIL416601rz_Ec__rz_Ec__APGP24000______0__AIL416501rz_Ec__rz_Ec__APGP24000______0__AIL3结果说明:列号描述
1.交易名
2.交易函数名
3.服务可执行文件名
4.服务所在组名
5.服务的数字id
6.提供交易的机器的LMID
7.交易已经执行的次数
8.交易当前状态1命令:printqueue简写:pq[PADRESS]2结果示例:pq
00004.05062ProgNameQueueName#ServeWkQueued#Queued__e.Len__chine------------------------------------------------------------CCS_GEDAIPC_
5000004.
050621000.0______3结果说明:列号描述
1.队列连接的服务的可执行文件名
2.字符队列名,是RQADDR参数或一个随机值
3.连接的服务数
4.当前队列的所有请求的参数和
5.实际请求数
6.平均队列长度
7.队列所在机器的LMID1命令:printclient简写:pclt2结果示例:LMIDUserNameClientNameTimeStatusBgn/Cmmt/Abrt--------------------------------------------------------------------______cc__isWSH17:42:47IDLE0/0/0______cc__ist__dmin0:44:28IDLE0/0/03结果说明:列号描述
1.已经登录的客户端机器的LMID
2.用户名,由tpinit提供的
3.客户端名,由tpinit提供的
4.客户端连接后经过的时间
5.客户端状态
6.IDLE——表示客户端目前没有任何交易在工作
7.IDLET——表示客户端启动了一个交易
8.BUSY——表示客户端在工作中
9.BUSYT——表示客户端正在交易控制下工作
10.启动/提交/中断的交易数命令tmboottmboot命令启动TUXEDO系统的/T应用,创建必要的IPC资源、启动相关机器的规定的系统和应用服务进程大多数的tmboot的参数启动了部分系统进程在以下说明和例子中,lmidgrpname和srvid是配置文件中指定的值-A启动所有机器上的管理进程-M启动主控机器上的管理进程-isrvid启动服务id等于srvid的进程-ggrpname启动指定的一组服务(含TMS)-S启动所有应用服务-sserver-name启动可执行文件名为server-name的服务-llmid启动TMS和指定机器上的应用服务-Tgrpname启动指定组中所有TMS-Blmid启动指定机器上的BBL-ecom__nd指定启动进程失败后在主控机器上运行的命令名-c打印本配置所需最少的IPC资源tmshutdown命令用于关闭所有或部分应用并释放IPC资源本命令所用参数与tmboot类似(如-A-g-i-s-S-l-M-B)意义相同如果需要__服务,关闭服务时用-R参数即可不删除BB中的入口在非主控节点上,可以用-P参数仅关闭该机器上的应用当有客户端正在连接时,tmshutdown不能关闭管理服务参数-c则可以超越此规则该参数仅用于___需要立即关机而又无法及时通知客户端时参数-wdelay在delay秒后进行强制关闭指定的服务当即被挂起,使之不能继续接受交易请求delay的值则允许服务在一个合理的时间内完成已经接受的请求在延迟的时间到达后,__SIGKILL或SIGTERM将发给指定的服务该参数目的是使___能够关闭发生死循环或死锁的服务该功能使___可以将服务__到其他位置服务可以用migrategroupmigg[-can__l]group移植一组服务,或用migrate__chmigm[-can__l]__chine移植一台机器上的服务以下是移植服务的步骤1.服务必须用tmshutdown或-R参数关闭该参数包含公告牌中的服务名2.在配置文件中的*RESOUR__S段必须指明MIGRATE*RESOUR__S…OPTIONSMIGRATE…3.在*GROUP段中,被移植的服务组在LMID参数中必须有替代位置当移植机器时,所有组的LMID参数的替代位置必须相同*GROUP…APGP2LMID=SITE1SITE2…4.服务必须可以重启动,以下是*SERVERS段有关内容*SERVERS…rz_Ec__SRVGRP=APGP2RESTART=Y…移植在关闭后将被取消migg和migm–can__l参数在服务关闭后从公告牌删除服务名所以,服务需要重启动才可以使用。