1. 程式人生 > >在windows環境初步了解tuxedo

在windows環境初步了解tuxedo

list .lib str VC 地方 sna tasklist 提示 gdi

最近換了一份工作,新公司使用tuxedo來簡化應用的開發,而我參加工作這麽多年,雖說略懂c++的開發,但是也沒有用過tuxedo這種古老的東西。既然沒有接觸過,那就學學吧。
先描述一下道路的曲折性吧。


我的本機環境為操作系統:64位的windows 10 專業版、內存:8G,C++的開發工具是:Microsoft Visual Studio 2010 Ultimate 。我開始覺得,為了和操作系統更匹配,我應該下載一個64位的tuxedo,於是選擇了tuxedo111120_64_win_2k8_x86_VS2010.exe,所有的安裝到沒有什麽問題,在編譯TUXEDO_HOME裏面的samples\atmi\simpapp中的例子,執行“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:\bea\tuxedo11gR1_VS2010\include;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include;
LIB=C:\bea\tuxedo11gR1_VS2010\lib;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib;
這兩個環境變量其實與tuxedo沒有關系,而是MS VC在編譯程序時用到的。通常,我們使用MS VC這個IDE來開發程序,通過菜單就可以完成編譯連接和運行。實際上,我們也可以使用一個叫做cl.exe的程序來編譯,在命令行中使用cl.exe來編譯程序的時候,需要像g++那樣設定include的目錄和庫文件的目錄,這樣的話,cl.exe後面跟的參數一般比較多。通過設置這兩個環境變量,在命令行中使用cl.exe的時候,就可以簡化一下命令的寫法,去掉include和lib庫文件的路徑指定。

下面就是根據例子初學tuxedo了。
現在對“$TUXEDO_HOME\samples\atmi\simpapp”中的例子做個復制。閱讀其中的README.nt,這個就是快捷了解如何編譯和使用tuxedo的方式。

文檔中要求設定環境變量,我設置的環境變量如下:
TUXDIR=C:\bea\tuxedo11gR1_VS2010 #我的tuxedo的安裝目錄
APPDIR=C:\bea\tuxedo11gR1_VS2010\samples\atmi\simpapp_baby #我的例子的應用目錄
Path=C:\bea\tuxedo11gR1_VS2010\bin;C:\bea\tuxedo11gR1_VS2010\samples\atmi\simpapp_baby;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE;C:\bea\tuxedo11gR1_VS2010\bin;C:\bea\tuxedo11gR1_VS2010\jre\bin\server;C:\bea\tuxedo11gR1_VS2010\jre\bin; #實際上我的主機的環境變量比這個多,我只列舉了與tuxedo和MS VC有關的。
TUXCONFIG=C:\bea\tuxedo11gR1_VS2010\samples\atmi\simpapp_baby\tuxconfig #我的例子中的tuxedo的配置文件。
WSNADDR=127.0.0.1:3050 #
實際上,我設置的環境變量還有下面的:
NLSPATH=C:\bea\tuxedo11gR1_VS2010\locale\C #這個是生成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.0\VC\include" -Fesimpcl simpcl.c "%TUXDIR%"\lib\libtux.lib "%TUXDIR%"\lib\libbuft.lib "%TUXDIR%"\lib\libfml.lib "%TUXDIR%"\lib\tuxlib.lib "%TUXDIR%"\lib\libfml32.lib "%TUXDIR%"\lib\libengine.lib -link -implib:BC-5054.lib

cl.exe /MD /FA -I"%TUXDIR%"\include -Fesimpserv BS-374c.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-374c.lib
這個錯誤,就說明了buildclient和buildserver的本質是什麽。

修改ubbsimple的配置
有上述配置的經驗之後,這個修改也不難。根據提示,把文件中<>內部的東西改了就好了。我的計算機名字中間有個“-”,所以,整個計算機名字,需要用""括起來。

生成tuxconfig文件
根據手冊中的操作:tmloadcf ubbsimple就可以生成$TUXCONFIG所指向的配置文件了。如果$NLSPATH沒有設置,那麽這個命令會提示錯誤。我也是根據錯誤提示,在網上找的解決辦法。

根據readme.nt中的提示,運行服務器程序
C:\bea\tuxedo11gR1_VS2010\samples\atmi\simpapp_baby>tmboot -y
Booting all admin and server processes in C:\bea\tuxedo11gR1_VS2010\samples\atmi\simpapp_baby\tuxconfig
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:\bea\tuxedo11gR1_VS2010\bin\BBL.exe
simpserv.exe 18320 Services C:\bea\tuxedo11gR1_VS2010\samples\atmi\simpapp_baby\simpserv.exe

然後啟動客戶端程序
C:\bea\tuxedo11gR1_VS2010\samples\atmi\simpapp_baby>simpcl.exe hello
Returned string is: HELLO

至此,測試完成!
後續,可以停止服務。
C:\bea\tuxedo11gR1_VS2010\samples\atmi\simpapp_baby>tmshutdown -y
Shutting down all admin and server processes in C:\bea\tuxedo11gR1_VS2010\samples\atmi\simpapp_baby\tuxconfig

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.

在windows環境初步了解tuxedo