下面这张图就是部属一个完整的tuxedo应用的流程(使用ATMI接口访问)
从图上可以看出,总共需要3步。我在这里再细分一下。
流程为
1.配置环境变量
2.编辑ubbconfig文件
3.将ubbconfig文本文件编译为tuxconfig二进制文件
4.编译服务器端程序
5.编译客户端程序
6.启动服务器
7.调用服务
初看起来,好像也不复杂。很清晰的几步 我在这里主要想阐述的是我遇到的各种错误和解决办法
(这里有个bea的官方技术文章 介绍整个过程的 写的相当详细http://dev2dev.bea.com.cn/techdoc/200305562.html)
1.配置环境变量
需要配置的环境变量为
TUXDIR=<tuxedo安装的全路径>
WSNADDR=<服务器的地址,只有客户端和服务器分开的时候才需要配置>
PATH=%TUXDIR%\bin;%PATH% (这个很重要,因为只有配了这个调用起来才方便)
TUXCONFIG -- 制定tuxconfig这个二进制配置文件的路径
在调用tmloadcf命令时会查找TUXCONFIG 这个环境变量,如果没有查找到,报错信息如下
D:\bea\tuxedo8.1\samples\atmi\sa>tmloadcf ubbsimple
CMDTUX_CAT:873: ERROR: TUXCONFIG environment variable not set
如果环境变量设置和ubbconfig文件中设置的不一致,报错信息如下
D:\bea\tuxedo8.1\samples\atmi\sa>tmloadcf ubbsimple
CMDTUX_CAT:111: ERROR: TUXCONFIG (D:\bea\tuxedo8.1\tuxconfig) of machine HEIHEBEN must be the same as the TUXCONFIG environment variable (d:\bea\tuxconfig)
CMDTUX_CAT:867: ERROR: tmloadcf: Above errors found during syntax checking
注:环境变量中的TUXCONFIG环境变量必须设置,并且要正确设置。
2.编辑ubbconfig文件
在编写这个文件时 我就是一步一步按照小布老师的说法配置的,但是配置完成 调用tmloadcf命令时出错了
D:\bea\tuxedo8.1\samples\atmi\sa>tmloadcf ubbsimple
CMDTUX_CAT:868: ERROR: tmloadcf cannot run on a non-master node
经查得知 原来windows机器上的机器名必须大写
注:如果机器名含有. 则机器名需要使用双引号引起来
补充:可能有些人不知道windows的机器名怎样查看,下面给出贴图示例
3.将ubbconfig文本文件编译为tuxconfig二进制文件
这个过程没有出现错误了,给出提示如下
D:\bea\tuxedo8.1\samples\atmi\sa>tmloadcf ubbsimple
Initialize TUXCONFIG file: D:\bea\tuxedo8.1\tuxconfig [y, q] ? Y
4.编译服务器端程序
编译simpserver服务器端程序的命令为
D:\bea\tuxedo8.1\samples\atmi\sa>buildserver -o simpserv -f simpserv.c -s TOUPPER
该命令的参数我就不解释了
出现错误信息如下:
cl /MD -I"%TUXDIR%"\include -Fesimpserv BS-dbc.c simpserv.c "%TUXDIR%"\lib\libtux.lib "%TUXDIR%"\lib\libbuft.lib "%TUXDIR%"\lib\libfml.lib "%TUXDIR%"\lib\libfml32.lib "%TUXDIR%"\lib\libengine.lib wsock32.lib kernel32.lib advapi32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib -link -implib:BS-dbc.lib
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
BS-dbc.c
BS-dbc.c(1) : fatal error C1083: Cannot open include file: 'stdio.h': No such file or directory
simpserv.c
simpserv.c(14) : fatal error C1083: Cannot open include file: 'stdio.h': No such file or directory
Generating Code...
CMDTUX_CAT:4180: ERROR: can't execute cl /MD -I"%TUXDIR%"\include -Fesimpserv BS-dbc.c simpserv.c "%TUXDIR%"\lib\libtux.lib "%TUXDIR
%"\lib\libbuft.lib "%TUXDIR%"\lib\libfml.lib "%TUXDIR%"\lib\libfml32.lib "%TUXDIR%"\lib\libengine.lib wsock32.lib kernel32.lib advapi32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib -link -implib:BS-dbc.lib
从上面这段信息和网上查找资料得出,原来这个需要VC6.0的编译器来进行编译
我可不想安装庞大的VC6.0,从网上down一个绿色版。按照步骤安装成功后,在PATH中注册,继续编译
还说什么呢,什么也不说了。从网上下载呗,通过baidu也只要了,将该dll放到与cl.exe 同一目录。
好了,再次编译
D:\bea\tuxedo8.1\samples\atmi\sa>buildserver -o simpserv -f simpserv.c -s TOUPPER
cl /MD -I"%TUXDIR%"\include -Fesimpserv BS-92c.c simpserv.c "%TUXDIR%"\lib\libtux.lib "%TUXDIR%"\lib\libbuft.lib "%TUXDIR%"\lib\bfml.lib "%TUXDIR%"\lib\libfml32.lib "%TUXDIR%"\lib\libengine.lib wsock32.lib kernel32.lib advapi32.lib user32.lib gdi32.lib comdlg3lib winspool.lib -link -implib:BS-92c.lib
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
BS-92c.c
BS-92c.c(1) : fatal error C1083: Cannot open include file: 'stdio.h': No such file or directory
simpserv.c
simpserv.c(14) : fatal error C1083: Cannot open include file: 'stdio.h': No such file or directory
Generating Code...
CMDTUX_CAT:4180: ERROR: can't execute cl /MD -I"%TUXDIR%"\include -Fesimpserv BS-92c.c simpserv.c "%TUXDIR%"\lib\libtux.lib "%TUXDIR%"\lib\libbuft.lib "%TUXDIR%"\lib\libfml.lib "%TUXDIR%"\lib\libfml32.lib "%TUXDIR%"\lib\libengine.lib wsock32.lib kernel32.lib adv
i32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib -link -implib:BS-92c.lib
乖乖,这次错误依旧啊。google一下(百度和谷歌都试试,可能就有精确的答案)
这个是由于VC6.0的INCLUDE目录没在环境变量里设置,我们这里直接调用
%VC安装目录%\Bin\VCVARS32.BAT 设置
D:\bea\tuxedo8.1\samples\atmi\sa>D:\vc6lite_rc1\VC98\Bin\vcvars32.bat
Setting environment for using Microsoft Visual C++ tools.
再次编译,出现下面的信息,这就表明没有任何问题了
/out:simpserv.exe
-implib:BS-924.lib
BS-924.obj
simpserv.obj
D:\bea\tuxedo8.1\lib\libtux.lib
D:\bea\tuxedo8.1\lib\libbuft.lib
D:\bea\tuxedo8.1\lib\libfml.lib
D:\bea\tuxedo8.1\lib\libfml32.lib
D:\bea\tuxedo8.1\lib\libengine.lib
wsock32.lib
kernel32.lib
advapi32.lib
user32.lib
gdi32.lib
comdlg32.lib
winspool.lib
5.编译客户端程序
有了编译服务器端的经验,编译客户端没有出现问题
编译的命令为:
buildclient -o client -f simpcl.c
6.启动服务器
使用命令 tmboot
7.调用服务
刚刚编译出来的客户端程序为 client 我们只需要像这样 client hello 就可以调用了 返回应该是HELLO