版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
tuxedo简易培训教程济南陆和电信软件有限公司文栈良zlwen@第30页,共83页BEATUXEDO简易培训教程编写、整理:文栈良2003—1—21第一章认识tuxedo1.1TUXEDO是什么?BEATUXEDO使分布式关键任务应用系统具有大型主机的性能,从而使这些应用系统能够应付数以千计的用户,大交易吞吐量,多并行数据库存取和大量数据,同时保持较短的反应时间,较高数据完整性和安全性,并且确保全年365天,每周7天,每天24小时的系统可用性.同时,BEATUXEDO还能让开发人员和系统管理人员享用分布式运算环境提供的好处,如技术成本的低增长率,灵活性提高,快速应用开发和安装以及业务信息存取得以改善。1.2BEATUXEDO的组件软件模型关键业务应用通常是面向事务的,要求具有准确的数据完整性、较好的性能和管理需求。这些需求要求对应用的开发、调度和操作给出一个结构化的方案。由像BEATUXEDO这样的中间件支持的组件软件模型为分布式环境处理关键性业务应用提供了一个结构化的解决方案.BEATUXEDO和基于组件的应用设计从异构的计算资源中创建了一个虚拟主机:在分布式应用系统级提供可管理的相互关联的资源。许多组织在进行了一段时间的分布式应用工作后,现在已经认识到组件软件模型是他们的必然选择。分布式应用的直接动力是主机应用和集中式中规模的应用系统基础上又逐渐配备有大量的台式系统和服务器系统,这些分布式系统在标准网络传送协议的支持下,呈松散耦合的态势,事实上它们构成了网络计算资源的基础.在开始的时候,分布式系统主要服务于把集中式系统的前台应用迁移到网络环境——--主要用台式处理器和文件服务器实现文档处理和电子邮件通讯应用系统.接着,两层的客户/服务器数据库应用在部门级被采用,这类应用把交互式文件共享进化到并发数据元素访问,在数据级支持更细粒度的管理。虽然这些客户/服务器应用具体化了真正分布式应用处理的概念,它们仍留有为某一目标定制的特性,规模和管理能力都有限。更重要的,这些应用只停留在较细粒度的数据访问上,使得整个应用系统宛如磐石,不能有效地利用网络资源。面对更大规模的关键业务应用,如要进行有效的分布式处理,就要求从客户/数据库方案转变到三层客户/应用系统/数据服务器结构。以后者为核心的组件软件模型是客户/服务器计算的拓展,它支持应用分区,能有效地开发和调度应用业务逻辑,管理分布式应用的可靠执行。BEATUXEDO采用三层结构的组件软件模型。图1表示BEATUXEDO的组件软件模型的概要。该结构分为三层:图1BEATUXEDO的组件软件模型概要1。3TUXEDO的特点1。3。1.减轻开发人员负担BEATUXEDO的三层结构组件软件模型将用户界面的表示部分和业务逻辑部分按客户组件服务器组件分开,使开发人员能够按组件的思想专注入于业务逻辑的开发,用户界面部分可用流行的前端开发工具来快速完成。而客户和服务器之间、服务器和服务器之间的通讯,异构平台之间的数据变换,以及服务器和数据库之间的集成和事务控制都由BEATUXEDO来完成。当数据库或服务器端的业务逻辑改变时,客户端则不一定要改变;反之当客户改变或增加新的客户界面时,服务器端则不一定要改变,大大增加了应用系统的各部分的可复用性.BEATUXEDO提供的简洁API使用户程序能够物理地点透明地在客户和服务器之间、服务器和服务器之间进行各种方式的通讯,极大地减轻开发人员的负担.BEATUXEDO提供的通讯方式有同步RPC调用,异步RPC调用,对话通信方式,广播通讯方式,异步存储转发队列通讯,事件通讯方式等。1.3.2.使系统的安装与升级更容易在BEATUXEDO的三层结构组件软件模型下开发的应用程序以服务器组件和客户组件为安装、升级的单位,当一个组件需要更新时,管理人员甚至能够在运行系统不停机的情况下完成系统的升级,这在客户端为数以千计的关键任务应用中尤为重要。1。3。3.减轻系统管理人员负担BEATUXEDO系统提供从一个中心点对整个分布式系统进行全局监控及管理的能力,管理员根据一个整体系统视图(而不仅是单个节点或单元)提供的信息,可以作出决定和采取动作。BEATUXEDO不但提供了一些管理命令,而且提供了一个集成的图形界面管理工具,集中地监视和管理应用系统的运行,并且可动态地修改系统配置。通过Java的applets,还可利用Internet的浏览器比如Netscape或Microsoft的Explorer来运行该图形界面管理工具。此外,BEATUXEDO还提供了描述系统中各对象的管理信息数据库(MIBS)和存取管理这些管理信息数据库的管理API,用户可利用这些管理API,编写自己特有的管理工具。1.3.4.非常高的性能一方面,BEATUXEDO能够使多个客户连接到一个服务器进程,由这个服务器进程存取数据库,为客户的请求服务。这样,数据库为处理连接所需的资源大大减少。另一方面,客户和服务器之间,服务器和服务器之间的通讯中,网络上流动的只有相对较少的客户或服务器的请求和服务器处理的结果,而不再是两层结构中客户和DBMS之间的大量SQL请求和应答。此外,利用BEATUXEDO特有的一些机制也能极大提高应用系统的性能。比如利用异步RPC机制实现扇出并行,利用转发机制实现流水线并行,利用多服务器单队列实现多处理并行等。所有这些因素使BEATUXEDO的应用系统具有极高的性能。世界上大部分硬件服务器的TPC性能指标都是在BEATUXEDO上完成的。1。3。5.更高的可用性BEATUXEDO随时知道它控制下的资源的情况,并利用这些信息为应用提供最大可用性。分布式系统使资源故障的影响复杂化。在一个分布式系统中,多个节点代表更多的潜在故障点的可能,但也可以代表在资源恢复开始时在其他节点上重新分配工作的更大潜力.BEATUXEDO在这种分布式系统故障恢复上具有优势。TUXEDO将重启应用进程,并且能在硬件故障情况下在其它结点上重新运行进程。1。3.6.分布式环境中更高水平的数据完整性BEATUXEDO设计了数据资源的绝对完整性。目前出现的客户/服务器应用中,重要数据资源很可能是广泛的,而且受异构系统的控制。应用可以设计成用严格的保证数据一致性的两阶段提交,或者用更多的缓冲存储和转发技术来管理异构的(或者同构的)数据库的更新。在各种情况下,BEATUXEDO能够确保异构的(或者同构的)数据库以及它资源管理器之间的完整性。1.3。7、系统的安全性BEATUXEDO通过结构化用户界面支持应用服务的验证、授权和存取控制,允许用户加入自己的验证服务模块.BEATUXEDO还提供信息加密服务,允许对网络上传输的信息按RSA的RC4算法加密。目前美国本土内可按128位,本土外可按40位加密.1。3。8、开放系统中最开放的中间件平台BEATUXEDO是一个非常开放的平台,支持三十多种服务器平台,包括大多数的UNIX服务器,WindowsNT服务器,IBM的S/370,S/390,加上AS/400和Tandem公司的NonStop系统。它的客户支持几乎所有的工作站,包括UNIX,MS—DOS,Windows3。1/95,WindowsNT,OS/2,Macintosh等.BEATUXEDO支持X/Open组织的分布式事务处理模型DTP,事务定界标准TX,应用程序事务处理接口标准XATMI以及和资源管理器(像数据库系统)的接口标准XA,并且还支持事务处理器之间的互操作标准OSI—TP。BEATUXEDO的客户端通过DLL可以和VisualC++、VisualBasic、PowerBuilder、SQLWindows、Delphi、Develop/2000以及其他4GL和CASE工具互连.此外,BEATUXEDO还得到其他第三方开发管理工具厂商的支持。1。3.9、系统的伸缩性简单地说,软件可伸缩性就是可以很容易地增加被支持的用户数和应用的全局吞吐量.一个可伸缩的软件系统是利用网络分布系统优势的关键。BEATUXEDO提供的就是这样一个系统,它可以利用在一个网络上所能找到的所有的异构的资源以获得最大的效益。BEATUXEDO提供这一点,而且提供许多可伸缩性选项。垂直方向的可伸缩性代表的含义与通常相同,即将系统转变(升级)为一个更大,更有力的相同或不同结构的平台。水平方向的可伸缩性多是在分布式系统结构中,它以增加适当规模的附加系统来增强网络应用。所增加的附加系统与原有系统可能是同构的,也可是异构的(那就是不同的处理机或操作系统)。BEATUXEDO支持二维的可伸缩性。二维可伸缩性可在结构上的任意位置添加异质资源,而不改变已存在的应用的结构。允许对一个复杂的混合结构的支持,为联机网络系统提供了广泛的规模选择范围。任何与数据表示有关的(如不同的处理器表示)可以由BEATUXEDO透明地解决.BEATUXEDO还可根据系统负荷的变化动态地增加或减少应用服务器的个数。1.3。10、广泛的开发工具支持除了像C,C++和COBOL这样的第三代语言编程环境,BEATUXEDO系统享受最广泛的第三方工具的支持,下面是开发BEATUXEDO应用目前可用工具的一个列表.表1TUXEDO允许的开发工具选择公司开发工具客户端服务器端AllyAlly4GL*InformixIFORMIX5.0(XA)InformixTPToolkit*ITITPTools*OracleORACLE7.0(XA)Develop/2000GuptaSQLWindowsNovellVisualAppbuilderNovellUSLWKSHUnifyAccell4GL*JyaccJAM/JPL*TIIEFCASE*MagnaMagnaX*PowersoftPowerBuilder*DelphiDelphiMicrosoftVisualBasicVisualC++此外BEATUXEDO的关联产品BEACONNECT允许BEATUXEDO和IBM的CICS、IMS、Unisys的System2000进行互操作,BEAJolt支持从Internet浏览器上请求BEATUXEDO的服务。BEABuilder和BEAManager将BEATUXEDO应用的开发与管理更为简化。BEATUXEDO的组成与功能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,C。A,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应用程序的硬件、软件和网络资源。应用设计者能叙述在何处运行服务器和服务以及在处理器出故障时服务应该迁移到何处。他们可把各种不同的特性,包括调度信息、进程恢复标准和超时时间段等,赋给应用服务器。事务管理器为动态启动、停止或管理一个分布式应用程序提供中央配置管理和工具。◎动态重配置用户可动态启动或停止服务;用户可选择可用的服务。用户可在一个配置中增加新的机器、组、服务器和服务。另外,事务管理器可用不同的参数如超时故障等,使得一个无法使用的处理器上的服务器和服务在不中断运行程序的条件下移向另一个处理器上。第二章开发与应用开发BEATuxedo应用程序在开发BEATuxedo应用程序之前,你需要先搞清楚一系列和设计开发相关的概念,如识别什么是客户机,有哪些方法可以从外界收集数据并提交服务器进行业务处理;识别什么是服务器,哪些程序包容了可以处理客户机输入的商业逻辑;识别什么是类型缓冲区,客户程序在向其这程序发送数据前如何分配内存区域;什么是BEATuxedo的消息范例等。最后你还要弄明白客户程序是通过调用ATMI库来访问BEATuxedo系统的.创建BEATuxedo的客户程序与在C和C++编程语言中创建其它应用程序一样,BEATuxedo提供了一个其于C语言的编程接口,即应用程序事务监控接口ATMI,这套接口很容易使用,以便用于开发客户程序和服务程序。除了C语言接口外,BEATuxedo还提供了COBOL接口.2。1。1创建服务程序2。1。1。1概述尽管开发者使用ATMI编程接口来创建BEATuxedo客户程序和服务程序,但服务程序不全部由开发者来编写,开发者只需写一些称为服务的商业函数,封装业务逻辑,然后和BEATuxedo的一些二进制程序联编成一个可执行的服务程序。BEATuxedo服务程序启动后,它总是保持运行状态,只到接收到一个shutdown消息为止。一个典型的BEATuxedo服务程序在shutdown或reboot之前都在执行着数千个服务。2。1。1.2服务的运行流程2.1.1。3服务程序的任务在BEATuxedo服务程序启动时,执行tpsvrinit()函数,可以在里面打开一些如数据库之类的资源供以后使用;在BEATuxedo服务程序关闭时,执行tpsvrdown()函数,可以在里面关闭tpsvrinit()中打开的资料;BEATuxedo服务程序以服务的形式来响应客户程序的请求,客户程序不是通过名字来调用服务程序的,而是调用服务,客户程序不知道处理它请求的服务程序的位置;服务程序调用tpreturn()函数来结束服务请求,并返回一个缓冲区,必要时,将它传给客户程序;注:如果是在tpsvrinit()中连接数据库,为了保证数据库的正常连接,在执行服务的时候,最好能够判断数据库是否断开连接,如果断开连接,则重新连接数据库。这样可以从根本上保证系统能够持续稳定的长期运行,基本上不需要人工干预。也就不再会出现“数据库重启了,中间件必须重启”的情况.2.1.1.4返回控制2。1.1。5初始化和结束服务2。1。1。6创建(编译)服务2。1.1。7调试和错误处理对于服务程序的调试,确实是一件非常令人头痛的事.在Unix环境下,目前还找不到很好的方法,一般经常使用的方法是”print,Userlog”跟踪法,但是这种方法太累了.因此,有人想出了在windows环境下跟踪调试,发现没有任何错误后再放到UNIX环境进行编译,并正式使用。目前,我们公司采用的就是这种调试方法,在windows环境下(C++Builder)编写一个tuxedo模拟测试服务程序,使其能正确的识别客户端调用的服务,并正确的调用相应的服务。2。1。1.8程序范例源代码文件名:simpserv.c#include<stdio.h〉#include<ctype。h〉#include〈atmi.h〉ﻩ/*TUXEDOHeaderFile*/#include<userlog。h> /*TUXEDOHeaderFile*//*当服务器启动时,在处理请求之前,tpsvrinit被执行,这个不是必须的,对应的函数是shutdown*/#ifdefined(__STDC__)||defined(__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真正处理客户请求,它接收的参数是一个缓冲区指针*/#ifdef__cplusplusextern”C”#endifvoid#ifdefined(__STDC__)||defined(__cplusplus)TOUPPER(TPSVCINFO*rqst)#elseTOUPPER(rqst)TPSVCINFO*rqst;#endif{ﻩinti; for(i=0;i〈rqst—>len-1;i++) ﻩrqst-〉data[i]=toupper(rqst—〉data[i]); /*返回转换后的类型缓冲区*/ tpreturn(TPSUCCESS,0,rqst-〉data,0L,0);}(2)程序说明语句说明wholefile整个服务程序不提供main函数,在build时,由BEATuxedo系统提供。tpsvrinit()在服务器初始化即处理请求之前被调用。若没有提供该函数,BEATuxedo系统会提供一个缺省的,它向USERLOG中写一条消息,说明服务器已经被启动。userlog(3c)是系统提供的一个写日志的方法。TOUPPER()simpserv提供的唯一一个服务,它接收一个TPSVCINFO结构,它包含了要被转换成大写的字符串。forloopBEATuxedo系统的循环,用于逐一转换。tpreturn()程序编译:$buildserver–osimpserv–fsimpserv.c–sTOUPPER(–sTOUPPER指明了在服务器启动时需要提供的服务)2。1.2创建客户程序2。1.2。1概述创建BEATuxedo的客户程序与在C和C++编程语言中创建其它应用程序一样,BEATuxedo提供了一个其于C语言的编程接口,即应用程序事务监控接口ATMI,这套接口很容易使用,以便用于开发客户程序和服务程序。除了C语言接口外,BEATuxedo还提供了COBOL接口。2.1。2。2客户端在C/S模式中的作用2.1.2.3客户端开发过程客户端程序的设计和实现可以被分成2部分考虑:用户处理过程和TUXEDO功能部分。下文的客户端程序只描述了TUXEDO功能部分。利用TUXEDO的ATMIAPI调用可以做到:——基本的TUXEDO调试技巧(tperrno,tpstrerror,userlog)——TUXEDO进程管理(tpinit,tpterm)-—基本数据缓冲管理(tpalloc,tprealloc,tpfree)-—基本通讯(tpcall,tpacall,tpgetrply)客户程序一般执行如下任务:用tpchkauth()决定加入一个应用程序所需的安全级别。可能出现的响应包括:没有安全级别,应用程序口令,应用程序授权,访问控制列表,连接级加密,公钥加密,审计。这些可以根据你的需求进行选择;在实际的应用中很多的软件开发商通常对这一步都不做处理.调用tpinit()来连接到一个BEATuxedo应用程序,所需的安全信息作为tpinit()的参数传给了应用程序;执行服务请求;调用tpterm()来断开和BEATuxedo应用程序的连接2.1。2.4调试和错误处理2.1。2。5进程管理tuxedo接到一个tpinit的请求后,就启动一个服务进程,接收到tpterm()后,就会中止该服务进程.在实际应用中,tpinit()和tpterm()必须成对出现,而且要相互对应.如果只在程序中调用了tpinit()而没有调用tpterm(),则tuxedo系统会认为该进程一直处于活动状态,这样的话可能会因为服务进程达到系统允许的上限而导致系统的崩溃.根据tpinit()和tpterm()在客户程序中不同位置的调用,可以把tuxedo的进程连接分为长连接和短连接两种.长连接是指在程序开始的时候调用tpinit()建立服务连接,在程序中止的时候调用tpterm()中止服务连接。这样做的好处是,当用户频繁的进行业务操作时,不用频繁的进行进程连接,大大的缩短了操作时间,提高了程序的执行效率.但是,这也一个缺点,那就是,只有用户不从客户程序中退出来,不管做不做业务,都会在系统中占用一个进程连接,从而会影响其他用户的连接。短连接指的是用户每做一次业务,都需要调用tpinit(),业务完成后调用tpterm().这样做的好处是,1000个终端用户和10000个终端用户同时操作,对系统来说,基本上是一个概念。但是这样做会浪费大量的时间在进程连接上,从而影响了业务的处理效率。为了协调长连接和短连接之间的矛盾,我曾经给出了一个很好的解决方案,那就是在长连接的基础上进行优化处理,当客户程序5分钟(这个值可以自定义)没有向服务程序发送任何服务请求,则调用tpterm()断开服务连接。仅仅这样还是不行的,我们还必须在客户程序向服务程序发送业务请求之前,首先判断进程连接是否断开,如果断开,则重新连接.2.1。2。6数据缓冲管理在BeaTuxedo系统中的所有通信过程都是通过类型缓冲区来完成的,BeaTuxedo系统提供了大量的类型缓冲区来供开发者使用。所有类型缓冲区都必须通过BeaTuxedo的tpalloc(),tprealloc(),tpfree()这些ATMI来分配回收,它们都有特定的头部。统一定义的类型缓冲区可以使它们在跨越不同网络、不同协议、不同CPU构架以及不同操作系统之间得到统一的处理,这就使得开发者在分布式计算环境中有效地避开了异构网络和异构计算机系统带来的差异,把精力集中在商业逻辑的开发上.2。1.2。7程序范例源代码文件名:simpcl。c#include〈stdio。h>#include"atmi。h”ﻩﻩ/*TUXEDO的头文件*/#ifdefined(__STDC__)||defined(__cplusplus)main(intargc,char*argv[])#elsemain(argc,argv)intargc;char*argv[];#endif{ﻩchar*sendbuf,*rcvbuf;ﻩlongsendlen,rcvlen; intret;ﻩif(argc!=2){ﻩﻩ(void)fprintf(stderr,"Usage:simpclstring\n”);ﻩ exit(1);ﻩ} /*作为一个客户过程连接到System/T*/ if(tpinit((TPINIT*)NULL)==-1){ﻩ (void)fprintf(stderr,”Tpinitfailed\n”);ﻩ exit(1); }ﻩsendlen=strlen(argv[1]); /*分配一个供请求响应使用的STRING缓冲区*/ﻩif((sendbuf=(char*)tpalloc("STRING”,NULL,sendlen+1))==NULL){ ﻩ(void)fprintf(stderr,”Errorallocatingsendbuffer\n”);ﻩﻩtpterm(); exit(1);ﻩ} if((rcvbuf=(char*)tpalloc("STRING”,NULL,sendlen+1))==NULL){ﻩ (void)fprintf(stderr,"Errorallocatingreceivebuffer\n”); ﻩtpfree(sendbuf);ﻩﻩtpterm(); ﻩexit(1); } (void)strcpy(sendbuf,argv[1]); /*RequesttheserviceTOUPPER,waitingforareply*/ ret=tpcall(”TOUPPER”,(char*)sendbuf,0,(char**)&rcvbuf,&rcvlen,(long)0);ﻩif(ret==—1){ﻩ (void)fprintf(stderr,”Can'tsendrequesttoserviceTOUPPER\n”);ﻩﻩ(void)fprintf(stderr,"Tperrno=%d\n”,tperrno);ﻩ tpfree(sendbuf); tpfree(rcvbuf);ﻩ tpterm();ﻩ exit(1);ﻩ}ﻩ(void)fprintf(stdout,"Returnedstringis:%s\n”,rcvbuf);ﻩ/*FreeBuffers&DetachfromSystem/T*/ tpfree(sendbuf);ﻩtpfree(rcvbuf);ﻩtpterm();ﻩreturn(0);}程序说明:语句说明atmi。h调用ATMI函数必须的头文件tpinit()客户程序调用它来加入应用程序tpalloc()用于分配类型缓冲区的ATMI函数,STRING是五种BEATuxedo缓冲区数据类型之一,sendlen+1表示缓冲区类型,因为以空字符结尾,所以长度加1tpcall()把消息缓冲区送到TOUPPER服务,它提供了响应缓冲区的地址,它一直等待着返回消息tpterm()用于退出应用程序的ATMI函数,tpfree()释放分配的缓冲区,是和tpalloc()相对应的函数程序编译:$buildclient-osimpcl—fsimpcl.c ﻩ-o指明输出目标文件名,-f指出源文件名2。1。3在应用程序中使用消息范例BEATuxedo系统提供多种通信模式同步Request/Response模式;异步Request/Response模式;嵌套调用;调用转发;会话通信;主动消息通告;基于事件的通信;基于队列的通信;使用事务.2。1。3。1同步通讯要进行同步调用,BeaTuxedo客户程序使用ATMI函数tpcall()把一个请求送到服务程序,它不是通过名字来调用服务程序的,而是通过特定的服务来完成。客户程序要等到服务程序作出响应后才处理后面的工作,也就是说,它在收到服务程序的响应之前一直处于阻塞状态。2.1.3.2异步通讯要进行异步调用,客户程序必须调用两个ATMI函数:tpacall(3c)函数,用于请求一个服务;tpgetrply(3c)函数,用于取得服务程序的响应。客户程序在请求和响应之间要完成特定任务时,可以采用这种模式。2。1.3.3使用嵌套调用一个服务可以充当BEATuxedo客户程序,去调用其它BEATuxedo服务,换句话说,你请求的服务需要调用其它服务才能处理请求.BEATuxedo客户程序调用了服务X,等待它的响应,服务X调用服务Y后也处于等待状态,当服务X得到响应后,再给客户程序一个响应,这种机制的特点是效率高。2.1。3。4使用调用转发在嵌套服务中,最里层嵌套服务可以直接给客户程序一个响应,没有必要按照调用栈逐级返回,这就使其它嵌套服务可以处理其它请求,当第一个服务是一个分发代理时,这种模式是非常有用的。在嵌套调用中,被客户调用的服务X使用tpforward(3c)函数把请求传给服务Y,服务X没有tpreturn(3c)函数。客户程序不用管请求是由谁来完成的,因此,转发调用对客户程序是透明的。2。1.3.5会话通信会话通信适合于有多个缓冲区需要以有状态的方式在BEATuxedo客户程序和服务之间传递的场合。恰当地使用BEATuxedo的会话,因为参与会话的服务器在会话结束之前是不可用的。要完成会话通信,你的代码需要遵循如下步骤:客户程序使用tpconnect()启动会话;客户程序和服务使用tpsend()和tprecv()函数进行数据交换,一个特殊的标记指示着当前由哪一方来控制着会话;当服务程序调用tpreturn()或tpdiscon()函数时,会话正常终止2.1.3。6主动消息通告要处理服务器的消息通知,客户程序必须使用tpsetunsol()函数来创建一个消息处理器,要发送主动消息,BEATuxedo客户程序或服务程序可以调用tpnotify()来把消息传递给单个客户程序,也可以通过tpbroadcast()函数来把消息同时广播给多个客户程序。当客户程序收到主动消息后,BEATuxedo系统调用客户程序的主动消息处理器来处理。在一个基于信号系统中,客户程序没有必要处理所有的主动消息,然而,在一个非信号系统中,客户程序必须使用tpchkunsol()函数来检查主动消息。当客户程序调用一个服务请求时,tpchkunsol()被隐含地调用。在调用tpnotify()时,如果你设置了tpack标记位,你将会收到一个请求通知。2。1。3.7基于事件的通信在基于事件的通信中,事件可以被发送到应用程序队列、LOG文件和系统命令.当BEATuxedo服务或客户程序调用tppost()函数时,任何一个BEATuxedo客户程序都可以使用tpsubscribe()函数订阅用户自定义事件;当BEATuxedo系统检测事件时,客户程序也可以订阅系统定义事件。当一个服务器死了,。SysServerDied事件就会被发布,它由BEATuxedo系统自动完成,不需要应用服务器干预。2.1。3.8基于队列的通信为了实现了和/Q系统的接口,BEATuxedo客户程序使用两个ATMI函数,使用tpenqueue()把消息放入队列空间,使用tpdequeue()来把消息从队列空间中取走.下面演示了点对点异步消息机制。一个客户程序使用tpenqueue()函数将消息传给服务,响应队列和失败队列的名字可以作为参数包含在tpenqueue()调用中,由于在队列中的数据是持续的,因此,所有和排队消息相关的响应消息和失败消息都可以从相应的响应队列和失败队列中取得。客户程序可以使用缺省的排队顺利,即按放放顺利排队,先进先出;也可以改变排队规则,如把一个消息放在队列开始,或放到另一个队列前面。Tpenqueue()调用把消息送到TMQUEUE服务器,并被放入固定存储体中进行排队,然后给客户程序发送一个通知消息。队列管理器给消息分配一个标识符,使用它可以随时将消息踢出队列,也可以用于tpenqueue()中,指示将新消息紧挨着标识符标识的消息。在消息出队时,要出队消息的事务必须成功地提交.客户程序使用tpdequeue()来使消息出队。下面演示了消息被转发到另一个服务器。客户程序发出一个消息,要调用服务器上的X服务,X服务接收消息后,处理消息中的指令,然后把响应放入队列空间,客户程序再从队列空间中取出。排队系统对于服务来说是透明的,也就是说,不论服务请求是从队列发出的,还是通过tp(a)call发出的,服务都能接受。2.1.3.9使用事务要使用事务,应用程序开发者需要使用如下ATMI函数:tpbegin(),用于开始一个事务;tpcommit(),开始一个二阶段提交处理;tpabort(),产即终止事务。任何放在begin,commit/abord之外的代码不包含事务中。在下面的例子中,客户程序打开了一个事务,请求了两个服务,并且提交了事务。因为服务请求是在事务开始和提交之间完成的,所以两个服务的行为都被了事务记录.2.1.4应用配置2。1.4。1应用配置总览2。1.4。2配置文件2.1。4。3应用的信息2。1.4。4机器信息2。1.4.5组定义2。1。4.6服务定义2.1.4.7交易定义2.1.4。8生成TUXCONFIG文件2.1。5分布式事务处理2。1。5。1概述TUXEDO系统使用XA协议在本地与远程机器间协同事务活动。2。1.5。2分布式事务处理和XA接口全局事务通常最初被ATMI调用,包含一个以上的组;由客户端和服务端启动、提交或撤消.TUXEDO通过全局事务标识符(GlobalTransactionIdentifier—GTRID)控制所有参与部分。2.1.5。3分布式事务处理的ubbconfig分布式事务处理的配置与普通的配置不一样,最根本的区别在于分布式事务处理需要建立日志设备和数据库资源管理器。下面给出一个简单的示例,并作相应的说明。2.2Tuxedo与数据库互联在银行、电信、金融等行业的大型计算机应用系统中,中间件的使用日益普及,中间件已与操作系统、数据库并列为三大基础软件.BEATuxedo作为最优秀的中间件产品,在我国的很多行业中广泛使用,本文通过一个简单的例子介绍如何在TUXEDO中访问ORACLE数据库。在两层的C/S结构中,客户端直接访问数据库,当采用TUXEDO中间件后,形成三层结构。这时,客户端不直接访问数据库,而是改为调用中间件TUXEDO服务端上的服务,由TUXEDO服务端访问数据库,并把结果返回给客户端.TUXEDO服务端可以和ORACLE在同一台服务器上,也可以在不同的机器上,如果在不同的机器上,在TUXEDO的服务端所在的机器要安装一个ORACLE的客户端.TUXEDO服务端与ORACLE数据库连接有两种方式:1、不通过XA接口直接互连。适用于整个系统只有一个数据库的情况。2、通过XA接口互连,对整个系统有一个数据库或多个数据库都适用,建议采用。下面将着重介绍第二种连接方法。2。2。1系统说明TUXEDO版本:7.1安装目录d:\tuxedo71ORACLE版本:8。1。5安装目录d:\ora81操作系统:win20002.2。2配置的步骤2。2.2.1ORACLE的的配置1.用internal用户(缺省的口令是oracle)进入SQLPLUSC:\〉sqlplusinternal/oracle2.运行ORACLE的安装路径下的/rdbms/admin/xaview.sqlSQL>@d:\ora81\rdbms\admin\xaview.sql3.授权SQL〉grantselectonv$xatrans$topublicwithgrantoption;SQL〉grantselectonv$pending_xatrans$topublicwithgrantoption;4.用system用户(缺省的口令是manager)连接并授权SQL>connectsystem/managerSQL>grantselectanytabletopublic;2.2.2.2TUXEDO的配置1.修改TUXEDO安装路径的udataobj目录下的RM文件,把以Oracle_XA:xaosw:开头的一行用#注释掉,并加入一行:Oracle_XA;xaosw;d:\ora81\rdbms\xa\oraxa8.libd:\ora81\precomp\lib\msvc\orasql8.lib如果是在UNIX环境下,则为:Oracle_XA:xaosw:-L${ORACLE_HOME}/lib-lclntsh2。在TUXEDO用户下创建TMS文件:TMS_ORA8i,TUXEDO通过TMS_ORA8i与ORACLE数据库采用XA协议进行通讯buildtms—od:\tuxedo71\bin\TMS_ORA8i-rOracle_XA注意:如果TUXEDO服务端与ORACLE数据库不在同一台服务器上,可能会提示找不到库文件oraxa8.lib和orasql8。lib,可到ORACLE数据库的服务端相应目录下把这两个文件拷到当前机器ORACLE的客户端下的对应目录下。3.配置UBBCONFIG(1)在*MACHINES节中增加:TLOGDEVICE="/home/oracle/temp/simpdb/TLOG"TLOGNAME=TLOGTLOGSIZE=200(2)改*GROUPS节的配置为:(scott/tiger为本数据库所采用的用户及口令,可根据需要更改)*GROUPSGROUP1LMID=simpleGRPNO=1OPENINFO=”Oracle_XA:Oracle_XA+Acc=P/scott/tiger+SesTm=600+MaxCur=5+LogDir=."TMSNAME=”TMS_ORA8i"TMSCOUNT=2修改后的配置文件ubb内容如下,用tmloadcf—yubb重新生成tuxconfigIPCKEY123456DOMAINIDsimpappMASTERsimpleMAXACCESSERS100MAXSERVERS50MAXSERVICES100MODELSHMLDBALN*MACHINESserverLMID=simpleAPPDIR="d:\test"TUXCONFIG="d:\test\tuxconfig"TUXDIR="d:\tux71"TLOGDEVICE="d:\test\TLOG”TLOGNAME=TLOGTLOGSIZE=100*GROUPSGROUP1LMID=simpleGRPNO=1OPENINFO="Oracle_XA:Oracle_XA+Acc=P/scott/tiger+SesTm=600+MaxCur=5+LogDir=。"TMSNAME=”TMS_ORA8i”TMSCOUNT=2*SERVERSDEFAULT:CLOPT="—A”testSRVGRP=GROUP1SRVID=1*SERVICES4。重命名下列文件,因为下列文件名与ORACLE带的文件名有冲突,所以要改名。(1)TUXEDO安装路径include目录下的下面文件把sqlca.h改名为sqlca。h。bbb把sqlcode。h改名为sqlcode。h。bbb把sqlda.h改名为sqlda。h.bbb(2)重命名TUXEDO安装路径lib目录下的下面文件把libsql。lib改名为libsql。lib.bbb5.用TMADMIN创建TLOG文件,TUXEDO用一个文件TLOG记录对数据库操作的日志。用于协调分布式数据库的提交与回滚。D:\〉tmadmin〉crdl-b500—zd:\test\TLOG〉crlog—msimple>q2。2.2.3服务端的程序:test。pc功能:根据客户端传的EMPNO到表EMP中取ENAME的值,并把它返回给客户端#include〈stdio.h〉#include<atmi.h〉#include〈userlog.h〉EXECSQLINCLUDEsqlca;EXECSQLBEGINDECLARESECTION;longal_empno=0;charac_ename[11]=”";EXECSQLVARac_enameISSTRING(11);EXECSQLENDDECLARESECTION;TEST(TPSVCINFO*rqst){/*接收客户端来的数据*/al_empno=(FBFR32*)rqst—〉data;EXECSQLselectenameinto:ac_enamefromEMPwhereempno=:al_empno;if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 百货公司平整施工合同
- 摄影棚租赁合同自行布置指南
- 污水处理工程规划合同
- 智能化交通监控施工合同
- 耐干燥木地板施工合同
- 汽车制造保温施工合同
- 网络加速服务器租赁合同范本
- 石墨矿开采土方施工合同
- 住宅小区套筒连接安装协议
- 艺术品库管招聘合同
- 二年级排球教案
- 小数乘除法竖式计算专项练习题大全(每日一练共15份)
- 天津市和平区2024-2025学年九年级上学期期中考试英语试题
- 2024版抗菌药物DDD值速查表
- 小学二年级数学上册期中试卷(全套)
- DB11T 1580-2018 生产经营单位安全生产应急资源调查规范
- 各省中国铁路限公司2024招聘(目前38183人)高频难、易错点500题模拟试题附带答案详解
- 猜想04整式的乘法与因式分解(易错必刷30题10种题型专项训练)
- 大学实训室虚拟仿真平台网络VR实训室方案(建筑学科)
- 2024二十届三中全会知识竞赛题库及答案
- 预防接种工作规范(2023年版)解读课件
评论
0/150
提交评论