BEA Tuxedo应用程序开发笔记

  • 格式:doc
  • 大小:29.00 KB
  • 文档页数:4

BEA Tuxedo应用程序开发笔记
1、创建BEA Tuxedo的客户程序
创建BEA Tuxedo的客户程序与在C和C++编程语言中创建其它应用程序一样,BEA Tuxedo提供了一个其于C语言的编程接口,即应用程序事务监控接口ATMI,这套接口很容易使用,以便用于开发客户程序和服务程序。

除了C语言接口外,BEA Tuxedo 还提供了COBOL接口
客户程序一般执行如下任务:
⑴.调用tpchkauth()决定加入一个应用程序所需的安全级别。

可能出现的响应包括:没有安全级别,应用程序口令,应用程序授权,访问控制列表,连接级加密,公钥加密,审计。

这些可以根据你的需求进行选择;
⑵.调用tpinit()来连接到一个BEA Tuxedo应用程序,所需的安全信息作为tpinit()的参数传给了应用程序;
⑶.执行服务请求;
⑷.调用tpterm()来断开和BEA Tuxedo应用程序的连接。

2、创建的服务程序
尽管开发者使用ATMI编程接口来创建BEA Tuxedo客户程序和服务程序,但服务程序不全部由开发者来编写,开发者只需写一些称为服务的商业函数,然后和BEA Tuxedo的一些二进制程序联编成一个可执行的服务程序。

BEA Tuxedo服务程序启动后,它总是保持运行状态,只到接收到一个shutdown消息为止。

一个典型的BEA Tuxedo服务程序在shutdown或reboot之前都在执行着数千个服务。

服务程序一般执行以下任务:
⑴.在BEA Tuxedo服务程序启动时,执行tpsvrinit()函数,可以在里面打开一些如数据库之类的资源供以后使用;
⑵.在BEA Tuxedo服务程序关闭时,执行tpsvrdown()函数,可以在里面关闭tpsvrinit()中打开的资料;
⑶.BEA Tuxedo服务程序以服务的形式来响应客户程序的请求,客户程序不是通过名字来调用服务程序的,而是调用服务,客户程序不知道处理它请求的服务程序的位置;
⑷.服务程序调用tpreturn()函数来结束服务请求,并返回一个缓冲区,必要时,将它传给客户程序;
3、在应用程序中使用类型缓冲区
在Bea Tuxedo系统中的所有通信过程都是通过类型缓冲区来完成的,Bea Tuxedo 系统提供了大量的类型缓冲区来供开发者使用。

所有类型缓冲区都必须通过Bea Tuxedo的tpalloc(), tprealloc(), tpfree()这些ATMI来分配回收,它们都有特定的头部。

统一定义的类型缓冲区可以使它们在跨越不同网络、不同协议、不同CPU构架以及不同操作系统之间得到统一的处理,这就使得开发者在分布式计算环境中有效地避开了异构网络和异构计算机系统带来的差异,把精力集中在商业逻辑的开发上。

BEA Tuxedo系统提供多种通信模式:
⑴.同步Request/Response模式;
⑵.异步Request/Response模式;
⑶.嵌套调用;
⑷.调用转发;
⑸.会话通信;
⑹.主动消息通告;
⑺.基于事件的通信;
⑻.基于队列的通信;
⑼.使用事务。

最简单的类似HelloWorld的tuxedo程序
一个TUXEDO 应用可以分成3部分:
(1)发布交易请求的客户端
(2)运行响应请求交易的服务
(3)描述应用机器和服务信息的配置文件。

以下是tuxedo的一个简单例子,大家很容易能从这个例子中明白中间件的编程思想,程序的各个函数都加上了注释以便于理解。

程序功能:客户端请求交易"TOUPPER",数据是"hello world"。

交易"TOUPPER"将字符串转成大写,将结果成功返回客户端。

程序代码:
(1)客户端程序:
#include <stdio.h>
#include "at mi.h"
/*包含TUXEDO系统的头文件"at mi.h",以便引用TUXEDO的函数和变量定义。

*/
main()
{
char *buf;
long len;
/*客户端调用tpinit()连接应用*/
if (tpinit((TPINIT * )NULL) == -1)
{
exit(1);
}
/*用tpalloc()分配一个STRING类型数据缓冲*/
if ((buf=tpalloc("ST RING",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 fail\n");
tpfree(buf);
tpterm();
exit(3);
}
/*打印出改变的数据缓冲*/
printf("return string is :%s\n",buf);
tpfree(buf);
/*调用tpterm()切断与应用的连接*/
tpterm();
exit(0);
}
(2)交易程序(服务端程序):
#include <stdio.h>
#include <ctype.h>
#include "at mi.h"
/*包含TUXEDO系统头文件"at mi.h"*/
/* 象所有的TUXEDO交易函数一样,TOUPPER不用直接返回任何值,所以返回类型为void */
/*从客户端收到的数据放在TPSVCINFO结构中,是唯一的入参*/
void TOUPPER (TPSVCINFO *rqst)
{
int i;
for ( i=0;i<rqst->len-1;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。