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

安装配置
上传安装文件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参数值太小,适当修改这个两个参数值就可以了.

问题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来申请更多的资源,将上面的参数适当增大知道不出现错误信息为止,具体增加多少根据自己的系统配置和需求决定。

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

ps   -ef|grep program


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

gdb --pid=5313


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




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