资源描述:
《第9章TUXEDO的数据库编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、9.1TUXEDO如何处理分布式事务在两层的C/S结构中,客户端直接访问数据库,当采用TUXEDO中间件后,形成三层结构。这时,客户端不直接访问数据库,而是改为调用中间件TUXEDO服务端上的服务,由TUXEDO服务端访问数据库,并把结果返回给客户端。如图所示。客户端TUXEDO应用服务器数据库客户端客户端TUXEDO支持ORACLE、SYBASE、INGRES、DB2等UNIX上的大型数据库和NT上的SQLServer,并且还支持C-ISAM文件系统。即可以通过XA协议,也可不用XA协议与数据库进行连接。在说明T
2、UXEDO与数据库的连接的配置及编程之前,我们先解释一些名词。名词解释资源管理器(RESOURCEMANAGER):最常见的是数据库,可以是其他的,如TUXEDO的QUEUE,EJB的JMS等,它们对数据进行管理和维护.事务(TRANSACTION):事务的定义很多,简单地说,事务是对资源管理器的一组操作,它使所涉及的资源管理器从一个状态转变到另一个状态,这些操作要么全部成功,要么全部失败。事务具有以下的4个特征(一般称为ACID):原子性(ATOMICITY):指事务中的所有操作作为一个整体单元要么成功要么失败.
3、一致性(CONSISTENCY):一致性意味着不管事务提交或放弃,参与事务的所以资源管理器在事务结束后都保持一种合法的状态.一致性也意味着,当一个事务结束时,所有的参与者都要释放它所锁住的资源.隔离性(ISOLATION):隔离性意味着事务正在处理过程中,在事务外面无法看到事务处理的中间结果.持久性(DURABILITY):使事务的最终结果已被真正写到磁盘系统中.本地事务(LOCALTRANSACTION):如果一个事务只涉及到一个资源管理器,那么该事务称为本地事务。在TUXEDO中,不通过XA接口的事务都是本地事
4、务,如:在ORACLE中,用EXECCONNECT建立与数据库的连接,并用EXECCOMMIT提交一个事务,那么该事务就是本地事务.全局事务(GLOBALTRANSACTION):全局事务涉及到一个或多个资源管理器,它也称为分布式事务(DISTRBUTEDTRANSACTION),对所有涉及的资源管理器的操作必须被看作单个工作单元。它们必须被同步,并在所有服务器上圆满完成,否则,就必须被彻底取消。例如:一个服务器在写过程中被关闭,那么事务处理中其他系统上的所有写的东西就必须被取消。在TUXEDO中,采用XA接口的事
5、务都是全局事务。全局事务是相对LT而言的,它也有AICD四个特性,所不同的是它可以跨越多个资源管理器,这些资源管理器可能在不同的平台上。在TUXEDO中,一个全局事务最多可跨越16个不同的资源管理器.事务管理器(TRANSACTINMORNITOR):管理协调参与全局事务的各个资源管理器的准备,提交及回滚等操作,事务管理器还在出现场地故障、网络故障或全局资源死锁时协调全局事务的恢复。TUXEDO在全局事务中就充当事务管理器的作用。在一个全局事务中有一个事务协调器,有一个以上的资源管理器。事务协调器与资源管理器之间采
6、用XA协议进行通讯在TUXEDO中一个GROUP只能有以个资源管理器,所以一个全局事务会跨越多个GROUPXA协议:XA协议由TUXEDO首先提出,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。Informix是最早宣布支持XA协议的数据库厂家,Informix5.0以上的版本都提供XA接口,以实现与TUXEDO的连接。目前,Oracle、Informix、DB2、Sybase等各大数据库厂家都提供对XA的支持.XA协议采用两阶段提交方式来管理分布式事务.XA接口提供资源管理器与事务管理器
7、之间的进行通讯的标准接口,TUXEDO支持基本的XA规范
(PRELIMINARYXASPECIFICATION),及最终的XA规范(THEFINALSPECIFICATION).XA协议包括两套函数,以xa_开头的及以ax_开头的.以下的函数使事务管理器可对RM进行操作xa_open,xa_close:建立,关闭与RM的连接xa_start,xa_end:开始,结束一个本地事务xa_prepare,xa_commit,xa_rollback:预提交,提交,回滚一个本地事务xa_recover:回滚一个已进行预提交
8、的事务ax_开头的函数使RM可以动态在事务管理器中进行注册,并可以对XID(TRANSACTIONIDS)进行操作.说明:在FINALXASPECIFICATION中,用XID代替全局事务RIDax_reg,ax_unreg:允许一个RM在一个TMS(TRANSACTOINMANAGERSERVER)中动态注册或撤消注册.全局事务rid_开头的函数在PREL