tuxedo bankapp

tuxedo bankapp

准备bankapp的文件和资源

⑴.设置环境变量

                samples\atmi\bankapp\nt下的bankvar文件改名为bankvar.bat,复制到父目录,然后对其进行编辑:

@echo off

rem %Tuxedo%Tuxedo安装目录,APPDIRbankapp所在的目录

set APPDIR=%TUXDIR%\samples\atmi\bankapp

rem消息所在目录

set NLSPATH=%TUXDIR%\locale\C

rem逻辑块大小,数据库管理员必须设置

set BLKSIZE=512

rem 被缺省使用的数据库名字

set DBNAME=bankdb

rem 指示数据库为共享模式还是私有模式

set DBPRIVATE=no

rem 指示数据库使用的IPC值,必须与ubbconfig中的IPCKEY不同

set DIPCKEY=80953

rem tmloadcf使用的环境文件

set ENVFILE=%APPDIR%\ENVFILE

rem mc, viewc, tmloadcf使用的字段表文件

set FIELDTBLS=Usysflds,bankflds,creditflds

rem 查找字段表文件的目录

set FLDTBLDIR=%TUXDIR%\udataobj;%APPDIR%

rem 数据库使用的通用设备列表

set FSCONFIG=%APPDIR%\bankdl1

rem MENU中使用的网络地址

set NADDR=

rem 网络设备名

set NDEVICE=

rem MENU脚本中使用的网络监听器地址

set NLSADDR=

rem 事务日志设备,必须和ubbconfigMACHINES

rem LMID站点的TLOGDEVICE参数相同

set TLOGDEVICE=%APPDIR%\TLOG

rem /T提供全部信息的二进制配置文件

set TUXCONFIG=%APPDIR%\tuxconfig

rem 用户日志文件,必须和ubbconfig中的MACHINES

rem LMID站点的ULOGPFX参数相同

set ULOGPFX=%APPDIR%\ULOG

rem RUNME.sh使用的系统名

set UNAME=

rem viewc, tmloadcf使用的view文件列表

set VIEWFILES=aud.vv

set VIEWFILES32=mib_views,tmib_views

rem 查找view文件的目录

set VIEWDIR=%TUXDIR%\udataobj;%APPDIR%

set VIEWDIR32=%TUXDIR%\udataobj;%APPDIR%

rem 指定Q设备

set QMCONFIG=%APPDIR%\qdevice

set PATH=%TUXDIR%\bin;%PATH%

rem 指出Visual C++安装的目录

set MSDEV=G:\Program Files\Microsoft Visual Studio\VC98

set PATH=%PATH%;%MSDEV%\bin

set INCLUDE=%INCLUDE%;%MSDEV%\include;%MSDEV%\mfc\include

set LIB=%LIB%;%MSDEV%\lib;%MSDEV%\mfc\lib

⑵.Build bankapp的应用程序

                bankapp5个服务器:ACCTBALBTADDTLRXFER。用一个命令就可以完成编译任务:

G:\Tuxedo\samples\atmi\bankapp\nmake bankapp.nt

若要手工完成编译,首先要将EC文件编译成C文件:

G:\Tuxedo\samples\atmi\bankapp\ESQLC ACCT.EC

生成FML缓冲区头文件:

G:\Tuxedo\samples\atmi\bankapp\mkfldhdr bankflds eventflds

生成目标文件:

G:\Tuxedo\samples\atmi\bankapp\CL /c ACCT.c appinit.c util.c

生成ACCT.exe文件:

buildserver -r TUXEDO/SQL -s OPEN_ACCT -s CLOSE_ACCT

-o ACCT.exe

-f ACCT.obj -f appinit.obj -f util.obj

-r指示哪一个资源管理器的访问库将被编译到acct.exe文件中,本例为TUXEDO/SQL

⑶.编辑bankappmake文件

NT平台下,bankapp提供的make文件为bankapp.nt,使用前需要检查一下环境变量TUXDIRAPPDIR的设置。另外一个要注意的地方就是资源管理器参数RM,缺省使用TUXEDO/SQL,因为Tuxedobankapp提供数据库服务。如果使用了其它数据库产品,需要把RM参数设置成%TUXDIR%\udataobj\RM文件列表中的某一个值。

⑷.创建bankapp的数据库

bankapp使用了TUXEDO/SQL作为资源管理器,它是一个XA-compliant的资源管理器,XA是事务管理器和资源管理器之间的接口。在单处理机SHM模式和多处理机MP模式下创建数据库的方式是不同的,在SHM模式下,创建步骤如下:

设置环境变量:      G:\Tuxedo\samples\atmi\bankapp\bankvar

执行批处理文件:G:\Tuxedo\samples\atmi\bankapp\crbank

crbank.cmd调用crbankdb三次,每次调用前改变一些环境变量,执行完成后,同一台机器上有三个数据文件,这样,就可以在单机上模拟网络环境。在MP模式下创建数据库的步骤如下:

设置环境变量:G:\Tuxedo\samples\atmi\bankapp\bankvar

在一台机器上创建数据库:G:\Tuxedo\samples\atmi\bankapp\crbankdb

在其它机器上,修改bankvar.cmd文件中的数据库通用设备列表FSCONFIG,修改ubbmp配置文件中的相应部分,再进行创建操作。

⑸.准备一个XA-compliant资源管理器

若不使用TUXEDO/SQL作为资源管理器,而使用其它的XA-compliant资源管理器,需要作很多修改:修改bankvar.cmd、修改bankapp服务、修改bankapp.nt文件、修改crbankcrbankdb文件、修改配置文件。

修改bankvar.cmd文件。下面是TUXEDO/SQL资源管理器的配置,已经不能用了,你需要根据实际的数据库系统对这些值进行修改:

BLKSIZE=512

DBNAME=bankdb

DBPRIVATE=no

DIPCKEY=80953

FSCONFIG=${APPDIR}/bankdl1

修改bankapp的服务。bankapp中所有数据库访问都是通过ESQL来完成的,如果你的新资源管理器支持SQL,这就没什么问题。appinit.c中包含了打开和关闭数据库的tpopen()tpclose()

修改bankapp.nt。将RM参数修改为新的资源管理器,确保RM文件中有如下入口:

$TUXDIR/udataobj/RM

如果必要,改变SQL编译器和它的选项,源文件的扩展名不一定是EC,你需要指预编译的命令及参数,以ORACLE为例,使用PROCPC文件预编译成C文件。

修改crbankcrbankdb。注意crbankdb创建的SQL语句在新资源管理器中是否能接受。修改配置文件。在GROUPS节中,为TMSNAMEOPENM指定一个适当的值参数值,这个值要让资源管理器能够识别。

⑹.如何将bankappOralce8进行集成

Oracle8XA兼容的资源管理器,要实现和bankapp的集成,按如下步骤进行:

①.编辑bankvar.cmd文件,修改如下环境变量的值:

ORACLE_HOMEOracle8的安装目录

ORACLE_SIDOracle的系统ID

BLK_SIZE:逻辑块的尺寸

DBNAME:缺省数据库

DBPRIVATE:指示数据库是以共享模式还是私有模式打开(yes/no)

FSCONFIG:数据库使用的通用设置列表

PATH=%PATH%;%ORACLE_HOME%\bin

INCLUDE=%ORACLE_HOME%\rdbms80\xa;

%ORACLE_HOME%\pro80\c\include

PLATFORM=inwnt40

LIB=%TUXDIR%\lib %ORACLE_HOME%\pro80\lib\msvc;

%ORACLE_HOME%\rdbms80\xa;

②.运行bankvar.cmd

③.编辑%TUXDIR%\udataobj\RM文件,追加如下行:

Oracle_XA;xaosw;%ORACLE_HOME%\pro80\lib\msvc\sqllib80.lib

%ORACLE_HOME%\RDBMS80\XA\xa80.lib

       如果Oracle服务器在网络的另一端,把那台机器映射到驱动器,如F

       把如下行追加到%TUXDIR%\udataobj\RM文件中:

Oracle_XA;xaosw;f:\orant\pro80\lib\msvc\sqllib80.lib

f:\orant\RDBMS80\XA\xa80.lib

       删除RM文件中以前的Oracle_XA入口

④.为Oracle8创建事务管理服务器

cd %APPDIR%

buildtms -r Oracle_XA -o TMS_ORA

⑤.编辑nt\bankapp.mak文件

RM=Oracle_XA

ORACLE_LIB=$(ORACLE_HOME)\PRO80\LIB

RMNAME=Oracle_XA

SQLPUBLIC=$(ORACLE_HOME)\PRO80\C\INCLUDE

ORACLE_DIR=$(ORACLE_HOME)\bin

.ec.c节中,编辑从ECC的创建规则,不再使用ESQLC了,而使用PROC

set TUXDIR=$(TUXDIR) & $(ORACLE_DIR)\proc80

mode=ansi release_cursor=yes

include=$(SQLPUBLIC) include=$(INCDIR)

$(SQL_PLATFORM_INC) -c iname=$*.ec

                                .c.obj节中,编辑规则,作出下设置:

$(CC) -c $(CFLAGS) $(SQLPUBLIC) $(INCLUDE) $*.c

⑥.使用OracleSQL命令更新EC文件

⑦.将nt\bankapp.mak复制到%APPDIR%下,然后Make一下:

       copy nt\bankapp.mak %APPDIR%

       nmake –f bankapp.mak

⑧.编辑nt\ubbshm文件:

USER_ID=0

GROUP_ID=0

UNAME_SITE1=执行hostname返回值,用大写形式

TUXDIR=bankvar.cmd中的相同

APPDIR=bankvar.cmd中的相同

⑨.在配置文件的GROUPS节中,输入如下改变:

TMSNAME=TMS_ORA

BANKB1 GRPNO=1

OPENINFO="Oracle_XA:Oracle_XA+Acc=P/user1/PaSsWd1+SesTm=0+LogDir=."

[

Oracle_XA + required fields:

Acc=P/oracle_user_id/oracle_password

SesTm=Session_time_limit (maximum time a transaction can be inactive)

optional fields:

LogDir=logdir (where XA library trace file is located)

MaxCur=maximum_#_of_open cursors

SqlNet=connect_string (if Oracle exists over the network)

(eg. SqlNet=hqfin@NEWDB indicates the database with sid=NEWDB accessed at host hqfin by TCP/IP)

]

BANKB2 GRPNO=2

OPENINFO="Oracle_XA:Oracle_XA+Acc=P/user2/PaSsWd2+SesTm=0+LogDir=."

BANKB3 GRPNO=3

OPENINFO="Oracle_XA:Oracle_XA+Acc=P/user3/PaSsWd3+SesTm=0+LogDir=."

⑩.执行其它操作:

       创建二进制配置文件:tmloadcf –y nt/ubbshm

       Master机上创建TLOG设备和设备列表:crtlog –m

启动数据库服务器,启动Tuxedo系统:tmboot –y,确保数据库中存在V%XATRANS%视图,如果不存在,以系统用户登录Oracle,然后执行%ORACLE_HOME%\RDBMS80\ADMIN\XAVIEW.SQL,授予使用XA库的Oracle用户Select权限。

Oracle8中创建bankapp使用的数据库对象。Oracle8安装以后,会创建一个示例数据库,bankapp可以使用这个数据库。编辑crbank-ora8.sql文件,内容如下:

WHENEVER OSERROR EXIT ;

/* 获取system用户的口令 */

PROMPT

PROMPT

PROMPT -- Some of the operations require "system" user privileges

PROMPT -- Please specify the Oracle "system" user password

PROMPT

ACCEPT syspw CHAR PROMPT ’system passwd:’ HIDE ;

CONNECT system/&syspw ;

SHOW user ;

PROMPT

/* 在缺省数据库中为bankapp创建一个新的表空间 */

DROP TABLESPACE bank1

INCLUDING CONTENTS

CASCADE CONSTRAINTS;

PROMPT

PROMPT

PROMPT -- Will create a 3MB tablespace for bankapp ;

PROMPT -------- Please specify full pathname below for Datafile ;

PROMPT -------- Ex: %ORACLE_HOME%/dbs/bankapp.dbf

PROMPT

ACCEPT datafile CHAR PROMPT ’Datafile:’ ;

CREATE TABLESPACE bank1

DATAFILE ’&datafile’ SIZE 3M REUSE

DEFAULT STORAGE (INITIAL 10K NEXT 50K

MINEXTENTS 1 MAXEXTENTS 120

PCTINCREASE 5)

ONLINE;

/* 创建一个名叫user1的用户 */

DROP USER user1 CASCADE;

PROMPT Creating user "user1"

CREATE USER user1 IDENTIFIED by PaSsWd1

DEFAULT TABLESPACE bank1

QUOTA UNLIMITED ON bank1 ;

GRANT CREATE SESSION TO user1 ;

GRANT CREATE TABLE TO user1 ;

CONNECT user1/PaSsWd1 ;

SHOW user ;

PROMPT Creating database objects for user "user1" ;

PROMPT Creating table "branch" ;

CREATE TABLE branch (

branch_id NUMBER NOT NULL PRIMARY KEY,

balance NUMBER,

last_acct NUMBER,

last_teller NUMBER,

phoneCHAR(14),

address CHAR(60)

)

STORAGE (INITIAL 5K NEXT 2K

MINEXTENTS 1 MAXEXTENTS 5 PCTINCREASE 5) ;

PROMPT Creating table "account" ;

CREATE TABLE account (

account_id NUMBER NOT NULL PRIMARY KEY,

branch_id NUMBER NOT NULL,

ssn CHAR(12) NOT NULL,

balance NUMBER,

acct_type CHAR,

last_name CHAR(20),

first_name CHAR(20),

mid_init CHAR,

phoneCHAR(14),

address CHAR(60)

)

STORAGE (INITIAL 50K NEXT 25K

MINEXTENTS 1 MAXEXTENTS 50 PCTINCREASE 5) ;

PROMPT Creating table "teller" ;

CREATE TABLE teller (

teller_id NUMBER NOT NULL PRIMARY KEY,

branch_id NUMBER NOT NULL,

balance NUMBER,

last_name CHAR(20),

first_name CHAR(20),

mid_init CHAR

)

STORAGE (INITIAL 5K NEXT 2K

MINEXTENTS 1 MAXEXTENTS 5 PCTINCREASE 5) ;

PROMPT Creating table "history" ;

CREATE TABLE history (

account_id NUMBER NOT NULL,

teller_id NUMBER NOT NULL,

branch_id NUMBER NOT NULL,

amount NUMBER

)

STORAGE (INITIAL 400K NEXT 200K

MINEXTENTS 1 MAXEXTENTS 5 PCTINCREASE 5) ;

SQL PLUS中执行上面这段SQL语句:

SQL*plus> start $APPDIR/ crbank-ora8.sql

填充数据库:

             nt\populate

       Oracle数据库中生成事务

                       driver

       运行bankapp的客户程序:

                       run

       关闭Tuxedo应用程序:

                       tmshutdown -y

⑹.如何编辑配置文件

配置文件定义了应用程序如何运行。bankapp有两个配置文件:ubbshmubbmpubbshm定义了在单机环境下如何运行bankappubbmp定义了在网络环境下如何运行bankapp

①.打开并编辑ubbmp,将<…>替换成际值。对于ubbmpNETWORK节必须替换

*RESOURCES

IPCKEY 80952

UID <user id from id(1)>

GID <group id from id(1)>

PERM 0660

MAXACCESSERS 40

MAXSERVERS 35

MAXSERVICES 75

MAXCONV 10

MAXGTT 20

MASTER SITE1,SITE2

SCANUNIT 10

SANITYSCAN 12

BBLQUERY 180

BLOCKTIME 30

DBBLWAIT 6

OPTIONS LAN,MIGRATE

MODEL MP

LDBAL Y

##SECURITY ACL

#

*MACHINES

<SITE1’s uname> LMID=SITE1

TUXDIR="<TUXDIR>"

APPDIR="<APPDIR>"

ENVFILE="<APPDIR>/ENVFILE"

TLOGDEVICE="<APPDIR>/TLOG"

TLOGNAME=TLOG

TUXCONFIG="<APPDIR>/tuxconfig"

TYPE="<machine type>"

ULOGPFX="<APPDIR>/ULOG"

<SITE2’s uname> LMID=SITE2

TUXDIR="<TUXDIR>"

APPDIR="<APPDIR>"

ENVFILE="<APPDIR>/ENVFILE"

TLOGDEVICE="<APPDIR>/TLOG"

TLOGNAME=TLOG

TUXCONFIG="<APPDIR>/tuxconfig"

TYPE="<machine type>"

ULOGPFX="<APPDIR>/ULOG"

#

*GROUPS

#

# Group for Authentication Servers

#

Group for Application Queue (/Q) Servers

#

##QGRP1 LMID=SITE1 GRP=102

## TMSNAME=TMS_QM TMSCOUNT=2

## OPENINFO=”TUXEDO/QM:<APPDIR>/qdevice:QSP_BANKAPP”

#

# Group for Event Broker Servers

#

##EVBGRP1 LMID=SITE1 GRPNO=104

DEFAULT: TMSNAME=TMS_SQL TMSCOUNT=2

BANKB1 LMID=SITE1 GRPNO=1

OPENINFO="TUXEDO/SQL:<APPDIR>/bankdl1:bankdb:readwrite"

BANKB2 LMID=SITE2 GRPNO=2

OPENINFO="TUXEDO/SQL:<APPDIR>/bankdl2:bankdb:readwrite"

*NETWORK

SITE1 NADDR="<network address of SITE1>"

NLSADDR="<network listener address of SITE1>"

SITE2 NADDR="<network address of SITE2>"

NLSADDR="<network listener address of SITE2>"

②.UID:公告栏中IPC结构所有者有效的用户ID,在ubbmp中,所有机器上的UID必须相同,为了避免引起混乱,输入Tuxedo系统的所有者IDGIDUID类似。SITE1’s name:机器名,在UNIX下为uname –n的结果。machine type:一个字符串,在网络环境下,用于标识一类计算机,两台计算机通信时,Tuxedo系统检查它们的机器类型,如果不同,在它们之间传递的数据就需要进行编码和解码操作,以便两台机器都能够识别它们。SITE2 name:第二台机器的机器名。OPENINFO:一个只有Tuxedo资源管理器才能识别的格式化字符串,若使用其它的资源管理器如Oracle,必须对它进行修改,以满足要求。Network address of SITE1SITE1BRIDGE进程网络监听器完整地址, BRIDGE是一个维护着和其它参与计算的节点之间虚电路的系统进程,以便这些节点之间可以进行消息传递。Network listener address of SITE1SITE1tlisten进程监听器地址。Network address of SITE2Network listener address of SITE2同上。

③.要使应用程序具有口令特征,在ubbshmubbmp中的RESOURCE节中加入:

SECURITY APP_PW

⑺.创建二进制配置文件和事务日志文件

                如果你在SHM模式下运行,你就没有必要在其它机器上创建tlisten进程和事务日志。

%APPDIR%下运行bankar.cmd设置环境变量;

①.加载配置文件

tmloadcf –y ubbmpTUXCONFIG只需要在Master机上安装,当用tmboot启动应用程序时,它就会自动地传给其它机器。如果指定了SECURITYtmloadcf就会提示你输入应用程序的口令,可以长达30个字符。当客户进程试图加入应用程序时,就要求提供应用程序口令、用户名、用户口令。

②.创建事务日志文件TLOG

TLOGTuxedo系统管理全局事务使用的事务日志文件,在应用程序启动之前,在运行应用程序的每一台机器上必须创建一个TLOG入口,TLOG文件本身在Master机上创建。bankapp提供了一个叫crtlog的脚本,它创建了一个设备列表和一个TLOG文件,设备列表使用bankvar.cmd中的TLOGDEVICE变量来创建。要创建TLOG文件和设备列表,在Master机上运行:

crtlog –m

在生产环境中,设备列表名和数据库中用到的设备列表名必须相同。

在所有其它机器上,不要指定-m开关,当系统启动时,每一台非Master机上的BBL会创建日志。如果你使用了一个non-XA的资源管理器,就没有必要创建事务日志。

⑻.在每台机器上创建远程服务连接

                tlisten是一个监听进程,它为tmboot之类的进程提供了远程服务连接。它必须在网络中的每一台机器上安装,并与配置文件中NETWORK段的描述一致。推荐用如下命令启动另一个tlisten进程:

                tlisten –l nlsaddr

                nlsaddr值必须和配置文件中NLSADDR参数值一致,tlisten使用的logfileTuxedo系统其它log文件分开了。一个日志文件可以被多个tlisten进程使用,缺省文件名是:%TUXDIR%\udataobj\tlog

7.运行bankapp

⑴. 如何准备启动应用程序

启动bankapp之前,检查你的机器是否还有足够的IPC资源,方法是:

tmloadcf –c ubbshm

⑵. 如何启动bankapp

bankvar

tmboot –y

你可以只boot配置文件中的一部分服务,如指定-A选项可以只启动管理进程。

⑶. 如何填充数据库

使用populate脚本创建填充数据库,gendata创建了10个支行,30个出纳员,200个账号,pop.out保存了创建过程。

⑷. 如何测试bankapp的服务

audit {-t|-a} [branch_id]

auditcon

使用driver程序(UNIX平台下使用,NT平台下使用gt.cmd),缺省情况下,它生成300个事务,你可以通过-n指定事务数:
driver –n1000

⑸. 如何关闭bankapp

你可能感兴趣的:(tuxedo bankapp)