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

<!-- Script 代码开始 -->
<!-- Script 代码结束 -->
<!-- Script 代码开始 -->
<!-- Script 代码结束 -->
<!-- Script 代码开始 -->
<!-- Script 代码结束 -->


一、 课程目标
通过本课程学习,你可以掌握如下知识:
掌握tuxedo中STRING类型buffer的用途 掌握tuxedo中CARRAY类型buffer的用途 掌握tuxedo中FML(FML32)类型buffer的用途 掌握tuxedo中VIEW(VIEW32)类型buffer的用途
注:后续的课程将介绍Tuxedo新增的数据类型:EFML(Embedded Record in FML)、XML Buffer 二、 String类型buffer介绍
(1)STRING类型buffer简介
STRING类型buffer是主要用于面向行、变长度的文本信息类型buffer。STRING类型buffer要求必须以NULL作为结束符的。如果系统采用STRING类型,那么在配置ubbconfig文件时,必须在*MACHINE部分配置TYPE,指明buffer类型为STRING类型。在两种不同类型架构的机器进行buffer传输时候,TUXEDO对STRING类型buffer进行加码、解码过程。无论系统申请了多少长度的buffer,系统自动按着NULL所在的位置决定STRING类型的buffer长度。
(2)STRING类型buffer如何申请

char *SndBuf;
SndBuf = (char *) tpalloc("STRING",NULL,1024)


(3)STRING类型使用方法和调用方法

strcpy(SndBuf,"Bea Tuxedo");
tpcall("TOUPPER",SndBuf,0,&RcvBuf,&len,0);


三、 CARRAY类型buffer介绍
(1)CARRAY类型buffer简介
CARRAY类型buffer是一种独立于机器的buffer类型。用户在使用时必须指定CARRAY类型数据的长度,CARRAY类型数据可以包含NULL字符。CARRAY类型数据不需要加、解码过程。CARRAY类型数据可以用来传输汉字、二进制数据、文件、图形等。CARRAY类型可以作为FML(FML32)、VIEW(VIEW32)的数据类型子项buffer。
(2)CARRAY类型buffer如何申请

tpalloc("CARRAY",NULL,1024*2)


(3)CARRAY类型使用方法和调用方法

四、 VIEW(VIEW32)类型buffer介绍
(1)VIEW类型buffer简介
Tuxedo使用VIEW类型buffer处理类似C语言的结构等数据类型复杂数据。使用VIEW类型buffer可以将各数据元素与一种结构数据类型结合,通过结构就可以访问各数据元素。VIEW类型数据即使没有没有数据也占用空间,结构发生变化,需要重新编译程序。
注明北京联动北方科技有限公司VIEW类型buffer是16位寻址的,VIEW32是32位寻址的.)

(2)VIEW类型buffer使用方法
使用VIEW类型数据步骤:
建立VIEW文件 设置环境变量 编译VIEW文件 在代码中包含VIEW头文件,在程序中使用VIEW结构及API函数 编译程序 运行程序
(1)建立VIEW文件

VIEW user
$ /* VIEW structure for user information */
#type
cname
fbname count flag size null
long
count COUNT 1
-
- “”
0
float
sumfee SUMFEE
1
-
-
0.0
string usrname USRNAME 1
-
80
“”
short
num
NUM
1
-
-
0
END


(2)设置环境变量

/* view文件存放路径,使用冒号分割(NT用分号)*/
VIEWDIR=$APPDIR/inc
/* 用逗号分割的二进制view文件 */
VIEWFILES=user.V


export VIEWDIR VIEWFILES (3)编译VIEW文件
使用viewc(viewc32)编译view文件
$viewc -n user.v view命令简介:

viewc [-n] [-d viewdir] viewfile [viewfile ...]


或者:

viewc32 [-n] [-d viewdir] viewfile [viewfile ...]


[-d viewdir]:指定输出文件的路径(默认在当前目录下)
[-n]:指定在编译view结构类型数据不产生FML buffer数据结构

(4)view编译后生成的头文件

struct user {
      /* VIEW structure for user information */
      long
      count;
      float
      sumfee;
      char
      usrname[80];
      short
      num;
};


(5)VIEW类型buffer的使用

struct user *pszUser;
pszUser=(struct user *)tpalloc("VIEW"," user",sizeof(user));
…………………
pszUser ->count = 1680;
pszUser ->sumfee = 198.96;
strcpy(pszUser->usrname,"Wsy");
pszUser->num = 160;
…………………
tpcall("北京联动北方科技有限公司SVC",(char *)pszUser,0,(char **)&pszUser,&rcvlen,0);


………………… 五、 FML(FML32)类型buffer介绍
(1)VIEW类型buffer简介
FML类型buffer允许存取多个命名的字段。例如:(NAME: "BEA",ADDRESS "China Beijing",PHONE "010-85281188")。每一个命名的字段可以在buffer中存放零个或更多个(occurrences)的值.
注明北京联动北方科技有限公司FML类型buffer是16位寻址的,FML32是32位寻址的.)

(2)FML支持的数据类型: Short Char Long Float Double String Carray
(3)FML类型buffer使用方法
使用FML类型数据步骤: 建立FML文件 设置环境变量 编译FML文件 在代码中包含FML头文件,在程序中使用FML API函数 编译程序 运行程序
(1)建立FML Field Table文件

*base 1000
# name
number type flags comments
COUNT
1
long
-
-
SUMFEE
2
float
- -
USRNAME 3
string -
-
NUM
4
short
-
-


(2)设置环境变量

set FLDTBLDIR32="c:\tuxedo\wsy"
set FIELDTBLS32=user.fld


其中:
FLDTBLDIR(FLDTBLDIR32):指明Field Table文件的名字,多个用逗号分割
FIELDTBLS (FIELDTBLS32):Filed Table文件的所在路径,多个用冒号分割,在WinNT系统中使用分号分割.
(3)编译FML Field Table文件 使用mkfldhdr(mkfldhdr32)编译Field Table文件

$mkfldhdr32 user.fld


(4)FML Field Table编译后生成的头文件

/*
fname
fldid
*/
/*
-----
-----
*/
#define
COUNT
((FLDID32)33555433)
/* number: 1001
type: long */
#define
SUMFEE
((FLDID32)100664298)/* number: 1002
type: float */
#define
USRNAME
((FLDID32)167773163)/* number: 1003
type: string */
#define
NUM
((FLDID32)1004)
/* number: 1004 type: short */


(5)FML类型buffer的使用

FBFR32 *SndBuf;
SndBuf = (FBFR32 *)tpalloc("FML32",NULL,1024);
…………………
lCount = 1680;
Fchg32(SndBuf, COUNT,0,(char *)&lCount ,0);
fSumFee = 198.96;
Fchg32(SndBuf, SUMFEE, (char *)&fSumFee,0);
Strcpy(sUsrName , "wsy");
Fchg32(SndBuf, USRNAME, (char *)sUsrName,0);
iNum = 160;
Fchg32(SndBuf, SUMFEE, (char *)&iNum,0);
…………………
tpcall("北京联动北方科技有限公司SVC",(char *) SndBuf,0,(char **)& SndBuf,&rcvlen,0);
Fget32(SndBuf, COUNT,0, (char *)&lCount ,0);
Fget32(SndBuf, USRNAME,0, (char *)sUsrName,0);
…………………


注:FML和VIEW类型buffer的API函数在后续的文章有详细的介绍和代码分析. 225633.ahxzyy2!rtmgr.200716.1.0: 06-03-2007: Tuxedo Version 8.1, 64-bit

225633.ahxzyy2!rtmgr.200716.1.0: LIBTUX_CAT:328:ERROR:Nospace in Bulletin Board for Service Table
225633.ahxzyy2!rtmgr.200716.1.0: LIBTUX_CAT:248: ERROR: System init function failed, Uunixerr = : msgctl: Error 0


225633.ahxzyy2!tmboot.606478.1.-2: CMDTUX_CAT:825: ERROR: Process rtmgr at h8020 failed with /T tperrno (TPEOS - operating system error) 解决方案:调解参数MAXSERVICES -t : 匹配C/S之间版本兼容问题(eg:6.5的client联8.1的server,就要配置)
-n : 使用iport方式
-m : 最少启动WSH的个数
-M : 最大启动的WSH的个数
-x : 每个WSH可以处理的请求数 ( M*x=maxwsclients )
-T : 在与SERVER建立联接后,如果超过-T设置的时间没有活动的事物,就会自动短开连接(单位:分钟) ULOG里报错如下:

132223.hpl1!tmadmin.3526.1.-2: LIBTUX_CAT:334: ERROR: No BBL
132313.hpl1!BBL.3538.1.0: 03-25-2003: Tuxedo Version 7.1
132313.hpl1!BBL.3538.1.0: gtrid x0 x3e7aa463 x10333: LIBTUX_CAT:328: ERROR: No space in Bulletin Board for Transaction Table


132313.hpl1!BBL.3538.1.0: gtrid x0 x3e7aa463 x10333: LIBTUX_CAT:397: ERROR: Cannot allocate entry on GTT 字串9
解决方案:
假如BBL启动失败是因为事务Transaction Table不能在BB中再分配空间时,处理方法如下:
a. 备份相应的事务日志 TLOG : cp TLOG TLOG***
b. 删除事务日志TLOG: rm TLOG
c. 使用tmadmin登录到tuxedo系统中重新建一个日志设备,方法如下:

$tmadmin
>crdl -b 1000 -z//tuxedo/newweb/TLOG
>crlog -m newweb




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