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 whileobtaining 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 <bracketed> 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"
    #<Machine-name> 
    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下的tuxedo开发实例相关推荐

  1. linux下IIC驱动开发分析

    1.  IIC规范 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.IIC总线产生于在80年代,最初为音频和 ...

  2. Linux下C语言开发(信号signal处理机制)

    信号signal处理是Linux程序的一个特色,用信号处理来模拟操作系统的中断功能,对于系统程序员来说是最好的一个选择了.同样信号处理也是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概 ...

  3. linux下TCP通信简单实例

    linux下TCP通信简单实例 基于TCP(面向连接)的socket编程,分为服务器端和客户端 服务器端的流程如下: (1)创建套接字(socket) (2)将套接字绑定到一个本地地址和端口上(bin ...

  4. 2021-01-13 Linux下安装lua开发环境 Ubuntu

    Linux下安装lua开发环境 Ubuntu 1.下载lua包并解压 wget -c http://www.lua.org/ftp/lua-5.3.5.tar.gz tar zxvf lua-5.3. ...

  5. linux下手动删除数据库实例

    linux下手动删除数据库实例,直接删除相应的目录就可以了,不多说了.... 1. $ORACLE_HOME/dbs/ [oracle9@frogger dbs]$ pwd /u01/app/orac ...

  6. php 类似微信下拉菜单,微信小程序模拟下拉菜单开发实例

    本文主要和大家分享微信小程序模拟下拉菜单开发实例,希望能帮助到大家. 一.知识点 1.实现动态显示和隐藏某个控件 列表1data:{ open:false }, showitem:function() ...

  7. arm-linux-gcc 裸机程序,Linux下ARM裸机开发-交叉工具链

    初识linux下ARM的裸机开发全过程.现在总结如下: 首先说明为什么要学习裸机开发,一方面bootloader的编写要用到裸机开发的知识,另一方面就是驱动的开发.一般情况下我们进行的系统上的开发. ...

  8. linux中grep的例子,Linux下grep命令使用实例

    那么你知道grep命令参数.如何使用grep命令去搜索某个文件中的内容呢.grep 命令递归查找.使用grep去匹配某一个单词么?接下来是小编为大家收集的Linux下grep命令使用实例,欢迎大家阅读 ...

  9. GCC编译器简明教程(Linux下C语言开发环境的搭建)

    GCC编译器简明教程(Linux下C语言开发环境的搭建) 市面上常见的Linux都是发行版本,典型的Linux发行版包含了Linux内核.桌面环境(例如GNOME.KDE.Unity等)和各种常用的必 ...

最新文章

  1. c++ make_pairpair
  2. 【经验】向word中插入格式化的代码块
  3. C#进阶系列——动态Lamada
  4. linux处理邮件编码
  5. 2015年科技巨头的十个开源产品,不只是.NET、Swift
  6. 共享内存 传一个类指针_共享内存介绍:Shared Memory
  7. go zap去除程序名称_适用于Zip,Zap和Zoom游戏的Python程序
  8. java排队系统模型,MMC排队系统模型
  9. MySQL_日期时间处理函数及应用
  10. signature=fd45b8c9a90eebce5d855f07302ab4ee,Private Use Area
  11. 华为NP课程笔记14-PIM-SM和SPT切换
  12. python PIL库的getdata()函数
  13. html默认初始代码
  14. 依图科技CTO颜水成被曝离职!或加入东南亚某电商
  15. 2022年第十三届蓝桥杯大赛软件类决赛C/C++/Java/Python真题
  16. Could Not Autowired ,No Beans of ....
  17. [墨者学院] Windows硬盘文件分析取证(新建的用户名)
  18. 解决mac pro 装 win10以后 蓝牙 卡顿的问题
  19. 我爱赚钱吧:学生都可以做的兼职工作
  20. 有极性(电解电容)与无极性电容

热门文章

  1. left join条件放在on和where的区别
  2. Python关于File学习过程
  3. 协议 - 收藏集 - 掘金
  4. Tcl与Design Compiler (八)——DC的逻辑综合与优化
  5. redis---安全设置
  6. Gnome 快捷键汇总
  7. 【经典算法】第八回:桶排序
  8. css3在线快速制作工具
  9. [滤镜]的firefox兼容问题
  10. 数百款惠普打印机易受严重RCE漏洞影响