一、创建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模式;
⑶.嵌套调用;
⑷.调用转发;
⑸.会话通信;
⑹.主动消息通告;
⑺.基于事件的通信;
⑻.基于队列的通信;
⑼.使用事务。
二、一个简单的Tuxedo应用程序simpapp
本章介绍了BEA Tuxedo的一个简单例子,用C语言编写的simpapp,它包含了一个客户程序和一个服务器,服务器只执行一个服务:从客户程序接收小写字母,将其转换成大写后,返回给客户程序。在使用这个例子之前,需要在系统中安装C语言编译器。
准备simpapp的文件和资源:
在准备simpapp例子之前,系统中必须安装了BEA Tuxedo软件,而且要设置$TUXDIR环境变量,NT平台下为%TUXDIR%,并把%TUXDIR%\bin加到PATH中,最后还要确保你的工作目录要有写权限。完成这些工作后,请按如下步骤来准备simpapp程序:
⑴. 复制simpapp所需要的所有文件,它们位于$TUXDIR/samples/atmi/simpapp目录下;
⑵. 检查并编译客户程序;
⑶. 检查并编译服务程序;
⑷. 编辑并加载配置文件;
⑸. 启动应用程序;
⑹. 执行运行时应用程序;
⑺. 监视运行时应用程序;
⑻. 关闭应用程序。
完成这个例子后,你应该理解客户程序和服务器所执行的任务,根据你的环境编写一个配置文件,通过tmadmin检查应用程序的活动。同时,你应该理解BEA Tuxedo应用程序的基本组成部分:客户程序、服务器程序、配置文件,通过BEA Tuxedo系统的哪些命令来管理你的应用程序。
1.复制simpapp例子的相关文件
⑴.创建目录:
⑵.设置并导出环境变量
TUXDIR=BEA Tuxedo系统的根目录,如UNIX系统下可以设置为:
TUXDIR= "/usr/tuxedo "
,NT系统下可以设置为:
TUXDIR= "G:\Program Files\BEA System\Tuxedo "
TUXCONFIG=当前工作目录加上/tuxconfig,如UNIX系统下可以设置为:
TUXCONFIG= "/usr/me/simpdir/tuxconfig "
,NT系统下可以设置为:
TUXCONFIG= "G:\simpdir\tuxconfig "
PATH=$PATH:$TUXDIR/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TUXDIR/lib
export TUXDIR TUXCONFIG PATH LD_LIBRARY_PATH
TUXDIR和PATH用于访问BEA Tuxedo系统的文件和执行命令,在Sun Solaris系统中,必须把/usr/5bin放在PATH中的第一个,在RS6000中的AIX上,将LD_LIBRARY_PATH替换成LIBPATH,在HP9000中的HP-UX上,将LD_LIBRARY_PATH替换为SHLIB_PATH。
设置TUXCONFIG的目的是用于加载配置文件。
⑶.复制simpapp文件,
cp $TUXDIR/samples/atmi/simpapp/* .
⑷.查看文件
$ls
README env simpapp.nt ubbmp wsimpcl
README.as400 setenv.cmd simpcl.c ubbsimple
README.nt simpapp.mk simpserv.c ubbws
文件说明:
simpcl.c客户程序的源代码
simpserv.c服务程序的源代码
ubbsimple应用程序配置文件的纯文本形式
2.检查并编译客户程序
⑴.检查客户程序
$more simpcl.c
⑵.编译客户程序
$buildclient -o simpcl -f simpcl.c
-o指明输出目标文件名,-f指出源文件名
3.检查并编译服务程序
⑴.检查服务程序
$more simpserv.c
⑵.编译服务器
$buildserver -o simpserv -f simpserv.c -s TOUPPER
-s TOUPPER指明了在服务器启动时需要提供的服务
4.编辑并加配置文件
⑴.怎样编辑配置文件
⑵.加载配置文件
$ tmloadcf ubbsimple
Initialize TUXCONFIG file: /usr/me/simpdir/tuxconfig [y, q] ? y
$
5.启动应用程序
⑴. 执行tmboot启动应用程序
$tmboot
Boot all admin and server processes? (y/n): y
Booting all admin and server processes in
/usr/me/simpdir/tuxconfig
Booting all admin processes ....
exec BBL -A:
process id=24223 ... Started.
Booting server processes ...
exec simpserv -A :
process id=24257 ... Started.
2 processes started.
BBL是应用程序中监视共享内存结构的管理进程,simpserv是连续运行的simpapp服务程序,它等待着处理请求。
6.如何执行运行时应用程序
$ simpcl "hello, world "
Returned string is: HELLO, WORLD
8.如何关闭应用程序
⑴. 运行tmshutdown命令来关闭应用程序
⑵. 检查ULOG文件
$ cat ULOG*
7.如何监视运行时应用程序
作为管理者,你可以使用tmadmin命令解释器来检测一个应用程序,并作一些动态的改变,要运行该命令,��必须设置TUXCONFIG环境变量。tmadmin可以解释超过50个命令,要看完整的列表,请看tmadmin(1),这里我们使用了两个tadmin命令。
⑴.输入如一命令:
$tmadmin
显示:
tmadmin - Copyright (c) 1999 BEA Systems, Inc. All rights
reserved.
>
⑵.输入printserver(psr)命令,显示:
> psr
a.out Name Queue Name Grp Name ID RqDone Load Done Current Service
-------------- --------------- ------------- -- --------- -------------- ------------------
BBL 531993 simple 0 0 0 ( IDLE )
simpserv 00001.00001 GROUP1 1 0 0 ( IDLE )
⑶.输入printservice(psc)命令,显示:
Service Name Routine Name a.out Name Grp Name ID Machine # Done Status
------------ --- ------------------ ------------- ------------ --- ---------- --------- ---------
TOUPPER TOUPPER simpserv GROUP1 1 simple - AVAIL