(一)介绍和安装、配置文件
最近新需求需要将之前的通信方式改为tuxedo通信,所以对tuxedo中间件进行了了解和封装。
最开始也是完全不了解tuxedo中间件作用,看了一些资料和说明之后,目前对tuxedo大概理解就是。
它已经对通信方式进行了封装,你只需要设置相关的配置项,然后通过接口组成所需报文的缓冲区,然后调用对应的发送接口,等待返回。
其中关于安装和配置、示例代码。推荐下面两个网址进行学习:
里面的介绍很详细,编码格式清晰。
另外想要对其补充的是关于ubb文件的修改。
如果服务器要配置远程客户端。
则需要增加WSL选项,在*MACHINE节点,增加设置MAXWSCLIENTS=n,设置最大的WSL client数。
例如:
# (c) 2003 BEA Systems, Inc. All Rights Reserved.
#ident "@(#) samples/atmi/simpapp/ubbsimple $Revision: 1.7 $"
#Skeleton UBBCONFIG file for the TUXEDO Simple Application.
#Replace the <bracketed> items with the appropriate values.
*RESOURCES
IPCKEY 100001
#Example:
#IPCKEY 123456
DOMAINID simpapp
MASTER simple
MAXACCESSERS 10
MAXSERVERS 5
MAXSERVICES 10
MODEL SHM
LDBAL N
*MACHINES
DEFAULT:
APPDIR="/home/zhangenhao/OraHome_1/tuxedo12.1.3.0.0/simpapp"
TUXCONFIG="/home/zhangenhao/OraHome_1/tuxedo12.1.3.0.0/simpapp/tuxconfig"
TUXDIR="/home/zhangenhao/OraHome_1/tuxedo12.1.3.0.0"
MAXWSCLIENTS=5
#Example:
# APPDIR="/home/me/simpapp"
# TUXCONFIG="/home/me/simpapp/tuxconfig"
# TUXDIR="/usr/tuxedo"
ubuntu LMID=simple
#Example:
#beatux LMID=simple
*GROUPS
GROUP1
LMID=simple GRPNO=1 OPENINFO=NONE
*SERVERS
DEFAULT:
CLOPT="-A"
simpserv SRVGRP=GROUP1 SRVID=1
WSL SRVGRP=GROUP1 SRVID=2 MAXGEN=2 CLOPT="-A -- -n //127.0.0.1:8888 -m 2 -M 6 -x 10"
*SERVICES
TOUPPER
对于客户端程序。在客户端程序运行的时候设置 WSNADDR=//127.0.0.1:8888(根据实际的服务器ip和端口配置),就可以访问服务了。
(二)编译
tuxedo的安装路径下面自带了bin文件夹,里面有给出一些工具,其中有buildservice和buildclient。用于编译服务器程序和客户端程序。这个是直接用c的方式在tuxedo目录开发应用程序的编译方法。
插一条关于域的说明
域(Domain):Tuxedo应用车呢供需的组织形式和管理单元 单域模式: SHM模式(Single Host Mode,Shared Memory),所有服务进程都运行在同一台主机的内存空间中 MP模式(Multi-Processors):tuxedo应用程序运行分布在多个物理主机上,他们之间通过网络交换数据 多域模式(Multi-Domains) 应用程序由若干个单域模块组成 域之间可以通过WAN连接 每个域独立管理 在封装到自己的库中,使用gcc等编译器时。
SHM模式 buildclient -o simpcl -f simpcl.c
MP模式 buildclient -o simpcl -w -f simpcl.c 在网络编程中要加载的库的路径(编码时请将wsc放到最前面)
MP模式 -L${TUXDIR}/lib -lwsc -lbuft -lwsc -lgpnet -lfml -lfml32 -lengine -ldl -lpthread
SHM模式: -I$TUXDIR/include -o a.out -L${TUXDIR}/lib -ltux -lbuft -lfml -lfml32 -
lengine -ldl -lpthread
所以工作站客户端通过WSNADDR环境变量连接到WSL,再有WLS分配WSH作为请求代理来调度服务,决定客户机是哪一种类型是在链接时不是在设计时决定的,链接了TUXEDO本地库(libtux.lib)生成的就是本地客户端,链接了W/S库(libwsc.lib以及wtuxws32.lib)生成的客户端就是工作站客户端,编译时加上-w选项就可以指示编译器链接/WS库。
其中红色字体,就是Qt中增加的相关库的编译。wsc库要放在最前面。
(三)错误信息
给大家分享一个官方的错误信息查询总汇网址,包含tuxudo中所有类型的错误编号。
大家可以根据错误信息的类型和编号找到错误说明,并且会有错误解决方法的提示。
(四)客户端运行时配置
远程客户端不需要太多的配置,需要以下配置信息
如下:修改tux.env文件
TUXDIR=/home/myUbuntu/OraHome_2_2/tuxedo12.1.3.0.0; export TUXDIR
WSNADDR=//127.0.0.1:8888; export WSNADDR
LANG=$TUXDIR/locale/C;
在运行程序时可以直接通过setenv或者tuxputenv接口设置环境变量,通过getenv或者tuxgetenv检测是否设置成功。
其中/home/mylinux/OraHome_1/tuxedo12.1.3.0.0路径下,需要保留原安装目录下下的locale和udataobj两个文件夹,一个是用于输出错误信息日志信息的文件夹集合;一个是用到的插件。(udataobj文件夹大概有170M左右,经过裁剪测试,可删除security以外的文件夹以及删除所有jar压缩文件,保留其他文件即可)
这样自己封装的tuxedo接口,就可以使用了。
(五)使用的一些bug记录(20190712)
1、本次使用的是fml32数据域类型报文。
其中在fml头文件中,包括string、long、double三种类型的数据域名。在使用Fchg32组包时,传入数据需要是对应的类型,不然会出现错误提示:
LIBTUX_CAT:6031、LIBWSC_CAT:1045、LIBWSC_CAT:1011
2、Fget32的最后一个参数,如果是给了变量下去,变量要保持是0,在取完一个域值后取下一个之前,要将变量置为0。为0则不会考虑取值长度,直接返回取出的域值的长度给变量。