??xml version="1.0" encoding="utf-8" standalone="yes"?>
2. 认需要的Apache版本
3. 认在Apache中支持Plug-ins
执行:$APACHE_HOME/bin/apache -lQ如果没有列出来mod_so.cQ则需要重?br>Build?br>
4. 安装Apache HTTP Server Plug-In module
mod_wl_20.so复制?APACHE_HOME/modules目录下;
修改$APACHE_HOME/conf/httpd.conf配置文gQ增加如下行Q?br> LoadModule weblogic_module modules/mod_wl_20.so
5. 在httpd.conf中配|其它参?br>
WebLogicCluster localhost:90,localhost:91
MatchExpression *.jsp
</IfModule>
<Location /weblogic>
SetHandler weblogic-handler
PathTrim /
</Location>
<IfModule mod_weblogic.c>
WebLogicCluster localhost:7003,localhost:7005,localhost:7007
MatchExpression *
</IfModule>
<Location /DizzyTixWeb>
SetHandler weblogic-handler
PathTrim /
</Location>
<Location /DizzySupplies>
SetHandler weblogic-handler
PathTrim /
</Location>
(g)查httpd.conf配置是否正确QAPACHE_HOME\bin\Apache -t
6. 重启Weblogic Server
7. 启动Apache HTTP Server
8. 试插g http://localhost/weblogic/
下蝲Tuxedo For Windows版本和License文gQ本机采用的是Tuxedo9 windows版本。具?br>Windows安装q程略。正常安装后Tuxedo?x)徏一个tlisten的服务,且已自动启动?br>
本机Tuxedo安装路径 C:\bea\tuxedo9.0
二、Tuxedo安装完成后的环境变量配置
[Win2000,XP]
右键我的?sh)?>属?>高->环境变量Q更改变量倹{?br>
在LIBҎ(gu)?nbsp; C:\bea\tuxedo9.0\lib
在INCLUDEҎ(gu)?C:\bea\tuxedo9.0\include
在PATHҎ(gu)?nbsp; C:\bea\tuxedo9.0\bin
d下面两个新项
TUXDIR C:\bea\tuxedo9.0
WSNADDR //192.168.98.166:4050 Tuxedo服务器IP与端?br>
除此之外q需要指定Tuxedo应用服务的\径,如果你用C开发了(jin)一个Tuxedo服务Q这个服?br> 文g所在的路径。本\径ؓ(f)F:\Liwei\Tuxedo\dbread?br>
Ҏ(gu)机器实际情况d
APPDIR F:\Liwei\Tuxedo\dbread
TUXCONFIG F:\Liwei\Tuxedo\dbread\tuxconfig
注:(x)环境变量更改后确定即生效?br>
[Win98]
?000,XP不同的是需要更改AUTOEXEC.BAT文gQ加入以下命令?br> 如SET TUXDIR=C:\bea\tuxedo9~1
注:(x)AUTOEXEC.BAT有一个缺点,是更改后需要重启机器才能生效,如果我们设一个环?br> 变量文gQ如TUXENVQ,那只要在文g里修改后存盘p生效。在AUTOEXEC.BAT中长文g
名必ȝ~写?br>
例:(x)
SET TUXENV=C:\bea\tuxedo9~1 //TUXDEO环境变量文g
在C:\bea\tuxedo9.0目录下创建TUXENV文gQ在文g里加?br> APPDIR=F:\Liwei\Tuxedo\dbread
TUXCONFIG=F:\Liwei\Tuxedo\dbread\tuxconfig
...
三、准备Tuxedo客户端,服务端程序代?br>
可以直接用Tuxedo本n带的例子QC:\bea\tuxedo9.0\samples\atmi\simpapp
客户?simpcl.c
服务?simpserv.c
四、准备编译客L(fng)服务端程?br>
q里最好是自已把各U编译命令写成批处理文g。在~译之前需要安装C语言~译器,我们
通常使用VC++6.0Q安装时如果没有让VC讄环境变量Q在~译前需要手工运?
E:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT
注:(x)手工讄的变量在关闭命o(h)行环境就失效?jin)。最好是复制到本地文件夹?br>
bclt.bat文g内容
F:
cd F:\liwei\tuxedo\dbread
buildclient -o simpcl -f simpcl.c -v
bsrv.bat文g内容
F:
cd F:\liwei\tuxedo\dbread
buildserver -o simpserv -f simpserv.c -s TOUPPER -v
start.bat文g内容 q文件主要作用是启动当前目录的命令环?br> cd
cmd
~译完成后会(x)在本地目录生成simpcl.exe和simpserv.exe。要惛_动服务,则需要配|?br> ubbconfig?jin)?br>
五、配|ubbconfig
下面是一个完整的ubbconfig文gQ此文g要放在本地目录下。即与环境变量APPDIR保持
一致。文件名随意Q这里用config文g名?br>
#Liwei
*RESOURCES
IPCKEY 123456
DOMAINID liweiapp
MASTER lw
MAXACCESSERS 3
MAXSERVERS 3
MAXSERVICES 3
MODEL SHM
LDBAL N
*MACHINES
LWYM
LMID = lw
TUXDIR = "C:\bea\tuxedo9.0"
TUXCONFIG = "F:\Liwei\Tuxedo\dbread\tuxconfig"
APPDIR = "F:\Liwei\Tuxedo\dbread"
*GROUPS
GROUP1 LMID=lw GRPNO = 1 OPENINFO=NONE
*SERVERS
DEFAULT:
CLOPT="-A"
simpserv SRVGRP=GROUP1 SRVID=1
*SERVICES
TOUPPER
每段详细的说明很复杂Q具体可以查看相兌料。这里只Ҏ(gu)较迷惑的地方说明下?br>
*RESOURCES下MASTER名称LQ但要与*MACHINESQ?GROUPS里的LMID保持一致?br>
*RESOURCES下如MAXACCESSERSQMAXSERVERSQMAXSERVICES{设|错误如1Q编译config后,
在命令行q行tmbootQBBL是启动不h的,重新讄正确的值后Q再~译config,tmboot
BBL也启动不h。原因是d理器残(hu)存tuxipcq个q程Q在~译config前,q掉它就
没问题(sh)(jin)?br>
*MACHINES下面的服务器机器名必L大写。否则编译config?x)提CZ么non master的错误?br>
*MACHINEScMTUXDIR的内容必M环境变量讄一致?br>
*SERVERS中的simpserv名子必须是你服务端程序编译后的EXE文g名?br>
*SERVICES的TOUPPER是你服务端程序编译时-s制定的服务名?br>
五、编译configQ运行tmboot启动服务
讄完成。运?br>
load.bat 文g内容
F:
cd F:\liwei\tuxedo\dbread
tmloadcf -y config
~译config文g完成后,?x)在APPDIR下生成tuxconfig文g?br> q行tmboot -y
BBL服务启动成功Qsimpserv启动成功!
q行tmadmin可以查看l护服务的状态等。运行simpcl.exe可以看C互过E了(jin)?/span>
草木?2005-5-18
一、安装前的文件准?/p>
下蝲Tuxedo For Windows版本和License文gQ本机采用的是Tuxedo9 windows版本。具?br />Windows安装q程略。正常安装后Tuxedo?x)徏一个tlisten的服务,且已自动启动?/p>
本机Tuxedo安装路径 C:\bea\tuxedo9.0
二、Tuxedo安装完成后的环境变量配置
(tng)
(tng) [Win2000,XP]
(tng)
(tng) 右键我的?sh)?>属?>高->环境变量Q更改变量倹{?br /> (tng)
(tng) 在LIBҎ(gu)加?tng) (tng) (tng)?C:\bea\tuxedo9.0\lib
(tng) 在INCLUDEҎ(gu)?C:\bea\tuxedo9.0\include
(tng) 在PATHҎ(gu)加?tng) (tng)?C:\bea\tuxedo9.0\bin
(tng)
(tng) d下面两个新项
(tng) TUXDIR (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) C:\bea\tuxedo9.0
(tng) WSNADDR (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //192.168.98.166:4050 (tng) Tuxedo服务器IP与端?br /> (tng)
(tng) 除此之外q需要指定Tuxedo应用服务的\径,如果你用C开发了(jin)一个Tuxedo服务Q这个服?br /> (tng) 文g所在的路径。本\径ؓ(f)F:\Liwei\Tuxedo\dbread?br /> (tng)
(tng) Ҏ(gu)机器实际情况d
(tng) APPDIR (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) F:\Liwei\Tuxedo\dbread
(tng) TUXCONFIG (tng) (tng) (tng) (tng) (tng) (tng) F:\Liwei\Tuxedo\dbread\tuxconfig
(tng)
(tng) 注:(x)环境变量更改后确定即生效?br /> (tng)
(tng) [Win98]
(tng)
(tng) ?000,XP不同的是需要更改AUTOEXEC.BAT文gQ加入以下命令?br /> (tng) 如SET TUXDIR=C:\bea\tuxedo9~1
(tng)
(tng) 注:(x)AUTOEXEC.BAT有一个缺点,是更改后需要重启机器才能生效,如果我们设一个环?br /> (tng) 变量文gQ如TUXENVQ,那只要在文g里修改后存盘p生效。在AUTOEXEC.BAT中长文g
(tng) 名必ȝ~写?br /> (tng)
(tng) 例:(x)
(tng)
(tng) SET TUXENV=C:\bea\tuxedo9~1 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //TUXDEO环境变量文g
(tng) 在C:\bea\tuxedo9.0目录下创建TUXENV文gQ在文g里加?br /> (tng) APPDIR=F:\Liwei\Tuxedo\dbread
(tng) TUXCONFIG=F:\Liwei\Tuxedo\dbread\tuxconfig
(tng) ...
三、准备Tuxedo客户端,服务端程序代?/p>
(tng) 可以直接用Tuxedo本n带的例子QC:\bea\tuxedo9.0\samples\atmi\simpapp
(tng) 客户?simpcl.c
(tng) 服务?simpserv.c
(tng)
四、准备编译客L(fng)服务端程?/p>
(tng) q里最好是自已把各U编译命令写成批处理文g。在~译之前需要安装C语言~译器,我们
(tng) 通常使用VC++6.0Q安装时如果没有让VC讄环境变量Q在~译前需要手工运?
(tng) E:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT
(tng)
(tng) 注:(x)手工讄的变量在关闭命o(h)行环境就失效?jin)。最好是复制到本地文件夹?br /> (tng)
(tng) bclt.bat文g内容
(tng) F:
(tng) cd F:\liwei\tuxedo\dbread
(tng) buildclient -o simpcl -f simpcl.c -v
(tng)
(tng) bsrv.bat文g内容
(tng) F:
(tng) cd F:\liwei\tuxedo\dbread
(tng) buildserver (tng) -o simpserv -f simpserv.c -s TOUPPER -v
(tng)
(tng) start.bat文g内容 (tng) (tng) q文件主要作用是启动当前目录的命令环?br /> (tng) cd
(tng) cmd
(tng)
(tng) ~译完成后会(x)在本地目录生成simpcl.exe和simpserv.exe。要惛_动服务,则需要配|?br /> (tng) ubbconfig?jin)?br /> (tng)
五、配|ubbconfig
(tng) 下面是一个完整的ubbconfig文gQ此文g要放在本地目录下。即与环境变量APPDIR保持
(tng) 一致。文件名随意Q这里用config文g名?/p>
#Liwei
*RESOURCES
IPCKEY (tng) (tng) (tng) (tng)123456
DOMAINID (tng)liweiapp
MASTER (tng) (tng)lw
MAXACCESSERS (tng)3
MAXSERVERS (tng)3
MAXSERVICES (tng)3
MODEL (tng) (tng)SHM
LDBAL (tng) (tng)N
*MACHINES
LWYM
(tng)LMID = lw
(tng)TUXDIR = "C:\bea\tuxedo9.0"
(tng)TUXCONFIG = "F:\Liwei\Tuxedo\dbread\tuxconfig"
(tng)APPDIR = "F:\Liwei\Tuxedo\dbread"
*GROUPS
GROUP1 (tng)LMID=lw GRPNO = 1 OPENINFO=NONE
*SERVERS
DEFAULT:
(tng) (tng)CLOPT="-A"
simpserv SRVGRP=GROUP1 SRVID=1
*SERVICES
TOUPPER
(tng) (tng) -l //host:ipport
ipport必须和ubb文g中NETWORK域NLSADDR一?/span>
2. ubb文g配置
domain理的多台机?所有机器上仅需要一个ubb文g,以下是ubb文g的模?/span>
(tng) (tng) (tng) (tng) (tng) 80952
(tng) (tng) (tng) 40
(tng) 35
75
(tng) (tng) (tng) (tng) (tng) SITE1,SITE2
LAN,MIGRATE
(tng) (tng) (tng) (tng) (tng) (tng) MP
(tng) (tng) (tng) (tng) (tng) (tng) (tng) TUXDIR="<TUXDIR1>"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) APPDIR="<APPDIR1>"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) TUXCONFIG="<APPDIR1>/tuxconfig"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) TYPE="<machine type1>"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) ULOGPFX="<APPDIR1>/ULOG"
LMID=SITE2
(tng) (tng) (tng) (tng) (tng) (tng) (tng) TUXDIR="<TUXDIR2>"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) APPDIR="<APPDIR2>"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) TLOGDEVICE="<APPDIR2>/TLOG"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) TLOGNAME=TLOG
(tng) (tng) (tng) (tng) (tng) (tng) (tng) TUXCONFIG="<APPDIR2>/tuxconfig"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) TYPE="<machine type2>"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) ULOGPFX="<APPDIR2>/ULOG"
(tng) (tng) NADDR="<network address of SITE1>"
(tng) (tng) (tng) BRIDGE="<device of provider1>"
(tng) (tng) (tng) NLSADDR="<network listener address of SITE1>"
(tng) (tng) NADDR="<network address of SITE2>"
(tng) (tng) (tng) BRIDGE="<device of provider2>"
(tng) (tng) (tng) NLSADDR="<network listener address of SITE2>"
3. (tng) (tng) 理
只能?/span> master Zq行 tmadmin q行理。要获得l计信息?/span> tmadmin 中应q行 default –m 命o(h)?/span>
例如Q?/font>
tmadmin
>default –m SITE1
>printservice
(tng)
Sample:
#ident (tng) (tng) (tng) (tng) (tng) (tng) "@(#) samples/atmi/simpapp/ubbmp (tng) (tng) (tng) (tng) (tng) (tng) (tng) $Revision: 1.2.8.1 $"
(tng)
*RESOURCES
IPCKEY (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 87654
(tng)
MASTER (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) site1,site2
MAXACCESSERS (tng) (tng) (tng) (tng) 40
MAXSERVERS20
MAXSERVICES (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 40
UID (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 0
GID (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 0
MODEL (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) MP
OPTIONS (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) LAN,MIGRATE
(tng)
*MACHINES
CHRIS (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) LMID=site1
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) APPDIR="d:\tuxedo\samples\atmi\simpapp"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) TUXCONFIG="d:\tuxedo\samples\atmi\simpapp\tuxconfig"
# (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) TYPE="<Replace with the proper machine type for site1>"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) TUXDIR="d:\tuxedo"
(tng)
chrislinux (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) LMID=site2
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) APPDIR="/home/tuxedo/samples/atmi/simpapp"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) TUXCONFIG="/home/tuxedo/samples/atmi/simpapp/tuxconfig"
# (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) TYPE="<Replace with the proper machine type for site2>"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) TUXDIR="/home/tuxedo"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) UID=503
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) GID=503
(tng)
*GROUPS
GROUP1
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) LMID=site1 (tng) (tng) (tng) (tng) (tng) GRPNO=1 (tng) (tng) (tng) (tng) (tng) (tng) (tng) OPENINFO=NONE
GROUP2
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) LMID=site2 (tng) (tng) (tng) (tng) (tng) GRPNO=2 (tng) (tng) (tng) (tng) (tng) (tng) (tng) OPENINFO=NONE
(tng)
*NETWORK
site1NADDR="http://10.10.10.10:6033"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) NLSADDR="http://10.10.10.10:6034"
# (tng) (tng) (tng) (tng) (tng) (tng) BRIDGE="<Replace with the network device or omit if there is none>"
(tng)
site2NADDR="http://10.10.10.11:6033"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) NLSADDR="http://10.10.10.11:6034"
# (tng) (tng) (tng) (tng) (tng) (tng) BRIDGE="<Replace with the network device or omit if there is none>"
(tng)
*SERVERS
DEFAULT:
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) CLOPT="-A"
(tng)
simpserv (tng) (tng) SRVGRP=GROUP1 SRVID=3
(tng)
*SERVICES
一、Tuxedo基本命o(h)
#1.讄环境变量TUXDIR,APPDIR,TUXCONFIGQLANG(跟OS相关),LD_LIBRARY_PATH(跟OS相关)
#2.~译ubb文本生成二进刉|文Ӟ(x)tmloadcf –y ubbconfig
#3.所有机器上q行tlisten,具体见文档中NETWORK一?br />#4.启动tmboot –y
#5.关闭tmshutdown –y
参数Q?
-A在所有机器上启动/关闭理的Serverq程
-M只在MASTER机器上启?关闭理的Serverq程
-isrvid (tng)启动/关闭某个server id指定的Serverq程
-ggrpname启动/关闭某个server group名字指定的Server Group
-S启动/关闭所有应用服务器QLMIDQ?br />-sserver-name 启动/关闭某个server名字指定的Serverq程
-llmid option 在指定的机器上启?关闭所有TMSq程和应用服务器QLMIDQ?br />-Tgrpname 启动/关闭指定的server group中所有的TMSq程
-Blmid 在指定的机器上启?关闭BBLq程
-ecommand 指定一个程序可以当在MASTER机器上启动Q何一个进E失败时执行
-c计算出当前UBB配置的Tuxedo启动最要占用的系lIPC资源
#用tmunloadcf > generated.ubb 可以得出目前配置得UBB文g所有得参数|没有讄的有~省|(j)
#用tmloadcf –c或tmboot –c可以计算出当前UBB配置的Tuxedo启动最要占用的系lIPC资源?
二、UBB文g配置说明
UBB配置文g分成*RESOURCES,*GROUP,*SERVER,*SERVICE,*NETWORK{若q节。DEFAULT表示该节中所有对象共有的~省属性?
*RESOURCES
#RESOUCES节提供整个系l的基本参数?
IPCKEY55555 Q?2767-262143Q?
#q行IPC通讯的key?br />DOMAINIDunicom (tng)
#DOMAIN的ID?br />MASTERunicom1,unicom2
#指定DOMAIN中的理L为unicom1,q行q程中unicom1若出现问题,理L切换至unicom2
MAXACCESSERS (tng)1000
#q里该DC整个系l中单个机器上可以访问TUXEDO的最多的Client和Server的L(可以讉K BBL的最大进E数)Q应大于license用户?server敎ͼ副本应记入)(j)。该字段?x)被MACHINE部分的MAXACCESSERS覆盖?br />#pȝ核心(j)参数中SEMAPHORE的数?SEMMNS)要大于这里的MAXACCESSERS数目Q而ipc消息个数QMSGMAXQ应大于MAXACCESSERS?所有带REPLYQ的SERVER的个数?br />MAXSERVERS80 (tng)
#最大的server敎ͼ副本应记入)(j)
MAXSERVICES200
#最大的service敎ͼ多个server重复记入Q?br />MAXGTT20
#pȝ最多的q发的全局交易数目
MODELMP (tng)
#表示cluster方式Q否则ؓ(f)SHM
OPTIONSLAN,MIGRATE (tng)
#多机cluster方式时必L定ؓ(f)LAN方式QMIGRATE表示可以以组为单位进行机器间SERVER的迁UR?br />LDBALY (tng)
#允许负蝲均衡
SCANUNIT10
#SCANUNIT
是BBL在所有服务请求中定期扫描以寻找超时的交易和被d徯用和德间隔时_(d)U)(j)。这个参数指定BBL扫描间隔旉的基本单位,
它会(x)影响在tpbegin中指定的交易时旉和用BLOCKTIME指定的请求阻塞超时时间的_E度。SANITYSCAN, BBLQUERY,
DBBLWAIT,
BLOCKTIME{参数都是SCANUNIT的倍数Q而不是实际秒数。而作为时间单位SCANUNIT必须?的倍数Qƈ且满?<
SCANUNIT<60?
SANITYSCAN12
#SANITYSCAN的值指定在每个MACHINE上BBL自动(g)所有进E的旉间隔Q以SCANUNIT为单元。缺省值满ISCANUNIT*SANITYSCANQ约?20U?
DBBLWAIT 2
#DBBLWAIT
的值指定DBBL扫描BBL时等待所有BBL应答的最大时_(d)以SCANUNIT为单元,卌qDBBLWAIT*SCANUNITQ秒Q就时。每一?
DBBL请求{发给它的BBLӞBBL?x)在hq回l果之前先回复一个肯定的应答。这样可以定时检死掉或不正常的BBL。缺省值满?
QSCANUNIT*DBBLWAITQ的值等于SCANUNIT?0U两者之间的最大者?
BBLQUERY30
#BBLQUERY指定DBBLҎ(gu)有BBLq行状态检查的旉间隔Q它也是以SCANUNIT单位。如果DBBL的状态询问没有回{,该BBLp‘隔Z了(jin)。缺省值满?SCANUNIT * BBLQUERY) Uؓ(f) 300U?
BLOCKTIME6
#BLOCKTIME指定在阻塞队列中的被dh的超时时?包括客户端从tpinit到tpterm的等待时?Q以SCANUNIT单位。缺省值满?SCANUNIT * BLOCKTIME) Uؓ(f)60U?
*MACHINES
DEFAULT:
#该部分对各主行描q?br />unicom2LMID=unicom2
APPDIR="/usr/tuxedo/apps/simpapp"
TUXCONFIG="/usr/tuxedo/apps/simpapp/tuxconfig"
TUXDIR="/usr/tuxedo"
UID=17
GID=26
MAXACCESSERS=100
unicom1LMID=unicom1
APPDIR="/usr/tuxedo/apps/simpapp"
TUXCONFIG="/usr/tuxedo/apps/simpapp/tuxconfig"
TUXDIR="/usr/tuxedo"
UID=17
GID=26
MAXWSCLIENTS=50
#unicom2, unicom1为网l主机名用hostname获得?br />#LMIDQLogical Machines ID 为tuxedo对主机的内部逻辑命名?br />#APPDIR要求攄SERVER的可执行文g?br />#TUXCONFIG为全路径的二q制配置文gQ要求和环境变量TUXCONFIG相同。对于master机tuxconfig文g是由tmloadcf生成的,而非master机则是由tmboot启动后由tlisten从masterZ拯获得?br />#TUXDIR为tuxedo安装目录Q要求和环境变量TUXDIR相同?br />#MAXWSCLIENTS表示可连接client的最大个数?
*GROUPS
#GROUP1为组名,LMID表示该组q行的主机,GRPNO为组POPENINFOl通过XA打开RM(通常指数据库)的初始串?
GROUP1 LMID=unicom2GRPNO=1 OPENINFO=NONE
GROUP2 (tng)LMID=unicom3GRPNO=2 OPENINFO=NONE
*SERVERS
#q里描述应用服务器。SRVGRP的该SERVER所属组名,SRVID为服务器IDPMIN表示该服务器CLOPT提供q行的相兛_敎ͼ要求是?A -- ??可以在应用服务器的srvinit函数中获得这些参数?br />DEFAULT:
CLOPT="-A"
BillServer SRVGRP=GROUP1 SRVID=1 MIN=2 MAX=4
RQADDR=QNAME REPLYQ=Y
CLOPT="-A -o ./out.log –r -e ./err.log --
-p [L][low_water][,[terminate_time]][:[high_water][,create_time]]
?
果MAX>1Qƈ且用了(jin)MSSQQRQADDRQ?
RQPERMQ的Server可以配置-p来控制进E的增加和减。控制算法如下:(x)如果h队列中的h个数大于high_water
后超qcreate_time U?增加该服务的一个新q程Q?如果h队列中的h个数于low_water
后超qterminate_time U? 停止该服务的一个进E。low_water ~省是^均每个服务进E有一个请求消息或者workload
50Qhigh_water ~省是^均每个服务进E有两个h消息或者workload 100。create_time ~省最是50U?
and terminate_time ~省最是60U?br />注意Q?br />使用TUXEDO的服务进E池Ӟ用户自己在程序中如果用alarmQ)(j){系l调用来停止q程是不起作用的Q但也不?x)报错?br /> (tng) (tng)[L] 标记意味着增减服务q程Z负蝲而不是请求队列的长度。仅用于SHM模式下ƈ且LDBAL=YQ否则会(x)报错 (LIBTUX_CAT:1542) Q服务进E也不会(x)增减?
WSLSRVGRP=GROUP2 SRVID=1
CLOPT="-A -- -n //130.36.0.103:8889 -m 3 -M 10 -x 10 -T 10"
#WSL
用于和client端进行连接?n 表示出接入点为IP:PORT方式Q?m –M
表示最和最大启动多个WSH和前端通讯Q?x则表CZ个WSH和几个client端连接?T
10表示如果client端和serverq接?0分钟内没有交易请求则关闭q接?
*SERVICES
#不要求将所有的service在这里描qͼ当某个service有特别参数时才在SERVICE节中说明?br />TOUPPER
LOAD=60 (tng)// 负蝲Q当LDBAL=Y时有?br />PRIO=80// 服务在请求队列中的优先
TRANSTIME=120 // 交易旉
SVCTIMEOUT=600// 服务时旉
*NETWORK
#NETWORK节对多机之间如何q行|络q接q行描述?br />#cluster方式下要求先启动tlisten。事实上Q对于非master机启动应用服务器是由tlisten完成的?br />#tlisten的启动方式ؓ(f)
#unicom1: tlisten –l //130.36.1.101:8891
#unicom2: tlisten –l //130.36.0.102:8891
#NADDR指定|络q接的接入点?br />#NLSADDR则指定tlisten的接入点?br />#BRIDGE则指TCPq接所用的讑֤文g?
unicom2 (tng) (tng)
NADDR="http://130.36.0.102:8899"
NLSADDR="http://130.36.0.102:8891"
BRIDGE="/dev/streams/xtiso/tcp"
unicom1
NADDR="http://130.36.0.101:8899"
NLSADDR="http://130.36.0.101:8891"
BRIDGE="/dev/streams/xtiso/tcp"
分类ȝ
TypeParameters requiring tuning
IdentificationTUXCONFIG, UID, GID, IPCKEY, DOMAINID
ThresholdsMAXACCESSERS, MAXSERVERS, MAXSERVICES, MAXGTT, MAXCONV, MAXBUFSTYPE, MAXWSCLIENTS
Time-outsSCANUNIT, SANITYSCAN, DBBLWAIT, BBLQUERY, BLOCKTIME
AvailabilityMASTER, MIGRATE, RESTART, GRACE, MAXGEN, RCMD
MachineTYPE, CMPLIMIT, NETLOAD, SPINCOUNT, TLOGDEVICE, PERM
NetworkNADDR, NLSADDR
ServersCLOPT, ENVFILE
ServicesLOAD, PRIO, BUFTYPE, SVCTIMEOUT
WorkstationsWSNADDR, WSRPLYMAX
三、数据库XA讄
3.1 ORACLE XA
1.在附件中提供?jin)rm文g,另外q行oracle的demo文g获得要连接的所有lib库的名称.然后这些名U全部写在RM文g?
如:(x) #Oracle 8i for NT
Oracle_XA;xaosw;%ORACLE_HOME%\RDBMS\XA\ORAXA8.LIB
%ORACLE_HOME%\PRECOMP\LIB\MSVC\ORASQL8.LIB
%ORACLE_HOME%\PRECOMP\LIB\MSVC\ORASQX8.LIB
%ORACLE_HOME%\OCI\LIB\MSVC\OCI.LIB %ORACLE_HOME%\OCI\LIB\MSVC\OCIW32.LIB
#Oracle 8i for Unix
Oracle_XA:xaosw:-L${ORACLE_HOME}/lib -lclntsh
2.ubb 文g?*GROUP节加?br /> (tng)TMSNAME=TMS_ORA
(tng)TMSCOUNT=3 (tng)OPENINFO="Oracle_XA:Oracle_XA+Acc=P/scott/tiger+SesTM=120+LogDir=.+SqlNet=abcde"
?
体在Oracle联机文档Application Development->oracle8 Application
Development's Guild->Oracle XA->Defining the xa_open String中提供了(jin)解释
3.在oracle用sys用户dsqlplusQ?br />a)q行${ORACLE_HOME}/rdbms/Admin/xaview.sql,
b)grant select on v$xatrans$ to public;
c)grant select on dba_pending_transactions to scott;
d)commit;
4.q行 buildtms -o $(TUXDIR)/bin/TMS_ORA -r Oracle_XA
5.
在tpsvrinit()中EXEC SQL CONNECT ...Ҏ(gu) tpopen(), (tng)tpsrvdone()中EXEC SQL
DISCONNECT...Ҏ(gu)tpclose(); 实际可拷?TUXDIR/apps/bankapp/appinit.c
6.需在ubb文g中MACHINE节指定TLOGDEVICE,TLOGSIZE
?TLOGDEVICE="/home/usr1/TLOGDEV"
(tng) TLOGSIZE=500
7.建立TLOG文g直接拯$TUXDIR/apps/bankapp/crtlog.sh.讑֮相关的环境变量后q行该shell文g.
8.启动事务用tpbegin(3,0),提交回滚用tpcommit/tpabort.
3.2 SYBASE XA
1.在RM文g,q行sybase获得要连接的所有lib库的名称.然后这些名U全部写在RM文g?#Sybase_11 for NT
SYBASE_XA_SERVER;sybase_xa_switch;C:\SYBASE_SERVER\lib\libxasrvlib.lib
2.ubbconfig 文g中的 *GROUP?
TMS_NAME=TMS_SYB TMSCOUNT=3 (tng)OPENINFO=" SYBASE_XA_SERVER: -Uuserid1 -Ppassword1 -Nconnection2 -Lxa_log -Tall "
具体察看Sybase文当中xa_open String中提供了(jin)解释
3.q行 buildtms -o $(TUXDIR)/bin/TMS_SYB -r SYBASE_XA_SERVER
4.
在tpsvrinit()中EXEC SQL CONNECT ...Ҏ(gu) tpopen, tpsrvdone()中EXEC SQL
DISCONNECT...Ҏ(gu)tpclose(); 实际可查?TUXDIR/apps/bankapp/appinit.c
5.需在ubb文g中MACHINE节指定TLOGDEVICE,TLOGSIZE
?TLOGDEVICE="/home/usr1/TLOGDEV"
(tng) TLOGSIZE=500
6.建立TLOG文g直接拯$TUXDIR/apps/bankapp/crtlog.sh.讑֮相关的环境变量后q行该shell文g.
7.启动事务用tpbegin(3,0),提交回滚用tpcommit/tpabort.
3.3 INFORMIX XA
1.
q行esql
-lib获得要连接的所有lib库的名称.然后这些名U全部加到RM文g中INFORMIX-OnLine:infx_xa_switch:$
{INFORMIXDIR}/lib/esql/libinfxxa.a /usr/informix/lib/esql/libixos.a
/usr/informix/lib/esql/libixgen.a /usr/informix/lib/esql/libixsql.a
/usr/informix/lib/libixasf.a /usr/informix/lib/esql/libixos.a
/usr/informix/lib/esql/libixgen.a /usr/informix/lib/esql/libixgls.a
-lnsl_s -lm -lV3 -lcl -lsec /usr/informix/lib/esql/libixglx.a
2.ubbconfig 文g?br />*GROUP?TMS_NAME=TMS_INFO TMSCOUNT=3 (tng)OPENINFO="INFORMIX-OnLine:test_tux"
具体察看Sybase文当中xa_open String中提供了(jin)解释
3.q行 buildtms -o $(TUXDIR)/bin/TMS_INFO -r INFORMIX-OnLine
4.
在tpsvrinit()中EXEC SQL CONNECT ...Ҏ(gu) tpopen, tpsrvdone()中EXEC SQL
DISCONNECT...Ҏ(gu)tpclose(); 实际可查?TUXDIR/apps/bankapp/appinit.c
5.需在ubb文g中MACHINE节指定TLOGDEVICE,TLOGSIZE
?TLOGDEVICE="/home/usr1/TLOGDEV"
(tng) TLOGSIZE=500
6.建立TLOG文g直接拯$TUXDIR/apps/bankapp/crtlog.sh.讑֮相关的环境变量后q行该shell文g.
7.启动事务用tpbegin(3,0),提交回滚用tpcommit/tpabort.
四、Tuxedo多机方式配置要点
tuxedo多机方式配置有两个方?br />4.1启动tlisten
tlisten在tuxedo启动时扮演控制者的角色,在非masterZ由tlisten启动bbl和应用服务器,tlisten的启动方法ؓ(f)
tlisten (tng) -l //hostip:ipport
1Q注意这里的ipport必须和ubb文g中NETWORK域的NLSADDR一?最好都用IP地址Q以避免双方对同一机器名解释出不同的IP地址?br />2Q?tlisten必须在所有的机器上启?启动后才能运行tmboot.操作pȝ启动时就q行tlisten.
3Q?
注意各个节点的tlisten都有PASSWORDQ存?APPDIR%\.adm\tlisten.pw文g下,如果那里没有Q就读TUXEDO?
TUXDIR%\udataobj\tlisten.pw文g中的内容。各节点的tlisten
password要保证绝对一P包括回RQ)(j)。否则会(x)报错Q‘Security Violation’?br />4.2 ubb文g配置
对于多机模式一般就是指单一domain理的多台机?所有机器上仅需要一个ubb文g,以下是ubb文g的模?br />*RESOURCES
IPCKEY80952
MAXACCESSERS40
MAXSERVERS35
MAXSERVICES75
MASTERSITE1,SITE2
OPTIONSLAN,MIGRATE (tng) (tng)// MIGRATE表示MASTER可以动态迁U?br />MODELMP// 多机模式
*MACHINES
"PATRICK"LMID="site1"
APPDIR="DQ?Bea/tuxedo/samples/atmi/simpapp"
TUXCONFIG="d:/Bea/tuxedo/samples/atmi/simpapp/tuxconfig"
TUXDIR=" d:/Bea /tuxedo"
UID=0
GID=0
TYPE="NT"
MAXWSCLIENTS=5
MAXACCESSERS=40
"test60"LMID="site2"
APPDIR="/bea/tuxedo/samples/atmi/simpapp"
TUXCONFIG="/bea/tuxedo/samples/atmi/simpapp/tuxconfig"
TUXDIR="/bea/tuxedo"
UID=1002
GID=101
TYPE="Sun"
MAXWSCLIENTS=15
MAXACCESSERS=100
*GROUPS
GROUP1 LMID=site1GRPNO=1OPENINFO=NONE
GROUP2 LMID=site2GRPNO=2OPENINFO=NONE
*SERVERS
DEFAULT:DEFAULT: RESTART=Y MAXGEN=5 REPLYQ=Y CLOPT="-A"
WSLSRVGRP=GROUP1 SRVID=20 CLOPT="-A -- -n //10.128.5.201:9009"
WSLSRVGRP=GROUP2 SRVID=10 CLOPT="-A -- -n //10.128.5.200:9009"
simpservSRVGRP=GROUP1 SRVID=3
simpservSRVGRP=GROUP2 SRVID=4
*SERVICES
*NETWORK
site1NADDR="http://10.128.5.201:6044"
(tng) (tng) (tng) (tng)NLSADDR="http://10.128.5.201:6045"
site2NADDR="http://10.128.5.200:6044"
NLSADDR="http://10.128.5.200:6045"
# (tng)BRIDGE="/dev/tcp"
4.3理
只能在masterZq行tmadminq行理。要获得l计信息在tmadmin中应q行default –m命o(h)?br />$tmadmin
>default –m SITE1
>psr
>bbi
当MASTERL意外当机ӞTUXEDO仍可以正常运行,可以在backup的节点上手工做MASTER的动态迁U,在当前的backup节点?DBBL充当MASTER?br />$tmadmin
>m
Windows NT/2000下要注意的问题:(x)
1.׃NT机器上MAXACCESSORS受IPC的限刉常较小,因此在MACHINES部分单独讄MAXACCESSORS.
2.在MACHINES部分要单独设|UID=0和GID=0
3.和其他类型的CPU机器互连?在MACHINES部分一定要指定不同的TYPE.否则提Ctlisten版本不匹配?br />TUXEDO在SERVER和CLIENT之间q行数据交换~省q行数据译,但一个domain的server之间~省不进行数据翻?
5.有时LANG环境变量无法改变?sh)C, 可以?%TUXDIR%\locale创徏文g?mkdir %LANG%.
6.RM文g使用中发现有效的RM后一定要有回?否则报RM不存?
五、用JOLTq接Tuxedo和W(xu)eblogic
5.1在Tuxedo上安装、配|JOLT Server
1 ?安装JOLT Server
2 -- set your environment
(tng)set TUXDIR=d:\bea\tuxedo
set JOLTDIR=%TUXDIR%\udataobj\jolt
(tng)set APPDIR=%TUXDIR%\samples\atmi\simpapp
(tng)set PATH=%TUXDIR%\bin;%JOLTDIR%\bin;%APPDIR%;%PATH%
(tng)set NLSPATH=%TUXDIR%\locale\C
(tng)set TUXCONFIG=%APPDIR%\tuxconfig
3 ?added in UBBconfig file
JSLSRVGRP=GROUP1
SRVID=6 CLOPT="-A -- -n //10.128.5.112:9001"JREPSVRSRVGRP=GROUP1
SRVID=7 CLOPT="-A -- -W -P
d:\Bea\tuxedo\udataobj\jolt\repository\jrepository"JREPSVRSRVGRP=GROUP1
SRVID=8 CLOPT="-A -- -P
d:\Bea\tuxedo\udataobj\jolt\repository\jrepository"
5.2 配置Weblogic Server 6.x
1,Download
the Jolt client package for WLS from developer.bea.com, unzip it and
copy the jar file to %WL_HOME%\lib. (tng)Then add the jar files into your
Weblogic domain environment file:
(tng)classpath=%classpath%;%WL_HOME%\lib\jolt.jar;%WL_HOME%\lib\joltweblogic.jar
2,Config Jolt pool manager startup class (tng)in Weblogic
(tng)a,start Weblogic and access the console
(tng)b,create Startup class and Shutdown class
(tng) (tng)in console:Deployments->Startup & Shutdown,right click
(tng) select create a new StartUp class...:
(tng) (tng) (tng)name:demojoltpoolStartup
(tng) (tng) classname:bea.jolt.pool.servlet.weblogic.PoolManagerStartUp
3,Create a jolt pool
(tng)in console:Services->Jolt,right click
(tng) (tng) Select the panel:Configuration
(tng) (tng) in TAB General
(tng) (tng) name:demojoltpool
(tng) (tng) Minimum Pool Size:1
(tng) (tng) Maximum Pool Size:3
(tng) (tng) Click the button "Create"
(tng) (tng) in TAB address
(tng) (tng) (tng) (tng)Primary Address://hostname:port
(tng) (tng) (tng) (tng)Failover Address://hostname:port
(tng) (tng) Click the button "Apply"
(tng) (tng) Select Targets:
(tng) (tng) (tng) (tng)in Listbox Available:
(tng) (tng) (tng) (tng) select your server add into the listbox Chosen
(tng) (tng) Click the button "Apply"
4. Restart your Weblogic
5.3 Example setup
1.Run %WL_HOME%\config\example\setExampleEnv.cmd,
2.compile the SimpAppServlet by:
javac -d %EX_WEBAPP_CLASSES% SimpAppServlet.java
3.Edit WL_HOME%\config\examples\applications\examplesWebApp\WEB-INF\web.xml
add the servlet description:
(tng)<servlet>
(tng) (tng)<servlet-name>JoltServlet</servlet-name> (tng)
(tng)<servlet-class>examples.jolt.servlet.simpapp.SimpAppServlet</servlet-class>
(tng)</servlet>
(tng)<servlet-mapping><servlet-name>JoltServlet</servlet-name>
<url-pattern>/joltservlet</url-pattern>
(tng)</servlet-mapping>
4.Edit a html and put it to %WL_HOME%\config\examples\applications\examplesWebApp
内容包含调用JoltServlet
Type
some text here and click the Post button:<form name="simpapp"
action="joltservlet" method="post"><input type="hidden"
name="SVCNAME" value="TOUPPER"><input type="text"
name="STRING"></td><input type="submit"
value="Post!"></form>
5.Goto %WL_HOME%\config\example, start the examples domain,
6.Access http://localhost:7001/examplesWebApp/jolt.html
六、TUXEDO动态配|?br />TUXEDO
的动态配|可以通过tmadmin和tmconfig两个命o(h)行工具实C同别的配置修改。tmadmin的作用主要是监控TUXEDO的运行,可以?
Ҏ(gu)务的参数Q而tmconfig功能更强大,可以在线修改当前TUXEDO的系lUBB配置Q即通过MIB修改用UBBCONFIG生成的二q制
TUXCONFIG在内存的拯?br />6.1 (tng)用tmadmin修改配置
q入tmadmin后用命o(h)help可以列出所有命令?
6.2 (tng)用tmconfig更改TUXCONFIGQUBBCONFIGQ?br />tmconfig工具实际上遍历TUXCONFIG的内容ƈ通过MIB API修改光|。要正确q行tmconfigQ徏议设|以下环境变量:(x)
TUXDIR=/usr/tuxedo
TUXCONFIG=/usr/app/tuxconfig
EDITOR=vi
主要的界面如下:(x)
(tng) $ tmconfig
(tng) Section: 1) RESOURCES, 2) MACHINES, 3) GROUPS 4) SERVERS
(tng) (tng)5)SERVICES (tng)6) NETWORK 7) ROUTING q) QUIT 9) WSL
(tng) (tng)10) NETGROUPS 11) NETMAPS 12) INTERFACES [1]:
(tng) Operation: 1) FIRST 2) NEXT 3) RETRIEVE 4) ADD 5) UPDATE
(tng) (tng)6) CLEAR BUFFER 7) QUIT [1]: (tng)4
(tng) Enter editor to add/modify fields [n]?
(tng) Perform operation [y]?
1. 用tmconfig增加C?
1.q入tmconfig后,选择2QMACHINES?br />2.然后可以先选择3QRETRIEVE看看当前的配|,~省是第一个MACHINE的配|?br />3.通过选择2QNEXT可以一直向后搜索MACHINE配置Q直到空记录为止?br />4.选择4QADD
(tng) Enter editor to add/modify fields [n]? y
5.q入vi~辑状态,可以按照一定格式增加配|。格式ؓ(f)Q?br />MIB域名[tab]?br />6.增加MACHINE必须加入以下的域Q?br />oTA_TUXCONFIG
oTA_TUXDIR
oTA_APPDIR
oTA_TLOGDEVICE
oTA_TLOGSIZE
oTA_PMID
oTA_LMID
oTA_TYPE
例:(x)
TA_TUXCONFIG (tng) (tng) (tng) (tng) (tng) (tng) /usr/apps/bank/tuxconfig
TA_TUXDIR (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)/usr/tuxroot
TA_APPDIR (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)/usr/apps/bank
TA_TLOGDEVICE (tng) (tng) (tng) (tng) (tng) (tng)/usr/apps/bank/TLOG
TA_ULOGPFX (tng) (tng) (tng) (tng) (tng) (tng) (tng) /usr/apps/bank/ULOG
TA_ENVFILE (tng) (tng) (tng) (tng) (tng) (tng) (tng) /usr/apps/bank/ENVFILE
TA_TLOGSIZE (tng) (tng) (tng) (tng) (tng) (tng) (tng)150
TA_PMID (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)SERVER109
TA_LMID (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)SITE1
TA_TYPE (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)Sun
7.存盘退出viQ执行操作即可? (tng)
8.ȀzL增的MACHINEQ?重新选择2QMACHINES ?gt; 5)UPDATE
9.q入vi后查找TA_STATE,其gNEW改ؓ(f)ACTIVE
10.存盘退出viq执行操作?
2. 用tmconfig增加新Serverq程
1.q入tmconfig后,选择2QSERVER?br />2.可以先选择3QRETRIEVE看看当前的配|,~省是第一个SERVER的配|?br />3.通过选择2QNEXT可以一直向后搜索SERVER配置Q直到空记录为止?br />4.选择4QADD
Enter editor to add/modify fields [n]? y
5.q入vi~辑状态,可以按照一定格式增加配|。格式ؓ(f)QMIB域名[tab]?br />6.增加MACHINE必须加入以下的域Q?br />oTA_SERVERNAME
oTA_SRVGRP (tng)
oTA_SRVID (tng)
例:(x)
TA_SERVERNAME (tng) (tng) (tng) (tng) (tng)/usr/apps/bank/teller_server
TA_SRVGRP (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)GROUP1
TA_SRVID (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)15
7Q存盘退出viQ执行操作即可?
七、系l核?j)参数参?br />Message Queues Parameters
·MSGMNI:
Total Number of Queues (Use this formula: Add (tng)MAXACCESSERS + (No.
Servers with Reply Queues) - (No. Servers in MSSQ Set) + (No. MSSQ
Sets) + 7) to determine the appropriate value
·MSGMAP: Number of entries in control map used to manage message segments (Not defined in NT). Set to 2 * MSGMNI
·MSGMAX: (tng)Maximum message size in bytes. (tng)Set to the largest message size or 75% of the queue size (whichever is bigger)
·MSGMNB: (tng)This is the queue size itself (64K, 128K, etc.)
·MSGSSZ:
Size of a segment in bytes (Not defined in NT). The value of MSGSSZ
should be such that a multiple of (tng)MSGSSZ is equal to the size
(including the BEA TUXEDO System header) of the most commonly sent
message. (tng)Usually set to 16, 32, or 64.
·MSGTQL: Total Number of In-Flight messages in the system at once
·MSGSEG:
Number of message segments in the system (Not defined in NT). You need
to find out the queue space of your machine and then the following
formula applies: (tng)MSGSEG * MSGSSZ = Machine Queue Space Size (note it
will swap)
Semaphores Parameters
·SEMMNS: Maximum number of
semaphores in the system. The minimum requirement for SEMMNS is
MAXACCESSERS - MAXWSCLIENTS + 13 (local clients and all servers)
·SEMMNI:
(tng)Maximum number of active semaphore sets. (tng)For small apps,(100 to 500
servers),10 sets are usually sufficient. (tng)For large apps, (>500
servers) 32-64 sets are usually sufficient (do a tmloadcf -c to see
which is the best)
·SEMMSL: Maximum number of semaphores per semaphore sets (Not defined in NT). (tng)Use the formula: (tng)SEMMNS = SEMMNI * SEMMSL
·SEMMAP: Size of the control map used to control semaphore sets (Not defined in NT). (tng)Set to SEMMNI
·SEMMNU: Number of undo structures in the system. (tng)Set to SEMMNS
·SEMUME: (tng)Maximum number of undo entries per undo structure (Not defined in NT). (tng)Set to SEMMNS
Shared Memory Parameters
·SHMMAX:
Maximum shared memory segment size in bytes. Bulletin Board Size (must
be greater than 1,400,000). Largest BB today is approx. 5 MB (this
parameter is normally set much higher for the database, so use their
rules)
·SHMSEG: Maximum number of segments one process can attach to (for a busy (tng)application you need to set this from 32-64)
·SHMMNI:
Maximum number of shared memory identifiers in the system. Normally the
default of 100 is acceptable (unless more than 100 entities plan on
allocating shared memory)
·SHMMIN: Minimum shared memory segment size in bytes. (tng)MUST be set to 1.
Other Tunables
·ULIMIT:
Maximum file size. ULIMIT needs to be large enough so that you can
install BEA TUXEDO and build servers. 4 megabytes recommended.
·MAXUP:
Maximum number of processes per non-super user. The BEA (tng) (tng) TUXEDO
system processes--servers and administrative processes—run (tng) (tng) (tng)with
the UID specified in the application's UBBCONFIG file. MAXUP needs (tng) (tng)
(tng)to be large enough to allow all of these processes to run.
·NOFILES: (tng)Maximum number of open files per process. A BEA TUXEDO server requires a minimum of four file descriptors.
·NPROC: (tng)Maximum number of processes (systemwide).
·NREGION:
(tng)Number of region table entries to allocate. Most processes have three
regions: text, data, and stack. Additional regions are needed for each
shared memory segment and shared library (text and data) attached.
However, the region table entry for the text of a ``shared text''
program is shared by all processes executing that program. Each shared
memory segment attached to one or more processes uses another region
table entry.
·NUMTIM: Maximum number of STREAMS modules that can
be pushed by the Transport Layer Interface (TLI). A typical default
value is 16; you should have it set to at least 256.
·NUMTRW: The
number of TLI read/write structures to allocate in kernel data (tng)space.
A typical default value is 16; you should have it set to at least 256.
Tuxedopȝq_的调试参数及(qing)步骤
1Q配|MAXSERVERS、MAXSERVICES两个参数Q看是否满ubbfile文g的配|的服务数和服务参数的个数。Tmadmin——bbsQ看里面的参C数?br />2Q数据库的可以连接数的大是否满ubbfile文g里面同一个数据库q接得servers的数目。参照xa_NULL*.trc文g的错误提C?br />3Q用命o(h)tmloadcf –c ubbfile看tuxedo的进E所需要的׃n内存配置。然后修改系l的׃n内存的配|。除?jin)AIXq_外,pȝ的共享内存参数——set shmsys:shminfo_shmmin要设|ؓ(f)1?br />4QTmunloadcf (tng)看现在运行的TUXEDO环境?br />5QTmadmin——crdl (tng)-b (tng) -z (tng)创徏日志文g?br />6QTUXEDO环境的设|顺序。Tuxconfig——tmadmin——TLOGQ?br />
-- 作者:(x) whiteclude
-- 发布旉Q?2002/07/27 05:53pm
TUXEDO与ORACLE数据库的互连
(来源Qhttp://www.ccw.com.cn)
前言1 引言
q几q来Q以交易中间件ؓ(f)框架基础的三层客h/服务器模式已被广泛证实ؓ(f)建立开攑ּ关键业务应用pȝ的最佳环境?/p>
TUXEDO是美国BEA公司的一U交易中间g产品Q它在银行、电(sh)信、邮ѝ金融证券等大规模关键事务处理领域中有着q泛的应用。它能够? C/S环境下整合各U异构^収ͼ通过联机事务处理机制Q保证交易的完整性和数据的一致性。BEA TUXEDO是在企业、Internet q样的分布式q算环境中开发和理三层l构的客?服务器型关键d应用pȝ的强有力工具?/p>
BEA TUXEDO 采用三层l构的客h/服务器模式组件Y件模?该结构利用交易中间g应用的业务逻辑、表C逻辑和数据分Z个不同的处理层:(x)客户为第一表示逻辑层,? 现用户交互和数据表示Q第二层的逻辑业务层ؓ(f)应用的主体,负责业务的逻辑处理Q第三层数据层负责对数据库的(g)索、读取和更新{操作。交易中间g作ؓ(f)构造三 层结构应用系l的基础q_Q提供了(jin)两个主要功能Q负责客h和服务器间的联接和通讯Q提供一个三层结构应用开发和q行的^台。由此可见,交易中间件提供了(jin) 一个基的框架去帮助你徏立、运行和理一个三层客h/服务器模式的应用Q你不需要从零做P大大~短?jin)应用开发的旉Q提高(sh)(jin)应用开发的成功率?/p>
本文以应用TUXEDO的同步调用tpcall方式和FML~程方式ZQ介l了(jin)在Windows客户端和Unix服务器之间完成文件传输的? 法。客L(fng)调用VC++制作的传输文件的tuxedo动态链接库Q实现Windows客户端与Unix服务器端传输文gQ包括上传和下蝲文g两种方式Q的 实现Ҏ(gu)?/p>
2 客户端应用TUXEDO实现文g传输Ҏ(gu)
在客L(fng)Q首先设|客L(fng)与服务器端在文g传输中文件块的大、文件的块标识等基本信息Q将字节数比较大的文件分为很多小块,利用TUXEDO 的同步调用tpcall方式循环调用后台的文件处理服务,字节数较大的文件按着块的大小分多ơ传输到UNIX后台。下面以下蝲文gZ讲解使用 tuxedo同步调用tpcall方式完成文g传输的例子?/p>
首先利用TUXEDO的tpalloc甌需要用的发送和接收~存Q用Fchg32函数在缓存(sh)攑օ服务器端需要的域|(x)文g块的大小、文件的标识{基本信息?/p>
SndBuf = (FBFR32 *)tpalloc("FML32", NULL, 1024); /* 甌发送的~存 */
iRet = Fchg32(SndBuf,BLOCKSIZE,0,(char *)&lBlockSize,0); /* 讄文g块的大小 */
讄完毕后,开始用同步tpcall调用UNIX后台文g处理FTPSVR服务?
/* 客户端同步调用UNIXq_文g处理服务*/
iRet = tpcall("FTPSVR",(char *)SndBuf,0L,(char **)&RcvBuf,(long *)&len,0L);
iRet = Fget32(RcvBuf, FILELEN, 0, (char *)&lFileLen, 0);/* 接收文g长度*/
接收文gq将W一块数据写入文?br />iRet = Fget32(RcvBuf, FILEDATA, 0, pszFileBuf, (FLDLEN32 *)&lFileDataLen);
fp = fopen(pszCltFileName, "wb+"); /* 创徏文g*/
lBlkLen = fwrite(pszFileBuf,1,lFileDataLen,fp); /* 接收第一块数据写入文?/
同时计算需要调用下载文件服务的ơ数Q多ơ调用文件服务,后l文件下载到客户端?br />lBlkNum = (lFileLen -1)/lBlockSize +1 ;
for(i=2; i<lBlkNum+1;i++)?br />…?br />iRet = tpcall("FTPSVR",(char *)SndBuf,0L,(char **)&RcvBuf,(long *)&len,0L);
Fget32(RcvBuf, FILEDATA, 0, pszFileBuf, (FLDLEN32 *)&lBlockSize);
lBlkLen = fwrite(pszFileBuf, 1, lBlockSize, fp);
…?br />?/p>
3 UNIX服务器端实现Ҏ(gu)
在Unix服务器端Q接收客L(fng)发送过来的~存内容Q如Q文件块的大、文件块内容、文件块标识{。根据文件块的标识移动文件指针来写文Ӟ? ơ文件指针移动的大小由文件块的大决定,q将d的文件块的内Ҏ(gu)入输出缓存(sh)Qƈq回l客L(fng)。Unix服务器端E序例子说明如下Q?/p>
FTPSVR(TPSVCINFO *rqst)
{
………?br />RcvBuf = (FBFR32 *)rqst->data; /*指向接收客户端的~存*/
iRet = Fget32(RcvBuf, BLOCKID, 0, (char *)&lBlockID, 0); /* 接收client发送的块标?/
fp = fopen(pszSvrFileName, "rb"); /* 打开文gQ准备读?/
(fseek(fp, (lBlockID-1)*lBlockSize, 0)!=0) /* Ҏ(gu)块标识移动文件指?/
lReadLen=fread(pszFileBuf, 1, lBlockSize, fp); /* d文g?/
Fchg32(SndBuf, FILEDATA, 0, pszFileBuf, (FLDLEN32 )lReadLen); /* 文件块的内Ҏ(gu)式放入tuxedo甌的缓存(sh)*/
tpreturn(TPSUCCESS, 0, (char *)SndBuf, 0L, 0); /* 输出缓存返回给客户?/
?
4 WINDOWSq_文g传输的设?/p>
4.1 WINDOWS客户端动态链接库的实?/p>
使用PowerBuilder、Delphi、VB{Y件不能直接调?
C语言源代码,它们只能调用动态链接库文g。下面我们讲q如何用VC++6.0Windows客户端的文g传输的C、TUXEDO代码制作成动态链?
库供Power Builder、Delphi、VB{程序调用?br /> 使用VC++可以制作三种DLLQ分别是
(1)Non-MFC Dlls
(2).Regular Dlls
(3)Extension Dlls
Non-MFC DLL:指的是不用MFC的类库结构,直接用C语言写的DLLQ其输出的函C般用的是标准C接口Qƈ能被非MFC或MFC~写的应用程序所调用。因为我们不使用MFCcdQ所以采用Non-MFC Dlls?
每一个DLL必须有一个入口点Q就象用C~写的应用程序,必须有一个main函数一? DllMain是一个缺省的函数入口?/p>
创徏一个动态链接库Q选择File->New菜单Q弹出New对话框。在Projects标签下Q选择"Win32 Dynamic-Link Library"。Visual C++׃(x)创徏动态链接库所需的工E文件?br />创徏ftpfile.def文gQ这个文件记录了(jin)可被外部应用E序使用的DLL库函数名字。这些名字信息和对应的函C|的信息被~译q动态链接库文g中,然后应用E序Ҏ(gu)函数名字和函C|对照表来找到对应的函数。ftpfile.def内容如下Q?/p>
LIBRARY "ftpfile"
EXPORTS
ftpfile; /*与C代码中的函数名称相同*/
ftpfile.def?
源程序ftpfile.cpp、头文gpublic.h和ftpfld.h、tuxedo库文件wtuxws32.lib和libwsc.lib加入到工
E中。选择Project->add to projectQ?gt;files.然后开始编译动态链接库生成ftpfile.dll?br />代码样例如下Q?br />BOOL WINAPI DllMain( HMODULE hModule, DWORD dwReason, LPVOID lpvReserved )
/* 动态链接库函数入口*/
{
return TRUE;
}
LRESULT WINAPI ftpfile(char* CltFileName,char* SvrFileName,long lBlockSize,long lOptFlag) /* 动态链接库函数M*/
{
FBFR32 *RcvBuf,*SndBuf; /*变量声明*/
int iRet;
long i,lBlkLen,len,lFileLen,lBlkNum;
………?br />/* 动态链接库E序M*/
SndBuf = (FBFR32 *)tpalloc("FML32", NULL, MAXBUFLEN); /*甌发送缓?/
if (SndBuf == NULL)
{
userlog("tpalloc sndbuf error errno=[%d] err=[%s]",tpstrerror(tperrno));
tpterm();
return TPALLOCERR;
}
RcvBuf = (FBFR32 *)tpalloc("FML32", NULL, MAXBUFLEN);/*甌接收~存*/
iRet = Fchg32(SndBuf,BLOCKSIZE,0,(char *)&lBlockSize,0); /*把块大小攑օ发送缓?/
if (iRet <0){ /*错误处理*/
tpfree((char *)SndBuf);
tpfree((char *)RcvBuf);
tpterm();
return FCHGERR;
}
iRet = Fchg32(SndBuf,OPTFLAG,0,(char *)&lOptFlag,0);
…………………………?br />}/* E序Ml束*/
4.2 WINDOWS客户端动态链接库的调?/p>
以Power Builder7.0ZQ讲q如何在Power Builder中调用文件传输的客户端动态链接库?/p>
首先Q在Power Builder声明该函敎ͼ声明如下Q?br />Function Integer ftpfile(string CltFileName,string SvrFileName,long lBlockSize,long lOptFlag) LIBRARY "ftpfile.dll"
然后Q在E序中就可以应用?jin)。示例如下:(x)
string CltFileName
string SvrFileName
long lBlockSize
long lOptFlag /*讄文g上传或下载标?/
integer iRet
CltFileName="..\data\report.txt"
SvrFileName="../up/form.txt"
LBlockSize=1024
LOptFlag=1
IRet = ftpfile(CltFileName,SvrFileName,lBlockSize,lOptFlag)
If (iret< 0){
messagebox('pȝ提示','调用ftpfile函数错误')
return
}
5 l束?/p>
本文通过分析TUXEDO交易中间件的同步调用TPCALL和FML~程方式Q描qC(jin)在Windows和UNIXq_之间如何完成文g传输的方法,概述?jin)Windowsq_如何制作和调用动态链接库?/p>