TUXEDO8.1例子程序bankapp要点提示
TUXEDO带的bankapp在使用的时候会碰到一些问题,做少量修改就可以使用。
现把一些关键之处进行说明。
注:
详细的使用说明请参考TUXEDO8.1的文档“Tutorial for bankapp, a Full C Application”一节。
此处只针对可能出错的地方进行说明。
环境:
TUXEDO8.1,WINDOWS2000,安装Microsoft Visual Studio.net(VC7)。
一:对使用Tuxedo Sql Resource Manager(默认)要注意的问题:
设置环境变量:
脚本bankvar中作如下设置:
set MSDEV=D:\Program Files\Microsoft Visual Studio .NET\Vc7
set PATH=%PATH%;%MSDEV%\bin;%MSDEV%\PlatformSDK\bin
set INCLUDE=%INCLUDE%;%MSDEV%\include;%MSDEV%\PlatformSDK\include;%MSDEV%\atlmfc\include
set LIB=%LIB%;%MSDEV%\lib;%MSDEV%\PlatformSDK\lib;%MSDEV%\atlmfc\lib
MAKEFILE:
对bankapp\nt\client\client.mak做如下更改:
原始:
bankappn.rbj: bankappw.res
cvtres -machine:$(MACH) -nologo bankappw.res -out:bankappn.rbj
改为:
bankappn.rbj: bankappw.res
cvtres -machine:$(MACH) -nologo -out:bankappn.rbj bankappw.res
说明:
cvtres的参数要按顺序,否则会报错,可以用cvtres/?查看参数格式。
不必单编译每个应用,如果你的MAKEFILE名为bankapp.mak,则使用如下命令编译:
nmake -f bankapp.mak
注意:由于如D:\Program Files\..形式的目录中含有空格,在MAKEFILE中如使用-I$(INCLUDEDIR)等形式的声明,
则解析时会在遇到空格处截断,造成编译失败。所以,如果遇到这样的问题,尽量使用-I"$(INCLUDEDIR)"的形式。
Create Database: (user Tuxedo Sql resource manager)
Create TLOG:
Boot bankapp:
如果建库的时候出错,删掉文件bankdl1,bankdl2,bankdl3,TLOG,
清除IPC资源(采用命令:ipclean, 用ipcs查看IPC情况),
重新运行:
crbank
crtlog -m
如果这两步都正确了。运行tmboot,如果应用boot失败,则用ipcs看看IPC占用情况,
用ipclean清除所有IPC资源,再tmboot试试。
boot成功后运行bankappn.exe可以弹出一个WINDOWS界面的客户端程序。
二:对使用Oracle8(XA RM)要注意的问题:
环境:Oracle817, 安装在本机,其他环境同上。
在MAKEFILE中变量设置:
Oracle817中precompile的目录在$(ORACLE_HOME)\precomp,而不是$(ORACLE_HOME)\pro80,应做相应改正。
precompile的程序是$(ORACLE_DIR)\proc,而不是$(ORACLE_DIR)\proc80,应做相应改正。
对程序的修改:
bankapp的程序需要做如下修改方可使用Oracle编译:
1.所有的*.ec文件中增加以下三行:
#include <sqlda.h>
#include <sqlca.h>
#include <sqlcpr.h>
删除
#include <sqlcode.h>
2.在文件bankflds.h中增加如下定义:
#define SQLCODE sqlca.sqlcode
#define SQLNOTFOUND -100
#define SQL_OK 0
#define QLDEADLOCK -43 /* killed because of timeout or deadlock */
出现SQLCODE没有定义等错误就是由于没有定义这几个宏。
3.在util.c中增加:
#include "bankflds.h"
4.在文件TLR.ec中增加:
#include <Uunix.h>
避开文件冲突:
TUXEDO带有sqlca.h,sqlda.h,sqlcode.h,可能会与Oracle的相同文件冲突,
建议将$(TUXDIR)\include目录下的这三个文件改名。
做好上面的修改,就可以按照Tutorial的说明进行编译了。
创建数据库:
BOOT应用:
tmboot,如果TMS_ORA fail, 检查ULOG文件,若出现如下信息:
150049.LHL!BBL.1500.1608.0: 06-11-2003: Tuxedo Version 8.1 32-bit Windows.
150049.LHL!BBL.1500.1608.0: LIBTUX_CAT:262: INFO: Standard main starting
150049.LHL!TMS_ORA.1984.1936.0: 06-11-2003: Tuxedo Version 8.1 32-bit Windows.
150049.LHL!TMS_ORA.1984.1936.0: LIBTUX_CAT:262: INFO: Standard main starting
150103.LHL!TMS_ORA.1984.1936.0: CMDTUX_CAT:409: ERROR: xa_recover() returned -3 for group BANKB1
150103.LHL!TMS_ORA.1984.1936.0: LIBTUX_CAT:250: ERROR: tpsvrinit() failed
150103.LHL!tmboot.1280.1504.-2: 06-11-2003: Tuxedo Version 8.1 32-bit Windows.
150103.LHL!tmboot.1280.1504.-2: CMDTUX_CAT:825: ERROR: Process TMS_ORA at SITE1 failed with /T tperrno (TPESYSTEM - internal system error)
则可能是运行crbank-ora8.sql创建的Oracle用户user1,user2,user3没有被赋予SELECT的权限,
使用Oracle的工具(如DBASTUDIO)对用户赋予SELECT ANY TABLE的权限。
使用tmshutdown,ipclean清除IPC,重新启动tmboot,现在应该可以BOOT起来了。
运行TRANSACTION:
在WINDOWS上运行TRANSACTION的脚本是gt.cmd,而不是运行driver,打开这个脚本看看就明白了。