• 在windows环境初步了解tuxedo


    最近换了一份工作,新公司使用tuxedo来简化应用的开发,而我参加工作这么多年,虽说略懂c++的开发,但是也没有用过tuxedo这种古老的东西。既然没有接触过,那就学学吧。
    先描述一下道路的曲折性吧。


    我的本机环境为操作系统:64位的windows 10 专业版、内存:8G,C++的开发工具是:Microsoft Visual Studio 2010 Ultimate 。我开始觉得,为了和操作系统更匹配,我应该下载一个64位的tuxedo,于是选择了tuxedo111120_64_win_2k8_x86_VS2010.exe,所有的安装到没有什么问题,在编译TUXEDO_HOME里面的samplesatmisimpapp中的例子,执行“buildclient -o simpcl -f simpcl.c”和“buildserver -o simpserv -f simpserv.c -s TOUPPER”的时候,总是提示各种莫名其妙的错误。这两个命令的本质是调用MS VC中的编译器cl.exe去编译连接程序。我们可以找到对应的64位的cl.exe和使用MS VC中的对应的64位的库去连接目标文件,但是最终还是各种错。罢了罢了,于是我决定选择32位的tuxedo。下面就是我使用32位的tuxedo来做的了解。


    软件环境
    操作系统:64位的windows 10 专业版
    C++的开发工具是:Microsoft Visual Studio 2010 Ultimate
    tuxedo的版本信息:tuxedo111120_32_win_2k8_x86_VS2010.exe

    对tuxedo的安装到没有什么特别注意的地方,一路走下去就是了。然后做环境变量的配置。具体如下:
    INCLUDE=C:ea uxedo11gR1_VS2010include;C:Program Files (x86)Microsoft Visual Studio 10.0VCinclude;
    LIB=C:ea uxedo11gR1_VS2010lib;C:Program Files (x86)Microsoft SDKsWindowsv7.0ALib;C:Program Files (x86)Microsoft Visual Studio 10.0VClib;
    这两个环境变量其实与tuxedo没有关系,而是MS VC在编译程序时用到的。通常,我们使用MS VC这个IDE来开发程序,通过菜单就可以完成编译连接和运行。实际上,我们也可以使用一个叫做cl.exe的程序来编译,在命令行中使用cl.exe来编译程序的时候,需要像g++那样设定include的目录和库文件的目录,这样的话,cl.exe后面跟的参数一般比较多。通过设置这两个环境变量,在命令行中使用cl.exe的时候,就可以简化一下命令的写法,去掉include和lib库文件的路径指定。

    下面就是根据例子初学tuxedo了。
    现在对“$TUXEDO_HOMEsamplesatmisimpapp”中的例子做个复制。阅读其中的README.nt,这个就是快捷了解如何编译和使用tuxedo的方式。

    文档中要求设定环境变量,我设置的环境变量如下:
    TUXDIR=C:ea uxedo11gR1_VS2010 #我的tuxedo的安装目录
    APPDIR=C:ea uxedo11gR1_VS2010samplesatmisimpapp_baby #我的例子的应用目录
    Path=C:ea uxedo11gR1_VS2010in;C:ea uxedo11gR1_VS2010samplesatmisimpapp_baby;C:Program Files (x86)Microsoft Visual Studio 10.0VCin;C:Program Files (x86)Microsoft Visual Studio 10.0Common7IDE;C:ea uxedo11gR1_VS2010in;C:ea uxedo11gR1_VS2010jreinserver;C:ea uxedo11gR1_VS2010jrein; #实际上我的主机的环境变量比这个多,我只列举了与tuxedo和MS VC有关的。
    TUXCONFIG=C:ea uxedo11gR1_VS2010samplesatmisimpapp_baby uxconfig #我的例子中的tuxedo的配置文件。
    WSNADDR=127.0.0.1:3050 #
    实际上,我设置的环境变量还有下面的:
    NLSPATH=C:ea uxedo11gR1_VS2010localeC #这个是生成tuxconfig文件的时候用的,没有它,“tmloadcf ubbsimple”这个命令会报错。

    然后我修改了setenv.cmd中的内容,并运行了一下这个脚本文件。好像,这个设置和手工在环境变量里面设置,重复了。
    网上说,有的主机还要运行一下VC安装目录中的vcvars32.bat这个脚本文件,我也运行了一下。其实他也是设置环境变量的,打开稍微阅读一下,就发现他是设置INCLUDE和LIB和LIBPATH的。这个和最上面的环境变量的设置,本质是一回事。

    设置完之后就可以编译程序了:
    buildclient -o simpcl -f simpcl.c #客户端程序
    buildserver -o simpserv -f simpserv.c -s TOUPPER #服务器程序
    如果上述INCLUDE和LIB的环境变量没有设置错误的话,这两个程序可以毫无压力地编译通过。如果出错的话,就会有类似下面的错误:
    cl.exe /MD -I"%TUXDIR%"include -I"C:Program Files (x86)Microsoft Visual Studio 10.0VCinclude" -Fesimpcl simpcl.c "%TUXDIR%"liblibtux.lib "%TUXDIR%"liblibbuft.lib "%TUXDIR%"liblibfml.lib "%TUXDIR%"lib uxlib.lib "%TUXDIR%"liblibfml32.lib "%TUXDIR%"liblibengine.lib -link -implib:BC-5054.lib

    cl.exe /MD /FA -I"%TUXDIR%"include -Fesimpserv BS-374c.c simpserv.c "%TUXDIR%"liblibtux.lib "%TUXDIR%"liblibbuft.lib "%TUXDIR%"liblibfml.lib "%TUXDIR%"liblibfml32.lib "%TUXDIR%"liblibengine.lib wsock32.lib kernel32.lib advapi32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib -link -implib:BS-374c.lib
    这个错误,就说明了buildclient和buildserver的本质是什么。

    修改ubbsimple的配置
    有上述配置的经验之后,这个修改也不难。根据提示,把文件中<>内部的东西改了就好了。我的计算机名字中间有个“-”,所以,整个计算机名字,需要用""括起来。

    生成tuxconfig文件
    根据手册中的操作:tmloadcf ubbsimple就可以生成$TUXCONFIG所指向的配置文件了。如果$NLSPATH没有设置,那么这个命令会提示错误。我也是根据错误提示,在网上找的解决办法。

    根据readme.nt中的提示,运行服务器程序
    C:ea uxedo11gR1_VS2010samplesatmisimpapp_baby>tmboot -y
    Booting all admin and server processes in C:ea uxedo11gR1_VS2010samplesatmisimpapp_baby uxconfig
    INFO: Oracle Tuxedo, Version 11.1.1.2.0 with VS2010, 32-bit, Patch Level (none)

    Booting admin processes ...

    exec BBL -A :
    process id=14836 ... Started.

    Booting server processes ...

    exec simpserv -A :
    process id=9204 ... Started.
    2 processes started.

    启动之后,通过tasklist命令,可以看到新增了两个后台服务:
    BBL.exe 18288 Services C:ea uxedo11gR1_VS2010inBBL.exe
    simpserv.exe 18320 Services C:ea uxedo11gR1_VS2010samplesatmisimpapp_babysimpserv.exe

    然后启动客户端程序
    C:ea uxedo11gR1_VS2010samplesatmisimpapp_baby>simpcl.exe hello
    Returned string is: HELLO

    至此,测试完成!
    后续,可以停止服务。
    C:ea uxedo11gR1_VS2010samplesatmisimpapp_baby>tmshutdown -y
    Shutting down all admin and server processes in C:ea uxedo11gR1_VS2010samplesatmisimpapp_baby uxconfig

    Shutting down server processes ...

    Server Id = 1 Group Id = GROUP1 Machine = simple: shutdown succeeded

    Shutting down admin processes ...

    Server Id = 0 Group Id = simple Machine = simple: shutdown succeeded
    2 processes stopped.

  • 相关阅读:
    Sqlite3:Sqlite3命令行Linux操作
    Docker:docker部署Sqlite3数据库
    SpringBoot:Sqlite3+SpringBoot2.1.3+Mybatis-Puls整合项目
    Algorithm:Java加密解密之MAC(消息认证码)
    Springboot:SpringBoot2.0整合WebSocket,实现后端数据实时推送!
    windows10系统安装anaconda后CMD命令行里面的python默认版本变化的问题
    在树莓派中,minicom的一些使用方法
    树莓派软硬串口对调
    树莓派无显示屏连接wifi教程
    设备管理器添加到桌面
  • 原文地址:https://www.cnblogs.com/babyha/p/9146187.html
Copyright © 2020-2023  润新知