標籤:軟體 config檔案 proc simple ide c++ 專業版 伺服器程式 ret
最近換了一份工作,新公司使用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