BEA Tuxedo应用程序开发指南.doc
《BEA Tuxedo应用程序开发指南.doc》由会员分享,可在线阅读,更多相关《BEA Tuxedo应用程序开发指南.doc(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、应用程序开发指南第一章 开发BEA Tuxedo应用程序1.1 开发前的思考在开发BEA Tuxedo应用程序之前,你需要先搞清楚一系列和设计开发相关的概念,如识别什么是客户机,有哪些方法可以从外界收集数据并提交服务器进行业务处理;识别什么是服务器,哪些程序包容了可以处理客户机输入的商业逻辑;识别什么是类型缓冲区,客户程序在向其这程序发送数据前如何分配内存区域;什么是BEA Tuxedo的消息范例等。最后你还要弄明白客户程序是通过调用ATMI库来访问BEA Tuxedo系统的。1.2 创建BEA Tuxedo的客户程序创建BEA Tuxedo的客户程序与在C和C+编程语言中创建其它应用程序一样
2、,BEA Tuxedo提供了一个其于C语言的编程接口,即应用程序事务监控接口ATMI,这套接口很容易使用,以便用于开发客户程序和服务程序。除了C语言接口外,BEA Tuxedo还提供了COBOL接口。客户程序的任务客户程序一般执行如下任务: 调用tpchkauth()决定加入一个应用程序所需的安全级别。可能出现的响应包括:没有安全级别,应用程序口令,应用程序授权,访问控制列表,连接级加密,公钥加密,审计。这些可以根据你的需求进行选择; 调用tpinit()来连接到一个BEA Tuxedo应用程序,所需的安全信息作为tpinit()的参数传给了应用程序; 执行服务请求; 调用tpterm()来断
3、开和BEA Tuxedo应用程序的连接。1.3 创建的服务程序尽管开发者使用ATMI编程接口来创建BEA Tuxedo客户程序和服务程序,但服务程序不全部由开发者来编写,开发者只需写一些称为服务的商业函数,然后和BEA Tuxedo的一些二进制程序联编成一个可执行的服务程序。BEA Tuxedo服务程序启动后,它总是保持运行状态,只到接收到一个shutdown消息为止。一个典型的BEA Tuxedo服务程序在shutdown或reboot之前都在执行着数千个服务。服务程序的任务 在BEA Tuxedo服务程序启动时,执行tpsvrinit()函数,可以在里面打开一些如数据库之类的资源供以后使用
4、; 在BEA Tuxedo服务程序关闭时,执行tpsvrdown()函数,可以在里面关闭tpsvrinit()中打开的资料; BEA Tuxedo服务程序以服务的形式来响应客户程序的请求,客户程序不是通过名字来调用服务程序的,而是调用服务,客户程序不知道处理它请求的服务程序的位置; 服务程序调用tpreturn()函数来结束服务请求,并返回一个缓冲区,必要时,将它传给客户程序;1.4 在应用程序中使用类型缓冲区在Bea Tuxedo系统中的所有通信过程都是通过类型缓冲区来完成的,Bea Tuxedo系统提供了大量的类型缓冲区来供开发者使用。所有类型缓冲区都必须通过Bea Tuxedo的tpal
5、loc(), tprealloc(), tpfree()这些ATMI来分配回收,它们都有特定的头部。统一定义的类型缓冲区可以使它们在跨越不同网络、不同协议、不同CPU构架以及不同操作系统之间得到统一的处理,这就使得开发者在分布式计算环境中有效地避开了异构网络和异构计算机系统带来的差异,把精力集中在商业逻辑的开发上。1.5 在BEA Tuxedo应用程序中使用消息范例1BEA Tuxedo系统提供多种通信模式 同步Request/Response模式; 异步Request/Response模式; 嵌套调用; 调用转发; 会话通信; 主动消息通告; 基于事件的通信; 基于队列的通信; 使用事务。2
6、 同步的Request/Response模式要进行同步调用,Bea Tuxedo客户程序使用ATMI函数tpcall()把一个请求送到服务程序,它不是通过名字来调用服务程序的,而是通过特定的服务来完成。客户程序要等到服务程序作出响应后才处理后面的工作,也就是说,它在收到服务程序的响应之前一直处于阻塞状态。3异步Request/Response模式要进行异步调用,客户程序必须调用两个ATMI函数:tpacall(3c)函数,用于请求一个服务;tpgetrply(3c)函数,用于取得服务程序的响应。客户程序在请求和响应之间要完成特定任务时,可以采用这种模式。4使用嵌套调用一个服务可以充当BEA T
7、uxedo客户程序,去调用其它BEA Tuxedo服务,换句话说,你请求的服务需要调用其它服务才能处理请求。BEA Tuxedo客户程序调用了服务X,等待它的响应,服务X调用服务Y后也处于等待状态,当服务X得到响应后,再给客户程序一个响应,这种机制的特点是效率高。5使用调用转发在嵌套服务中,最里层嵌套服务可以直接给客户程序一个响应,没有必要按照调用栈逐级返回,这就使其它嵌套服务可以处理其它请求,当第一个服务是一个分发代理时,这种模式是非常有用的。在嵌套调用中,被客户调用的服务X使用tpforward(3c)函数把请求传给服务Y,服务X没有tpreturn(3c)函数。客户程序不用管请求是由谁来
8、完成的,因此,转发调用对客户程序是透明的。6会话通信会话通信适合于有多个缓冲区需要以有状态的方式在BEA Tuxedo客户程序和服务之间传递的场合。恰当地使用BEA Tuxedo的会话,因为参与会话的服务器在会话结束之前是不可用的。要完成会话通信,你的代码需要遵循如下步骤: 客户程序使用tpconnect()启动会话; 客户程序和服务使用tpsend()和tprecv()函数进行数据交换,一个特殊的标记指示着当前由哪一方来控制着会话; 当服务程序调用tpreturn()或tpdiscon()函数时,会话正常终止。7主动消息通告要处理服务器的消息通知,客户程序必须使用tpsetunsol()函数
9、来创建一个消息处理器,要发送主动消息,BEA Tuxedo客户程序或服务程序可以调用tpnotify()来把消息传递给单个客户程序,也可以通过tpbroadcast()函数来把消息同时广播给多个客户程序。当客户程序收到主动消息后,BEA Tuxedo系统调用客户程序的主动消息处理器来处理。在一个基于信号系统中,客户程序没有必要处理所有的主动消息,然而,在一个非信号系统中,客户程序必须使用tpchkunsol()函数来检查主动消息。当客户程序调用一个服务请求时,tpchkunsol()被隐含地调用。在调用tpnotify()时,如果你设置了tpack标记位,你将会收到一个请求通知。8基于事件的通
10、信在基于事件的通信中,事件可以被发送到应用程序队列、LOG文件和系统命令。当BEA Tuxedo服务或客户程序调用tppost()函数时,任何一个BEA Tuxedo客户程序都可以使用tpsubscribe()函数订阅用户自定义事件;当BEA Tuxedo系统检测事件时,客户程序也可以订阅系统定义事件。当一个服务器死了,.SysServerDied事件就会被发布,它由BEA Tuxedo系统自动完成,不需要应用服务器干预。9基于队列的通信为了实现了和/Q系统的接口,BEA Tuxedo客户程序使用两个ATMI函数,使用tpenqueue()把消息放入队列空间,使用tpdequeue()来把消息
11、从队列空间中取走。下面演示了点对点异步消息机制。一个客户程序使用tpenqueue()函数将消息传给服务,响应队列和失败队列的名字可以作为参数包含在tpenqueue()调用中,由于在队列中的数据是持续的,因此,所有和排队消息相关的响应消息和失败消息都可以从相应的响应队列和失败队列中取得。客户程序可以使用缺省的排队顺利,即按放放顺利排队,先进先出;也可以改变排队规则,如把一个消息放在队列开始,或放到另一个队列前面。Tpenqueue()调用把消息送到TMQUEUE服务器,并被放入固定存储体中进行排队,然后给客户程序发送一个通知消息。队列管理器给消息分配一个标识符,使用它可以随时将消息踢出队列,
12、也可以用于tpenqueue()中,指示将新消息紧挨着标识符标识的消息。在消息出队时,要出队消息的事务必须成功地提交。客户程序使用tpdequeue()来使消息出队。下面演示了消息被转发到另一个服务器。客户程序发出一个消息,要调用服务器上的X服务,X服务接收消息后,处理消息中的指令,然后把响应放入队列空间,客户程序再从队列空间中取出。排队系统对于服务来说是透明的,也就是说,不论服务请求是从队列发出的,还是通过tp(a)call发出的,服务都能接受。10使用事务要使用事务,应用程序开发者需要使用如下ATMI函数: tpbegin(),用于开始一个事务; tpcommit(),开始一个二阶段提交处
13、理; tpabort(),产即终止事务。任何放在begin,commit/abord之外的代码不包含事务中。在下面的例子中,客户程序打开了一个事务,请求了两个服务,并且提交了事务。因为服务请求是在事务开始和提交之间完成的,所以两个服务的行为都被了事务记录。第二章 一个简单的Tuxedo应用程序simpapp本章介绍了BEA Tuxedo的一个简单例子,用C语言编写的simpapp,它包含了一个客户程序和一个服务器,服务器只执行一个服务:从客户程序接收小写字母,将其转换成大写后,返回给客户程序。在使用这个例子之前,需要在系统中安装C语言编译器。准备simpapp的文件和资源在准备simpapp例
14、子之前,系统中必须安装了BEA Tuxedo软件,而且要设置$TUXDIR环境变量,NT平台下为%TUXDIR%,并把%TUXDIR%bin加到PATH中,最后还要确保你的工作目录要有写权限。完成这些工作后,请按如下步骤来准备simpapp程序: 复制simpapp所需要的所有文件,它们位于$TUXDIR/samples/atmi/simpapp目录下; 检查并编译客户程序; 检查并编译服务程序; 编辑并加载配置文件; 启动应用程序; 执行运行时应用程序; 监视运行时应用程序; 关闭应用程序。完成这个例子后,你应该理解客户程序和服务器所执行的任务,根据你的环境编写一个配置文件,通过tmadmi
15、n检查应用程序的活动。同时,你应该理解BEA Tuxedo应用程序的基本组成部分:客户程序、服务器程序、配置文件,通过BEA Tuxedo系统的哪些命令来管理你的应用程序。1复制simpapp例子的相关文件 创建目录:mkdir simpdircd simpdir 设置并导出环境变量TUXDIR=BEA Tuxedo系统的根目录,如UNIX系统下可以设置为:TUXDIR=/usr/tuxedo,NT系统下可以设置为:TUXDIR=G:Program FilesBEA SystemTuxedoTUXCONFIG=当前工作目录加上/tuxconfig,如UNIX系统下可以设置为:TUXCONFIG
16、=/usr/me/simpdir/tuxconfig,NT系统下可以设置为:TUXCONFIG=G:simpdirtuxconfigPATH=$PATH:$TUXDIR/binLD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TUXDIR/libexport TUXDIR TUXCONFIG PATH LD_LIBRARY_PATHTUXDIR和PATH用于访问BEA Tuxedo系统的文件和执行命令,在Sun Solaris系统中,必须把/usr/5bin放在PATH中的第一个,在RS6000中的AIX上,将LD_LIBRARY_PATH替换成LIBPATH,在HP9000
17、中的HP-UX上,将LD_LIBRARY_PATH替换为SHLIB_PATH。设置TUXCONFIG的目的是用于加载配置文件。 复制simpapp文件,cp $TUXDIR/samples/atmi/simpapp/* . 查看文件$lsREADME env simpapp.nt ubbmp wsimpclREADME.as400 setenv.cmd simpcl.c ubbsimpleREADME.nt simpapp.mk simpserv.c ubbws文件说明:simpcl.c客户程序的源代码simpserv.c服务程序的源代码ubbsimple应用程序配置文件的纯文本形式2检查并编
18、译客户程序 检查客户程序$more simpcl.c#include #include atmi.h/* TUXEDO的头文件 */#if defined(_STDC_) | defined(_cplusplus)main(int argc, char *argv)#elsemain(argc, argv)int argc;char *argv;#endifchar *sendbuf, *rcvbuf;long sendlen, rcvlen;int ret;if(argc != 2) (void) fprintf(stderr, Usage: simpcl stringn);exit(1);
19、/* 作为一个客户过程连接到System/T */if (tpinit(TPINIT *) NULL) = -1) (void) fprintf(stderr, Tpinit failedn);exit(1);sendlen = strlen(argv1);/* 分配一个供请求响应使用的STRING 缓冲区 */if(sendbuf = (char *) tpalloc(STRING, NULL, sendlen+1) = NULL) (void) fprintf(stderr,Error allocating send buffern);tpterm();exit(1);if(rcvbuf
20、= (char *) tpalloc(STRING, NULL, sendlen+1) = NULL) (void) fprintf(stderr,Error allocating receive buffern);tpfree(sendbuf);tpterm();exit(1);(void) strcpy(sendbuf, argv1);/* Request the service TOUPPER, waiting for a reply */ret = tpcall(TOUPPER, (char *)sendbuf, 0, (char *)&rcvbuf, &rcvlen, (long)0
21、);if(ret = -1) (void) fprintf(stderr, Cant send request to service TOUPPERn);(void) fprintf(stderr, Tperrno = %dn, tperrno);tpfree(sendbuf);tpfree(rcvbuf);tpterm();exit(1);(void) fprintf(stdout, Returned string is: %sn, rcvbuf);/* Free Buffers & Detach from System/T */tpfree(sendbuf);tpfree(rcvbuf);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BEA Tuxedo应用程序开发指南 Tuxedo 应用程序 开发 指南
限制150内