9512.net
甜梦文库
当前位置:首页 >> IT/计算机 >>

BEA Tuxedo中间件应用初探


BEA Tuxedo 中间件应用初探
ZDNet 软件频道 2007-10-04 作者:chinaunix | chinaunix 本文关键词:应用 技术 BEA 中间件

随着中间件在大型应用系统中的日益普及, 目前各类中间件充斥着市场, 它们在银行、 电信、 金融等大规模关键事务领域中的整合各种异构平台、 保证交易完整性等方面表现出了超强的 能力。BEA Tuxedo 就是其中一款著名的交易中间件,本文以一个经典的例子(大写字母转 换),主要介绍 Tuxedo 的工作原理及开发方法,以及 Tuxedo 应用程序的管理方法。 工作原理 Tuxedo 是 BEA 公司的交易中间件产品, 1984 年由贝尔实验室开发成功, 1992 年易主 Novell 公司,1996 年由 BEA 公司收购,经过十多年的不断更新和完善,Tuxedo 已经发展成为交 易中间件领域事实上的标准。

Tuxedo 可以有效地整合企业异构 C/S 系统, 实现大规模的关键业务处理和分布式事务管理, 从而为企业提供一个可靠的、高性能的、易维护的三层分布式计算机环境。图 1 展示了一 个基本 Tuxedo 系统的组成和工作原理。

图一

① Client 向 System/T 发出查询请求,以找到 Server 消息队列的地址; ② Client 根据找到的入口地址将请求发送到 Server 的消息队列中; ③ Server 处理请求,并将结果返回给 Client 的消息队列。 System/T 是 Tuxedo 系统的核心,它实现了 Tuxedo 的所有功能和特征,如 C/S 数据流管 理、服务请求的负载均衡、全局事务管理以保证交易的完整性、同步/异步服务请求、两阶

段提交以确保消息的发送等。System/T 提供了一个类似公告栏的服务,用以发布 C/S 计算 机环境中所有服务器、服务和客户机的信息,供其它分布式计算的参与者使用。下面笔者将 通过一个大写字母转换的简单例子,讲述 Tuxedo 应用程序工作的基本原理和开发方法。 应用介绍 Simpapp 是 Tuxedo 系统自带的一个例子,它由服务器和客户端程序两部分组成。服务器 simpserv 实现了一个 TOUPPER 服务, 它从客户程序接收一个字符串, 将它转换成大写后, 传回客户端。整个工作流程可以用图 2 表示。

图二

客户机首先收集要转换成大写的字符串,然后连接到 System/T 并将字符串放入缓冲区,接 着调用服务器上的 TOUPPER 服务, 最后从服务器响应缓冲区中取出数据并退出 System/T。
1.Simpapp 的服务程序

下面是服务程序 simpserv.c 的源代码:
#i nclude <stdio.h> #i nclude "atmi.h" /? Tuxedo ATMI 函数库的头文件 ?/ TOUPPER(TPSVCINFO ?rqst){ int i; for(i=0;i<rqst->len-1;i++) rqst->data[i]=toupper(rqst->data[i]); /? 将 rqst->data 缓冲区内容转换成大写 ?/ tpreturn(TPSUCCESS,0,rqst->data,0L,0); /? 将 rqst->data 作为响应缓冲区返回 ?/ }

可能你已经注意到了, 该程序没有提供 main 方法。 事实上, Tuxedo 不要求程序员编写 main 方法,以便让他们把精力集中在业务逻辑的编写上,在编译时,Tuxedo 系统会为它自动创 建。

TPSVCINFO 是 Tuxedo 记录服务调用信息的一个结构体, data 域是保存请求数据的缓冲区, len 域记录了 data 域的长度。
2.Simpapp 的客户程序

客户程序 Simpcl.c 是服务调用的发起者,它从命令行接收参数,通过 tpinit()调用连接到 System/T,通过 tpalloc()调用分配一个字符串类型的缓冲区,通过 tpcall()调用请求 TOUPPER 服务,最后通过 tpterm()调用退出 System/T,下面是它的源代码:
#i nclude <stdio.h> #i nclude "atmi.h" int main(int argc, char ?argv[]){ char ?buf; long len; if(argc != 2) { (void) fprintf(stderr, "Usage: simpcl stringn"); exit(1); } if (tpinit((TPINIT ?) NULL) == -1) { (void) fprintf(stderr, "Tpinit failedn"); exit(1); } len = strlen(argv[1]); if((buf = (char ?) tpalloc("STRING", NULL, len+1)) == NULL) {

(void) fprintf(stderr,"Error allocating send buffern"); tpterm(); exit(1); }

(void) strcpy(buf, argv[1]); if(tpcall("TOUPPER", buf, 0, &&buf, &&len, 0)==-1){ (void) fprintf(stderr, "Can't send request to service TOUPPERn"); tpfree(buf); tpterm(); exit(3); }

(void) fprintf(stdout, "Returned string is: %sn", rcvbuf); tpfree(buf); tpterm(); return(0);

}

3.Simpapp 的配置文件

除了客户和服务程序以外,Tuxedo 还需要一个配置文件来对应用进行描述。配置文件由多 个段组成,每个段定义由一个星号开始。下面是 NT 平台下 simpapp 的配置文件 ubbsimple 的内容,其中带下划线的部分需要根据机器的资源配置作适当修改。
RESOURCES IPCKEY 123456 MASTER NODE1 MODEL SHM MACHINES JQ LMID=NODE1 TUXDIR="G:ProgramFilesBEA SystemsTuxedo" APPDIR="G:simpapp" TUXCONFIG="G:simpapptuxconfig" GROUPS GROUP1 LMID=NODE1 GRPNO=1 SERVERS simpserv SRVGRP=GROUP1 SRVID=1 CLOPT="-A" SERVICES TOUPPER

TUXDIR 指的是 Tuxedo 的安装路径,APPDIR 指的是 simpapp 应用程序所在的目录, TUXCONFIG 指的是 simpapp 的二进制配置文件,一般为%APPDIR%tuxconfig。
4.Simpapp 的编译和运行

由于 Buildclient 和 Buildserver 没有编译能力,要编译 Tuxedo 应用程序时,还必须安装第 三方的 C 语言编译器,在 NT 平台下推荐使用 VC。步骤如下: ⑴设置环境变量
SET PATH=%PATH%; G:Program FilesBEA SystemsTuxedoBin SET TUXDIR=G:Program FilesBEA SystemsTuxedo TUXCONFIG=G:simpapptuxconfig

⑵生成二进制配置文件
tmloadcf -y ubbsimple

⑶编译客户程序
buildclient -o simpcl.exe -f simpcl.c

⑷编译服务程序
buildserver -o simpserv.exe -f simpserv.c -s TOUPPER

⑸启动服务程序
tmboot -y

⑹运行客户程序
simpcl "hello, JQ"

⑺关闭应用程序
tmshutdown -y

5.管理 Simpapp

通过 tmadmin 命令可以方便地管理服务程序。 TUXEDO 函数说明
ZDNet 软件频道 2007-10-04 作者:chinaunix | chinaunix 本文关键词:技术 函数 Tuxedo 中间件

1 与缓冲区使用有关的 ATMI 2 1.1tpalloc. 2 1.2tprealloc. 2 1.3tpfree. 2 1.4tptypes. 2 2 常用的 FML(FML32)操作函数... 3 2.1Falloc. 3 2.2Finit 3 2.3Fadd. 3 2.4Fchg. 3 2.5Fget 4 2.5Fprint 4 2.6Ferror 4 3 连接的建立与断开有关的 ATMI 5 3.1tpchkauth. 5 3.2tpinit 5 3.3tpterm.. 6 4 与请求 TUXEDO SERVER 有关的 ATMI 6 4.1tpcall 6 4.2tpacall 7 4.3tpgetrply. 7

4.4tpcancel 7 4.5tpgprio. 8 4.6tpsprio. 8 5 与请求错误处理有关的 ATMI 8 5.1tpstrerror 8 5.2tperrordetail 9 5.3tpstrerrordetail 9

1 与缓冲区使用有关的 ATMI 1.1tpalloc

char * tpalloc(char *type, char *subtype, long size) 描述:分配缓冲区 参数:type:缓冲区的类型 subtype:缓冲区的子类型,只有 VIEW 有子类型,其他的缓冲区该参数要设为 NULL long:缓冲区的大小 返回值: 成功返回一个指向所分配空间首地址的 CHAR *形指针,失败返回 NULL。
1.2tprealloc

char * tprealloc(char *ptr, long size) 描述:重新分配缓冲区 参数:ptr:指向原缓冲区首地址的指针 size:新缓冲区的大小 返回值: 成功返回一个指向新分配空间首地址的 CHAR *形指针,失败返回 NULL。
1.3tpfree

void tpfree(char *bufptr) 描述:释放由 TPALLOC()或 TPREALLOC()分配的缓冲区 参数:bufptr:指向要释放的缓冲区首地址的指针 返回值:无

注意: 用 TPALLOC(),TPREALLOC()分配的内存只能有 TPFREE()释放掉,不能用 FREE()
1.4tptypes

long tptypes(char *ptr, char *type, char *subtype) 描述:返回有 ptr 所指向的缓冲区的类型及子类型 参数: ptr:指向要进行类型识别的缓冲区首地址的指针 type:类型名 subtype:子类型名(只对 VIEW 类型有效) 返回值:0 成功,-1 失败, 错误号保存在全局变量 tperrno 中。

2 常用的 FML(FML32)操作函数 2.1Falloc

FBFR* Falloc (FLDOCC F, FLDLEN V) 描述: 分配一块 FML 缓冲区 参数: FLDOCC: 该 FML 缓冲区的字段个数, FLDLEN: 该 FML 缓冲区的长度 返回值:成功返回一个指向该 FML 缓冲区首地址的指针,失败返回 NULL,错误号 保存在全局 变量 Ferror 中 注意: 该 FML 缓冲区不能用于 TPCALL(),TPACALL(),TPRETURN()等中,在这些

函数中用到

的 FML 缓冲区只能用 TPALLOC()分配。
2.2Finit

int Finit(FBFR *fbfr, FLDLEN buflen) 描述: 初始化该 FML 缓冲区 参数: fbfr: 一个指向该 FML 缓冲区首地址的指针 buflen: 该 FML 缓冲区的长度 返回值:失败为-1, 错误号保存在全局变量 Ferror 中
2.3Fadd

int Fadd(FBFR *fbfr, FLDID fieldid, char *value, FLDLEN len)

描述: 往 FML 缓冲区 fbfr 中 ID 为 fieldid 的字段增加一个值 value 参数: fbfr: 指向该 FML 缓冲区首地址的指针

fieldid: 要增加的字段的 ID value: len: 要增加的值,如果时其他类型的要转化为 char * 该字段的长度,如果不时 CARRARY 类型的,可设为 0

返回值: 失败为-1, 错误号保存在全局变量 Ferror 中
2.4Fchg

int Fchg(FBFR *fbfr, FLDID fieldid,int occ, char *value, FLDLEN len) 描述: 改变 fbfr 中 ID 为 fieldid 字段的值。

参数: fbfr: 指向该 FML 缓冲区首地址的指针

fieldid: 要增加的字段的 ID value: len: 该字段的新值,如果时其他类型的要转化为 char * 该字段的长度,如果不时 CARRARY 类型的,可设为 0

返回值:失败为-1,错误号保存在全局变量 Ferror 中
2.5Fget

int Fget(FBFR *fbfr, FLDID fieldid,int occ, char *value, FLDLEN *maxlen) 描述: 参数: fbfr: 指向该 FML 缓冲区首地址的指针 从 fbfr 缓冲区中取 ID 为 fieldid 字段的值到 value 中。

fieldid: 字段的 ID value: 取出的值保存到该指针指向的地址中

maxlen: 可以 COPY 到缓冲区 value 中的字符串的长度,返回值为真正 COPY 到该 缓冲区的字 符串的长度 返回值:失败为-1, 错误号保存在全局变量 Ferror 中
2.5Fprint

Fprint(FBFR *fbfr) 描述: 按格式打印 fbfr 缓冲区的内容。一般用于程序调试中。 参数: fbfr: 指向该 FML 缓冲区首地址的指针

返回值:失败为-1, 错误号保存在全局变量 Ferror 中
2.6Ferror

Ferror: 和 C 语言中的 errno 类似,当调用 FML(FML32)函数出错时,把错误号保存在 全局变量 Ferror 中。 char * Fstrerror(int err)

描述:返回错误号为 err 的错误描述 参数:err: Ferror 的值 返回值:成功返回错误描述,失败返回 NULL

3 连接的建立与断开有关的 ATMI

3.1tpchkauth

int tpchkauth() 描述: 检查该 TUXEDO SERVER 所采用的安全方式 参数:无 返回值: TPNOAUTH:不需要认证 TPSYSAUTH:需要口令认证 TPAPPSUTH:需要口令认证,并且还需要应用级的认证或授权. -1:调用失败, 错误号保存在全局变量 tperrno 中。
3.2tpinit

int tpinit(TPINIT *tpinfo)

描述: 与 TUXEDO SERVER 建立连接 参数:TPINFO 返回值: 失败返回-1, 错误号保存在全局变量 tperrno 中。

TPINIT 结构体在 atmi.h 中的定义如下 struct tpinfo_t { char char char char long long long }; typedef struct tpinfo_t TPINIT; usrname[MAXTIDENT+2]; /* client user name */ /* application client name */

cltname[MAXTIDENT+2];

passwd[MAXTIDENT+2]; /* application password */ grpname[MAXTIDENT+2]; flags; datalen; data; /* client group name */

/* initialization flags */ /* length of app specific data */ /* placeholder for app data */

说明:username,cltname,passwd,grpname,data,datalen 用于安全认证中 flags:用于定义以何种方式通知该客户端一个 UNSOLICTED MESSAGE 的到来.它的 值可以为: TPU-SIG TPU-DIP TPU-IGN TPSA-FASTPATH

TPSA-PROTECTED
3.3tpterm

int tpterm() 描述: 断开与 TUXEDO SERVER 建立连接 参数:无 返回值: 失败返回-1, 错误号保存在全局变量 tperrno 中。

4 与请求 TUXEDO SERVER 有关的 ATMI

4.1tpcall

int tpcall(char *svc, char *idata, long ilen, char **odata, long long flags) 描述:客户端同步调用服务端的名为 svc 的 SERVICE, 参数: *svc:SERVICE 的名称

*olen,

char *idata: 输入缓冲区的地址,客户端传给服务端的参数放在该缓冲区内 long ilen: char **odata long 输入缓冲区的长度 输出缓冲区的地址,服务端传给客户端的结果放在该缓冲区内

*olen:输出缓冲区的长度 调用标志,由以下几个:

long flags: TPNOTRAN

如果调用 svc 的客户端当前在 TRANSACTION 方式下,那么 svc 不参与当前的 TRANSACTION。

TPNOCHANGE 如果服务端返回的缓冲区类型与客户端定义的缓冲区(odata)类型不一致,默认 情况下,odata 会转换成与服务端返回的缓冲区类型一致的类型,如果设置了该 FLAG,那么当出现这种情况时,不进行缓冲区类型转换,并且会保错。

TPNOBLOCK 默认情况下,如果客户端有阻塞条件存在(如 CLIENT 的 TCP/IP 中的缓冲区满, 磁盘 I/O 忙等),那么客户端会阻塞在那里,直到阻塞消除或超时出错。如果设 置了 TPNOBLOCK,当客户端有阻塞条件存在时,TPCALL()会立刻返回并报错. 注 意 TPNOBLOCK 只对发送请求时起作用,如果在接收服务端返回的结果时有阻塞条 件存在,客户端会在那里等待,直到阻塞消除或超时出错

TPNOTIME 如果客户端有阻塞条件存在, 客户端会一直阻塞在那里,即使到了超时时间也不 返回,但如果该客户端是在 TRANSACTION 模式下,当到了 事务的超时时间,还是会报超时错误并返回。

TPSIGRSTRT 如果在进行系统调用时,被信号中断,该系统调用会重新进行。

调用成功返回 0,失败返回-1, 错误号保存在全局变量 tperrno 中。

4.2tpacall

int tpacall(char *svc, char *data, long len, long flags) 描述: 客户端异步调用服务端的名为 svc 的 SERVICE,不等服务端返回结果,程

序可继续往 下走,在某个地方调用 tpgetrply()取的服务端的返回 参数: char *svc, char *data, long len 参数的含义与 tpcall()中的一样 flags 可设置为:TPNOTRAN, TPNOREPLY, TPNOBLOCKTPNOTIME, TPSIGRSTRT. TPNOTRAN, TPNOBLOCKTPNOTIME, TPSIGRSTRT 的含义与与 tpcall()中的一样 TPNOREPLY:调用 tpacall()的客户端不想接收 SEVER 端的应答。如果设置了 TPNOREPLY:服务端不会给该客户端发送应答。 返回值: 失败返回-1,成功返回一个 HANDLER,可作为 tpgetrply 的参数,用于 取应答
4.3tpgetrply

int tpgetrply(int *cd, char **data, long *len, long flags) 描述:取出服务端对 tpacall()的应答。 参数: cd tpacall()返回的 HANDLER char **data 返回缓冲区的地址,服务端传给客户端的结果放在该缓冲区内 long *len:返回缓冲区的长度

flags:可以是:TPNOBLOCK, TPNOTIME,TPSIGRSTRT,TPGETANY(不管 cd 的值, 从服务 器的应答队列中取第一个可用的消息),TPNOCHANGE 返回值: 失败返回-1,错误号保存在全局变量 tperrno 中。

4.4tpcancel

int tpcancel(int handle) 描述: 如果当前的程序不处于事务模式中,取消对 tpacall()的应答, 如果处 于事务模式 中,则不能取消对 tpacall()的应答,该调用会失败. 参数: tpacall()返回的 HANDLER 返回值: 失败返回-1,错误号保存在全局变量 tperrno 中。
4.5tpgprio

int tpgprio() 描述:返回最近发送(tpcall(),tpacall())或接收(tpgetrply())的一个消息的 优先级 参数:无 返回值: 1-100 消息的优先级,值越高, 优先级越高 失败返回-1, 错误号保存在全局变量 tperrno 中。

struct { int hdl; /* handle*/ int pr; /* priority*/ } pa[SIZE]; for (i=0; i<requests; i++) { /* Determine service and data for request */ pa [i].hdl = tpacall(Svc, buf, len, flags);

/* Save priority used to send request */ pa[i].pr = tpgprio(); } /* Use qsort(3) routine to sort handles in priority order */ qsort((char*) pa, requests, sizeof(pa[0]), cmpfcn); for (i=0; i< requests; i++) { tpgetrply(&pa[i].hdl, &rbufp, &rlen, rflags); }

4.6tpsprio

int tpsprio (int prio, long flags) 描述: 设置下一个要发送的消息的优先级 参数: 0- prio 为相对值, 设置下一个要发送的消息的优先级为现在的优先级加 上 prio TPABSOLUTE: prio 为绝对值, 设置下一个要发送的消息的优先级为 prio 返回值: 失败返回-1,错误号保存在全局变量 tperrno 中。
5 与请求错误处理有关的 ATMI

5.1tpstrerror

char *tpstrerror(int tperrno) 描述:返回错误号为 tperrno 的错误描述 参数: tperrno:在 atmi.h 中定义的全局变量,用于标识错误号,类似于 C 中的 errno

返回值: 失败返回 NULL,成功返回错误号为 tperrno 的错误描述.
5.2tperrordetail

int tperrordetail(long flags) 描述: 返回当前进程或线程最近调用 ATMI 的出错的更详细的描述 参数:设为 0 返回值: 如果没有错误返回 0,有错误返回错误描述号

5.3tpstrerrordetail

char * tpstrerrordetail(int err, long flags) 描述: 返回错误描述号 err 的详细描述信息 参数: err : tperrordetail()的返回值, flags: 设为 0
返回值: 失败返回 NULL,成功返回详细描述信息



更多相关文章:
BEA Tuxedo应用初探
BEA Tuxedo应用初探 ■中央财经大学研究生 经乾 TuxedoBEA 公司的交易中间件产品,1984 年由贝尔实验室开发成功,1992 年易主 Novell 公司,1996 年由 BEA...
BEA Tuxedo应用程序开发笔记
TUXEDO简介及命令介绍 13页 免费 BEA Tuxedo中间件应用初探 18页 免费如...BEA Tuxedo 提供了一个其于 C 语言的编程接口,即应用程序事务监控接口 ATMI,这...
TUXEDO中间件介绍及应用
TUXEDO中间件介绍及应用_IT/计算机_专业资料。TUXEDO中间件介绍及应用.docTUXEDO...直到 BEA 公司 1995 年收购 Tuxedo 后,使 Tuxedo 现已经发展成为交易中间件...
tuxedo中间件架构
tuxedo中间件架构_法律资料_人文社科_专业资料。基于 tuxedo 中间件架构的应用研究 摘要 本文研究了中间件产品 BEA Tuxedo(Transaction for UNIX has been Extended ...
BEA Tuxedo应用程序开发指南
pingancapital,中间件,ppt,pdf,cics,tuxedopingancapital,中间件,ppt,pdf,cics,tuxedo隐藏>> 应用程序开发指南 第一章 开发 BEA Tuxedo 应用程序§1.1 开发前的...
tuxedo培训教程
8页 5财富值 BEA Tuxedo中间件应用初探 18页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 ...
tuxedo中间件
由像 BEATUXEDO 这样的中间件支持的组件软件模型为分布式环境处理关键性 业务应用提供了一 个结构化的 解决方案。BEA TUXEDO 和基于组件的应用设 计从异构的计算...
BEA TUXEDO快速入门
BEA TUXEDO快速入门_计算机软件及应用_IT/计算机_专业资料。BEA TUXEDO 快速入门...数据压缩 ? BEA JOLT 将 TUXEDO 中间件框架扩展到 Internet 和 Java 客户端 ...
bea_tuxedo
bea_tuxedo_IT/计算机_专业资料。近几年来,以交易中间件为框架基础的三层客户机/服务器模式已被广泛证实为建立开放式关键业务应用系统的最佳环境。这种模式的成功使...
beaTuxedo介绍文档
对数据库、中间件及其他应用软件的切换、备份或并行处理由硬件和 操作系统完成,但相关软件和系统环境需要进行相应的配置,例如编写一些 SCRIPT,BEA Tuxedo 完全支持...
更多相关标签:

All rights reserved Powered by 甜梦文库 9512.net

copyright ©right 2010-2021。
甜梦文库内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图