linux下的tuxedo开发实例

  1. 安装配置
    上传安装文件tux81.tar,然后解压
    tar -xvf tux81.tar
    在当前目录下有一个tuxedo8.1目录,接着需要配置环境变量.
    vi .bash_profile 添加如下内容
    PATH=$PATH:$HOME/bin
    #apache
    export APACHE_HOME=/usr/local/apache

    #oracle
    export ORACLE_BASE=/home/ora/ora9
    export ORACLE_HOME=/home/ora/ora9/oracle
    export ORACLE_SID=linuxdb
    export ORACLE_TERM=xterm
    #xerces-c
    export XERCESCROOT=$HOME/app/xerces-c-src_2_7_0

    #APP
    export APP_HOME=$HOME/app
    export APP_BIN=$APP_HOME/src/bin

    #tuxedo
    export TUXDIR=/home/dev/app/tuxedo8.1
    TUXCONFIG=$APP_BIN/tuxconfig
    export TUXCONFIG
    WSNADDR=//192.168.1.113:5438; export WSNADDR

    #PATH
    PATH=$PATH:/usr/bin:/usr/sbin:/usr/local/bin:.
    PATH=$PATH:$ORACLE_HOME/bin:$TUXDIR/bin:$APACHE_HOME/bin
    export PATH

    #LD_LIBRARY_PATH
    LD_LIBRARY_PATH=$XERCESCROOT/lib:$TUXDIR/lib:/usr/lib:/usr/local/lib:$ORACLE_HOME/rdbms/demo
    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TUXDIR/lib
    export LD_LIBRARY_PATH

    #LANG
    NLS_LANG=american_america.ZHS16GBK;export NLS_LANG
    export LANG=C
    export LC_ALL="zh_CN.GB18030"

    保存退出,source .bash_profile使环境变量生效。
    以上的目录可以根据自己的目录情况,进行修改,因为我用到了apache,xerecs,oracle,fastcgi等,所以上面包含了这些路径,如果没有用到这些,删除相应的路径配置即可。
    下面是我遇到的一些问题和解决的办法:

    问题一:
    执行tmadmin命令,出现如下错误
    NLS:4: Cannot open message catalog TMADMIN_CAT, set 1, num 184; check TUXDIR=/home/dev/app/tuxedo8.1, LANG=zh_CN.GB18030
    可以肯定,这个错误是由字符集引起的,我用的是简体中文linux
    添加环境变量vi .bash_profile 添加如下内容
    export LANG=C
    保存退出,source .bash_profile 使环境变量生效

    问题二:
    再执行tmadmin,这个错误消失,但是出现了如下错误:
    tmadmin - Copyright (c) 1996-1999 BEA Systems, Inc.
    Portions * Copyright 1986-1997 RSA Data Security, Inc.
    All Rights Reserved.
    Distributed under license by BEA Systems, Inc.
    Tuxedo is a registered trademark.
    TMADMIN_CAT:188: ERROR: Error while obtaining the Bulletin Board parameters
    分析上面的信息,因为没有编译生成TUXCONFIG指向的文件,即公告牌文件
    经过上面一些配置,已经可以使用tuxedo了,后面配置公告文件和开发程序都是开发的内容
  2. 配置公告牌文件
    tuxedo服务的核心内容都配置再一个配置文本文件上,一般命名为ubbconfig(当然可以根据自己的需要随便命名),然后用tmlodcfg -y ubbconfig命令,编译成一个二进制文件,环境变量TUXCONFIG指向的文件名,在主机上运行的,所以在编写ubbconfig配置文件之前,先确保配置号了TUXCONFIG环境变量,不然会报错误.

    在这儿给出一个简单的公告牌配置文件
    # (c) 2003 BEA Systems, Inc. All Rights Reserved.
    #ident "@(#) samples/atmi/simpapp/ubbsimple $Revision: 1.5 $"
    #Skeleton UBBCONFIG file for the TUXEDO Simple Application.
    #Replace the items with the appropriate values.
    *RESOURCES
    #Example:
    IPCKEY  123456
    DOMAINID server_240
    MASTER  chenli
    MAXACCESSERS 1000
    MAXSERVERS 1000
    MAXSERVICES 2500
    MAXGTT   5
    MODEL  SHM
    LDBAL  N
    BLOCKTIME   10
    *MACHINES
    DEFAULT:
      APPDIR="/home/dev/app/src/bin"
      TUXCONFIG="/home/dev/app/src/bin/tuxconfig"
      TUXDIR="/home/dev/app/tuxedo8.1"
      TLOGSIZE=500
      MAXWSCLIENTS=50
      
    #Example:
    #  APPDIR="/home/me/simpapp"
    #  TUXCONFIG="/home/me/simpapp/tuxconfig"
    #  TUXDIR="/usr/tuxedo"
    # 
    chenli_linux LMID=chenli
    #Example:
    #beatux  LMID=chenli
    *GROUPS
    GROUP1
     LMID=chenli GRPNO=1  OPENINFO=NONE
    GROUP2
     LMID=chenli GRPNO=2  OPENINFO=NONE
    GROUP3
     LMID=chenli GRPNO=3  OPENINFO=NONE
    GROUP4
     LMID=chenli GRPNO=4  OPENINFO=NONE

    GROUPWSL
      LMID=chenli GRPNO=6  OPENINFO=NONE 
     
    *SERVERS
    DEFAULT:
      CLOPT="-A" RESTART=Y GRACE=86400
    #======================= GROUP1 servers Define ==========================#  
    GENERAL_SERVICE SRVGRP=GROUP1 SRVID=200 MIN=1 MAX=2 REPLYQ=Y RQADDR="GENERAL_SERVICE" MAXGEN=2

    #WSL SRVGRP=GROUP1 SRVID=700 MIN=1 MAX=1 REPLYQ=Y  MAXGEN=2 RESTART=Y CLOPT = "-A -t -- -n //192.168.1.201:3195 -H //192.168.1.201:3195 -m 5 -M 20 -x 3 -T 120 -I 30"
    WSL SRVGRP=GROUPWSL  SRVID=2 MAXGEN=2 CLOPT=" -A -- -n //192.168.1.113:3195 -m 2 -M 6 -x 10"

    *SERVICES
    GENERAL_SERVICE

    注意这一行中chenli_linux必须用hostname得到的主机名
    chenli_linux LMID=chenli

    ---------------------------------------------------------------------------------------------------------------------
    GENERAL_SERVICE SRVGRP=GROUP1 SRVID=200 MIN=1 MAX=2 REPLYQ=Y RQADDR="GENERAL_SERVICE" MAXGEN=2
    如果RESTART=Y当SERVER程序GENERAL_SERVICE异常终止时,TUXEDO会根据MAXGEN,GRACE参数来重启这个SERVER
    ---------------------------------------------------------------------------------------------------------------------


    WSL SRVGRP=GROUPWSL  SRVID=2 MAXGEN=2 CLOPT=" -A -- -n //192.168.1.113:3195 -m 2 -M 6 -x 10"是为了提供非本机客户程序调用而设置的,表示服务将在本级的ip地址192.168.1.113,端口3195上面监听请求,并进行应答处理.

    *SERVICES
    GENERAL_SERVICE
    配置了提供调用的服务,一个服务程序可能提供多个服务.



    问题1:
    tmloadcf -y ubb出现如下错误:
    NLS:4: Cannot open message catalog CMDTUX_CAT, set 1, num 883; check TUXDIR=/home/dev/app/tuxedo8.1, LANG=zh_CN.GB18030
    显然跟环境变量的设置有关
    export LANG=C
    export LC_ALL=C
    重新执行tmloadcf -y ubb,没有错误,问题解决

  3. 程序开发
    在做程序开发前,还需要介绍一个关键的东西:license.
    Tuxedo有两套license(SDK:开发license,RDK:实际应用的license).当你编译程序的时候必须使用SDK类型的license,这个license允许连接的的用户数一般都很少,只有几个而已. 正式使用的时候,两个license都可以用,只是用户数不同而已(如果用户数很多的话,使用SDKlicense,tuxedo将不能承受).
    如果没有有效的sdk license,在执行buildserver,buildclient的时候,会报如下的错误信息:
    CMDTUX_CAT:4382:ERROR:You do not have a valid SDK license
    获取一个有效的tuxedo sdk license拷贝到$TUXDIR/udataobj目录下,就能用buildserver,buildclient进行程序开发了.


    问题1:
    在tuxedo客户端程序中,调用tpinit失败,返回-1,tperrno=12。
    在用buildclient编译客户端程序的时候,如果加入了-w选项,那么必须设置WSADDR环境变量,如果没有采用-w选项,那么默认请求本地的服务。
    如果在编译客户端程序的时候,采用了-w选项,而又没有正确设置WSADDR环境变量,那么tpinit失败,返回-1,tperrno=12;
        同时UBB中,需要访问服务所在的组也必须设置WSL选项,如:
        WSL SRVGRP=GROUP1  SRVID=2 MAXGEN=2 CLOPT=" -A -- -n //192.168.1.201:3195 -m 2 -M 6 -x 10"
        同时在*MACHINE节点设置MAXWSCLIENTS=5,MAXWSCLIENTS是最大的WSL client数。
        在客户端程序运行的时候export WSNADDR=//192.168.1.201:3195,就可以访问服务了。
    如果在编译客户端程序的时候,没有采用-w选项,默认访问本地的服务,不需要设置WSADDR环境变量。

    问题2:
    WSL启动失败
    WSL启动失败的原因有很多,比如:UBB中没配置MAXWSCLIENTS,WSL的端口和别人冲突等等。需要看ULOG才能确定具体原因。

    问题3:
    tpcall有时莫名的返回-1
    tpcall后,不管是否成功,都要释放memory(上边tpalloc等函数申请的memory)。然后才能tpterm。

    问题4:
    启动服务的时候现实如下的信息:
    CMDTUX_CAT:819: INFO: Process id=1956 Assume started (pipe).
    这时需要看一下程序,是否在程序中tpsvrinit函数时已经异常退出。

    问题5:
    启动服务tmboot -y的时候出现如下的错误信息:
    mboot: WARN: No BBL available on site srd.
            Will not attempt to boot server processes on that site.
    去除MACHINES中的TLOGDEVICE="/home/srd/srdapp/bin/TLOG"定义就可以解决。

    问题6:
    在启动tuxedo服务的时候,报如下错误信息:
    LIBTUX_CAT:328: ERROR: No space in Bulletin Board for Server Table
    ubb中的MAXWSCLIENTS,MAXACCESSERS参数值太小,适当修改这个两个参数值就可以了.

    问题7:
    在执行tmloadcf的时候,报如下错误:
    CMDTUX_CAT:1615: ERROR: Identifier or number must be followed by white space or punctuation
    说明某个关键字后面需要有空格或者回车,根据错误信息在相应出错的位置添加空格就可以了。

    问题8:
    执行tmboot -y启动服务的时候,报如下错误:
    TPELIMIT - a system limit has been reached
    CMDTUX_CAT:1685: ERROR: Application initialization failure
    No space in Bulletin Board for Service Table
    有上面的信息可以看出,是tuxedo配置的一些资源有限制,可以修改ubbconfig配置文件中的参数MAXACCESSERS,MAXSERVERS,MAXSERVICES,MAXGTT来申请更多的资源,将上面的参数适当增大知道不出现错误信息为止,具体增加多少根据自己的系统配置和需求决定。
  4. gdb调试tuxedo服务
    在编译生成程序的时候,加入-g选项,就可以用gdb调试tuxedo服务
    假定你的服务程序名是program,先用tmboot -y启动服务,然后查询该服务程序的进程id
    ps   -ef|grep program
     得到进程pid之后,假定进程id=5313,然后执行下列命令,就进入gdb调试服务程序状态
    gdb --pid=5313
    注意在调试服务程序的时候,切忌用r,run,因为程序已经运行.
    用c,表示继续运行,断点一般先打在服务函数,然后向下调试.
    后台面的调试方法同普通的gdb调试应用程序方法一样了.


    后面我会接着完善。

你可能感兴趣的:(linux/unix)