第9章:TUXEDO的数据库编程.docx
9.1TUXEDO如何处理分布式事务在两层的CS结构中,客户端宜接访问数据库,当采用TUXEDO中间件后,形成三层结构,这时,客户端不直接访问数据库,而是改为询用中间件TUXE1.X)效劳端上的效劳,IIITUX1.DO效劳端访问数据阵,并把结果返IU1.给客户端.如下图.<>car0ITUXEDO应-1一客户端RC1.ESYBASE、1、用效劳器UN1.X上的大小数据扉fj*c-xAM文件系统。即可以也可不用XATUXEDO与数据库的连接的配置及娟程I择些名诃.客户端:连接.在说明名词解春7/M*9S(Reso1.rcemanager”最常见的是数据库,可以是其他的,如TUXEDO的QUEUE,EIB的JMS等.它Q对数据进行管理和推护.<1.TRANSACTION):小务的定义很多,简弟地说,裂务是对资源管理器的一俎操作,它使所涉及的资源管理器从一个状态转变到另一个状态,这此操作要么全部成功,要么全部失败。事务具有以下的4个特征(一般称为AC1.D):原子性(A1.OM1.Ci1.Y):指小务中的所有操作作为一个整体单元要么成功要么失败.一致性CONS1.STENCY):一致性意味着不管事务提交或放弃,参与事务的所以资源管埋器在务结束后都保持一种合法的状态.故性也感味着,当一个干务结束时.所有的参与者都要择放它所锁住的资源.育性(IS。1.AT1.ON):隔禽性懑味着事务iE在处理过程中.在事务外面无法看到事务处理的中间结果.持久性(DURBI1.ITY):使货务的G线结果已被直正写到磴盘系统中.*<1.1.OCA1.TRANSACTION)!加果一个事务只涉及到一个资源管理器,那么该事务称为本地小务.在TUXEDO中.不通过XA接口的事务郴是本地事务.如:在ORAC1.E中,用EXECCONNECT建立与数据原的连接,并用EXECCOMMIT提交一个学乐那么该小务就是本地W分.全局OIG1.OBA1.TRA、SAeTIONH全局小芬涉及到一个或多个资源管理,它也称为分布式事务(DISTRBuTEDTRANSACT1.oN),对所有涉及的资源管理器的操作必须被看作的个工作单元.它们必须被同步,并在所有效劳器上圆满完成,否那么,就必须被彻底取消.例如:一个效劳器在写过程中被关闭,那么事务处理中其他系统上的所有写的东西就必须被取消,在TUXEDO中,采用XA接口的事务都是全局事务,全局事务站相对1.T而言的,它也有A1.CD四个特性.所不同的是它可以聆越多个资M管理器,这些资源管理器可能在不同的平价上.在TUXEDO'1',一个全局事务最多可检越16个不同的资源管埋器.<W三TRNSCTINMORNITOR)管理协调参与全局事务的各个资源管理器的准备,提交及回演等操作,事务管理甥还在出现场地故障.网络故障或全局资源死镇时协调全局事务的愦红TUXEDO在全局小务中就充当事务管理器的作用.在一个全局事芬中有一个事务协网器.有一个以上的资源管理器.界务协附器与资源管理器之间采用XA协议进行通讯在TUXEDo中一个GROUP只能有以个资源管理器,所以一个全局任务会跨越多个GROUPXAW:XAI1.TUXEDO首先提出,并交给XJOpcn组织,作为资源管理器(数据库)与事务管理涔的接11标准.Informix是以早宣布支持XA协议的数据嗥厂家,Infomix5.0以上的版本都提供XA接口,以实现与TUXEDO的连接,目前,Orac1.e.Informix,DB2.Sybase等各大数据库厂家都提供财XA的支持.XA协议采用两阶段提交方式来管理分布式小务.XA接口提供资源管理器与再务管理盘之间的迸行通讯的标准接口.TUXEDO支持根本的XA标准(PRE1.IMINARYXASPECIF1.CAT1.ON),及最终的XA标排(THEFINA1.SPECIHCATIONhXA协议包括两套函数,以Xa_开头的及以ax一开头的.以下的函数使事务管理器可时RM进行操作xa_opcn.xa_c1.osc:建立.关闭与RM的连接XaJUan,xa_cnd:开始,结束一个本地事务xa_prepatc.xa_8nimi(.xa_ro1.1.back:预提交.提交.回津,个本地,J,务XaJecoVCr:回滚一个已进行预提交的事务ax一开头的函数使RM可以动态在事务管理器中进行注册.并可以对XIDdRANSACHONIDS)进行操作.说明:fina1.XASpecihcation中,用xid代号全局事务R1.Daxeg.ax_unreg:允许个RM在一个TMS(TRANSACTo1.NMANAGERSERVER)中动态注册或撤消注册.全局小务rid_开头的函数在PREUMINARYXASPECIFICATION中有.在F1.NA1.XASPECIFICATION中没有定义.全用W分rid/mp:比拟两个全局步务RID全局事务ri<1.fm1.:格式化一个全局事务R1.D.以便打印全局事务rid_ha$h:根据全局事务R1.D4:成一个HASH值.现在主要的数据首都支持FINA1.XASPECIFICATIONTUXEDO中的全局务有以下特点:1.Ur以在客户玷或效劳端开始一个全局事务2 .在TUXEDO中全局事务能踏越多个进程3 .每个全局事务有一个唯一的ID号(全同事芬RID)标识,它可在TUXEDO的进程间传通。4 .全局事务可以绮越DOMAIN一个全局事务从发起到提交的过程:全局事务的提交采用两阶段提交方式.在两阶段提交过程中,应用程序是IJi务提交得发起者,应用程序通过调用TPCoMMrn)开始一个犷务的提交.该应用所在GROUP的TMS是这个事务的仞调者(CoORD1.NAToR).我们称之为COoRD1.NAToRTMS.其他参与本领务的GROUP所对应的TMS,我们称之为:SUBoRD1.NATETMS.CORDINAORIMS负近与所彳r参与本全局事务的RM的通讯.完成该事芬的提交,整个过程如下:1 .应用程序通过调用TPCoMM1.To开始个1J,务的提交2 .CordinatorTMS给参与该全局事务的每个group中的tms发送请求.杼个TMS要求rm进行预提交操作3 .每个RM各自进行预提交,及提交指把要更改的数据写到破盘上,以便在失败时可以进行恢复.但没有真正更新RM4 .当rm预提交完毕.每个Subordinatetms都把预提交操作结果(成功或失败)告诉给C(X)Rdinaiortms.5 .如果彳!任何一个RM预提交失败、或CoORD1.NAToRTMS得不到它的应答JE么CRDINATORTMS告诉所有的RM回滚它们各自的本地裂务.如果所有的RM预提交都成功.那么CRD1NATORTMS在它所在机器的T1.OG文件中写条记录,内容包括该全局事务的全局事务RID.参与该全局事务的所以RM的列表及其他信息.以便在第二阶段提交失败时I可滚.6,下一步做什么取决于在UBBCONFiG中TP.COMMIT_CONTRO1.得设置TP_CMT_1.OGGEDTPCoMMn调用返回.程序维续往下走.各个RM各自进行其正得提交操作,如果在第二阶段提交失败.TMS时是不知道的.而这是TpCOMM1.TO已返回成功.TP_CMT_COMP1.ETETPCoMMn。会等到笫:阶段提交完成才返回,如果在第:阶段提交失败,TMS是知道的.并I1.TPCOMM1.T()会返回失败.默认值足TP_CMT_COMP1.ETETUXEDO的应用程序可分为两种事务模式和非事务模式用以下两种方式可以使一个TUXEDO应用处于十务模式下:1 .显式:通过调用IPbCgin().显式开始一个全局事务2 .隐式:住Ubbconfig中对一个service设置rAUT()TRAN=Y.当该service被调用时,TUXEDO会自动后动一个全局事务注意:AUToTRAN=Y只对全局W务起作用,对本地M务不起作用,例如:下面的程序中Servicea中调用了serviceBA(TPSRCINFO-RQST)(pca1.1.(Bf1.ags)I那么:> 如果A当前不处于事务模式中,A在UBBeoNF1.G中设跣了AUToTRAN=Y,那么系统自动起一个全局事务> 如果A当前己处于事务模式中.A在UBBCONF1.G中设置了AUTOTRAN=Y.那么:1 .如果tpca1.1.()中的f1.ags没有设置TPNOTRAN(默认方式是不设置)那么SERVICE,B参与当前的事务.2 .如果ta1.1.()ff1.ags为TPNoTRAN.刖么SERVICE:B不参与当前的W务,注.旗:如果在UBBCONF1.G中对SERVICEB设置了AUToTRAN=Y,那么当前的事务被自动挂起.系统为B自动起一个新的事务.如果B中的事务失败了.对A中的事务没有影响.TUXEDO中与全局WHr关的设置:与全局干务有关的设冏.包括:RESoURCE.mAchineoroupsservice4个节在Reso1.rce中设置主要有:MAXG1.T(MAXG1.oba1.Transaction)在任一时刻在某一台效劳器上最多可以有多少个全局事务存在,也就是可以最多有多少个未提交的全局干务,范围Q32767,0意味若该系统不支持5分默认值是100.该值也可在MAeH1.ENS中设置,在MACHINES中设置的值回加盖在RESOURCE中的设置值。(;(<noba1.IransactionTab1.e)TUXEDO在BU1.1.ETINBCARD中维护的米表,用于记录全局邓务的状态信恩,在该台效劳器上发起的或该台效劳器参与的行个全局W务.在G1.T中都对应-条记录分台效劳器的GTT中fit?可以有多少条全局事务的记录是由MAXGTT决定的.当一个全局事务成功提交时.它在GTT中的记录将被删除.如果该全卮事务提交失败,它在GTT中的记录还会保挣一段时间1.股是5分钟.所以GT应该大于TIXXiSIZE.GTT的范围为064,(XX)饿认值为100.可以在MACHINE中用孟该设置.CMTRET:设置TP-COMMn1.CoNTRo1.的初始值.该值可以由在IPSCm1.。中重新设置.与MACHINES有关的设*:在MACHINES中设置每台机器中的全局事务日志文件的位置和大小.T1.OGDEV1CE:指定包含T1.OG文件的TUXEDO文件系统名.长度不能超个64个字符T1.OGNAME:T1.OG文件的名称T1.OGS1.ZE:T1.oG文件的大小,它的大小为0<=TI.OGSIZE<=2(>48,默认他为KXI如果一个全目少务跄越多台效劳器,在年台效劳器上都应该有一个T1.oG文件,用于记录全局酬务的信息,在全局事务要回次时要用到记录在T1.OG中的信息.T1.OG可以创立在裸设法上.如果一个全局本务在该分机器上发起但还没行提交.那么它在T1.OG文件种占有一页的空间.在一般的平台上一页的大小使512字节,当该全局事务成功提交或I可滚后,它在T1.QG中的记录将被删除。与GROUPS有关的设:在TUXEDo中一个GRoUP中只能定义一个资源管理器.如果一个TUXEDo系统”多个资源管理器.就要定义多个GROUP才行.在GROUP中定义TMS的名称及个数,翔开,关闭该资源管理涔的参数,不同的资源管理器的设附都不一样.