TUXEDO8.1例子程序bankapp要点提示

类别:编程语言 点击:0 评论:0 推荐:

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,打开这个脚本看看就明白了。
 

本文地址:http://com.8s8s.com/it/it29222.htm