一个TUXEDO 应用可以分成3部分:(1)发布交易请求的客户端(2)运行响应请求交易的服务(3)描述应用机器和服务信息的配置文件。以下是tuxedo的一个简单例子,大家很容易能从这个例子中明白中间件的编程思想,程序的各个函数都加上了注释以便于理解。
程序功能:客户端请求交易"TOUPPER",数据是"hello world"。交易"TOUPPER"将字符串转成大写,将结果成功返回客户端。
程序代码:
(1)客户端程序:
#include
#include "atmi.h"
/*包含TUXEDO系统的头文件"atmi.h",以便引用TUXEDO的函数和变量定义。*/
main()
{
char *buf;
long len;
/*客户端调用tpinit()连接应用*/
if (tpinit((TPINIT * )NULL) == -1)
{
exit(1);
}
/*用tpalloc()分配一个STRING类型数据缓冲*/
if ((buf=tpalloc("STRING",NULL,80))==NULL)
{
tpterm();
exit(2);
}
/*将"hello world"拷贝进缓冲*/
strcpy(buf, "hello world");
/*用tpcall()包含数据缓冲,向交易"TOUPPER"发一个同步请求*/
if ( tpcall("TOUPPER",buf,0,&buf,&len,0)== -1)
{
fprintf(stderr,"service requst failn");
tpfree(buf);
tpterm();
exit(3);
}
/*打印出改变的数据缓冲*/
printf("return string is :%sn",buf);
tpfree(buf);
/*调用tpterm()切断与应用的连接*/
tpterm();
exit(0);
}
(2)交易程序(服务端程序):
#include
#include
#include "atmi.h"
/*包含TUXEDO系统头文件"atmi.h"*/
/* 象所有的TUXEDO交易函数一样,TOUPPER不用直接返回任何值,所以返回类型为void */
/*从客户端收到的数据放在TPSVCINFO结构中,是唯一的入参*/
void TOUPPER (TPSVCINFO *rqst)
{
int i;
for ( i=0;i
rqst->data[i] = toupper(rqst->data[i]);
/*用tpreturn()将数据缓冲返回客户端*/
tpreturn(TPSUCCESS,0,rqst->data,0L,0);
}
(3)配置文件
有关应用的信息,如可用交易,交易位置,应用范围等,有必要集中管理于单一资源。事实上,这些信息被集中于文件UBBCONFIG。
如下所示(每个字段的含义参见BEA公司的文档):
#file : ubbconfig
*RESOURCES
IPCKEY 5000
MASTER SITE1
MODEL SHM
*MACHINES
gumby LMID=SITE1
TUXDIR ="/usr/tuxedo"
APPDIR ="/usr/apps/simpapp"
TUXCONFIG ="/usr/apps/simpapp/simpapp.tux"
*GROUPS
GROUP1 LMID=SITE1 GRPNO=1
*SERVERS
simpserv SRVGRP=GROUP1 SRVID=1
*SERVICES
TOUPPER
(4)建立应用
建立一个TUXEDO应用,必须进行以下步骤:
设置环境变量:TUXEDO用户目录(TUXDIR)、二进制配置文件名(TUXCONFIG)、TUXEDO可执行文件路径、公共库路径(LD_LIBRARY_PATH)
用buildclient命令从源程序编译出客户端可执行文件:buildclient -f client.c -o client -v
用buildserver命令从源程序编译出服务端可执行文件,-s参数列出提供的交易:buildserver -f simpserv.c -o simpserv -s TOUPPER -v
用tmloadcf命令从文本配置文件ubbconfig生成二进制配置文件tuxconfig:tmloadcf -y ubbconfig
好了。一个简单的tuxedo程序就算完成了。开发TUXEDO C/S系统的必要步骤无非就是:配置环境变量、编码并编译客户端和服务端的程序、由文本的ubbconfig生成二进制TUXCONFIG、启动系统和服务、测试应用和关闭系统。
本篇文章来源于 中间件技术社区(http://middleware123.com) 原文链接:http://middleware123.com/tuxedo/intro/313_3.html