首页 TUXEDO应用系统的配置(连接weblogic集群)

TUXEDO应用系统的配置(连接weblogic集群)

举报
开通vip

TUXEDO应用系统的配置(连接weblogic集群)TUXEDO应用系统的配置(连接weblogic集群) 查看 机器名 命令:hostname 查看 uid gid 命令: id TUXEDO应用系统的配置 3.1 TUXEDO应用系统的常见配置 配置文件UBBCONFIG介绍 一个TUXEDO应用系统的所有资源都在一个文本文件中进行定义,该文件称为UBBCONFIG,在配置完成后,UBBCONFIG被编译成一个二进制的文件 从该文件中读取系统的配置信息。 TUXCONFIG.在TUXEDO系统启动时, UBBCONFIG文件类似WINDOWS下的*....

TUXEDO应用系统的配置(连接weblogic集群)
TUXEDO应用系统的配置(连接weblogic集群) 查看 机器名 命令:hostname 查看 uid gid 命令: id TUXEDO应用系统的配置 3.1 TUXEDO应用系统的常见配置 配置文件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应用系统的服务端区分,我们在本 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 中,我们用SERVER 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示该进程,用服务端表示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+MaxCu r=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系统进行检查,检查超时的事务,超时的客户端连接等。 指定检查的最小时间单位,它单位为秒,必须是5的倍数。默认SCANUNIT: 值为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应用服务器名的查看 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 : 1. 在UNIX下用uname -n 查看SERVER的名字, 2. 在NT,WIN2000下用ECHO %COMPUTERNAME$查看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起作用。 该SERVER所在的GROUP SRVGRP: SRVID: 该SERVER所对应的ID,在一个GROUP中必须唯一 MIN: 该SERVER最少启动的进程数 : 该SERVER最多可启动的进程数 MAX 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: 指定 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 输出文件,默认为$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进程可同时处理多少个远程客户端 -T -N 3(程客户端所在的服务器上要配置WSNADDR环境变量,它的值为-n参数的值,如在上面的配置中为: SET WSNADDR= //192.168.120.113:8888 在client程序中,需要加入 tuxputenv(“WSNADDR=//192.16.16.159:10000”);//访问 Tuxedo服务器WSL服务的ip和端口 然后再执行tpinit等操作 编译已经写好的client程序,如 buildclient -w -o Client -f Client.cpp -v 这里需要注意的是必须加入-w这个编译项,否则无法init -v : 显示编译命令 : 配置文件UBBCONFIG的编译 用下面的命令进行编译: tmloadcf –y UBBCONFIG文件名 如:下面的命令编译名为ubbsimple的TUXEDO配置文件,生成二进制的配置文件 TUXCONFIG tmloadcf –y ubbsimple 有时候在改变了TUXCONFIG的目录后,执行tmloadcf,会出现类似下面的错误,可把原来的TUXCONFIG文件删除,然后再编译。 D:\simpdb>tmloadcf -y ubb simpdb\tuxconfig 0 CMDTUX_CAT:1601: ERROR: TUXCONFIG,TUXOFFSET d:\ doesn't match first device entry on configuration d:\tuxdemo\simpdb\tuxconfig 0 \simpdb>del tuxconfig D: 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机, 在RESOURCES,MACHINES,NETWORK,NETGROUPS中做相应的配置 6. 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服务器上的进 程。 在WIN2000服务器上执行 5. simpcl mp test 因为WIN2000服务器上没有TOUPPER服务,TUXEDO会自动调用SUN服务器 并把结果返回给客户端,这一切对客户端来说是透明上的TOUPPER服务, 的。 3月16日 一个TUXEDO UBB配置文件 # (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 simpledomain MASTER simple MAXACCESSERS 100 MAXSERVERS 50 MAXSERVICES 100 MODEL SHM LDBAL N *MACHINES DEFAULT: APPDIR="/home/app/telesum/bin" TUXCONFIG="/home/oracle/appdir/tuxconfig" TUXDIR="/home/tuxedo/tuxedo8.1" TLOGDEVICE = "/home/oracle/temp/simpdb/TLOG" TLOGNAME=TLOG TLOGSIZE=200 MAXWSCLIENTS=5 "localhost.localdomain" LMID=simple *GROUPS DEFAULT: LMID=simple GRPNO=1 TMSNAME=TMS_ORA TMSCOUNT=2 OPENINFO="Oracle_XA:Oracle_XA+sqlNet=orcl2+Acc=P/dev/dev+SesTm=600 +MaxCur=5+LogDir=." *SERVERS DEFAULT: CLOPT="-A" WSL SRVGRP=GROUP1 SRVID=1000 CLOPT=" -A -- -n //222.73.0.123:7777 -m 5 -M 5 -x 10" USERSERVER SRVGRP=GROUP1 SRVID=1 BILLINGSERVER SRVGRP=GROUP1 SRVID=2 PROFILESERVER SRVGRP=GROUP1 SRVID=3 *SERVICES US_REGISTER US_ACTIVE US_INQUIRE US_UNDO US_LOGIN_IN ******************************************************* WTC domain将tuxedo应用融合在一起,在解决多应用的分布系统时,是一个很好的选 择. domain和WSL的区别 1. domain和WSL的区别 当client和tuxedo服务不在同一主机上的时候,在服务器端运行wsl使 客户端能能够获取服务端的服务. 当两个tuxedo服务在不同的主机上,要相互调用时,使用domain,就是说 两个主机上的server是对等的. 所以wsl是为了client->server,domain是为了server<->server. 下面举一个例子来说明domain的最基本的用法. 2. 环境: A主机:linux,tuxedo8.1,ip=192.168.1.113 B主机:winxp,tuxedo8.1,ip=192.168.1.113 3. 应用概述 在A主机上面有一个tuxedo服务DOMAIN_TEST,现在有一个客户端,只能 访问B主机上面的tuxedo服务,客户端为了得到A主机上的DOMAIN_TEST 服务. 有两种办法: 一)在B主机上面建到A主机的DOMAIN_TEST服务路由,可以通过访问B 主机的DOMAIN_TEST服务来达到访问A主机的DOMAIN_TEST服务的目的, 可以采用配置domain来解决. 二)在B主机上面提供一个通用的服务DOMAIN_TEST,根据客户端的请求参 数,决定在A的DOMAIN_TEST服务程序中采用tpcall来调用相应A主机上 的tuxedo服务.也可以采用domain来解决. 4. A主机配置 A主机的ubbconfig,内容如下: # (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 LGWGRP LMID=chenli GRPNO=7 OPENINFO=NONE LDMGRP LMID=chenli GRPNO=8 OPENINFO=NONE *SERVERS DEFAULT: CLOPT="-A -p" RESTART=N GRACE=86400 #=======================domain================================= ==========# DMADM SRVGRP=LDMGRP SRVID=200 GWADM SRVGRP=LGWGRP SRVID=310 GWTDOMAIN SRVGRP=LGWGRP SRVID=320 #======================= GROUP1 servers Define ==========================# simpserv SRVGRP=GROUP2 SRVID=200 MIN=1 MAX=2 REPLYQ=Y RQADDR="simpserv" MAXGEN=5 #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 SERV_TEST TOUPPER DOMAIN_TEST #===================================================# 配置dmconfig,内容如下: *DM_LOCAL_DOMAINS TDOM02 GWGRP=LGWGRP TYPE=TDOMAIN DOMAINID="TDOM02" DMTLOGDEV="/home/dev/app/src/bin/logs/DLOG" *DM_REMOTE_DOMAINS TDOM01 TYPE=TDOMAIN DOMAINID="TDOM01" *DM_TDOMAIN TDOM02 NWADDR="//192.168.1.113:3071" TDOM01 NWADDR="//192.168.1.100:3070" *DM_REMOTE_SERVICES *DM_LOCAL_SERVICES DOMAIN_TEST 同设置好TUXCONFIG,BDMCONFIG环境变量. 执行tmloadcf -y ubbconfig,dmloadcf -y dmconfig编译配置文件,生 成TUXCONFIG和BDMCONFIG二进制文件. A主机上的服务程序simpserv.c,内容如下: /* (c) 2003 BEA Systems, Inc. All Rights Reserved. */ /* Copyright (c) 1997 BEA Systems, Inc. All rights reserved THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF BEA Systems, Inc. The copyright notice above does not evidence any actual or intended publication of such source code. */ /* #ident "@(#) samples/atmi/simpapp/simpserv.c $Revision: 1.5 $" */ #include #include #include #include #include /* TUXEDO Header File */ #include /* TUXEDO Header File */ #include "data.h" /* tpsvrinit is executed when a server is booted, before it begins processing requests. It is not necessary to have this function. Also available is tpsvrdone (not used in this example), which is called at server shutdown time. */ extern "C" { int tpsvrinit(int argc, char *argv[]) { /* 如果没有argc、argv一些编译系统会有警告信息. */ /* Some compilers warn if argc and argv aren't used. */ argc = argc; argv = argv; /* userlog 把tuxedo消息写入日志文件中 */ /* userlog writes to the central TUXEDO message log */ userlog("Welcome to the simple server"); return(0); } } /* This function performs the actual service requested by the client. Its argument is a structure containing among other things a pointer to the data buffer, and the length of the data buffer. */ #ifdef __cplusplus extern "C" #endif void #if defined(__STDC__) || defined(__cplusplus) SERV_TEST(TPSVCINFO *rqst) /*tuxedo服务名字SERV_TEST*/ #else SERV_TEST(rqst) TPSVCINFO *rqst; #endif { int i; int x; trans_data_t buf_data; char *data = "how are you?"; char *ref; int len = strlen(data) + 1; userlog("start proccess SERV_TEST service"); ref = (char *)malloc(len); strcpy(ref, data); userlog("rqst->len=%d\n", rqst->len); memcpy(&buf_data, rqst->data, sizeof(trans_data_t)); userlog("receive string:%s", rqst->data); userlog("receive name:%s", buf_data.name); userlog("receive age:%d", buf_data.age); buf_data.age += 100; memcpy(rqst->data, &buf_data, sizeof(trans_data_t)); //data = rqst->data; /* Return the transformed buffer to the requestor. */ /* 设置返回客户端buffer */ tpreturn(TPSUCCESS, 0, rqst->data, sizeof(trans_data_t), 0); free(ref); } #ifdef __cplusplus extern "C" #endif void #if defined(__STDC__) || defined(__cplusplus) TOUPPER(TPSVCINFO *rqst) #else TOUPPER(rqst) TPSVCINFO *rqst; #endif { int i; for(i = 0; i < rqst->len-1; i++) rqst->data[i] = toupper(rqst->data[i]); /* Return the transformed buffer to the requestor. */ tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0); } #ifdef __cplusplus extern "C" #endif void #if defined(__STDC__) || defined(__cplusplus) DOMAIN_TEST(TPSVCINFO *rqst) #else DOMAIN_TEST(rqst) TPSVCINFO *rqst; #endif { int i; for(i = 0; i < rqst->len-1; i++) rqst->data[i] = toupper(rqst->data[i]); /* Return the transformed buffer to the requestor. */ printf("DOMAIN_TEST==============================\n"); tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0); } 编译以上程序,生成tuxedo的可执行server程序simpserv 5. 主机B配置 B主机的ubbconfig,内容如下: # (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 chenli MASTER chenli MAXACCESSERS 500 MAXSERVERS 200 MAXSERVICES 100 MAXGTT 50 MODEL SHM LDBAL N *MACHINES DEFAULT: APPDIR="D:\bea\tuxedo8.1\apps\simpapp" TUXCONFIG="D:\bea\tuxedo8.1\apps\simpapp\tuxconfig" TUXDIR="D:\bea\tuxedo8.1" ULOGPFX="D:\bea\tuxedo8.1\apps\simpapp\log.txt" MAXWSCLIENTS=40 #Example: # APPDIR="/home/me/simpapp" TUXCONFIG="/home/me/simpapp/tuxconfig" # # TUXDIR="/usr/tuxedo" # CHENLI LMID=chenli #Example: #beatux LMID=chenli *GROUPS GROUP1 LMID=chenli GRPNO=1 OPENINFO=NONE LGWGRP LMID=chenli GRPNO=2 OPENINFO=NONE LDMGRP LMID=chenli GRPNO=3 OPENINFO=NONE *SERVERS simpserv CLOPT="-A" SRVGRP=GROUP1 SRVID=1 MIN = 1 MAX = 5 DMADM SRVGRP=LDMGRP SRVID=200 GWADM SRVGRP=LGWGRP SRVID=310 GWTDOMAIN SRVGRP=LGWGRP SRVID=320 *SERVICES SERV_TEST TOUPPER LDOMAIN_TEST B主机上的dmconfig配置,内容如下: *DM_LOCAL_DOMAINS TDOM01 GWGRP=LGWGRP TYPE=TDOMAIN DOMAINID="TDOM01" DMTLOGDEV="D:\bea\tuxedo8.1\apps\simpapp\dlog.txt" *DM_REMOTE_DOMAINS TDOM02 TYPE=TDOMAIN DOMAINID="TDOM02" *DM_TDOMAIN TDOM02 NWADDR="//192.168.1.113:3071" TDOM01 NWADDR="//192.168.1.100:3070" *DM_REMOTE_SERVICES DOMAIN_TEST #*DM_LOCAL_SERVICES #DOMAIN_TEST 编译ubbconfig和dmconfig,执行如下命令: tmloadcf -y ubbconfig,dmloadcf -y dmconfig B主机的服务端程序simpserv.c,内容如下: /* (c) 2003 BEA Systems, Inc. All Rights Reserved. */ /* Copyright (c) 1997 BEA Systems, Inc. All rights reserved THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF BEA Systems, Inc. The copyright notice above does not evidence any actual or intended publication of such source code. */ /* #ident "@(#) samples/atmi/simpapp/simpserv.c $Revision: 1.5 $" */ #include #include #include /* TUXEDO Header File */ #include /* TUXEDO Header File */ #include "data.h" /* tpsvrinit is executed when a server is booted, before it begins processing requests. It is not necessary to have this function. Also available is tpsvrdone (not used in this example), which is called at server shutdown time. */ #if defined(__STDC__) || defined(__cplusplus) tpsvrinit(int argc, char *argv[]) #else tpsvrinit(argc, argv) int argc; char **argv; #endif { /* 如果没有argc、argv一些编译系统会有警告信息. */ /* Some compilers warn if argc and argv aren't used. */ argc = argc; argv = argv; /* userlog 把tuxedo消息写入日志文件中 */ /* userlog writes to the central TUXEDO message log */ userlog("Welcome to the simple server"); return(0); } /* This function performs the actual service requested by the client. Its argument is a structure containing among other things a pointer to the data buffer, and the length of the data buffer. */ #ifdef __cplusplus extern "C" #endif void #if defined(__STDC__) || defined(__cplusplus)SERV_TEST(TPSVCINFO *rqst) /*tuxedo服务名字SERV_TEST*/ #else SERV_TEST(rqst) TPSVCINFO *rqst; #endif { int i; int x; trans_data_t buf_data; char *data = "how are you?"; char *ref; int len = strlen(data) + 1; userlog("start proccess SERV_TEST service"); ref = (char *)malloc(len); strcpy(ref, data); userlog("rqst->len=%d\n", rqst->len); memcpy(&buf_data, rqst->data, sizeof(trans_data_t)); userlog("receive string:%s", rqst->data); userlog("receive name:%s", buf_data.name); userlog("receive age:%d", buf_data.age); buf_data.age += 100; memcpy(rqst->data, &buf_data, sizeof(trans_data_t)); //data = rqst->data; /* Return the transformed buffer to the requestor. */ /* 设置返回客户端buffer */ tpreturn(TPSUCCESS, 0, rqst->data, sizeof(trans_data_t), 0); free(ref); } #ifdef __cplusplus extern "C" #endif void #if defined(__STDC__) || defined(__cplusplus) TOUPPER(TPSVCINFO *rqst) #else TOUPPER(rqst) TPSVCINFO *rqst; #endif { int i; for(i = 0; i < rqst->len-1; i++) rqst->data[i] = toupper(rqst->data[i]); /* Return the transformed buffer to the requestor. */ tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0); } #ifdef __cplusplus extern "C" #endif void #if defined(__STDC__) || defined(__cplusplus) LDOMAIN_TEST(TPSVCINFO *rqst) #else LDOMAIN_TEST(rqst) TPSVCINFO *rqst; #endif { int i; char *sendbuf, *rcvbuf; long sendlen, rcvlen; int ret; rcvlen = sendlen = strlen(rqst->data); if((sendbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) { (void) fprintf(stderr,"Error allocating send buffer\n"); tpterm(); exit(1); } if((rcvbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) { (void) fprintf(stderr,"Error allocating receive buffer\n"); tpfree(sendbuf); tpterm(); exit(1); } (void) strcpy(sendbuf, rqst->data); ret = tpcall("DOMAIN_TEST", (char *)sendbuf, 0, (char **)&rcvbuf, &rcvlen, (long)0); if(ret == -1) { (void) fprintf(stderr, "Can't send request to service DOMAIN_TEST\n"); (void) fprintf(stderr, "Tperrno = %d\n", tperrno); tpfree(sendbuf); tpfree(rcvbuf); tpterm(); exit(1); } (void) strcpy(rqst->data, rcvbuf); /* for(i = 0; i < rqst->len-1; i++) rqst->data[i] = toupper(rqst->data[i]); */ /* Return the transformed buffer to the requestor. */ tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0); } 编译服务端程序: buildserver -o simpserv -f simpserv.c -s SERV_TEST -s TOUPPER -s LDOMAIN_TEST B主机上的两个客户端程序client3.c和client4.c client3.c内容如下: /* (c) 2003 BEA Systems, Inc. All Rights Reserved. */ /* Copyright (c) 1997 BEA Systems, Inc. All rights reserved THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF BEA Systems, Inc. The copyright notice above does not evidence any actual or intended publication of such source code. */ /* #ident "@(#) samples/atmi/simpapp/simpcl.c $Revision: 1.5 $" */ #include #include "atmi.h" /* TUXEDO Header File */ #if defined(__STDC__) || defined(__cplusplus) main(int argc, char *argv[]) #else main(argc, argv) int argc; char *argv[]; #endif { char *sendbuf, *rcvbuf; long sendlen, rcvlen; int ret; if(argc != 2) { (void) fprintf(stderr, "Usage: client2 string\n"); exit(1); } /* Attach to System/T as a Client Process */ if (tpinit((TPINIT *) NULL) == -1) { (void) fprintf(stderr, "Tpinit failed\n"); (void) fprintf(stderr, "Tperrno = %d\n", tperrno); exit(1); } sendlen = strlen(argv[1]); /* Allocate STRING buffers for the request and the reply */ if((sendbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) { (void) fprintf(stderr,"Error allocating send buffer\n"); tpterm(); exit(1); } if((rcvbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) { (void) fprintf(stderr,"Error allocating receive buffer\n"); tpfree(sendbuf); tpterm(); exit(1); } (void) strcpy(sendbuf, argv[1]); /* Request the service DOMAIN_TEST, waiting for a reply */ ret = tpcall("DOMAIN_TEST", (char *)sendbuf, 0, (char **)&rcvbuf, &rcvlen, (long)0); if(ret == -1) { (void) fprintf(stderr, "Can't send request to service DOMAIN_TEST\n"); (void) fprintf(stderr, "Tperrno = %d\n", tperrno); tpfree(sendbuf); tpfree(rcvbuf); tpterm(); exit(1); } (void) fprintf(stdout, "Returned string is: %s\n", rcvbuf); /* Free Buffers & Detach from System/T */ tpfree(sendbuf); tpfree(rcvbuf); tpterm(); return(0); } client4.c内容如下: /* (c) 2003 BEA Systems, Inc. All Rights Reserved. */ /* Copyright (c) 1997 BEA Systems, Inc. All rights reserved THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF BEA Systems, Inc. The copyright notice above does not evidence any actual or intended publication of such source code. */ /* #ident "@(#) samples/atmi/simpapp/simpcl.c $Revision: 1.5 $" */ #include #include "atmi.h" /* TUXEDO Header File */ #if defined(__STDC__) || defined(__cplusplus) main(int argc, char *argv[]) #else main(argc, argv) int argc; char *argv[]; #endif { char *sendbuf, *rcvbuf; long sendlen, rcvlen; int ret; if(argc != 2) { (void) fprintf(stderr, "Usage: client2 string\n"); exit(1); } /* Attach to System/T as a Client Process */ if (tpinit((TPINIT *) NULL) == -1) { (void) fprintf(stderr, "Tpinit failed\n"); (void) fprintf(stderr, "Tperrno = %d\n", tperrno); exit(1); } sendlen = strlen(argv[1]); /* Allocate STRING buffers for the request and the reply */ if((sendbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) { (void) fprintf(stderr,"Error allocating send buffer\n"); tpterm(); exit(1); } if((rcvbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) { (void) fprintf(stderr,"Error allocating receive buffer\n"); tpfree(sendbuf); tpterm(); exit(1); } (void) strcpy(sendbuf, argv[1]); /* Request the service TOUPPER, waiting for a reply */ ret = tpcall("LDOMAIN_TEST", (char *)sendbuf, 0, (char **)&rcvbuf, &rcvlen, (long)0); if(ret == -1) { (void) fprintf(stderr, "Can't send request to service LDOMAIN_TEST\n"); (void) fprintf(stderr, "Tperrno = %d\n", tperrno); tpfree(sendbuf); tpfree(rcvbuf); tpterm(); exit(1); } (void) fprintf(stdout, "Returned string is: %s\n", rcvbuf); /* Free Buffers & Detach from System/T */ tpfree(sendbuf); tpfree(rcvbuf); tpterm(); return(0); } 编译客户端程序 buildclient -v -o client3 -f client3.c buildclient -v -o client4 -f client4.c 6. 测试 分别在A主机和B主机上编译server源程序,然后执行tmboot -y启动服 务,然后在B主机上分别运行client4 www和client3 www都会返回 Returned string is: WWW 7. 程序解释 由上面配置可以看到A主机上才有真正的DOMAIN_TEST服务,通过在A主 机B主机上分别配置domain来,是B主机能在server中访问A主机的 DOMAIN_TEST服务. 客户端程序client3.c是直接访问B主机的DOMAIN_TEST服务,在这儿B 主机是将对DOMAIN_TEST服务的请求转发到A主机,并将结果返回给客户 端程序. 客户端程序client4.c是访问B主机的LDOMAIN_TEST服务,在 LDOMAIN_TEST服务中,请求A主机的DOMAIN_TEST服务,并将A主机的 DOMAIN_TEST服务返回的结果转发给客户端程序. 配置解释 在A,B主机的dmconfig配置中, B主机上,TDOM01在DM_LOCAL_DOMAINS中 在A主机上TDOM01在DM_REMOTE_DOMAINS中,两个相联的端点名字要相同, 在*DM_TDOMAIN域中: B主机是TDOM01 NWADDR="//192.168.1.100:3070" A主机也是TDOM01 NWADDR="//192.168.1.100:3070" 相互间通过3070端口通信 表明以TDOM01命名的一个连接通道, 有了两台主机间相互通信的通道,就可以通过这个通道进行通信,传输数据信息. 在A主机的*DM_LOCAL_SERVICES节点定义中,是A主机导出给别的server调用的本地服务,在这儿有一个DOMAIN_TEST服务被导出,根据上面的定义,这个服务将被导出给主机192.168.1.100使用 在B主机的*DM_REMOTE_SERVICES节点定义中,是B主机通过domain导入的,可以供本地调用的服务,该服务名可以通过在psc命令中可以看到. 其实通过client4的测试代码可以看到,我们提供给客户调用的服务和主机可能是固定的,但是根据不同的参数,将请求不同主机上的服务. 举例 比如商业银行ATM取款机作为一个client只能请求所在银行的service,比如卡验证都请求userValidate这个服务,但是有可能这张卡是其他银 ,需要调用其他银行的服务,比如JuserValidate代表建设银行的 行,GuserValidate代表工商银行,可以采用domain和这些银行的server建立连接,导入JuserValidate,GuserValidate服务,当商业银行的userValidate判断银行卡号,如果是建设银行的,就tpcall服务JuserValidate,如果是工商银行,就tpcall服务GuserValidate. 8. 重命名服务 上面例子中,如果所有银行的卡验证服务名都是userValidate,或者即使不重名,但是我们想得到一个符合本系统规范的服务名,我们不可能去要求建设银行,工商银行都修改服务名吧,即使可以修改,在对方系统上运行的依赖域原来服务名的程序都需要修改,这样就会造成很大的工作量,很麻烦的协调工作. 由于从远程server通过domain导入的服务名有可能和本地的服务名重名,所有有必要对远程导出的服务名重新命名,这样避免在本地server中造成服务重名,避免一些不可预测的错误. 所有的配置都和上面一样,只是修改了A和B的dmconfig配置文件 A的dmconfig配置文件: *DM_LOCAL_DOMAINS TDOM02 GWGRP=LGWGRP TYPE=TDOMAIN DOMAINID="TDOM02" DMTLOGDEV="/home/dev/app/src/bin/logs/DLOG" *DM_REMOTE_DOMAINS TDOM01 TYPE=TDOMAIN DOMAINID="TDOM01" *DM_TDOMAIN TDOM02 NWADDR="//192.168.1.113:3071" TDOM01 NWADDR="//192.168.1.100:3070" *DM_REMOTE_SERVICES *DM_LOCAL_SERVICES DOMAIN_TEST LDOM=TDOM02 RNAME="NET113_DTEST" #DOMAIN_TEST LDOM=TDOM02 RNAME="DOMAIN_TEST" #DOMAIN_TEST B的dmconfig配置文件: *DM_LOCAL_DOMAINS TDOM01 GWGRP=LGWGRP TYPE=TDOMAIN DOMAINID="TDOM01" DMTLOGDEV="D:\bea\tuxedo8.1\apps\simpapp\dlog.txt" *DM_REMOTE_DOMAINS TYPE=TDOMAIN TDOM02 DOMAINID="TDOM02" *DM_TDOMAIN TDOM02 NWADDR="//192.168.1.113:3071" TDOM01 NWADDR="//192.168.1.100:3070" *DM_REMOTE_SERVICES NET113_DTEST RDOM=TDOM02 RNAME="NET113_DTEST" #*DM_LOCAL_SERVICES #DOMAIN_TEST 从上面可以看到在A的dmconfig中,对DOMAIN_TEST服务导出服务名为NET113_DTEST,在B的dmconfig中,定义了NET113_DTEST服务从远程节点TDOM02导入的. 方法二: A主机dmconfig配置: *DM_LOCAL_DOMAINS TDOM02 GWGRP=LGWGRP TYPE=TDOMAIN DOMAINID="TDOM02" DMTLOGDEV="/home/dev/app/src/bin/logs/DLOG" *DM_REMOTE_DOMAINS TDOM01 TYPE=TDOMAIN DOMAINID="TDOM01" *DM_TDOMAIN TDOM02 NWADDR="//192.168.1.113:3071" TDOM01 NWADDR="//192.168.1.100:3070" *DM_REMOTE_SERVICES *DM_LOCAL_SERVICES DOMAIN_TEST LDOM=TDOM02 RNAME="DOMAIN_TEST" #DOMAIN_TEST LDOM=TDOM02 RNAME="NET113_DTEST" #DOMAIN_TEST 主机dmconfig配置: B *DM_LOCAL_DOMAINS TDOM01 GWGRP=LGWGRP TYPE=TDOMAIN DOMAINID="TDOM01" DMTLOGDEV="D:\bea\tuxedo8.1\apps\simpapp\dlog.txt" *DM_REMOTE_DOMAINS TDOM02 TYPE=TDOMAIN DOMAINID="TDOM02" *DM_TDOMAIN NWADDR="//192.168.1.113:3071" TDOM02 TDOM01 NWADDR="//192.168.1.100:3070" *DM_REMOTE_SERVICES NET113_DTEST RDOM=TDOM02 RNAME="DOMAIN_TEST" #NET113_DTEST RDOM=TDOM02 RNAME="NET113_DTEST" #*DM_LOCAL_SERVICES #DOMAIN_TEST 从上面可以看到在B主机的dmconfig中,通过RNAME属性把原A主机中定 义导出的原服务名DOMAIN_TEST导入重命名为NET113_DTEST. 重新编译A,B主机的dmconfig配置文件,重启服务. 在B主机的环境中编写一个测试程序client5.c,如下: /* (c) 2003 BEA Systems, Inc. All Rights Reserved. */ /* Copyright (c) 1997 BEA Systems, Inc. All rights reserved THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF BEA Systems, Inc. The copyright notice above does not evidence any actual or intended publication of such source code. */ /* #ident "@(#) samples/atmi/simpapp/simpcl.c $Revision: 1.5 $" */ #include #include "atmi.h" /* TUXEDO Header File */ #if defined(__STDC__) || defined(__cplusplus) main(int argc, char *argv[]) #else main(argc, argv) int argc; char *argv[]; #endif { char *sendbuf, *rcvbuf; long sendlen, rcvlen; int ret; if(argc != 2) { (void) fprintf(stderr, "Usage: client2 string\n"); exit(1); } /* Attach to System/T as a Client Process */ if (tpinit((TPINIT *) NULL) == -1) { (void) fprintf(stderr, "Tpinit failed\n"); (void) fprintf(stderr, "Tperrno = %d\n", tperrno); exit(1); } sendlen = strlen(argv[1]); /* Allocate STRING buffers for the request and the reply */ if((sendbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) { (void) fprintf(stderr,"Error allocating send buffer\n"); tpterm(); exit(1); } if((rcvbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) { (void) fprintf(stderr,"Error allocating receive buffer\n"); tpfree(sendbuf); tpterm(); exit(1); } (void) strcpy(sendbuf, argv[1]); /* Request the service NET113_DTEST, waiting for a reply */ ret = tpcall("NET113_DTEST", (char *)sendbuf, 0, (char **)&rcvbuf, &rcvlen, (long)0); if(ret == -1) { (void) fprintf(stderr, "Can't send request to service NET113_DTEST\n"); (void) fprintf(stderr, "Tperrno = %d\n", tperrno); printf("error message is %s\n",tpstrerror(tperrno)); tpfree(sendbuf); tpfree(rcvbuf); tpterm(); exit(1); } (void) fprintf(stdout, "Returned string is: %s\n", rcvbuf); /* Free Buffers & Detach from System/T */ tpfree(sendbuf); tpfree(rcvbuf); tpterm(); return(0); } 在B主机上编译生成客户端程序client5,执行如下命令: v -o client5 -f client5.c buildclient - 运行测试程序client5,命令如下: client5 wwwddddddsds 返回:Returned string is: WWWDDDDDDSDS 这样通过上面的方法在远程server上面通过dmconfig重命名服务名,我 们就可以定义符合我们习惯的服务名JuserValidate和GuserValidate服务名. Tuxedo 和WebLogic Server的集群连接 2008-05-27 18:40 其他系统的互连,TUXEDO提出了DOMAIN(域)的概念,将由多台服务器共同组成的应用系统按功能或结构划分为不同的域,每个域独立地完成域内的操作,域间操作由域网关完成,从而提高每个域和整个系统的运行效率。 TUXEDO的域特性把客户/服务器模型扩展到多个应用系统. 一个域既可以是一组TUXEDO的应用程序——若干相关的应用服务和配置环境的组合。域同时也可能是一组运行在另一个非TUXEDO环境中的应用程序。 TUXEDO和WLS应用系统的互操作就是利用域的概念来实现的。 不同的 TUXEDO应用域中的服务程序可以互相访问对方的服务,并且当一个交易同时执行多个应用域中的服务(即对于分布式事务处理)时,能够确保交易的完整性。同时,TUXEDO系统可以指定哪些服务是可供外部应用域访问的并可为这些服务设置访问控制表等安全认证手段,提高整个系统的安全性。 TUXEDO应用系统 一个TUXEDO应用系统是由在一个TUXCONFIG文件中定义的资源及其客户端的总称,它只能有一个TUXCONFIG文件,一个TUXEDO应用系统能够通过域网关与别的TUXEDO应用系统或其他的应用中间件系统实现互操作。 主要概念说明: TUXEDO Domain :一个TUXEDO应用系统就是一个DOMAIN。 /DOMAIN:TUXEDO产品的组成部分,用于与其他系统实现互连的那部分称为/DOMAIN Domain Gateway :一个用于处理DOMAIN之间请求/应答的进程 Domain Gateway Group :一组用于处理DOMAIN之间通讯的进程总称,包括一个GWADM和一个DOMAIN GATEWAY(如:GWTDOMAIN Local Domain :一个TUXEDO应用系统中的SERVICE的一个子集,它们能够被其他的DOMAIN访问,一个Local Domain对应一个domain gateway group 。 Local Service :LOCAL DOMAIN中能够被REMOTE DOMAIN访问的SERVICE称为Local Service Remote Domain :LOCAL DOMAIN能够通过DOMAIN GATEWAY GROUP进行访问 的一个应用系统,它可能是一个TUXEDO应用系统,也可能是IBM大机上的应用系统(如CICS等),也可以是JAVA应用服务器WEBLOGIC。 Remote Service :REMOTE DOMAIN中能够被LOCAL DOMAIN访问的SERVICE称为Remote Service LOCAL DOMAIN与REMOTE DOMAIN可以在同一台服务器上,也可以在不同的服务器上,既:一台服务器上可以有一个或多个DOMAINS, DOMAIN的配置都在一个叫DOMCONFIG的文本文件中,可以用文本编辑该文本文件,并用dmloadcf把它编译成二进制文件BDMCONFIG。一个TUXEDO /DOMAIN只有一个DBMCONFIG文件. 在TUXCONFIG中必须定义以下的SERVER: DMADM(DOMAIN ADMINISTRATOR SERVER) 管理DOMAIN的SERVER,在运行时管理该DOMAIN的配置,DMADM主要有以下作用: 1(在运行时管理BDMCONFIG,可对DOMAIN进行动态配置 2(维护DBMCONFIG 3(对已登记的GATEWAY GROUP提供支持 如果在运行时,BDMCONFIG发生改变,DMADM会通知已登记的GATEWAY GROUP。在一个TUXEDO系统中,只能有一个DMADM进程,不能对它采用MSSQ,并且它不能有REPLYQ, REPLYQ 要设为REPLYQ=N GWADM(GATEWAY ADMINISTRATOR SERVER) 管理DOMAIN的域网关进程(在/DOMAIN中是GWTDOMAIN)的SERVER,在运行时 可以对某一组域网关(domain gateway group) 进行管理.它主要的作用是从DMADM那里取的DOMAIN的配置信息,并对域网关进程及跨DOMAIN的全局事务的LOG文件进行管理. GWTDOMAIN(GATEWAY PROCESS) 处理DOMAIN之间的互操作,使LOCAL DOMAIN可以调用REMOTE DOMAIN上的SERVICE,REMOTE DOMAIN可以调用LOCAL DOMAIN上的SERVICE.如果GATEWAY的类型不是GWTDOMAIN,那么是别的进程而不是GWTDOMAIN进程在起这个作用.GMADM和GWTDOMAIN必须在同一个组中,该组称为GATEWAY GROUP或DOMAIN GATEWAY GROUP。在一个TUXEDO应用系统中可以有多个GMADM,GWTDOMAIN对,一个GROUP中只能有一对GMADM,GWTDOMAIN对,但在一个TUXEDO应用系统只能有一个DMADM,DMADM可以在任何一个组中,一个LOCAL DOMAIN可以和多个REMOTE DOMAIN实现互操作。 下面的通讯方式可以跨越DOMAIN 1. tpcall(),tpacall():LOCAL DOMAIN中的CLIENT可以用tpcall(),tpacall()调用一个在REMOTEDOMAIN中的SERVICE, 2. CONVERSATION通讯方式:LOCAL DOMAIN 可以和REMOTE DOMAIN通过CONVERSATION 方式进行通讯.通过在DBCONFIG的DM_REMOTE_SERVICE对一个SERVICE 设置CONN=Y来指明该REMOTE SERVICE支持CONVERSATION通讯方式. 1. /Q通讯方式:在LOCAL DOMAIN中可以对在REMOTE DOMAIN中创建的QUEUE 进行tpenqueue(),tpdequeue()操作 TUXEDO DOMAIN的配置 一个DOMAIN的配置都在一个叫DOMCONFIG的文本文件中,可以用文本编辑该文本文件,并用DMLOADCF 把它编译成二进制文件BDOMCONFIG。DOMCONFIG包括以下几个节: 定义该LOCAL DOMAIN的DOMAIN ID(每个DOMAIND都有 一个DOMAIN ID),并对该DOMAIN所包含的所有DOMAIN GATEWAY GROUP进行定义. 一个TUXEDO 应用系统DM_LOCAL_DOMAINS (DOMAIN)可以对应多个DOMAIN GATEWAY GROUP,不同 的DOMAIN GATEWAY GROUP可对应不同的DOMAIN GATEWAY 类型 定义可以被与DOMAIN中的CLIENT,SERVER进行互操作的DM_REMOTE_DOMAINS REMOTE DOMAIN,可以有多个REMOTE DOMAIN 定义LOCAL DOMAIN中可以被其他REMOTE DOMAIN访问的DM_LOCAL_SERVICES SERVICE 在这里配置LOCAL DOMAIN 中可以调用的REMOTE DM_REMOTE_SERVICES DOMAIN中的SERVICE. 在DOMAIN之间可以实现数据依赖路由(DDR),可以通过DDR 把一个本地的请求路由到REMOTE DOMAIN上去,DOMAIN之DM_ROUTING 间的DDR规则在DM_ROUTING中设置,DOMAIN GATEWAY 通过在这里指定的规则把请求 发到相应的REMOTE DOMAIN 中去 为LOCAL SERVICE 设置访问控制表,定义那些REMOTE DM_ACCESS_CONTROL DOMAIN可以访问这些LOCAL SERVICE 指定DOMAIN(也是DOMAIN GATEWAY)的类型,dmtype的 值可以为OSITP, SNAX, TOPEND, 或 TDOMAIN.如果是DM_dmtype DM_TDOMAIN,每一个REMOTE DOMAIN可以在这里对应多 项,每项对应不同的IP地址,提高可靠性. Tuxedo 和WebLogic Server(简称WLS)间的配置 首先,tuxedo和WLS直接可以采用WTC的配置方式,建立域间调用方式。连接关系如下所示: 对于WTC需要配置如下信息: MBean 类型 描述 包含在 WebLogic Server 和 Tuxedo 之间进行连接时所需的互操作性WTCServer 特性的父 Mbean。请在使用管理控制台进行配置时定义您的 WTC 服 务。 提供配置信息以便将可用的远程 Tuxedo 域连接到 WTC 服务。您必WTCLocalTuxDom 须至少配置一个 Tuxedo 访问点。请在使用管理控制台进行配置时定 义您的本地 Tuxedo 访问点。 提供配置信息以便将 WTC 服务连接到可用的远程 Tuxedo 域。您可WTCRemoteTuxDom 以配置多个远程域。请在使用管理控制台进行配置时定义您的远程 Tuxedo 访问点。 提供由本地 Tuxedo 访问点导出的服务的相关信息。请在使用管理控WTCExport 制台进行配置时定义您的导出服务。 提供有关在远程域上导入并可用的服务的相关信息。请在使用管理控WTCImport 制台进行配置时定义您的导入服务。 指定域的全局字段表类、视图表类及应用程序密码。请在使用管理控WTCResources 制台进行配置时定义您的资源。 Tuxedo和WebLogic Server(简称WLS)集群的配置 为了提高WLS应用的可靠性,Tuxedo要和WLS建立集群关系,如下所示: 对于来自 Tuxedo 请求的负载平衡和故障转移可以依赖于 Tuxedo 域功能来实现。 负载平衡 : 有关 Tuxedo 环境负载平衡的详细信息,请参阅 Tuxedo Load Balancing。 以下是从 Tuxedo 到群集 WTC 进行负载平衡的示例 Tuxedo DMCONFIG。此配置的 WebLogic Server 群集中有三个节点。每个节点都有一个正确配置的 WebLogic Tuxedo Connector 实例,该实例提供 Tuxedo 客户端可以访问的导出服务。 *DM_IMPORT TOUPPER LDOM=tuxedo_dom RDOM=WDOM1 LOAD=50 TOUPPER LDOM=tuxedo_dom RDOM=WDOM2 LOAD=50 TOUPPER LDOM=tuxedo_dom RDOM=WDOM3 LOAD=50 故障转移 : 以下是使用更复杂的配置的示例 Tuxedo DMCONFIG,该配置在 WebLogic Server 节点之间进行负载平衡,并说明 Tuxedo 故障转移功能。要启用域级故障转移/故障回复,必须使用设置为 On Startup 或 Incoming Only 的 Connection Policy 配置 Tuxedo 域。 *DM_IMPORT TOUPPER LDOM=tuxedo_dom RDOM=WDOM1,WDOM2,WDOM3 LOAD=50 TOUPPER LDOM=tuxedo_dom RDOM=WDOM2,WDOM3,WDOM1 LOAD=50 TOUPPER LDOM=tuxedo_dom RDOM=WDOM3,WDOM1,WDOM2 LOAD=50 配置过程: 1. 首先创建WLS集群环境,包括两个被管理服务器: 2. 部署集群应用到集群上,并对其进行激活: 3. 为每一个WLS实例创建对应的WTC服务 分别创建两个WTC服务,指定到对应的被管理服务器上。 4. 在WTC服务中创建本地接入点(作为连接本地WLS方)和远端接入点(连接Tuxedo 方) 配置的本地接入点: 设定连接策略为On Startup方式,可以支持负载均衡功能: 远端接入点(Tuxedo方),配置两个Tuxedo远端域,提供冗余连接: 远端接入点(Tuxedo方),配置信息: 远端接入点(Tuxedo方) 1. 导出本地服务――WLS EJB service,Tuxedo端可以调用此服务 1. Tuxedo访问用户配置――需要按照远端域的名字,创建访问用户,否则会出现errpno ,8,没有访问权限的错误。此点非常重要~ 1. Tuxedo其中一个域配置: Tuxedo Domain Configuration: *DM_RESOURCES VERSION=U22 *DM_LOCAL_DOMAINS TDOM1 GWGRP=GROUP2 TYPE=TDOMAIN DOMAINID="TDOM1" BLOCKTIME=20 MAXDATALEN=56 MAXRDOM=89 DMTLOGDEV="d:\bea8.16\tuxedo8.1/samples/wtc/simpserv/DMTLOG" DMTLOGNAME="DMTLOG_TUXDOM" *DM_REMOTE_DOMAINS WDOM1 TYPE=TDOMAIN DOMAINID="WDOM1" WDOM2 TYPE=TDOMAIN DOMAINID="WDOM2" *DM_TDOMAIN TDOM1 NWADDR="//10.130.1.33:20301" WDOM1 NWADDR="//10.130.1.33:20401" WDOM2 NWADDR="//10.130.1.33:20402" *DM_IMPORT TOLOWER LDOM=TDOM1 RDOM=WDOM1,WDOM2 LOAD=50 TOLOWER LDOM=TDOM1 RDOM=WDOM2,WDOM1 LOAD=50 1. 使用Tuxedo客户端进行测试,可以得到访问结果: WLS和Tuxedo集群的配置 对于来自WLS的请求,可以和tuxedo建立跨域的集群配置,如下所示: 1. WTC配置和上面相同,增加的是将Tuxedo服务要导入进来(注意要将多个可以连 接的远端域在Remote Access Point上指定,这样可以确保通过WTC实现容错调用): WTC1 上的import service: 使用JAVA 访问,可以访问到Tuxedo提供的服务: 1. 对于WebLogic Server 调用Tuxedo多域的服务负载均衡和容错说明: 对访问Tuxedo多域的负载均衡,有两种实现策略: 方式一,在WTC,通过配置多个同名导入服务来实现。WLS端基于负载均衡策略,调用同名服务。这样实现对Tuxedo服务的负载均衡调用。 imp0 TOUPPER WDOM1 TDOM1,TDOM2 TOUPPER imp1 TOUPPER WDOM1 2ndImportedResources TDOM2,TDOM1 TOUPPER 方式二,可以通过其在WebLogic Server端部署的EJB程序来实现的。EJB作为tuxedo的接入服务,在WTC程序采用集群方式部署,EJB客户端可以采用负载均衡的方式调用EJB。 此种方式,对应在WTC中的配置,就是: WTC1 上的导入服务为: imp0 TOUPPER WDOM1 2ndImportedResources TDOM1,TDOM2 TOUPPER WTC2上的导入服务为: imp0 TOUPPER WDOM2 2ndImportedResources TDOM2,TDOM1 TOUPPER 访问 Tuxedo的容错功能是通过多个接入点列表来实现,如果访问第一个不成功,就顺延访问下一个。 TDOM1,TDOM2(容错的实现,指定多个远端接入点)
本文档为【TUXEDO应用系统的配置&#40;连接weblogic集群&#41;】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_654168
暂无简介~
格式:doc
大小:343KB
软件:Word
页数:0
分类:互联网
上传时间:2017-08-31
浏览量:23