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 starting150049.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 starting150103.LHL!TMS_ORA.1984.1936.0: CMDTUX_CAT:409: ERROR: xa_recover() returned -3 for group BANKB1150103.LHL!TMS_ORA.1984.1936.0: LIBTUX_CAT:250: ERROR: tpsvrinit() failed150103.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,打开这个脚本看看就明白了。