前言
通过一段时间的工作,使用了在Unix环境下的Tuxedo服务,对Tuxedo的架构与机制有了初步的了解。为了加深了解,掌握Tuxedo中间件的开发,特地在Windows操作系统环境下安装了一次Tuxedo,并且成功启动了服务。将全过程中遇到的问题和积累的经验记录如下。
安装准备
首先要明确安装Tuxedo的目的,否则费尽艰辛发现对自己毫无用处,就等于浪费时间。Tuxedo是Bea公司开发的在联机事务处理(OLTP)方面十分著名的中间件软件。据查,全世界40家最大的电信企业,有38家是采用Tuxedo作为交易中间件来使用的,足见其在行业中之地位。学习并掌握Tuxedo的架构,对于研究分布式计算,有着十分重要的参考价值;开发就更不用说了,电信行业及其附属公司招聘有经验开发人员时候,通常将掌握Tuxedo中间件的开发作为首要资历条件。
言归正传,从Bea的官方网站下载Tuxedo8.1以及相应的4-6个月的评估License,通常在下载网页最后可以得到。
操作系统要求为WinNT、2000,虽然没有说明XP,但因为XP也是基于NT核心的,所以XP也是可以正常安装和运行的,我在Win2000(p)与XP下都成功启动了服务,足以说明这一点。
硬盘内存的要求,在这个时代来说,基本上算是落伍的了。
安装以及配置
如果怕麻烦,运行安装文件,选择Full Setup,跳过加密传输设置,一直到安装结束。
环境变量
安装Tuxedo过程虽然很爽,但还没完,接下来的工作就是配置环境变量。安装结束,我们可以在本机的环境变量中看到自动配置好的TUXDIR,貌似TUXDIR=C:\BEA\Tuxedo8.1。这是不够的,系统还需要加上几项才行。
[补充:环境变量配置方法]
右键点击我的电脑-属性-高级-环境变量,可以看到分为系统和用户的环境变量。联想一下不难推断,系统的表示每次所有用户的设置,而用户的则只是在对应的用户登陆后才生成个性化的环境变量。按照自己需要,可以添加各种环境变量。但注意,在这里设置的,并不能马上生效,因为这是系统启动时候参照的一个表而已,设置时候系统是已经启动了的。有过Unix下配置环境变量的朋友肯定会想到.Profile文件,和这里就是差不多一样的概念。如果想要马上生效,那么可以象Unix的export那样,用Set在Dos界面下操作,比如Set TUXAPP=C:\TUXAPP。设置成功之后,可以用echo %TUXAPP% 查看是否设置成功。
还需要为系统增加的环境变量有:
TUXCONFIG=e:\tuxapp\tuxconfig
TUXDIR=C:\bea\tuxedo8.1
APPDIR=e:\tuxapp
这些环境变量将来要与配置文件中的一致。
为了让系统识别Tuxedo的指令,将PATH中增加%TUXDIR%\bin。另外,装了VC的朋友,检查VC的编译器CL路径是否被包含在PATH里,还有INCLUDE、LIB环境变量,这些都会影响CL编译Tuxedo服务。具体的问题,需要在调试中发现,针对不同的编译工具进行变动。
Tuxconfig配置文件
这个文件是最重要的Tuxedo配置文件,几乎大部分的服务参数都和这个有关。TUXCONFIG文件必须由Tuxedo的tmloadcf命令来执行生成,是一个二进制文件,而来源则是一个特定内容的文本文件,我所配置的ubb文件内容如下:
*RESOURCES
IPCKEY 211111
MASTER "xj"
DOMAINID modelapp
MAXACCESSERS 100
MODEL SHM
LDBAL Y
SCANUNIT 10
SANITYSCAN 12
BLOCKTIME 6
NOTIFY DIPIN
MAXCONV 10
*MACHINES
"POSONXIAOJ" LMID="xj"
TUXCONFIG="e:\tuxapp\tuxconfig"
TUXDIR="C:\bea\tuxedo8.1"
APPDIR="e:\tuxapp"
TLOGSIZE=100
MAXWSCLIENTS=5
CMPLIMIT="MAXLONG,MAXLONG"
NETLOAD=0
SPINCOUNT=0
MAXACLCACHE=100
*GROUPS
GROUP_ORA LMID=xj GRPNO=1
*SERVERS
DEFAULT:
CLOPT="-A"
WSL SRVGRP=GROUP_ORA SRVID=200
CLOPT="-A -t -- -n //192.168.2.101:4050 -m 10 -M 20 -x 5"
gg SRVGRP=GROUP_ORA SRVID=1 MIN=1 MAX=1
RQADDR="foreground" REPLYQ=Y
*SERVICES
很多内容都有缺省值,因此并不要求都填写,红色部分是Tuxedo官方文档必须填写的内容。其他的配置相信网上很容易就搜索到无数,我只是挑几个相对不好理解的配置说明一下。
LMID是机器的逻辑名,可以是任意的字符,官方要求是:用户定义的字符串,必须要与*machines一节中一致。因此,对应几个LMID都任意设置成MASTER后字符相同就行了。
TUXCONFIG是指明配置文件的,不要以为是指路径,如果指定成了目录,在后面的编译中就会出错。而且要求参数最大长度不能超过64个字符,所以文件目录的深度不能太深。
*MACHINES
"XXX" LMID="xj"
这一节中的XXX,一定要大写,计算机名在DOS下用echo %COMPUTERNAME% 可以查到。
服务程序的编译
在配置好ubb配置文本文件之后,确保在访问的路径之内,执行tmloadcf –y ubb
这样,系统就会生成Tuxedo的配置文件。
过程中可能会因为配置文件语法错误,而有相应的提示。参照例子以及自己机器的配置,并且对照Tuxedo的参数说明,修改自己的配置文件或者环境变量一般都能解决问题。
当无任何编译错误,就可以开始编译服务程序了。
给个最简单的例子:
#include <stdio.h>
#include "atmi.h"
void TOUPPER(TPSVCINFO *rqst)
{
char a[10] = "xxUU";
tpreturn(TPSUCCESS,0,a,0L,0);
}
保存为gg.c
然后,在命令行下执行buildserver –o gg.exe –f gg.c –s TOUPPER
-o 输出
-f 要编译的源文件,我尝试过编译gg.cpp,仅修改后缀,编译无法通过。
-s 源程序中不同的服务函数名
相信经过一些调试,服务程序最终将编译成功。(因为都已调试通过)
完成上面这些配置和编译之后,就可以来享受成功的喜悦了。
tmboot -y
….
一堆成功信息
tmadmin
进入管理界面
psr
看到自己的gg服务,以及wsl
psc
看到自己的TOUPPER服务
pq
看到自己设置的消息队列名
q
….
Quit当然是退出了
Tmshutdown -y
将服务全部关闭
仍然有很多没有说明的,但在这个基础上,就可以进行下一步开发了。
今后开发完再补充更为详细的资料。