[转帖]第一次安装tuxedo for linux 全过程 _MQ, Tuxedo及OLTP讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MQ, Tuxedo及OLTP讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3795 | 回复: 0   主题: [转帖]第一次安装tuxedo for linux 全过程         下一篇 
ychjing
注册用户
等级:新兵
经验:78
发帖:5
精华:0
注册:2014-2-20
状态:离线
发送短消息息给ychjing 加好友    发送短消息息给ychjing 发消息
发表于: IP:您无权察看 2014-10-31 9:17:25 | [全部帖] [楼主帖] 楼主

安装前对tuxedo没有任何概念,只知道是中间件,linux也不是很熟,呵呵,关键还是是正儿八经在给客户做项目呢,
公司派我一个人大老远去客户那里了,没办法只好硬着头皮搞,安装时候一步一个报错,真是郁闷,经历还真有点儿坎坷呢(现在向来其实很简单),
发个帖子发个纪念一下,呵呵,也给同样是新手们借鉴一下吧

实际安装环境,tuxedo8.1 for linux (安装文件为tuxedo81_linux.bin),Redhat linux 10.3

一. 以root身份建立tuxedo用户,并以tuxedu用户登陆,此用户将做为以后tuxedo管理员,用户默认目录为/home/tuxedo;
二. 用FTP把安装文件(tuxedo81_linux.bin)和用户许可证书文件(lic.txt)传到/home/tuxedo目录中;
三. 配置环境变量,.bash_profile文件,附文末;
四. 进入/home/tuxedo目录中,执行sh tuxedo81_linux.bin;

出错1--------------------------------------------------

[tuxedo@TUXSVR4 tuxedo]$ sh tuxedo81_linux.bin
Preparing to install...
The included VM could not be uncompressed. Please try to download
the installer again and make sure that you download using 'binary'
mode. Please do not attempt to install this currently downloaded copy.


解决办法:

脚本使用uncompress命令,但是linux下没有。使用cp /bin/gunzip /bin/uncompress

出错2----------------------------------------------------------------

[tuxedo@TUXSVR4 tuxedo]$ sh tuxedo81_linux.bin
Preparing to install...
/tmp/install.dir.22860/Linux/resource/jre/bin/i386/native_threads/java: error while loading shared libraries: libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file or directory


解决办法:

[root@TUXSVR4 root]# rpm -ivh /tmp/compat-libstdc++-7.3-2.96.118.i386.rpm
warning: /tmp/compat-libstdc++-7.3-2.96.118.i386.rpm: V3 DSA signature: NOKEY, k
ey ID db42a60e
Preparing... ########################################### [100%]
1:compat-libstdc++ ########################################### [100%]


参考:

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=4&threadID=13265&messageID=72337#72337
https://www.redhat.com/archives/fedora-list/2005-February/msg04944.html


出错3-----------------------------------------------------------------

[tuxedo@TUXSVR4 tuxedo]$ sh tuxedo81_linux.bin
Preparing to install...
Error occurred during initialization of VM
Unable to load native library: /tmp/install.dir.14985/Linux/resource/jre/jre/lib/i386/libjava.so: symbol __libc_wait,
version GLIBC_2.0 not defined in file libc.so.6 with link time reference


解决办法:

(解决这个报错花费了最多的时间,最少半天功夫,寻找了很多资料,尝试来了各种办法才搞定,已经到了崩溃的边缘:)

在tuxedo用户下执行

gcc -shared -fpic -o libcwait.so libcwait.c
chmod a+x /home/tuxedo/tuxedo81_linux.bin
LD_PRELOAD=/home/tuxedo/libcwait.so /home/tuxedo/tuxedo81_linux.bin


注意,是将libcwtit.c编译成libcwait.so文件,libcwait.c下载地址ftp://people.redhat.com/drepper/libcwait.c
另要确认安装了C语言编译工具gcc。当然,这个问题的根源我也不懂,我是按别人的方法做的,
并且接下来的安装都要执行完整的LD_PRELOAD=/home/tuxedo/libcwait.so /home/tuxedo/tuxedo81_linux.bin,而不是
先前的sh tuxedo81_linux.bin

参考:

https://www.redhat.com/archives/fedora-list/2004-July/msg00315.html


出错4-----------------------------------------------------------------

Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified


解决办法:

以root登录执行

xhost +192.173.1.4 (本机Ip地址)


出错5-----------------------------------------------------------------

[tuxedo@TUXSVR4 tuxedo]$ LD_PRELOAD=/home/tuxedo/libcwait.so /home/tuxedo/tuxedo81_linux.bin
Preparing to install...
Invocation of this Java Application has caused an InvocationTargetException. This application will now exit. (LAX)
Stack Trace:
java.lang.NoClassDefFoundError
....


解决办法:

先怀疑jdk问题,尝试安装 jdk,下载jdk,并配置jdk环境

chmod u+x ./j2sdk-1_4_2_04-linux-i586.bin
./j2sdk-1_4_2_04-linux-i586.bin
mkdir /usr/java
rpm -ivh j2sdk-1_4_2_04-linux-i586-rpm


还是不能启用图形节目安装,最后只好加 -i console 不启图形界面进行安装,即

LD_PRELOAD=/home/tuxedo/libcwait.so /home/tuxedo/tuxedo81_linux.bin -i console


不过这个问题,如果非要启用图形界面安装,一直没找到好的办法解决,始终还是上面这个报错,还请高手指点。

参考:
jdk下载

http://java.sun.com/products/archive/j2se-eol.html
http://www.javazy.com/page/index.asp?sortid=468&id=1024


出错6-------------------------------------------------------------------------
tuxedo程序总算装完了,很高兴地去启动程序,又来了个报错,汗!!!

[tuxedo@TUXSVR4 tuxedo]$ tmboot -y
tmboot: internal error: CMDTUX_CAT:754: ERROR: error processing configuratio
n file
tmboot: internal error: CMDTUX_CAT:1360: ERROR: configuration file not found


解决办法:
从另外一台已装好tuxedo机器拷贝 tuxconfig文件到相应目录

参考:

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=4&threadID=223&messageID=1483#1483


出错7------------------------------------------------------------------
这个问题也很郁闷,好像是tuxedo的权限问题,花了半天时间想着给他权限,还是不行

[tuxedo@TUXSVR4 tuxedo]$ tmboot -y
tmboot: CMDTUX_CAT:1113: ERROR: Must be the administrator to execute this command


解决办法:
删除tuxconfig
修改ubb里面的主机名称等变量;
修改必须的环境变量。
重新tmloadcf -y ubb

出错8------------------------------------------------------------------

tmloadcf cannot run on a non-master node


解决办法:
ubb文件中主机名大小写弄错,即ubb文件中主机名要与实际相一致,包括大小写,改正即可

出错9------------------------------------------------------------------

[tuxedo@TUXSVR4 tuxedo]$ tmboot -y
Booting all admin and server processes in /home/tuxedo/appdir/tuxconfig
INFO: BEA Tuxedo, Version 8.1
INFO: Serial #: 650522264138-1743831940315, Expiration NONE, Maxusers 30
INFO: Licensed to: MOLSS China
Booting admin processes ...
exec BBL -A :
Failed.
tmboot: WARN: No BBL available on site XC_SERV.
Will not attempt to boot server processes on that site.
Booting server processes ...
0 processes started.


解决办法:

启动tmadmin

crdl -b 3000 -z appdir/TLOG/TLOG
crlog -m XC_SERV4


参考:

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=4&threadID=1620&messageID=6816#6816
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=4&threadID=24578&messageID=144089#144089
================================================


在接下来就是tuxedo应用方面配置的问题,由专门的软件人员搞定,我的任务算完成了!

感谢dev2dev.bea.com.cn论坛及热心网友!

附:.bash_profile

---------------------------------
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
PATH=$PATH:$HOME/bin
BASH_ENV=$HOME/.bashrc
USERNAME=""
export USERNAME
export BASH_ENV
export PATH
export TUXDIR=/home/tuxedo/tuxedo8.1
export APPDIR=/home/tuxedo/appdir
export TUXCONFIG=/home/tuxedo/appdir/tuxconfig
export ORACLE_HOME=/home/oracle/product/9.2.0
export ORACLE_SID=xcsb
#export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
export NLS_LANG="american_america.zhs16gbk"
export PATH=$TUXDIR/bin:$APPDIR:$ORACLE_HOME/bin:$APPDIR/bin:.:$PATH
export LANG=C
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:$TUXDIR/lib:$LD_LIBRARY_PATH
export LC=en_US
export CC=cc
#export DISPLAY=178.22.11.199:1.0
export TMOUT=100000000
----------------------------------------------
(全文完)


TUXEDO与INFORMIX数据库的互连
前言:
在两层的C/S结构中,客户端直接访问数据库,当采用TUXEDO中间件后,形成三层结构。这时,客户端不直接访问数据库,而是改为调用中间件TUXEDO服务端上的服务,由TUXEDO服务端访问数据库,并把结果返回给客户端。TUXEDO服务端可以和INFORMIX在同一台服务器上,也可以在不同的机器上,如果在不同的机器上,在TUXEDO的服务端所在的机器要安装一个INFORMIX的客户端。
TUXEDO服务端与INFORMIX数据库连接有两种方式:
1、不通过XA接口直接互连。适用于整个系统只有一个数据库的情况。
2、通过XA接口互连,对整个系统有一个数据库或多个数据库都适用,建议采用,本文介绍这种互连的配置方法。
系统说明:
TUXEDO: 版本TUXEDO6.5(是32位的)安装在HP-UX 11.0 64bit上,安装目录 /usr/tuxedo
TUXEDO的例子: /usr/tuxedo/simpdb
INFORMIX: 版本INFORMIX9.21(是64位的)安装在SCO Unix 5.0.5上,目录 /INFORMIX
数据库名称: mydb
TUXEDO用户名: TUXEDO
注意:TUXEDO系统与INFORMIX数据库在不同的机器上,所以在TUXEDO系统所在的机器上要安装INFORMIX数据库的CLIENT端,并且如果TUXEDO系统是32位的,而INFORMIX数据库的服务端是64是,在TUXEDO系统所在的机器上应安装INFORMIX数据库的32位的CLIENT端才行。
配置的步骤:

一、INFORMIX的的配置
1> 数据库一定要以unbuffered log方式创建,create database databasename with log;
INFORMIX数据库的LOG方式有3种:Buffered,Nobuffer,Unbuffered(under buffer)
用onmonitor命令可查看数据库是否是用unbuffered log方式创建的,log status 那一列为U的是unbuffered log方式。
用ontape -s ?L 0 ?U databasename;可把一个其他方式创建的数据库改为unbuffered log方式的.
2>tuxedo用户应该有访问该数据库资源的权限。grant dba to tuxedo;
如果TUXEDO用户没有访问该数据库资源的权限,当TUXEDO启动时,TMS启动会失败,在ULOG中会出现类似下面的错误信息:

145053.rs6000!BBL.17510: LIBTUX_CAT:262: INFO: Standard main starting
145053.rs6000!TMS_INFORMIX.20204: 020602: TUXEDO Version 6.5 AIX 2 4 007025954C00.
145053.rs6000!TMS_INFORMIX.20204: LIBTUX_CAT:262: INFO: Standard main starting
145054.rs6000!TMS_INFORMIX.20204: LIBTUX_CAT:466: ERROR: tpopen TPERMERR xa_open returned XAER_RMERR
145054.rs6000!TMS_INFORMIX.20204: LIBTUX_CAT:250: ERROR: tpsvrinit() failed
145054.rs6000!TMS_INFORMIX.20204: LIBTUX_CAT:300: ERROR: _tlog_open: _gp_tblopen
145054.rs6000!TMS_INFORMIX.20204: LIBTUX_CAT:250: ERROR: tpsvrinit() failed
145054.rs6000!TMS_INFORMIX.20204: LIBTUX_CAT:300: ERROR: _tlog_open: _gp_tblopen: UNIX sys call error - 2
145054.rs6000!tmboot.19178: 020602: TUXEDO Version 6.5 AIX 2 4 007025954C00.
145054.rs6000!tmboot.19178: CMDTUX_CAT:825: ERROR: Process TMS_INFORMIX at simple failed with /T tperrno (TPERMERR - resource manager error)


二、TUXEDO的配置
1. /usr/tuxedo/simpdb/setenv的内容:

. usr/tuxedo/tux.env
INFORMIXDIR=/tmp_mnt/informix/hc; export INFORMIXDIR
INFORMIXSERVER=dhc; export INFORMIXSERVER
PATH=$TUXDIR/bin:$INFORMIXDIR/bin:/bin:/usr/bin:/usr/ccs/bin:.; export PATH
SHLIB_PATH=$SHLIB_PATH:$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql:$INFORMIXDIR/lib
/cli:$INFORMIXDIR/lib/c++
:$INFORMIXDIR/lib/client:$INFORMIXDIR/lib/dmi:/usr/lib:/usr/lib/Motif1.2
INCLUDE=$INFORMIXDIR/incl/esql:$INFORMIXDIR/incl:/tuxedo/include:/usr/include; export INCLUDE
CFLAGS="-I$INFORMIXDIR/incl -I$INFORMIXDIR/incl/esql" export CFLAGS


2.重命名下列文件,因为下列文件名与INFORMIX中的文件名有冲突,所以要改名。
1.TUXEDO安装路径include目录下的下面文件
把sqlca.h 改名为 sqlca.h.bbb
把sqlcode.h 改名为 sqlcode.h.bbb
把sqlda.h 改名为 sqlda.h.bbb
2.重命名TUXEDO安装路径lib目录下的下面文件
把libsql.lib 改名为 libsql.lib.bbb

3. 修改TUXEDO安装路径的udataobj目录下的RM文件,加入:

INFORMIX-DSHC:infx_xa_switch:-L/tuxedo/lib -L$/lib -L$/lib/esql -lifxa -lifsql -lifasf -lifgen -lifos -lifgls -lnsl -lm -lsec $/lib/esql/checkapi.o -lifglx


4. 在TUXEDO用户下创建TMS文件:TMS_INFORMIX,TUXEDO通过TMS_INFORMIX与INFORMIX数据库采用XA协议进行通讯

buildtms -r INFORMIX-DSHC -o /tuxedo/bin/TMS_INFORMIX


5. 配置 UBBCONFIG
1. 在*MACHINES节中增加:

TLOGDEVICE = "/usr/tuxedo/simpdb/TLOG"
TLOGNAME=TLOG
TLOGSIZE=200


2. 改*GROUPS节的配置为:

*GROUPS
GROUP1 LMID=simple GRPNO=1
TMSNAME="TMS_INFORMIX" TMSCOUNT=2
OPENINFO="INFORMIX-DSHC:mydb"


修改后的配置文件ubb内容如下,用tmloadcf -y ubb重新生成tuxconfig

IPCKEY 123456
DOMAINID simpapp
MASTER simple
MAXACCESSERS 100
MAXSERVERS 50
MAXSERVICES 100
MODEL SHM
LDBAL N
*MACHINES
server LMID=simple
APPDIR="/usr/tuxedo/simpdb"
TUXCONFIG="/usr/tuxedo/simpdb/tuxconfig"
TUXDIR="/usr/tuxedo"
TLOGDEVICE = "/usr/tuxedo/simpdb/TLOG"
TLOGNAME=TLOG
TLOGSIZE=100
*GROUPS
GROUP1 LMID=simple GRPNO=1
TMSNAME="TMS_INFORMIX" TMSCOUNT=2
OPENINFO="INFORMIX-DSHC:mydb"
*SERVERS
DEFAULT:
CLOPT="-A"
test SRVGRP=GROUP1 SRVID=1
*SERVICES


6.用TMADMIN创建TLOG文件,TUXEDO用一个文件TLOG记录对数据库操作的日志。用于协调分布式数据库的提交与回滚.

D:>tmadmin
>crdl -b 500 -z /usr/tuxedo/simpdb/TLOG
>crlog -m simple
>q


三、服务端的程序:test.cp
功能:根据客户端传的EMPNO到表EMP中取ENAME的值,并把它返回给客户端

#include <atmi.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sybhesql.h>
#include <sybtesql.h>
EXEC SQL INCLUDE sqlca;
EXEC SQL BEGIN DECLARE SECTION;
long al_empno=0;
char ac_ename[11]="";
EXEC SQL END DECLARE SECTION;
TEST(TPSVCINFO *rqst)
{
      /*接收客户端来的数据*/
      al_empno = (FBFR32 *)rqst->data;
      EXEC SQL select ename into :ac_ename from EMP where empno=:al_empno;
      if(sqlca.sqlcode!=0)
      {
            userlog("select from EMP failure,sqlca.sqlcode=%ldn",sqlca.sqlcode);
            tpreturn( TPFAIL, 0, rqst->data, 0, 0 );
      }
      /*把取出的结果返回给客户端*/
      strcpy(rqst->data,ac_ename);
      tpreturn( TPSUCCESS, 0, rqst->data, 0, 0 );
}


四、编写客户端程序: testcli.c
功能:调用TUXEDO服务端的服务TEST,取EMPNO=1000所对应的ENAME的值,并显示出来

#include <stdio.h>
#include "atmi.h"
main(argc, argv)
{
      long reqlen=1024;
      char *reqbuf;
      /* 与TUXEDO服务端建立连接 */
      if (tpinit((TPINIT *) NULL) == -1)
      {
            (void) fprintf(stderr, "Tpinit failedn");
            exit(1);
      }
      /* 分配发送缓冲区*/
      reqbuf = (char *)tpalloc("STRING",NULL,reqlen);
      if ( reqbuf == (char *)NULL)
      {
            printf("tpalloc failedn");
            tpterm();
      }
      strcpy(reqbuf,"1000");
      /*调用TUXEDO的服务TEST*/
      if (tpcall("TEST", (char *)reqbuf, 0L, (char **)&reqbuf, (long *)&reqlen, 0< 0 )
      {
            printf("tpcall failed,tperrno=%ld,tperrtext=%sn",tperrno,tpstrerror(tperrno));
            tpfree(reqbuf);
            tpterm();
            exit(1);
      }
      printf("name=%sn",reqbuf);
      tpfree(reqbuf);
      tpterm();
      return(0);
}


五、编译服务端程序
1.用INFORMIX的esql把test.pc 文件预编译成test.c文件

/usr/tuxedo/simpdb/esql -c test.pc -I$INFORMIXDIR/incl/esql


2.用buildserver把test.c编译成可执行文件,注意-r 后带的INFORMIX-DSHC与RM文件中的一致。

/usr/tuxedo/simpdb/buildserver -o simpserv -f simpserver.c -r INFORMIX-DSHC -s TEST


六、编译客户端程序

/usr/tuxedo/simpdb/buildclient -o testcli -f testcli.c


七、用 tmboot ?y 启动TUXEDO,应能看到所有的SERVER都启动成功.这时,我们的服务端程序test 会自动与INFORMIX数据库建立连接,并一直保持这个连接,直到TUXEDO系统或INFORMIX数据库关闭.所以在我们的程序test.cp中看不到与数据库连接的语句,因为现在与数据库的连接由TUXEDO自动管理.

/usr/tuxedo/simpdb/ tmboot -y
exec TMS_INFORMIX -A :
process id=1072 ... Started.
exec TMS_INFORMIX -A :
process id=528 ... Started.
exec test -A :
process id=876 ... Started.


八、运行客户端程序,应能看到服务端返回的结果

/usr/tuxedo/simpdb/ testcli
name=bill


到此,整个配置过程就大功告成了.INFORMIX的其他版本的配置及在其他操作系统上的配置基本与本文所述差不多,差别主要在RM文件中所连的库文件可能会不样.使用esql -libs 命令得到应用所需的数据库动态连接库.再加上INFORMIX支持XA的库libinfxxa.a,注意在INFORMIX9.13之后,libinfxxa.a 的名字变了,不支持多线程的为libifxa.a,支持多线程的为libthxa.a。
如在环境为:AIX 4.3.3, Tuxedo7.1, Informix Dynamic Server 9.21, Esql/C 9.51 中RM为:

INFORMIX-ONLINE:infx_xa_switch:$/lib/esql/libifxa.a -L$/lib -L$/lib/esql -lifsql -lifasf -lifgen -lifos -lifgls -lnetstub -lc_r -ldl -ltli_r -lm_r $/lib/esql/checkapi.o -lifglx


在环境为:AIX 4.3.3, Tuxedo6.5, Informix7.3中RM为:

INFORMIX-OnLine:infx_xa_switch:$/lib/esql/libinfxxa.a -L$/lib -L$/lib/esql -lixsqlshr -lixasfshr -lixgenshr -lixosshr -lixglsshr $/lib/esql/checkapi.o -lixglx


如果TMS_INFORMIX启动不成功,查看ULOG文件,根据ULOG文件的信息进行排错.

关于AIX操作系统下系统接口程序移植问题的报告
[开发环境]
操作系统AIX4.3.3、中间件TUXEDO6.5、数据库INFORMIX ESQL 7.24.UC8、开发语言ESQL/C
[环境变量]

#INFORMIX
export INFORMIXDIR=/usr/users/informix
export INFORMIXSERVER=online100
export ONCONFIG=onconfig.100
export TERM=vt100
export TERMCAP=$INFORMIXDIR/etc/termcap
export DB_LOCALE=en_US.8859-1@qmlu
export CLIENT_LOCALE=en_US.8859-1@qmlu
export PATH=$PATH:$INFORMIXDIR/bin:$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql:$HOME/tools/bin:.
#TUXEDO
export TUXDIR=/usr/users/tuxedo
export PATH=$PATH:$TUXDIR/bin:$PATH
COBCPY=:$TUXDIR/cobinclude; export COBCPY
BOPT="-C ANS85 -C ALIGN=8 -C NOIBMCOMP -C TRUNC=ANSI -C OSEXT=cbl"; export COBOPT
PATH=$PATH:$INFORMIXDIR/bin:/usr/ibmcxx/bin
export PATH
export LIBPATH=$TUXDIR/lib:$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql:/lib:/usr/lib:
$INFORMIXDIR/incl/esql:$LIBPATH
OSTYPE=AIX;export OSTYPE


[编译文件]

#城综网与业务系统接口的makefile文件
LIBDEP = $(HOME)/lib/SubTrx.a $(HOME)/lib/libmiddleware.a $(HOME)/lib/libsbsapi.a
LINKLIB =-L/usr/users/informix/lib/esql -L/usr/users/informix/lib -lc -lm -ll
OBJ = cs_trans.o pub.o
BINPATH=$(HOME)/bin
CFLAGS= -EDmCltSys -c
CCOPT= -qchars=signed -qcpluscmt -DHIGHFIRST -bstatic
all: $(BINPATH)/cs_trans
$(BINPATH)/cs_trans: $(OBJ)
buildclient -w -o $(HOME)/bin/cs_trans -f "$(OBJ) $(LIBDEP) $(LINKLIB)"
rm -f cs_trans.o
rm -f pub.o
cs_trans.o: cs_trans.ec
esql -I$(HOME)/inc -I$(TUXDIR)/include $(CFLAGS) $(CCOPT) cs_trans.ec
rm -f cs_trans.c
pub.o: pub.ec


[标准输出]

esql -I/usr/DATAS/zqywsrc/inc -I/usr/users/tuxedo/include -EDmCltSys -c -qchars=signed -qcpluscmt -DHIGHFIRST -bstatic cs_trans.ec
rm -f cs_trans.c
esql -I/usr/DATAS/zqywsrc/inc/ -EDmCltSys -c -qchars=signed ?qcpluscmt -DHIGHFIRST -bstatic pub.ec
rm -f pub.c
buildclient -w -o /usr/DATAS/zqywsrc/bin/cs_trans -f "cs_trans.o pub.o
/usr/DATAS/zqywsrc/lib/SubTrx.a /usr/DATAS/zqywsrc/lib/libmiddleware.a /usr/DATAS/zqywsrc/lib/libsbsapi.a -L/usr/users/informix/lib/esql -L/usr/users/informix/lib -lc -lm -ll"


[错误输出]

"cs_trans.ec", line 315.69: 1506-280 (W) Function argument assignment between types "unsigned long*" and "int*" is not allowed.
"pub.ec", line 386.13: 1506-068 (W) Operation between types "signed char*" and "int" is not allowed.
ld: 0711-317 ERROR: Undefined symbol: ._iqdbase
ld: 0711-317 ERROR: Undefined symbol: SQLCODE
ld: 0711-317 ERROR: Undefined symbol: ._iqstmnt
ld: 0711-317 ERROR: Undefined symbol: ._iqdbclose
ld: 0711-317 ERROR: Undefined symbol: ._iqslct
ld: 0711-317 ERROR: Undefined symbol: .sqldetach
ld: 0711-317 ERROR: Undefined symbol: ._iqnprep
ld: 0711-317 ERROR: Undefined symbol: sqlca
ld: 0711-317 ERROR: Undefined symbol: ._iqlocate_cursor
ld: 0711-317 ERROR: Undefined symbol: ._iqdescribe
ld: 0711-317 ERROR: Undefined symbol: .rtypmsize
ld: 0711-317 ERROR: Undefined symbol: .rtypalign
ld: 0711-317 ERROR: Undefined symbol: ._iqcddcl
ld: 0711-317 ERROR: Undefined symbol: ._iqdcopen
ld: 0711-317 ERROR: Undefined symbol: ._iqcftch
ld: 0711-317 ERROR: Undefined symbol: .dectoasc
ld: 0711-317 ERROR: Undefined symbol: .rdatestr
ld: 0711-317 ERROR: Undefined symbol: .stleng
ld: 0711-317 ERROR: Undefined symbol: ._iqclose
ld: 0711-317 ERROR: Undefined symbol: ._iqfree
ld: 0711-317 ERROR: Undefined symbol: ._iqexecute
ld: 0711-317 ERROR: Undefined symbol: .rdefmtdate
ld: 0711-317 ERROR: Undefined symbol: ._iqbeginwork
ld: 0711-317 ERROR: Undefined symbol: ._iqcdcl
ld: 0711-317 ERROR: Undefined symbol: ._iqcommit
ld: 0711-317 ERROR: Undefined symbol: .rfmtdate
ld: 0711-317 ERROR: Undefined symbol: ._iqrollback
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
CMDTUX_CAT:512: ERROR: Cannot execute C compiler cc -I$TUXDIR/include -o /usr/DATAS/zqywsrc/bin/cs_trans -L$/lib cs_trans.o pub.o /usr/DATAS/zqywsrc/lib/SubTrx.a /usr/DATAS/zqywsrc/lib/libmiddleware.a /usr/DATAS/zqywsrc/lib/libsbsapi.a -L/usr/users/informix/lib/esql -L/usr/users/informix/lib -lc -lm -ll -lwsc -lbuft -lwsc -lnws -lnwi -lnws -lfml -lfml32 -lgp
make: 1254-004 The error code from the last command is 8.
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1966719


 linux下的tuxedo开发实例
安装配置
上传安装文件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了,后面配置公告文件和开发程序都是开发的内容

配置公告牌文件
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,没有错误,问题解决

程序开发
在做程序开发前,还需要介绍一个关键的东西: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参数值太小,适当修改这个两个参数值就可以了.

gdb调试tuxedo服务
在编译生成程序的时候,加入-g选项,就可以用gdb调试tuxedo服务
假定你的服务程序名是program,先用tmboot -y启动服务,然后查询该服务程序的进程id

ps -ef|grep program


得到进程pid之后,假定进程id=5313,然后执行下列命令,就进入gdb调试服务程序状态

gdb --pid=5313


注意在调试服务程序的时候,切忌用r,run,因为程序已经运行.
用c,表示继续运行,断点一般先打在服务函数,然后向下调试.
后台面的调试方法同普通的gdb调试应用程序方法一样了.

后面我会接着完善。

tuxedo之UBBCONFIG介绍
配置文件UBBCONFIG介绍
一个TUXEDO应用系统的所有资源都在一个文本文件中进行定义,该文件称为UBBCONFIG,在配置完成后,UBBCONFIG被编译成一个二进制的文件TUXCONFIG.在TUXEDO系统启动时,从该文件中读取系统的配置信息。 UBBCONFIG文件类似WINDOWS下的*.INI文件。它包括以下9大部分, 我们称之为节,RESOURCES,MACHIENS,GROUPS
这三个节必须的,其他的节是可选的。
RESOURCES(必需): 与整个系统有关的配置信息
MACHINES(必需): 一个TUXEDO应用系统可以跨越多台服务器,在该节中配置与每台服务
器有关的信息
GROUPS(必需): TUXEDO中的服务可被分为多个组,在该节中配置与组有关的信息
SERVERS(可选): 与SERVER有关的信息在该节配置
SERVICES(可选): 与SERVICES有关的信息在该节配置
NETWORK(可选):与网络有关的信息在该节配置
ROUTING(可选) :路由规则在该节配置
NETGROUPS(可选):与网络分组有关的信息在该节配置
名称解释:
TUXEDO应用系统
一个TUXEDO应用系统包括服务端,客户端,服务端安装在服务器上,客户端一般安装在PC机上,从开发角度看,一个TUXEDO应用系统包括服务端程序,客户端程序,一个配置文件。此外,一个TUXEDO应用系统可以部署在一台服务器上,也可以部署在多台服务器上。

SERVER:


服务端程序用C或COBAL编写,每一个程序文件编译成一个相应可执行文件,该可执行文件在运行时称为SERVER,它实际上就是一个进程。每个SERVER都有一个名字,也就是该进程的名字。为与TUXEDO应用系统的服务端区分,我们在本书中,我们用SERVER表示该进程,用服务端表示TUXEDO应用系统的服务端。

SERVICE:


在每个服务端程序中,主要是一个个的函数,在TUXEDO中称这些函数为SERVICE,一般
也称之为服务。在该SERVICE中实现业务逻辑,在客户端中调用这些SERVICE来实现各
种操作,如在前面的例子simpapp中,服务端程序为simpserv.c,它编译成可执行文件
simperv, simpserv就是一个SERVER,该SERVER包括SERVICE:TOUPPER。

下面我们给出一个配置文件的例子:

*RESOURCES
IPCKEY 123456
MASTER simple
UID 0
GID 0
PERM 0666
MAXACCESSERS 100
DOMAINID simpapp
MODEL SHM
LDBAL Y
SCANUNIT 10
SANITYSCAN 12
BLOCKTIME 6
NOTIFY DIPIN
MAXCONV 10
*MACHINES
"MYSYS" LMID="simple"
TUXCONFIG="d:\tuxdemo\pbdemo\tuxconfig"
TUXDIR="d:\tuxedo65"
APPDIR="d:\tuxdemo\pbdemo"
TLOGDEVICE="d:\tuxdemo\pbdemo\TLOG"
TLOGNAME="TLOG"
TLOGSIZE=100
MAXWSCLIENTS=5
CMPLIMIT="MAXLONG,MAXLONG"
NETLOAD=0
SPINCOUNT=0
MAXACLCACHE=100
*GROUPS
"GROUP1" LMID="simple" GRPNO=1
OPENINFO="Oracle_XA:Oracle_XA+Acc=P/scott/tiger+SesTm=600+MaxCur=5+LogDir=."
TMSNAME="TMS_ORA8i"
TMSCOUNT=2
*SERVERS
DEFAULT:
CLOPT="-A"
"simpserv" SRVGRP="GROUP1" SRVID=1
CLOPT="-A"
RQADDR="simpserv"
RQPERM=0660 REPLYQ=Y RPPERM=0660 MIN=5 MAX=5 CONV=N
MAXGEN=1 GRACE=86400 RESTART=N
"WSL" SRVGRP="GROUP1" SRVID=1116
CLOPT="-A -- -n //MYSERVER:8888 -m 2 -M 5 -x 6"
*SERVICES
"TOUPPER"
LOAD=50 PRIO=50
BUFTYPE="ALL"
TRANTIME=30
AUTOTRAN=N
*ROUTING


各节之间的包含关系:
从上到下,是一对多的关系,即:一个TUXEDO系统可以跨越多台服务器,一台服务器上可以有多个GROUP,但一个GROUP只能在一台服务器上,一个GROUP中可以有多个SERVER,一个SERVER中可以有多个SERVICE。

下面我们分别对每个节种具体的常见配置进行说明,NETWORK,NETGROUP,ROUTING三节及其他比较高级的配置我们在后面的内容中说明

RESOURCES(必需):


该节是必须的,在这里配置与整个TUXEDO应用系统有关的信息,主要包括:
IPCKEY: TUXEDO使用它标识公告板及其他的IPC资源。它不能与该服务器上其他的IPC资源的ID号冲突范围:32,769-262,142
MASTER: 指定该TUXEDO应用系统的MASTER服务器,在该服务器上对整个TUXEDO系
统进行管理配置,可以为该MASTER服务器指定一台备份服务器,当该MASTER
服务器当机时,可从BACKUP服务器上进行管理。在进行系统迁移时,也要指定
BACKUP服务器。
DOMAINID:该TUXEDO应用系统的唯一标识
UID, GID, PERM:这三个参数控制对系统IPC资源的存取权限
UID: 可对该TUXEDO应用系统进行管理的TUXEDO系统管理员的用户ID,在UNIX下
就是UNIX系统的用户ID,默认为执行TMLOADCF的用户的ID。在NT下该设置
没有用,要设为0。
GID: 在UNIX下为UID中所指定的用户所在的组ID,在NT下该设置没有用,要设为0
PERM: 指定对TUXEDO系统IPC资源的存取权限。默认值为0666,即任何人都可以对该IPC资源进行存取。
MAXACCESSERS,MAXSERVERS,MAXSERVICES:这三个参数控制该TUXEDO应用系统对IPC资源的使用情况。
MAXACCESSERS: 在本系统的一个节点(一台服务器)上,同时可以有多少个进程可以访问
该TUXEDO系统的公告板,默认值为50,它包括本地客户端进
程,SERVER进程,但不包括管理进程如:BBL,DBBL等
MAXSERVERS: 在本系统中,总共可以有多少个SERVER存在,包括进行管理的SERVER,
如:BBL,TMS等。默认值为50。
MAXSERVICES: 在本系统中,总共可以有多少个SEVICE存在, 默认值为100。

TUXEDO应用系统的部署方式:
一个TUXEDO应用系统可能部署在一台服务器上或多台服务器上,也可能是部署在共用一块全局共享内存的几台服务器上,可在MODEL,OPTIONAS中配置该TUXEDO应用系统的部署模式。

MODLE:


SHM: 单机或多台服务器但共用一个全局共享内存
MP: 多台服务器但没有共用一个全局共享内存
OPTION: LAN: 是多机(MP)部署模式
MIGRATE: 可对该系统进行迁移

TUXEDO的管理进程BBL定时对它所在的服务器上的TUXEDO系统进行检查,检查超时的事务,超时的客户端连接等。
SCANUNIT: 指定检查的最小时间单位,它单位为秒,必须是5的倍数。默认值为10,即10
秒。
SANTIYSCAN: 每隔多少个SCANUNIT检查一次, SANITYSCAN*SCANUNIT不能大于
300秒。默认值为12,即120秒
BLOCKTIME: 指定一个消息可以阻塞多长时间,如果过了SANITYSCAN*SCANUNIT秒该
消息还没有发送出去,将超时出错。 SANITYSCAN*SCANUNIT不能大于
32767秒。默认值为6,即60秒。
同步调用的超时说明
对同步调用TPCALL,指从TPCALL()开始调用,到SERVER端的返回结果到到该客户端并写到输入缓冲区这一段时间。包括:
客户端开始调用TPCALL()
把数据通过网络发送到SERVER端
SERVER端的处理时间
SERVER端把处理结果通过网络返回给客户端
客户端TPCALL()调用返回
异步调用和会话方式的超时说明
对异步调用和会话方式,当一个进程调用TPACALL(),TPCONNECT(),TPSEND()时,超时时间只包括如果接收队列满时,这些调用的等待时间,如在TPACALL()中,所调用的SERVICE的接收队列如果满了,那么TPACALL()可阻塞在那里,直到该队列不满,可以接收该TPACALL()发送的请求。从TPACALL()开始阻塞到TPACALL()返回这段时间为它的超时时间。
对TPGETRPLY(),TPRECV()的超时时间是指如果要接收的队列为空时,它们应该阻塞在那里等待有消息到来的时间。
如:超时时间为60秒, 一点整调用TPGETRPLY()从接收的队列取消息,这时接收队列为空,如果到了一点零一分该接受队列还为空,那么TPGETRPLY()将超时出错。
LDBAL: 要不要进行负载均衡,Y:要,N:不要,默认值为不要
MAXCONV: 在一台服务器上最多可以有多少个会话同时存在。范围:0-32768,默认值为10
NOTIFY : 设置消息的通知方式,有以下3种:默认为DIPIN
IGNORE: 该TUXEDO系统中的CLIENT不接收任何消息
SIGNAL: 用SIGUSR1,SIGUSR2信号通知CLIENT有消息到来,如果在非UNIX平台上设
置采用该方式,那么会被自动转化为DIPIN方式。
DIPIN: 当CLIENT调用ATMI函数时,顺便检查看是否有消息,如果有就发送给该
CLIENT默认值为DIPIN

*MACHINES(必需):


该TUXEDO应用系统所包含的每台服务器都要在该节中进行配置
LMID: 在TUXEDO,要为该应用系统中的每台服务器指定一个逻辑服务器名。如在上面的例子中,TUXEDO应用服务器MYSYS对应的逻辑服务器名为:simple,
TUXEDO应用服务器名的查看方法:
1. 在UNIX/linux下用uname -n 或者hostname 查看SERVER的名字,
2. 在NT,windows下用ECHO %COMPUTERNAME%或者hostname 查看SERVER的名字
注意:如果SERVER的名字太长(>8)或含有“.”等可以" "引起来,如: "DEMOSERVER.COM"
TUXCONFIG: 配置文件TUXCONFIG所在的路径
TUXDIR: TUXEDO的安装目录
APPDIR: TUXEDO应用系统所在的目录
注意:TUXCONFIG,TUXDIR,APPDIR的值要与它们在环境变量中的设置的值一样
ENVFILE: 该服务器上与TUXEDO有关的环境变量(如FIELDTBLS等)可以放到一个文件中,在ENVFILE中指定该文件名。
TYPE: 指定该服务器的类型,当两台服务器的TYPE不一样时,在它们之间传送数据时要进行
编码/解码工作
ULOGPFX: 指定ULOG文件所在的目录及前缀。默认目录为$APPDIR,前缀为ULOG。
UID,GID,PERM,MAXACCESSERS,MAXCONV这些在RESOURCES中的配置,在MACHINES中可以被重新配置,并且这些新的配置值会覆盖在RESOURCES中的配置值。

*GROUPS(必需):


在TUXEDO中,要对SERVER进行分组,配置GROUP主要有三个目的,
1.因为GROUP与数据库之间是一对一的关系,在一TUXEDO应用系统中,如果有多个数据库,就要配置多个GROUP,在该GROUP中配置TUXEDO与数据库的连接参数等。
2. 数据依赖路由是以GROUP为单位的。
3.进行系统迁移时也时以GROUP为单位的一个GROUP有一个名字,还有一个GROUP
ID,GROUP的名字和GROUP ID在一个TUXEDO系统中必须唯一。
每个GROUP要指定该GROUP所在的服务器,及它的ID号,如果该GROUP中的SERVER
要与数据库或其他的资源管理器相连,那么要在OPENINFO中设置连接的参数。具体的配置我们在讲数据库编程时再说明。

*SERVERS:


该系统所包含的所有的SERVER都在该节进行配置。
在DEFAULT中的设置对所有的SERVER起作用。
SRVGRP: 该SERVER所在的GROUP
SRVID: 该SERVER所对应的ID,在一个GROUP中必须唯一
MIN: 该SERVER最少启动的进程数
MAX: 该SERVER最多可启动的进程数
RESTART,RCMD,MAXGEN,GRACE: 在TUXEDO系统了,当一个SERVER进程因某中原因死掉时,可设置它可以自动重起,这4个参数指定TUXEDO的重起信息。
RESTART 该进程死掉时是否可以自动重起,默认为N(不可以)
GRACE,MAXGEN:在GRACE秒内,该进程最多可以重启MAXGEN次。
RCMD: 指定该SERVER重启时,要执行的一个可执行文件名
注意:
1.为了使一个SERVER可以自动重起,光设置了RESTART=Y还不够,还要设置
GRACE,MAXGEN才能在该SERVER死掉时,自动重起,
2. 该SERVER能够被自动重起的一个前提条件时它还没有被从BULLITION BOARD中清
除。
例子:

test SRVGRP=GROUP1 SRVID=1 RESTART=Y GRACE=100000 MAXGEN=255


该设置指定在100000秒的时间内,SERVER进程:test可以启动255次。
在缺省情况下,TUXEDEO的每一个SERVER对应一个请求队列,该SERVER从该请求队列中取客户端发来的请求,并把处理的结果通过该请求队列返回给客户端,TUXEDO的SERVER可以配置成多个SERVER对应一个请求队列,即MSSQ方式,以提高响应的速度。
与MSSQ有关的参数是:
RQADDR:该请求队列的名字,一般设成与该SERVER的名字一样
RAPERM:该请求队列的存取权限,默认为0666
REPLYQ:该SERVER中的某个SERVICE调用其他的SERVICE,并有返回结果,则应设置
REPLYQ=Y,即把其他SERVICE的应答放到该队列中
CONV: 该SERVER是否采用会话(CONVERSATION)通讯方式,注意采用会话通讯方式的SERVICE要单独在一个SERVER中,不能与采用其他通讯方式的SERVICE在同一个SERVER中,并且该SERVER要设置CONV=Y
CLOPT: 指定该SERVER的启动参数。默认为-A,即再该SERVER启动时,发布该SERVER
包含的所有的SERVICE。通用的有:
-e: 指定错误输出文件,默认为$APPDIR下的stderr
-o: 指定标准输出文件,默认为$APPDIR下的stdout
-r: 记录该SERVER中SERVICE每次调用的处理时间,并记录在错误输出文件中,然后可采用
TUXEDO的性能分析工具txrpt对该SERVER进行性能分析。
-A: 发布该SERVER包含的所有的SERVICE

*SERVICES:


在SERVICES中可针对每个SERVICE进行配置,主要有:
AUTOTRAN: 调用该SERVICE时是否自动启一个全局事务。默认为N
LOAD:如果采用负载均衡,指定该SERVICE的负载因子,默认为50
PRIO: 指定该SERVICE的优先级,默认为50
DDR: 指定数据依赖路由规则
与远程客户端有关的配置:
1.在MACHINES中要配置MAXWSCLIENTS,即最多可以有多少个远程客户端同时连接
到该服务器上,在上面的例子中为5个
2. 在SERVERS中要配置SERVER:WSL

WSL SRVGRP="GROUP1" SRVID=1116 CLOPT="-A -- -n //192.168.120.113:8888 -m 2 -M 5 -x 6"


说明:

-n //192.168.120.113:8888: 远程客户端通过该端口与服务器建立连接


-m 2 :最少启动多少个WSH进程
-M 5::最多启动多少个WSH进程,默认值为MAXWSCLIENTS/m
-x 6:每个WSH进程可同时处理多少个远程客户端
3.程客户端所在的服务器上要配置WSNADDR环境变量,它的值为-n参数的值,如在上面的配置中为:

SET WSNADDR= //192.168.120.113:8888


配置文件UBBCONFIG的编译:
用下面的命令进行编译:
tmloadcf –y UBBCONFIG文件名
如:下面的命令编译名为ubbsimple的TUXEDO配置文件,生成二进制的配置文件

TUXCONFIG
tmloadcf –y ubbsimple


有时候在改变了TUXCONFIG的目录后,执行tmloadcf,会出现类似下面的错误,可把原来的TUXCONFIG文件删除,然后再编译。

D:\simpdb>tmloadcf -y ubb
CMDTUX_CAT:1601: ERROR: TUXCONFIG,TUXOFFSET d:\simpdb\tuxconfig 0 doesn't match first device entry on configuration d:\tuxdemo\simpdb\tuxconfig 0
D:\simpdb>del tuxconfig
D:\simpdb>tmloadcf -y ubb
D:\simpdb>


用tmunloadcf命令可对二进制的配置文件TUXCONFIG的进行反编译
如下面的命令反编译TUXCONFIG,并把结果输出到文件myubb中。通过反编译TUXCONFIG可查看该TUXEDO应用系统的一些属性默认值。

Tmunloadcf >myubb


3.2 多机(MP)模式的配置
一个TUXEDO应用系统可以部署在多台服务器上,这些服务器通过网络连接,这种部署方式称为MP方式,在这些服务器中要选择一台服务器做MASTER服务器,在该服务器上有一个DBBL进程,负责整个TUXEDO应用系统的管理工作。在每台服务器上都有一个BBL进程,它与DBBL进程进行通信,管理各自服务器上的配置。每台服务器上还有一个名为BRIDGE的进程和一个名为TLISTEN的进程,他们负责服务器之间的通讯。MP模式的结构如图:

如果配置了MP方式,那么在这些服务器之间可以做负载均衡和容错,客户端可以和其中的任何一台服务器建立连接,如果该服务器上没有该客户端所要调用的服务(SERVICE),TUXEDO可以自动把请求发送到别的有该服务的机器取处理,并把结果返回个客户端,如图,SITE1上的客户端调用了TRANSFER,当在SITE1上没有该SERVICE,在SITE3上有,
那么SITE1通过BRIDGE把请求发送到SITE3上,SITE3把处理结果也通过BRIDGE发送到SITE1上,通过SITE1把结果返回给该客户端。这些对客户端时透明的。
如果SITE1,STIE2,SITE3上都有TRANSFER,并且设置了负载均衡(LDBAL =Y),那么TUXEDO将根据他们的负载情况把请求发送到负载较小的服务器上。
如果SITE1,SITE2,SITE3中的某一台或两台服务器出故障了,那么正常的机器仍然能够继续运行,如果时他们之间的网络连接断了,BRIDGE进程会自动进行重试,并且在这些服务器之间可以配置多个网络连接通路,当其中的一个出现故障时,会自动采用别的连接通路。
所以MP方式提供了一个高可靠性的分布式应用系统。
配置成MP方式的步骤:
1. 这些服务器之间可以通过网络互相访问
2. 在每台服务器上都正确安装了TUXEDO SERVER
3. 应用已发布到这些服务器上
4. 选择一台服务器做MASTER机,
6. 在RESOURCES,MACHINES,NETWORK,NETGROUPS中做相应的配置

RESOURCE:


MODEL要设为MP
OPTIONS中要有LAN
MASTER服务器上的DBBL负责与其他服务器上的服务器BBL进行通讯,
BBLQUERY: 每台服务器上的BBL每隔SCANUNIT*BBLQUERY秒,向MASTER机上的
DBBL发送一次状态信息。默认为300秒
DBBLWAIT: 如果MASTER机没有收到某台服务器发送的状态信息,它将等待
SCANUNIT*DBBLWAIT秒,如果还没有收到该服务器发送的状态信息,这台服务
器将被分离出去(PARTITIONED),默认为20秒

MACHIENS:


在MACHINES中要配置该TUXEDO应用系统包括的每台服务器,如果该服务器时UNIX服务器,那么要配置UID,GID,UID,GID为TUXEDO用户所对应的UID,GID,在UNIX下可以用ID命令查看。

NETWORK:


在该节中配置服务器之间通讯的IP地址及BRIDGE进程,
在一个MP方式的TUXEDO应用系统中,不同的服务器之间通过BRIDGE进程进行通讯,该BRIDGE的侦听IP地址及端口
在NADDR中指定。如果是在UNIX下要指定该BRIDGE所用的网络设备,如果是在NT下则不要。
在TUXEDO系统启动前,不同服务器之间的通讯是通过tlisten进程来进行的,因为这时还没有BRIDGE进程。
NLSADDR为tlisten进程侦听的IP地址及端口。
一个MP方式的配置例子。
环境:WIN2000服务器一台,安装TUXEDO6.5, 服务器名WIN,IP地址:10.13.1.124
SUN5.8服务器一台,安装TUXEDO6.5, 服务器名SUN,IP地址:12.22.32.35
MASTER机为WIN2000服务器,BACKUP机为SUN。
在WIN2000服务器上的UBBCONFIG的内容如下,在SUN服务器上不用编写UBBCONFIG文件。当启动时DBBL会自动
把WIN2000服务器上的TUXCONFIG文件发送到SUN服务器上。

*RESOURCES
IPCKEY 87656
MASTER site1,site2
MAXACCESSERS 40
MAXSERVERS 40
MAXSERVICES 40
MODEL MP
OPTIONS LAN
*MACHINES
WIN LMID=site1
APPDIR="d:\tuxdemo\mp"
TUXCONFIG="d:\tuxdemo\mp\tuxconfig"
TYPE="win2000"
TUXDIR="d:\tuxedo65"
SUN LMID=site2
UID=1006
GID=30
APPDIR="/export/home/simpapp"
TUXCONFIG="/export/home/simpapp/tuxconfig"
TYPE="sun"
TUXDIR="/export/home/tuxedo"
*GROUPS
GROUP1
LMID=site1 GRPNO=1 OPENINFO=NONE
GROUP2
LMID=site2 GRPNO=2 OPENINFO=NONE
*NETWORK
site1 NADDR="//10.13.1.124:6000"
NLSADDR="//10.13.1.124:6001"
site2 NADDR="//12.22.32.35:6000"
NLSADDR="//12.22.32.35:6001"
BRIDGE="/dev/tcp"
*SERVERS
DEFAULT:
CLOPT="-A"
simpserv SRVGRP=GROUP2 SRVID=3
*SERVICES
TOUPPER


1. 在WIN2000服务器上把该UBBCONFIG编译成TUXCONFIG

tmloadcf -y ubbmp


2. 在WIN2000服务器上启动tlisten进程

tlisten -l //10.13.1.124:6001


3. 在SUN服务器上启动tlisten进程

tlisten -d /dev/tcp -l /12.22.32.35:6001


4. 在WIN2000服务器上启动该TUXEDO应用系统

tmboot -y


TUXEDO会先启动WIN2000服务器上的进程,然后再启动SUN服务器上的进程。
5. 在WIN2000服务器上执行

simpcl mp test


因为WIN2000服务器上没有TOUPPER服务,TUXEDO会自动调用SUN服务器上的TOUPPER服务,并把结果返回给客户端,这一切对客户端来说是透明的

问题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,没有错误,问题解决

--转自

北京联动北方科技有限公司



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论