`
mooncui
  • 浏览: 72504 次
社区版块
存档分类
最新评论

Tuxedo学习笔记

阅读更多


背景

服务器是在Redhat Linux下安装9.1,客户端是在XP下用JAVA通过JOLT连接服务器。数据库用ORACLE,XA连接方式。

修改TUXEDO自带的sample中的simpserv项目的TOUPPER服务。

1.安装

安装很简单,在linux下注意加参数 -i console
主要就是配置环境了,在环境变量中加:

TUXDIR=/home/bea/tuxedo9.1; export TUXDIR
PATH=$TUXDIR/bin:$PATH; export PATH
COBCPY=:$TUXDIR/cobinclude; export COBCPY
COBOPT="-C ANS85 -C ALIGN=8 -C NOIBMCOMP -C TRUNC=ANSI -C OSEXT=cbl"; export COBOPT
SHLIB_PATH=$TUXDIR/lib:$SHLIB_PATH; export SHLIB_PATH
LIBPATH=$TUXDIR/lib:$LIBPATH; export LIBPATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TUXDIR/lib:$ORACLE_HOME/lib;export LD_LIBRARY_PATH
TUXCONFIG=/home/bea/tuxedo9.1/samples/atmi/simpapp/tuxconfig;export TUXCONFIG
CLASSPATH=$CLASSPATH:TUXDIR/udataobj/jolt;export CLASSPATH
WEBJAVADIR=$TUXDIR/udataobj/webgui/java;export WEBJAVADIR
FLDTBLDIR32=$TUXDIR/samples/atmi/simpapp;export FLDTBLDIR32;
FIELDTBLS32=tt.fml;export FIELDTBLS32;
APPDIR=$TUXDIR/samples/atmi/simpapp;export APPDIR
export NLS_LANG=American_America.ZHS16GBK(这个需要的,否则TMS可能启动不起来)

2.常用命令

编译服务器:buildserver -f simpserv.c  -o simpserv -s TOUPPER
编译客户端:buildclient [-v] –o executable –f first-file [-f first-file] [-l last-file](没有用过,我是用JAVA写客户端的)
载入配置文件:tmloadcf ubbsimp
启动服务:tmboot -y
停止服务:tmshutdown -y
管理服务:tmadmin

3.定义配置文件

我是修改sample中的simpserv项目的,所以怎么建服务不是很清楚,就是改服务。

主要看ubbsimple配置文件

*RESOURCES     
IPCKEY          123456

DOMAINID        simpapp
MASTER          simple
MAXACCESSERS    100()(这个以及一下几个数字都是改大了点)
MAXSERVERS      50
MAXSERVICES     100
MODEL           SHM(单机方式,多机方式是MP,不会)
LDBAL           N
               
*MACHINES      
DEFAULT:       
                APPDIR="/home/bea/tuxedo9.1/samples/atmi/simpapp"
                TUXCONFIG="/home/bea/tuxedo9.1/samples/atmi/simpapp/tuxconfig"
                TUXDIR="/home/bea/tuxedo9.1"
                MAXWSCLIENTS=50
                TLOGDEVICE="/home/bea/TLOG"(这行以及下面三行是配置连接ORACLE数据库时才加上去的)
                TLOGNAME=TLOG
                TLOGSIZE=200

devsvr  LMID=simple

(机器名,很重要)

*GROUPS
GROUP1 
        LMID=simple     GRPNO=1
         OPENINFO="Oracle_XA:Oracle_XA+Acc=P/yn_paygo_1_1/yn_paygo_1_1+SqlNet=orcl_20+SesTm=600+MaxCur=5+LogDir=."
        TMSNAME="TMS_ORA9i"   TMSCOUNT=2(这行也是连数据库时才加的,否则原来是OPENINFO=NONE)
        WSGRP LMID=simple GRPNO=4 OPENINFO=NONE
        JSLGRP LMID=simple GRPNO=5 OPENINFO=NONE
        JREPGRP LMID=simple GRPNO=6 OPENINFO=NONE

*SERVERS
DEFAULT:       
                CLOPT="-A"

simpserv        SRVGRP=GROUP1 SRVID=1
JSL     SRVGRP=JSLGRP SRVID=5 CLOPT="-A -- -n //192.168.2.5:7777 -m 5 -M 10 -x 5"
JREPSVR SRVGRP=JREPGRP SRVID=6 CLOPT="-A -- -W -P /home/bea/tuxedo9.1/samples/atmi/simpapp/jrepository"

WSL     SRVGRP=WSGRP SRVID=8888
        CLOPT="-A -- -n //192.168.2.5:8888 -x 5 -m 5  -M 10"

*SERVICES
DEFAULT: LOAD=50 AUTOTRAN=Y TRANTIME=30
TOUPPER  PRIO=50     ROUTING=INSTR

 *ROUTING
INSTR   FIELD=INSTR
    BUFTYPE="FML32"
    RANGES="*:GROUP1"(这部分是把参数改成FML32缓冲区时改的,否则只要在上面SERVICES中写TOUPPER,其他就不需要了)

4.修改服务的参数

 

可以用JREPSVR增加服务,修改服务的参数等:

JREPSVR is Jolt Repository Server
定义如: 
  JREPSVR SRVGRP=JREPGRP SRVID=6 CLOPT="-A -- -W -P /usr/bea/tuxedo9.1/udataobj/jolt/repository/jrepository"
一个主机上可以有多个JREPSVR,但 -W的只能有一个,这是指可写,但只有一个jrepository文件可写
-P 指jrepository文件的路径,是必须有的。

如果要修改
appletviewer -J-Djava.security.policy=d:\jdk1.5.0_06\jre\lib\security\java.policy RE.html
可以连上主机。
要先用policytool.exe编辑java.policy文件,当然也可以另外创建一个policy文件的,需要在policy文件中有socket的connect权限


5.连接oracle
我准备采用XA方式访问oracle,不用XA编译访问oracle的方式,据说可以在buildserver 的参数中,增加“-l -lclntsh”,环境变量LIBPATH里面要要有oracle的lib目录的声明,我没有试过,不知道是否可以。

我介绍的是XA方式:

1).ORACLE方面改动

必须要装oracle客户端中的PROC *C/C++模块,因为tuxedo服务程序中连接oracle是用嵌入SQL实现的,也有其他方式的,不熟悉了。而且这个模块在oralce的服务端一般是没有的,不是默认安装的。
@$ORACLE_HOME/rdbms/admin/xaview.sql
grant select on v$xatrans$ to public with grant option;
grant select on v$pending_xatrans$ to public with grant option;
grant select any table to public;

2).TUXDO方面改动
修改$TUXDIR/udataobj/RM 文件
把原来的Oracle_XA:xaosw打头的一行注释掉,加:
Oracle_XA:xaosw:-L${ORACLE_HOME}/lib -lclntsh

在TUXDIR/bin目录下 buildtms -o TMS_ORA9i -r Oracle_XA 创建TMS文件
(RM文件包含所有的资源管理器的入口,它们被tuxedo应用访问。RM文件在$TUXDIR/udataobj目录下。每一个入口使用冒号分隔。
  第一个字段是资源管理器的唯一名字。你可以使用任何指定的名字,通常启比较被人容易理解的名字。
  第二个字段是xa_switch_t 结构名字。Oracle叫做 xaosw,oracle7引用的是静态注册。从oracle后使用另外一个结构xaoswd 用来动态注册。(具体的查看the Oracle8i Application  Developer's Guide - Fundamentals 获得更多信息)
  第三个字段是使用空格分隔的建立TM所需要的lib库文件列表。这些库文件通过访问RM文件建立tuxedo  server 还是需要的。  一旦资源管理器入口正确建立到该RM文件中,就可以build事务管理server了。
   RM的例子如下:
   如果你没有使用cobol,oracle的RM使用:
  Oracle_XA:xaosw:-L${ORACLE_HOME}/lib -lclntsh
  如果使用cobol:
  Oracle_XA:xaosw:-L${ORACLE_HOME}/lib ${ORACLE_HOME}/precomp/lib/cobsqlintf.o  -lclntsh  )

3).配置UBBCONFIG
在*MACHINES节中增加
TLOGDEVICE="/home/cuiying/temp/simpdb/TLOG"
        TLOGNAME=TLOG
        TLOGSIZE=200

在*GROUPS节中增加
OPENINFO="Oracle_XA:Oracle_XA+Acc=P/yn_paygo_1_1/yn_paygo_1_1+SqlNet=orcl_20+SesTm=600+MaxCur=5+LogDir=."
    TMSNAME="TMS_ORA9i"   TMSCOUNT=2

4).TUXDO下的
sqlca.h,sqlcode.h,sqlda.h改名
libsql.lib改名(没有找到,只有Libsql.a,libsql.o,暂时还没有改)

执行tmadmin命令
>crdl -b 500 -z /home/cuiying/temp/simpdb/TLOG 创建日志
>crlog -m catsvr(没成功)
>q

5).编译前的准备

编译之前先配置好 $ORACLE_HOME/precomp/admin/pcscfg.cfg 文件,否则可能找不到有些.h文件
sys_include=(/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/include,/usr/include)--修改的
include=/home/oracle/product/9.2.0.4/precomp/public
include=/home/bea/tuxedo9.1/include/  --增加的
ltype=short
特别注意系统默认的gcc的include目录不准确的,要自己去/usr/lib/gcc-lib目录下去看看

6.使用FML缓冲区
tt.fml文件
mkfldhdr或mkfldhdr32命令进行编译生成tt.fml.h文件,在.c文件中include该.h文件。

7.编译过程

把服务程序.c文件改成.pc文件

proc simpserv.pc --产生预编译后的.c文件,这是因为.pc文件中有嵌入SQL语句,需要进行预编译

buildserver -f simpserv.c  -o simpserv -r Oracle_XA -s TOUPPER

如果有多个c文件:buildserver -f  "simpserv.c a.c b.c"  -o simpserv -r Oracle_XA -s TOUPPER

头文件不需要写在命令行中,因为.c文件中都包含了。

如果tmloadcf也执行过了,就可以执行tmboot了,客户端就可以调用了。

8.调用过程发现错误
LIBTUX_CAT:681: ERROR: Failure to create message queue
 WSNAT_CAT:1088: ERROR: tpinit() failed, tperrno = 7
 WSNAT_CAT:1088: ERROR: tpinit() failed, tperrno = 7
 WSNAT_CAT:1088: ERROR: tpinit() failed, tperrno = 7

tmloadcf -c ubbcfg查看建议配置
Ipc sizing (minimum /T values only) ...

Fixed Minimums Per Processor

SHMMIN: 1
SHMALL: 1
SEMMAP: SEMMNI

Variable Minimums Per Processor

SEMUME, A SHMMAX
SEMMNU, * *
Node SEMMNS SEMMSL SEMMSL SEMMNI MSGMNI MSGMAP SHMSEG
------ ------ ------ ------ ------ ------ ------ ------
shx_xd_tuxedo1 495 62 490 A + 1 35 70 1759K

where 1 <= A <= 8.

sysctl -a 查看系统信息
kernel.msgmnb = 16384
kernel.msgmni = 16 #too small
kernel.msgmax = 8192
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmax = 33554432


修改系统参数
/etc/sysctl.conf
增加下面解决
kernel.msgmni = 50
kernel.msgmap = 100

9.开发过程中发现的奇怪问题

自己分配出来的空间:

char* str=(char *)malloc(1024);

 sndBuf =  (FBFR32 *)tpalloc("FML32",NULL,1024);

居然不能释放:

free(str);

tpfree((char *)rcvBuf);
如果释放了就出错了,奇怪。有待解决。

分享到:
评论
3 楼 mooncui 2007-02-03  
之所以用java写client是因为原来整个项目是用java写的,后来增加需要加tuxedo client部分,正好java可以用jolt连接服务器。

那tpfree和free都不能执行,否则会出错,还弄明白原因。

至于说field是指针的情况,FML中没有指针类型,只有Short,Char,Long,Float,Double,String,Carray几种类型。
2 楼 buptrobin 2007-02-03  
tpalloc跟tpfree没错.
但这个跟哪个str的malloc和free有什么关系?

FML里面的field,如果是指针的话,是不是要deep free?
1 楼 buptrobin 2007-02-03  
现在已经很少有人用java client来连tuxedo server了.
用java的话一般有这几种:
1.weblogic server+jolt session pool, 这个用的多一些
2.weblogic WTC
3.web service

相关推荐

    tuxedo TMIB学习笔记

    ### Tuxedo TMIB 学习笔记 #### 1. 概述 Tuxedo TMIB(Transaction Manager Information Base)是Tuxedo系统中的一个重要组成部分,主要用于监控和管理Tuxedo环境中运行的应用程序和服务。本篇笔记将详细介绍TMIB的...

    关于tuxedo学习资料

    通过对Tuxedo的深入学习,开发者能够构建出满足大规模并发需求的高性能分布式应用。通过阅读和研究提供的“tuxedo课件”和“tuxedo培训资料”,你可以系统地掌握Tuxedo的相关知识,提升你在企业级应用开发中的专业...

    tuxedo学习资料精简版

    【Tuxedo学习资料精简版】是一份针对Oracle Tuxedo系统的重要学习资源,它涵盖了这个企业级交易处理系统的基础知识、核心概念和技术应用。Oracle Tuxedo是Oracle公司开发的一个分布式应用程序平台,主要用于构建高...

    tuxedo开发笔记

    【Tuxedo开发笔记】 ...通过 simpapp 示例,学习者应理解客户程序和服务器的任务,配置文件的作用,以及如何管理 Tuxedo 应用程序。这包括理解基本组件、使用命令行工具如 tmadmin 进行应用程序管理。

    tuxedo学习文档(pdf格式)

    【Tuxedo学习文档】 Tuxedo,全称为Oracle Tuxedo,是由BEA Systems(后被Oracle公司收购)开发的一款强大的交易中间件系统。它主要用于构建高度可用、可扩展的分布式应用程序,尤其适用于金融、电信等对交易处理...

    tuxedo快速学习

    【Tuxedo快速学习】BEA Tuxedo是一款企业级的事务处理系统,主要负责协调分布式应用程序之间的通信。本文将详细介绍Tuxedo中的七种通信模式,以及如何进行编程应用。 1. **同步/异步调用** - **同步调用**(tpcall...

    tuxedo快速入门 tuxedo快速入门

    "TUXEDO快速入门" TUXEDO是一个强有力的工具,用于开发和管理三层结构的客户端/服务器型关键任务应用系统。它提供了一个开放的环境,支持各种各样的客户端、数据库、网络、遗留系统和通讯方式。TUXEDO的主要特点...

    Tuxedo学习

    ### Tuxedo学习:深入解析WS(Workstation)方式及TCP连接 #### 一、Tuxedo概述 Tuxedo作为一个高性能的中间件系统,它不仅提供了强大的事务处理能力,还支持多种通信方式,其中WS(Workstation)方式是最常用的...

    tuxedo学习资料

    ### Tuxedo学习资料知识点详解 #### 一、Tuxedo简介 Tuxedo是由BEA Systems(现已被Oracle收购)开发的一款中间件产品,主要用于构建高性能、高可用性的分布式事务处理系统。它最初是为了满足金融行业的交易处理...

    Tuxedo学习资料入门

    《Tuxedo学习资料入门》 Tuxedo是一款由BEA(现已被Oracle收购)开发的企业级事务处理系统,主要用于构建大型分布式应用。本文将为初学者提供一个Tuxedo的入门指南,主要关注其组件、工作流程、配置、编程以及相关...

    wtc tuxedo 学习资料

    【WTC TUXEDO 学习资料】 Tuxedo 和 WTC(World Trade Center)在信息技术领域中具有不同的含义。在这里,我们主要讨论的是Oracle的Tuxedo,这是一个分布式应用服务器,它提供了事务处理监控(TPM)功能,用于构建...

    tuxedo培训资料

    这份“Tuxedo培训资料”涵盖了Tuxedo系统的各个方面,旨在帮助学习者全面理解和掌握Tuxedo的核心概念和技术。以下是一些关键知识点的详细阐述: 1. **Tuxedo架构**:Tuxedo系统由管理服务器(Manager Server)、...

    Tuxedo中文文档大全

    BEA Tuxedo应用程序开发指南.doc BEA TUXEDO快速入门.doc BEA Tuxedo的七种通信方式⑴.doc BEA Tuxedo的七种通信方式⑵.doc Tuxedo 技术文档.pdf tuxedo培训教程.doc Tuxedo常用函数说明ATMI.doc Tuxedo应用开发指南...

    Tuxedo8.1 windows安装包

    【Tuxedo8.1】是一款由Oracle公司开发的企业级交易处理系统,主要应用于构建分布式、高可用性的大型企业应用。这款产品以其高效、可靠和可扩展性著称,尤其在金融、电信等行业中有着广泛的应用。在Windows平台上安装...

    tuxedo入门学习文档

    通过这个“Tuxedo入门学习文档”,初学者将能全面了解Tuxedo的基本概念、核心功能和实际应用,为进一步深入研究和开发Tuxedo应用打下坚实基础。文档中的详细示例和函数说明将帮助读者快速上手,体验Tuxedo的强大之处...

    wtc.zip_TUXEDO_java tuxedo_java wtc_tuxedo java_tuxedo java clie

    《TUXEDO与其他系统的互连深度解析》 在IT领域,TUXEDO作为一个高性能、高可用性的分布式事务处理系统,一直以来都是企业级应用的重要选择。尤其在金融、电信等对交易处理性能要求极高的行业中,TUXEDO以其强大的...

    TUXEDO管理 TUXEDO管理.doc

    **BEA Tuxedo 管理手册** BEA Tuxedo 是一款强大的交易中间件,主要用于构建高可用性、高性能的企业级分布式应用系统。它提供了事务处理监控器(Transaction Processing Monitor, TPM)功能,确保在分布式环境中...

    TUXEDO:基于IPC机制浅析TUXEDO及其应用

    ### 基于IPC机制浅析Tuxedo及其应用 #### 摘要 本文旨在通过探讨基于进程间通信(IPC)机制的Tuxedo中间件及其应用,从而揭示其强大的功能背后的运作原理。通过结合UNIX核心系统参数与ATMI技术,并借助`ipcs`工具...

    Tuxedo FML编程手册

    通过学习这本手册,开发者不仅能够掌握Tuxedo FML的基本语法和用法,还能够了解如何构建高效的ATMI应用程序。对于希望在金融、电信等行业从事后端系统开发的专业人士来说,这本手册是不可或缺的参考资料。

Global site tag (gtag.js) - Google Analytics