java思維

          正在學(xué)習(xí)中:(

          2007年11月22日 #

          bcb6 中安裝 boost

          正則表達(dá)式是一種模式匹配形式,它通常用在處理的文本程序中。比如我們經(jīng)常使用的grep工具,還是perl語言都使用了正則表達(dá)式。傳統(tǒng)的C++處理正則表達(dá)式是非常麻煩的,這也成為很多其他語言愛好者的笑柄,現(xiàn)在情況不一樣了,因?yàn)橛辛薭oost。
          Boost是一個(gè)基于Template的開發(fā)源代碼庫,在這個(gè)庫中有很多子庫用來高效處理各方面的問題,比如字符串拆分,格式化,線程等等,Boost對(duì)于每一個(gè)C++愛好者都是應(yīng)該了解的,對(duì)于C++ Builder用戶如果能在熟練使用VCL的情況下再熟練使用Boost,我想一定如虎添翼。
          一般來說,使用Boost是非常簡(jiǎn)單,和使用其他STL庫沒有太大區(qū)別,但使用Boost的正則表達(dá)式庫則不那么容易,因?yàn)檫@個(gè)庫還需要我們單獨(dú)編譯,下面我將詳細(xì)介紹如何使用。
          如果你還不知道或者還沒有Boost的話,你可以去www.boost.org下載最新版本,作者使用的是1.30版本。將下載下來的zip包[1]解壓到任何你喜歡的目錄,比如D:\boost。
          編譯正則表達(dá)式庫
          前面已經(jīng)提到,這個(gè)庫需要我們單獨(dú)編譯才能使用,為什么不編譯好一起發(fā)布呢?主要是考慮到不同的編譯器需要不同的鏈接庫文件和鏈接庫太大了。在命令行下,進(jìn)入[%Boost]\Libs\RegEx\Build目錄,直接敲入make –fbcb6.mak命令開始編譯,這里請(qǐng)大家注意了,如果你的計(jì)算機(jī)上同時(shí)安裝了BCB5,請(qǐng)一定要把path設(shè)置成為BCB6的bcc32.exe程序所在的目錄,否則可能使用BCB5的make程序,這樣雖然能編譯但最后不能使用。
          編譯過程相當(dāng)耗時(shí),你需要耐心等待,最終編譯完成,會(huì)在[%Boost]\Libs\RegEx\Build目錄生成一個(gè)BCB6目錄,在這個(gè)目錄生成了很多l(xiāng)ib文件和dll文件,把所有dll文件復(fù)制到windows系統(tǒng)目錄,所以lib文件復(fù)制到bcb6\lib目錄。如果你不想這么麻煩的復(fù)制文件,可以在編譯時(shí)加入install參數(shù),就像這樣make –fBcb6.mak install,不過作者還是比較喜歡前一種方式,這樣我可以知道到底生成了什么文件。現(xiàn)在編譯已經(jīng)完成了,你可以體現(xiàn)boost的神奇魅力了。
          #include<deque>
          #include<iostream>
          #include<algorithm>
          #include<boost/regex.hpp>
          int main()
          {
          using namespace boost;
          using namespace std;
          regex expression("\\s+href\\s*=\\s*\"([^\"]*)\"",regbase::normal|regbase::icase);
          string s="<a href=\"index.html\"><img src=\"logo.gif\"></a>";
          deque<string> result;
          regex_split(std::back_inserter(result),s,expression);
          copy(result.begin(),result.end(),ostream_iterator<string>(cout,"\n"));
          int c;
          cin>>c;
          return 0;
          }
          設(shè)置BCB6 Project屬性的Lib Path和Include Path為你安裝boost的目錄,運(yùn)行你會(huì)看到結(jié)果:
          index.html
          可以看到index.html已經(jīng)從字符串中提出出來了,那么為什么會(huì)是這樣呢?
          代碼的核心部分是:
          regex expression("\\s+href\\s*=\\s*\"([^\"]*)\"",regbase::normal|regbase::icase);
          它用來設(shè)置如何匹配字符串,上面亂七八糟的字符串很難看懂,如果不了解正則表達(dá)式的書寫規(guī)則,上
          面代碼可以和天書媲美。
          regbase::normal|regbase::icase 是解析參數(shù)設(shè)置,具體可以參考boost幫助文檔。
          正則表達(dá)式的書寫規(guī)則
          具體的書寫規(guī)則,大家可以參看boost的文檔,我這里做一下簡(jiǎn)要說明:
          . (dot)
          用來匹配任何一個(gè)字符,但不包括新行上的字符
          *
          閉包,任意有限次的自重復(fù)連接
          +
          有限次自重復(fù)連接,但至少出現(xiàn)一次
          {}
          指定可能的重復(fù)次數(shù)
          例如:
          ba* 匹配 b ba baa baaa等
          ba+ 匹配 ba baa baaaaaaaaa等
          ba{1,5} 匹配 ba baa baaa baaaa baaaaa
          \
          轉(zhuǎn)義字符,有很多用途,根據(jù)參數(shù)設(shè)置而變化,最常見的就是類似于c語言\的用法
          \s
          匹配空格
          \w
          匹配一個(gè)單詞
          \d
          匹配數(shù)字
          ()
          有兩種用法:
          1是合并的作用,例如(ab)*匹配ab abab ababab等
          2是確定匹配,也就是說在()中的字符將被最終拆解出來
          根據(jù)上面這張表,我們可以很容易知道前面的那段天書如何解釋。
          一個(gè)實(shí)際的例子
          前一段時(shí)間在CSDN上有一篇帖子,問題是有一種文件結(jié)構(gòu)如(類似):
          @People{
          Age=19
          Speek=”Hay,{name},how are you”
          }
          問如何拆分字符串得到@后面的名字,=兩邊的屬性名和屬性值,引號(hào)里{}種的名字。
          解決這個(gè)問題用正則表達(dá)式再合適不過了。
          根據(jù)分析,我們可以這樣構(gòu)造匹配規(guī)則:
          "@(.*?)\s*\\{" 匹配@開始的字符創(chuàng),后面兩種類型如何構(gòu)造匹配規(guī)則留給大家思考吧。
          這樣我們可以輕易拆解這個(gè)例子。

          性能分析
          通過上面的討論,大家已經(jīng)了解到boost的強(qiáng)大威力,那個(gè)性能又如何呢?為此我們?cè)賹?shí)際來拆分一個(gè)
          復(fù)雜的html代碼,看看到底需要花費(fèi)多少時(shí)間。
          為了節(jié)省篇幅,這里就不列出html代碼了,不過可以告訴大家,這是一個(gè)又Word生成的大小為186K
          的html文件,這個(gè)文件中用到了很多<table>標(biāo)簽,所以我這里測(cè)試就來拆分所有<table>標(biāo)簽的
          width屬性。測(cè)試代碼如下:
          #include<deque>
          #include<iostream>
          #include<algorithm>
          #include<boost/regex.hpp>
          #include<vcl.h>
          int main()
          {
           using namespace boost;
           using namespace std;
           TStringList* html=new TStringList();
           html->LoadFromFile("D:\\1.htm");
           regex expression("\\s+width=([^\"]*)\s+",regbase::normal|regbase::icase);
          DWORD start=GetTickCount();
           for(int n=0;n<html->Count;n++)
           {
              string s=html->Strings[n].c_str(); 
              deque<string> result;
              regex_split(std::back_inserter(result),s,expression);
          copy(result.begin(),result.end(),ostream_iterator<string>(cout,"\n"));
          result.clear();
          }
           start=GetTickCount()-start;
           delete html;
           cout<<start;
          int c;
           cin>>c;
           return 0;
          }
          輸出結(jié)果為671毫秒,拆分得到1072個(gè)width屬性值,我們可以看到boost的效率是非常高的,雖然與一些角本語言比起來解析速度還是慢,但已經(jīng)可以滿足大多數(shù)編程要求了。另外作者的計(jì)算機(jī)配置并不是非常高,相信拿到現(xiàn)在任何一臺(tái)主流配置的計(jì)算機(jī)上都會(huì)優(yōu)于作者的結(jié)果。
          結(jié)束語

          其實(shí)上面的強(qiáng)大威力只是boost的冰山一角,如果你不自己去體會(huì),你很難想象到boost的強(qiáng)大威力。在boost里還有很多使用的庫,比如格式化輸出,字符串拆解,類型轉(zhuǎn)換等,這些庫使用起來也比較方便,大家可以自行參考boost文檔。在這些庫中還有兩個(gè)庫需要自行編譯,他們是Python和thread庫,而且這些庫的編譯需要專門的工具Jam,所以我們?cè)诰幾g這些庫的時(shí)候還要編譯jam工具,而編譯jam工具也不是一件快樂的事情,麻煩同樣出現(xiàn)在如果你安裝了多個(gè)編譯器,如果讀者有興趣可以自己試一下。
          不過BCB6并不支持全部boost庫,從boost提供的編譯器支持表可以看到[2],BCB6還是有相當(dāng)多的庫不支持的,支持最好的是gcc/g++的編譯器,但也不是全部支持。希望borland下一個(gè)將要發(fā)布的C++編譯器可以支持更多C++標(biāo)準(zhǔn)。
          [1] 其實(shí)還有其他類型的包,但在windows系統(tǒng)下,你最好下載zip包
          [2] Boost提供的編譯器支持表是針對(duì)BCB5的,對(duì)于BCB6的支持作者并沒有詳細(xì)測(cè)試,如果讀者有興趣可以自己測(cè)試boost附帶的測(cè)試代碼。

          posted @ 2008-12-07 21:22 john 閱讀(884) | 評(píng)論 (0)編輯 收藏

          RedHat LinuxAS4 cvs 服務(wù)器搭建步驟

          根據(jù)網(wǎng)上各種文檔整理而成.=號(hào)兩邊要空格的問題折磨了我好久.

           

          1:安裝

          先檢查是否安裝CVS包

          #>rpm -qa|grep cvs

          沒有安裝的話,用下面2種方法安裝

          (1):在安裝linux的時(shí)候可以選擇安裝CVS包
          (2):另外下載CVS RPM包 自行安裝

          2:建立cvs用戶和組

          #> groupadd cvs
          #> useradd -g cvs -G cvs –d /cvsroot cvsroot
          #> passwd cvsroot

          更改目錄屬性
          chmod –R 770 /cvsroot

          3:建立CVS服務(wù)

          #more /etc/services | grep cvspserver

          看看是否有
          cvspserver 2401/tcp #CVS client/server operations
          cvspserver 2401/udp #CVS client/server operations

          如果沒有需要到/etc/service文件中增加

          建立#vi /etc/xinet.d/cvspserver 文件內(nèi)容如下

          service cvspserver
          {
          disable = no
          flags = REUSE
          socket_type = stream
          wait = no
          user = root
          server = /usr/bin/cvs
          server_args = -f --allow-root=/cvsroot pserver
          }

          該文件有特別要注意的地方,所有=號(hào)兩邊都需要空一個(gè)空格,除了"root=/cvsroot" 所有要空格的地方,不要多加空格.否則會(huì)有CVS服務(wù)不能啟動(dòng)的問題

          切換到cvsroot用戶

          #cvs -d /cvsroot init

          然后重新啟動(dòng)xinetd服務(wù)或者重啟動(dòng)機(jī)器

          #service xinetd restart

          然后用

          #netstat -l | grep cvspserver
          or
          #netstat -l | grep 2401

          看是否有下面tcp 0 0 *:cvspserver *:* LISTEN

          說明已經(jīng)正常啟動(dòng),沒有的話請(qǐng)重新檢查配置過程是否有錯(cuò)誤或者遺漏。最后還必須檢查防火墻的設(shè)置,把2401端口打開。

          4:用戶管理

          CVS默認(rèn)使用系統(tǒng)用戶登錄,所有系統(tǒng)用戶都可以登陸,但是這樣對(duì)系統(tǒng)不安全,我們需要獨(dú)立的用戶管理.CVS用戶名和密碼保存在CVSROOT目錄下的passwd文件中.格式

          用戶名:密碼:系統(tǒng)用戶

          #htpasswd passwd username

          用來設(shè)置用戶密碼并保存到passwd文件中.

          然后需要關(guān)閉系統(tǒng)用戶登陸使用cvs的權(quán)限,CVSROOT目錄下的config文件,把#SystemAuth=no的#去掉就可以了.

          測(cè)試登陸

          #cvs -d “:pserver:username@127.0.0.1:/cvsroot” login

          ok

           

          5 :源代碼倉庫的備份和移動(dòng)
          基本上,CVS的源代碼倉庫沒有什么特別之處,完全可以用文件備份的方式進(jìn)行備份。需要注意的只是,應(yīng)該確認(rèn)備份的過程中沒有用戶提交修改,具體的做法可以是停止CVS服務(wù)器或者使用鎖等等。恢復(fù)時(shí)只需要把這些文件按原來的目錄結(jié)構(gòu)存放好,因?yàn)镃VS的每一個(gè)模塊都是單獨(dú)的一個(gè)目錄,與其他模塊和目錄沒有任何瓜葛,相當(dāng)方便。甚至只需要在倉庫中刪除一個(gè)目錄或者文件,便可以刪除該模塊的一些內(nèi)容,不過并不建議這么做,使用CVS的刪除功能將會(huì)有一個(gè)歷史記錄,而對(duì)倉庫的直接刪除不留任何痕跡,這對(duì)項(xiàng)目管理是不利的。移動(dòng)倉庫與備份相似,只需要把該模塊的目錄移動(dòng)到新的路徑,便可以使用了。
          如果不幸在備份之后有過一些修改并且執(zhí)行了提交,當(dāng)服務(wù)器出現(xiàn)問題需要恢復(fù)源代碼倉庫時(shí),開發(fā)者提交新的修改就會(huì)出現(xiàn)版本不一致的錯(cuò)誤。此時(shí)只需要把CVS相關(guān)的目錄和文件刪除,即可把新的修改提交。

          6.更進(jìn)一步的管理
          CVSROOT目錄下還有很多其他功能,其中最重要的就是modules文件。這個(gè)文件定義了源代碼庫的模塊,下面是一個(gè)例子:

          代碼:
          Linux    Linux
          Kernel   Linux/kernel


          這個(gè)文件的內(nèi)容按行排列,每一行定義一個(gè)模塊,首先是模塊名,然后是模塊路徑,這是相對(duì)于CVS根目錄的路徑。它定義了兩個(gè)模塊,第一個(gè)是Linux模塊,它位于Linux目錄中,第二個(gè)是Kernel模塊,這是Linux模塊的子模塊。
          modules文件并非必須的,它的作用相當(dāng)于一個(gè)索引,部分CVS客戶端軟件通過它可以快速找到相應(yīng)的模塊,比如WinCVS。

          7.協(xié)同開發(fā)的問題
          默認(rèn)方式下,CVS允許多個(gè)用戶編輯同一個(gè)文件,這對(duì)一個(gè)協(xié)作良好的團(tuán)隊(duì)來說不會(huì)有什么問題,因?yàn)槎鄠€(gè)開發(fā)者同時(shí)修改同一個(gè)文件的同一部分是不正常的,這在項(xiàng)目管理中就應(yīng)該避免,出現(xiàn)這種情況說明項(xiàng)目組內(nèi)部沒有統(tǒng)一意見。而多個(gè)開發(fā)者修改文件的不同部分,CVS可以很好的管理。
          如果覺得這種方式難以控制,CVS也提供了解決辦法,可以使用cvs admin -l進(jìn)行鎖定,這樣一個(gè)開發(fā)者正在做修改時(shí)CVS就不會(huì)允許其他用戶checkout。這里順便說明一下文件格式的問題,對(duì)于文本格式,CVS可以進(jìn)行歷史記錄比較、版本合并等工作,而二進(jìn)制文件不支持這個(gè)操作,比如word文檔、圖片等就應(yīng)該以二進(jìn)制方式提交。對(duì)于二進(jìn)制方式,由于無法進(jìn)行合并,在無法保證只有一個(gè)用戶修改文件的情況下,建議使用加鎖方式進(jìn)行修改。必須注意的是,修改完畢記得解鎖。
          從1.6版本開始,CVS引入了監(jiān)視的概念,這個(gè)功能可以讓用戶隨時(shí)了解當(dāng)前誰在修改文件,并且CVS可以自動(dòng)發(fā)送郵件給每一個(gè)監(jiān)視的用戶告知最新的更新。

          8.建立多個(gè)源代碼倉庫
          如果需要管理多個(gè)開發(fā)組,而這些開發(fā)組之間不能互相訪問,可以有2個(gè)辦法:
          a.共用一個(gè)端口,需要修改cvspserver文件,給server_args指定多個(gè)源代碼路徑,即多個(gè)—allow-root參數(shù)。由于xinetd的server_args長(zhǎng)度有限制,可以在cvspserver文件中把服務(wù)器的設(shè)置重定向到另外一個(gè)文件,如:

          代碼:
          server = /home/cvsroot/cvs.run


          然后創(chuàng)建/home/cvsroot/cvs.run文件,該文件必須可執(zhí)行,內(nèi)容格式為:

          代碼:
          #!/bin/bash
          /usr/bin/cvs -f \
          --allow-root=/home/cvsroot/src1 \
          --allow-root=/home/cvsroot/src2 \
          pserver


          注意此時(shí)源代碼倉庫不再是/home/cvsroot,進(jìn)行初始化的時(shí)候要分別對(duì)這兩個(gè)倉庫路徑進(jìn)行初始化,而不再對(duì)/home/cvsroot路徑進(jìn)行初始化。
          b.采用不同的端口提供服務(wù)
          重復(fù)第2步和第3步,為不同的源代碼倉庫創(chuàng)建不同服務(wù)名的啟動(dòng)腳本,并為這些服務(wù)名指定不同的端口,初始化時(shí)也必須分別進(jìn)行初始化。
           
           

           

           

          posted @ 2008-05-25 02:04 john 閱讀(434) | 評(píng)論 (0)編輯 收藏

          Oracle 內(nèi)存分配建議


           Oracle 內(nèi)存分配建議
          關(guān)于SGA設(shè)置的一點(diǎn)總結(jié)
          本總結(jié)不針對(duì)特例,僅對(duì)服務(wù)器只存在OS + ORACLE 為例,如果存在其他應(yīng)用請(qǐng)酌情考慮
          寫這個(gè)也是因?yàn)榻鼇磉@種重復(fù)性的問題發(fā)生的太多所導(dǎo)致的

          首先不要迷信STS,SG,OCP,EXPERT 等給出的任何建議、內(nèi)存百分比的說法
          基本掌握的原則是, data buffer 通常可以盡可能的大,shared_pool_size 要適度,log_buffer 通常大到幾百K到1M就差不多了

          設(shè)置之前,首先要明確2個(gè)問題
          1: 除去OS和一些其他開銷,能給ORACLE使用的內(nèi)存有多大
          2:oracle是64bit or 32 bit,32bit 通常 SGA有 1.7G 的限制(某些OS的處理或者WINDOWS上有特定設(shè)定可以支持到2G以上甚至達(dá)到3.7G,本人無這方面經(jīng)驗(yàn))

          下面是我的windows2000下的oracle :

          SQL> select * from v$version;

          BANNER
          ----------------------------------------------------------------
          Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
          PL/SQL Release 8.1.7.0.0 - Production
          CORE 8.1.7.0.0 Production
          TNS for 32-bit Windows: Version 8.1.7.0.0 - Production
          NLSRTL Version 3.4.1.0.0 - Production

          SQL>

          windows上存在32bit的限制,如AIX、HP UNIX 等有明確的64BIT OS and ORACLE的版本,32bit oracle可以裝在64bit os 上,64 bit oracle不能裝在32 bit OS上

          不管oracle是32 bit ORACLE還是 64 bit 的,假定應(yīng)用存在沒有很好的使用bind var 的情況,也不能設(shè)置 shared_pool_size 過大,通常應(yīng)該控制在200M--300M,如果是 ORACLE ERP 一類的使用了很多存儲(chǔ)過程函數(shù)、包 ,或者很大的系統(tǒng),可以考慮增大shared_pool_size ,但是如果超過500M可能是危險(xiǎn)的,達(dá)到1G可能會(huì)造成CPU的嚴(yán)重負(fù)擔(dān),系統(tǒng)甚至癱瘓。所以shared_pool_size 如果超過300M還命中率不高,那么應(yīng)該從應(yīng)用上找原因而不是一味的增加內(nèi)存,shared_pool_size 過大主要增加了管理負(fù)擔(dān)和latch 的開銷。

          log_buffer : 128K ---- 1M 之間通常問題不大,不應(yīng)該太大

          large_pool_size :如果不設(shè)置MTS,通常在 RMAN 、OPQ 會(huì)使用到,但是在10M --- 50M 應(yīng)該差不多了。假如設(shè)置 MTS,則由于 UGA 放到large_pool_size 的緣故,這個(gè)時(shí)候依據(jù) session最大數(shù)量和 sort_ares_size 等參數(shù)設(shè)置,必須增大large_pool_size 的設(shè)置,可以考慮為 session * (sort_area_size + 2M)。這里要提醒一點(diǎn),不是必須使用MTS,我們都不主張使用MTS,尤其同時(shí)在線用戶數(shù)小于500的情況下。

          java_pool_size : 若不使用java,給30M通常就夠了

          data buffer ,在做了前面的設(shè)置后,凡可以提供給oracle的內(nèi)存,都應(yīng)該給data buffer = (db_block_size * db_block_buffers)
          在9i 中可以是 db_cache_size

          還有2個(gè)重要參數(shù)我們需要注意

          sort_area_size and hash_area_size
          這兩個(gè)參數(shù)在非MTS下都是屬于PGA ,不屬于SGA,是為每個(gè)session單獨(dú)分配的,在我們的服務(wù)器上除了OS + SGA,一定要考慮這兩部分

          (****) : OS 使用內(nèi)存+ SGA + session*(sort_area_size + hash_area_size + 2M) < 總物理RAM 為好


          這樣歸結(jié)過來,假定oracle是 32 bit ,服務(wù)器RAM大于2G ,注意你的PGA的情況,,則建議

          shared_pool_size + data buffer +large_pool_size + java_pool_size < 1.6G


          再具體化,注意滿足上面(****) 的原則的基礎(chǔ)上可以參考如下設(shè)置
          如果512M RAM
          建議 shared_pool_size = 50M, data buffer = 200M

          如果1G RAM
          shared_pool_size = 100M , data buffer = 500M

          如果2G
          shared_pool_size = 150M ,data buffer = 1.2G

          物理內(nèi)存再大已經(jīng)跟參數(shù)沒有關(guān)系了


          假定64 bit ORACLE

          內(nèi)存4G
          shared_pool_size = 200M , data buffer = 2.5G

          內(nèi)存8G
          shared_pool_size = 300M , data buffer = 5G

          內(nèi)存 12G
          shared_pool_size = 300M-----800M , data buffer = 8G



          以上僅為參考值,不同系統(tǒng)可能差異比較大,需要根據(jù)具體情況調(diào)整。建議在設(shè)置參數(shù)的同時(shí),init中使用 lock_sga ,在不同的平臺(tái)上可能有不同的方式,使得SGA鎖定在物理內(nèi)存中而不被放入 SWAP 中,這樣對(duì)效率有好處


          關(guān)于內(nèi)存的設(shè)置,要再進(jìn)行細(xì)致的調(diào)整,起的作用不大,但可根據(jù)statspack信息和v$system_event,v$sysstat,v$sesstat,v$latch 等view信息來考慮微調(diào)

          posted @ 2008-01-28 23:58 john 閱讀(807) | 評(píng)論 (0)編輯 收藏

          Oracle 回滾段空間回收步驟

               摘要:   是誰"偷偷的"用了那么多空間呢(本來有幾十個(gè)G的Free磁盤空間的)? 檢查數(shù)據(jù)庫表空間占用空間情況: SQL> select tablespace_name,sum(bytes)/1024/1024/1024 GB  2 from dba...  閱讀全文

          posted @ 2007-12-27 00:50 john 閱讀(2259) | 評(píng)論 (1)編輯 收藏

          常用的MQ命令

          最近在配置MQ,記下了一些常用的MQ命令,如下:

          創(chuàng)建隊(duì)列管理器
          crtmqm –q QMgrName
          -q是指創(chuàng)建缺省的隊(duì)列管理器

          刪除隊(duì)列管理器
          dltmqm QmgrName

          啟動(dòng)隊(duì)列管理器
          strmqm QmgrName
          如果是啟動(dòng)默認(rèn)的隊(duì)列管理器,可以不帶其名字

          停止隊(duì)列管理器
          endmqm QmgrName 受控停止

          endmqm –i QmgrName 立即停止

          endmqm –p QmgrName 強(qiáng)制停止

          顯示隊(duì)列管理器
          dspmq –m QmgrName

          運(yùn)行MQ命令
          runmqsc QmgrName
          如果是默認(rèn)隊(duì)列管理器,可以不帶其名字

          往隊(duì)列中放消息
          amqsput QName QmgrName
          如果隊(duì)列是默認(rèn)隊(duì)列管理器中的隊(duì)列,可以不帶其隊(duì)列管理器的名字

          從隊(duì)列中取出消息
          amqsget QName QmgrName
          如果隊(duì)列是默認(rèn)隊(duì)列管理器中的隊(duì)列,可以不帶其隊(duì)列管理器的名字

          啟動(dòng)通道
          runmqchl –c ChlName –m QmgrName

          啟動(dòng)偵聽
          runmqlsr –t TYPE –p PORT –m QMgrName

          停止偵聽
          endmqlsr -m QmgrName

          下面是在MQ環(huán)境中可以執(zhí)行的MQ命令(即在runmqsc環(huán)境下可以敲的命令)

          定義持久信隊(duì)列
          DEFINE QLOCAL(QNAME) DEFPSIST(YES) REPLACE

          設(shè)定隊(duì)列管理器的持久信隊(duì)列
          ALTER QMGR DEADQ(QNAME)

          定義本地隊(duì)列
          DEFINE QL(QNAME) REPLACE

          定義別名隊(duì)列
          DEFINE QALIAS(QALIASNAME) TARGQ(QNAME)

          遠(yuǎn)程隊(duì)列定義
          DEFINE QREMOTE(QRNAME) +
          RNAME(AAA) RQMNAME(QMGRNAME) +
          XMITQ(QTNAME)

          定義模型隊(duì)列
          DEFINE QMODEL(QNAME) DEFTYPE(TEMPDYN)

          定義本地傳輸隊(duì)列
          DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) +
          INITQ(SYSTEM.CHANNEL.INITQ)+
          PROCESS(PROCESSNAME) REPLACE

          創(chuàng)建進(jìn)程定義
          DEFINE PROCESS(PRONAME) +
          DESCR(‘STRING’)+
          APPLTYPE(WINDOWSNT)+
          APPLICID(’ runmqchl -c SDR_TEST -m QM_ TEST’)
          其中APPLTYPE的值可以是:CICS、UNIX、WINDOWS、WINDOWSNT等

          創(chuàng)建發(fā)送方通道
          DEFINE CHANNEL(SDRNAME) CHLTYPE(SDR)+
          CONNAME(‘100.100.100.215(1418)’) XMITQ(QTNAME) REPLACE
          其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。

          創(chuàng)建接收方通道
          DEFINE CHANNEL(SDR_ TEST) CHLTYPE(RCVR) REPLACE

          創(chuàng)建服務(wù)器連接通道
          DEFINE CHANNEL(SVRCONNNAME) CHLTYPE(SVRCONN) REPLACE

          顯示隊(duì)列的所有屬性
          DISPLAY QUEUE(QNAME) [ALL]

          顯示隊(duì)列的所選屬性
          DISPLAY QUEUE(QNAME) DESCR GET PUT
          DISPLAY QUEUE(QNAME)MAXDEPTH CURDEPTH

          顯示隊(duì)列管理器的所有屬性
          DISPLAY QMGR [ALL]

          顯示進(jìn)程定義
          DISPLAY PROCESS(PRONAME)

          更改屬性
          ALTER QMGR DESCR(‘NEW DESCRIPTION’)
          ALTER QLOCAL(QNAME) PUT(DISABLED)
          ALTER QALIAS(QNAME) TARGQ(TARGQNAME)

          刪除隊(duì)列
          DELETE QLOCAL(QNAME)
          DELETE QREMOTE(QRNAME)

          清除隊(duì)列中的所有消息
          CLEAR QLOCAL(QNAME)

          以下是一些高級(jí)配置的命令:

          amqmcert                  配置SSL證書

          amqmdain                配置windows上的MQ服務(wù)

          crtmqcvx                    轉(zhuǎn)換數(shù)據(jù)

          dmpmqaut                轉(zhuǎn)儲(chǔ)對(duì)象權(quán)限管理

          dmpmqlog                轉(zhuǎn)儲(chǔ)日志管理

          dspmq                         顯示隊(duì)列管理器

          dspmqaut                  顯示打開對(duì)象的權(quán)限

          dmpmqcap               顯示處理程序容量和處理程序數(shù)

          dspmqcsv                 顯示命令服務(wù)器狀態(tài)

          dspmqfls                   顯示文件名

          dspmqtrc                   跟蹤MQ輸出(HP-UNIX LINUX Solaris)

          dspmqrtn                   顯示事務(wù)的詳細(xì)信息

          endmqcsv                 停止隊(duì)列管理器上的命令服務(wù)器

          strmqcsv                    啟動(dòng)隊(duì)列管理器上的命令服務(wù)器

          endmqtrc                   停止跟蹤

          rcdmqimg                  向日志寫對(duì)象的映像

          rcmqobj                      根據(jù)日志中的映像重新創(chuàng)建一個(gè)對(duì)象

          rsvmqtrn                     提交或逆序恢復(fù)事務(wù)

           


          posted @ 2007-12-26 17:26 john 閱讀(2600) | 評(píng)論 (0)編輯 收藏

          BCB UTF-8 格式轉(zhuǎn)換

          如果是字串轉(zhuǎn)換.BCB有多個(gè)方法(如TStringConverter,或API的 WideCharToMultiByte/MultiByteToWideChar,VCL的WideCharToString/StringToWideChar等)
          當(dāng)然,BCB本身就支持三種字串,前兩種可自動(dòng)轉(zhuǎn),后一種有函數(shù):
          String x; //GBK
          WideString y; //unicode
          UTF8String z; //utf8

          x=y; //自動(dòng)
          y=x; //自動(dòng)
          z=AnsiToUtf8(x);
          x=Utf8ToAnsi(z);

          posted @ 2007-11-22 18:11 john 閱讀(2693) | 評(píng)論 (1)編輯 收藏

          主站蜘蛛池模板: 新竹市| 长宁区| 太谷县| 盈江县| 根河市| 镇宁| 皮山县| 利辛县| 泸定县| 本溪| 江都市| 大埔县| 理塘县| 资中县| 博白县| 锦屏县| 定结县| 商洛市| 呼图壁县| 陵水| 通渭县| 岳池县| 休宁县| 靖江市| 庆城县| 濮阳县| 河西区| 盐亭县| 巴彦县| 仲巴县| 河津市| 文登市| 鄂尔多斯市| 阳东县| 沙雅县| 吉木萨尔县| 高唐县| 札达县| 高陵县| 福泉市| 天全县|