第10章:TUXEDO的可靠消息队列(4)

2019-09-02 17:12

TLOGNAME=TLOG

TLOGSIZE=100 *GROUPS GROUP1

LMID = SITE1 GRPNO = 1 TMSNAME=TMS TMSCOUNT=2

QUE1

*SERVERS DEFAULT:

CLOPT=\

LMID = SITE1 GRPNO = 2 TMSNAME = TMS_QM TMSCOUNT = 2

OPENINFO = \

TMQUEUE SRVGRP = QUE1 SRVID = 1

GRACE = 0 RESTART = Y CONV = N MAXGEN=10 CLOPT = \

TMQFORWARD SRVGRP=QUE1 SRVID= 5 GRACE=0 RESTART=Y CONV=N MAXGEN=10 CLOPT=\

server

*SERVICES

编译运行

确保make文件qsample.nt中include和lib变量已经包含了Tuxedo系统的头文件和库文件,然后使用如下命令进行编译:

c:\\qsample\\nmake/f qsample.nt all

成功后,用tmloadcf命令加载配置文件,用tmboot命令启动应用程序,最后,运行客户程序client.exe,就可以看到STRING服务的处理结果。

SRVGRP=GROUP1 SRVID=1111

10.5 /Q与事务

TUXEDO的/Q也是一种资源管理器, 可以和其他资源管理器如数据库协作,完成全局事务。下面通过例子来说明在/Q中使用事务一些应注意的地方.

例子的UBBCONFIG文件的内容为:

*RESOURCES IPCKEY DOMAINID MASTER MODEL

52617 qsample SITE1 SHM

*MACHINES MYSERVER LMID = SITE1 TUXDIR =\

APPDIR = \

TUXCONFIG = \TLOGDEVICE =\TLOGNAME=TLOG TLOGSIZE=100 MAXWSCLIENTS=5

*GROUPS

GROUP1 LMID = SITE1 GRPNO = 1 TMSNAME=TMS TMSCOUNT=2 QUE1 \

LMID = SITE1 GRPNO = 2

TMSNAME = TMS_QM TMSCOUNT = 2

OPENINFO = \

GROUP3

LMID=SITE1 GRPNO=3

TMSNAME=\

OPENINFO=\

GROUP4 LMID=SITE1

GRPNO=4

*SERVERS DEFAULT:

CLOPT=\

TMQUEUE SRVGRP = QUE1 SRVID = 1

TMQFORWARD SRVGRP=QUE1 SRVID= 5 GRACE=0 RESTART=Y CONV=N MAXGEN=10

CLOPT=\

GRACE = 0 RESTART = Y CONV = N MAXGEN=10 CLOPT = \

server SRVGRP=GROUP3 SRVID=1111

test SRVGRP=GROUP3 SRVID=111

*SERVICES

1.如果时采用转发模式,那么与QUEUE同名的SERVCIE所在的GROUP,必须是配置了TMS才能正常工作。

假设在TUXEDO带的例子qsample中,有上面UBBCONFIG中列的4个GROUP,那么:

(1)当STRING在GROUP1中时要这样编译:

buildserver -o server -f server.c -s STRING 或

buildserver -o server -f server.c -s STRING -r NONE

说明:TMS是TUXEDO系统自带的一个TMS SERVER,它对应RM文件中的NONE:tmnull_switch: 。

实际上你当编译SERVER时,如果你不带-r 参数,TUXEDO会自动加上-r NONE的。 这时候在程序中你也可以调用tpbegin(),tpcommit()等与事务操作有关的ATMI

(2)当STRING在QUE1中时要这样编译:

buildserver -o server -f server.c -r TUXEDO/QM -s STRING

如果不加 -r TUXEDO/QM,启动时会出现如下错误: 193628.XCJ!server.1144: GP_CAT:214: ERROR: Null version of xa_open() found non-null info string

193628.XCJ!server.1144: LIBTUX_CAT:466: ERROR: tpopen TPERMERR xa_open returned XAER_INVAL

193628.XCJ!server.1144: LIBTUX_CAT:1353: ERROR: tpopen failed - TPERMERR - resource manager error

193628.XCJ!server.1144: LIBTUX_CAT:250: ERROR: tpsvrinit() failed

(3)当STRING在GROUUP3中时要这样编译:

buildserver -o server -f server.c -r Oracle_XA -s STRING

(4)在STRING在GROUP4中时要这样编译: buildserver -o server -f server.c -s STRING

server能启动,但tpenqueue()调用能成功,tpdequeue()调用不成功。因为GROUP4中没有TMS。

2. 在与QUEUE同名的那个SERVICE 中的事务处理

在与QUEUE同名的那个SERVICE中不能再开始一个事务,因为QMFORWORD会自动启动一个TRANSACTION,如果在

该SERVICE 中又启动一个事务,会导致事务的嵌套,而TUXEDO不支持事务的嵌套。下面以qsample为例说明,

假设UBBCONFIG中也包括上面列的4个GROUP,那么如果STRING SERVICE在GROUP3中,并且把STRING STRING改写成 如下各种方式.

(1)

#include #include #include

EXEC SQL INCLUDE sqlca;

EXEC ORACLE OPTION (RELEASE_CURSOR = YES);

STRING(msg)

TPSVCINFO *msg; {

if(tpbegin(30,0) == -1) { userlog(\char *str; int i;

}

tpreturn( TPFAIL, 0, NULL, 0, 0 );

}

EXEC SQL INSERT INTO ss VALUES(\if(tpcommit(0) == -1) { }

str = (char *)msg->data;

for (i = 0; i < msg->len; i++) {

str[i] = toupper(str[i]);

}

tpreturn(TPSUCCESS, 0, msg->data, 0L, 0);

userlog(\tpreturn( TPFAIL, 0, NULL, 0, 0 );

会出现错误:203414.XCJ!server.1392: gtrid x0 x3affcb5e x2bf: tpbegin() fail=TPEPROTO - protocol error

写表操作失败,并且tpdequeue也失败,TMQFORWORD把tpenqueue()发送的消息写到ERRQUE中.

(2)

#include #include #include

EXEC SQL INCLUDE sqlca;

EXEC ORACLE OPTION (RELEASE_CURSOR = YES);

STRING(TPSVCINFO *msg) {

EXEC SQL INSERT INTO ss VALUES('1113'); if(sqlca.sqlcode!=0) { }

userlog(\tpreturn(TPFAIL, 0, NULL, 0L, 0); char *str; int i;


第10章:TUXEDO的可靠消息队列(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高一化学-2013-2014学年高一下学期期中考试化学试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: