<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    vista

    回顧※展望                     潛心技術(shù)&&不再擱淺

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      12 Posts :: 1 Stories :: 13 Comments :: 0 Trackbacks

    #

    ???一直在為自己找借口,找理由,卻始終不能專(zhuān)心一意下來(lái),一直在為自己辯護(hù): 找個(gè)機(jī)會(huì)重新開(kāi)始!
    ???一直在為自己的QQ找個(gè)新名字,想從頭再來(lái); 一直想為自己的游戲帳號(hào)換個(gè)新名字,想從頭再來(lái);
    ???一直在為自己找一份滿意的工作,想從頭再來(lái); 一直想為自己的懶惰找個(gè)理由- - 過(guò)段時(shí)間,一切從頭開(kāi)始.
    ???現(xiàn)在,我發(fā)現(xiàn),那些全部是借口;
    ???現(xiàn)在,我發(fā)現(xiàn): 時(shí)間不能再浪費(fèi),我也沒(méi)有更多的時(shí)間去等待,去尋找一個(gè)所謂的新的機(jī)會(huì),.
    ???all i? have is now and all i can hold is now, tomorrow is not held by myself.
    ???從現(xiàn)在開(kāi)始, 兩個(gè)字: 專(zhuān)心一意!



    ???自打辭掉第一份程序員的工作, 我始終不能專(zhuān)心下來(lái),認(rèn)真的工作,我承認(rèn),當(dāng)時(shí)是沖動(dòng),辭職那么久以來(lái),
    一直為這件事情反省,我也盡力了,只是我沒(méi)找到明確的方向,再加上自己的性格,容易受外界影響,不夠有耐心,做事不夠堅(jiān)決,導(dǎo)致現(xiàn)在的困難狀況,今天再次和以前同事的聊天,我開(kāi)始認(rèn)識(shí)到,有些事情,過(guò)去了,用不著再掛念,人總是在失敗和挫折中長(zhǎng)大的,有經(jīng)歷,才有沉淀,才有收獲,前世不忘,后事之師.
    ???今天暫且主要回顧下自己的弱點(diǎn):
    ???1,缺乏計(jì)劃性: 不管是為人處世,還是工作學(xué)習(xí), 都缺乏一定的計(jì)劃性和針對(duì)性,由此增長(zhǎng)的是懶惰和懈怠,這是當(dāng)前最大的憂患.
    ???2,缺乏系統(tǒng)性:?主要表現(xiàn)在工作和學(xué)習(xí)中,缺乏一條循序漸進(jìn)的路線,特別在學(xué)習(xí)的時(shí)候,一時(shí)學(xué)這個(gè),一時(shí)學(xué)那個(gè), 基礎(chǔ)沒(méi)打牢,就開(kāi)始學(xué)人家研究高級(jí)技術(shù),到頭來(lái)腳跟不穩(wěn),難免跌倒.
    ???3,缺乏警惕性: 條件一穩(wěn)定,就表現(xiàn)出懈怠的情緒, 完全忘記了"生于安樂(lè),死于憂患"的歷史名句, 沒(méi)有貫徹不斷學(xué)習(xí)和提高的思想,路線,

    ???以上三點(diǎn)是總結(jié)的比較深刻的三點(diǎn), 這段時(shí)間一定多花時(shí)間, 看怎么設(shè)計(jì)一條路子,才可以逐漸的扭轉(zhuǎn)這種狀況, 同時(shí)慢慢轉(zhuǎn)入正軌, 重新找回當(dāng)初的自己.
    ???一直在想, 我不能流于世俗, 流于膚淺, 我應(yīng)該擔(dān)當(dāng)?shù)氖遣煌踩说呢?zé)任感和緊迫感, 今天我跌到最低谷,不要緊,沒(méi)關(guān)系, 我還年輕,?我還有很多機(jī)會(huì), 我要緊握這種緊迫感和責(zé)任感以及這份壓力, 更精彩的活下去.
    ???打點(diǎn)好行裝,?該上路了.


    ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????2006.12.27凌晨?
    ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????diego.liu

    posted @ 2006-12-17 00:18 Vista 閱讀(624) | 評(píng)論 (1)編輯 收藏

    ??????前些天,也就是6號(hào)辭職了,這些天只在中博和網(wǎng)信聯(lián)動(dòng)面試了下,投了很多簡(jiǎn)歷,而且簡(jiǎn)歷也被閱覽了很多次,但很少接到電話,呆在家里不上班的日子,真是特快,心里沒(méi)什么底,有點(diǎn)后悔辭職的沖動(dòng),不會(huì)也沒(méi)什么,機(jī)會(huì)還是有的,況且自己還是相信自己的實(shí)力,畢竟有一年的工作經(jīng)驗(yàn),不過(guò)這些天還是在努力地學(xué)習(xí),把基礎(chǔ)打牢再說(shuō).
    ??????華為一般是周五面試,其實(shí)我?guī)缀鯖](méi)去華為面試,有幾次華為打電話過(guò)來(lái),我恰好有其他的面試,所以去不了,這次反正閑著也是閑著,所以,在上午接到電話后,下午坐公車(chē)去了.
    ??????我住的地方去華為基地比較遠(yuǎn),坐公車(chē)都要5元RMB,下了車(chē),打了電話,經(jīng)過(guò)電話指點(diǎn),終于找到了面試地點(diǎn),外面好冷,進(jìn)去就不怎么冷了,沒(méi)說(shuō)別的,拿起試卷就開(kāi)始做題.
    ??????題目的難度在我預(yù)料之中,依我的水平也就拿個(gè)70分左右的樣子(一般的公司我可以拿80以上,^_^),
    令我意外的是,筆試完后,面試技術(shù)的考官并沒(méi)怎么看我的答案,而是直接和我聊起技術(shù)方面的東西,問(wèn)的很詳細(xì),特別是問(wèn)到具體做過(guò)的項(xiàng)目時(shí),問(wèn)的比較仔細(xì),要不是我真的做過(guò),非穿幫不可,呵呵,問(wèn)了項(xiàng)目,就開(kāi)始問(wèn)技術(shù),只要我簡(jiǎn)歷上寫(xiě)的技術(shù),他都會(huì)問(wèn)的很仔細(xì),有幾個(gè)地方,我記得不是很清楚,也就打哈哈過(guò)去,他也沒(méi)說(shuō)什么,就這樣問(wèn)了大概一個(gè)多鐘頭,他才說(shuō),好了,你在這等下,就走了,我好不容易許了一口氣,心里也沒(méi)什么底,等了10分鐘的樣子,來(lái)了一個(gè)領(lǐng)導(dǎo)模樣的人物,拿了本筆記本,就坐在我旁邊,和我聊起了一些看似瑣碎的東西,其實(shí)在暗里考察的問(wèn)題,總體感覺(jué)還過(guò)的去,完了,他說(shuō),我考慮下,就走了,出去的時(shí)候我和面試我技術(shù)的考官一起出去,他問(wèn)我感覺(jué)怎么樣,我說(shuō)還行,他說(shuō)過(guò)幾天會(huì)電話通知我,呵呵,當(dāng)時(shí)應(yīng)該問(wèn)下他機(jī)會(huì)大不,可惜了,現(xiàn)在也只好在家等結(jié)果了,不過(guò)中博那邊如果要我馬上上班的話,我還真不好抉擇,因?yàn)橹胁┠沁吺亲鐾獍?而且要出差,雖然薪資有點(diǎn)誘人,但畢竟感覺(jué)沒(méi)進(jìn)華為好.
    ??????失業(yè)的日子的確比較枯燥,閑著沒(méi)事就隨便寫(xiě)寫(xiě) 了,呵呵,很晚了,要睡了....

    posted @ 2006-12-15 01:19 Vista 閱讀(2540) | 評(píng)論 (2)編輯 收藏

         摘要: 通過(guò)分析SQL語(yǔ)句的執(zhí)行計(jì)劃優(yōu)化SQL(總結(jié)) 做DBA快7年了,中間感悟很多。在DBA的日常工作中,調(diào)整個(gè)別性能較差的SQL語(yǔ)句時(shí)一項(xiàng)富有挑戰(zhàn)性的工作。其中的關(guān)鍵在于如何得到SQL語(yǔ)句的執(zhí)行計(jì)劃和如何從SQL語(yǔ)句的執(zhí)行計(jì)劃中發(fā)現(xiàn)問(wèn)題。總是想將日常經(jīng)驗(yàn)的點(diǎn)點(diǎn)滴滴總結(jié)一下,但是直到最近才下定決心,總共花了3個(gè)周末時(shí)間,才將其整理成冊(cè),便于自己日常工作。不好意思獨(dú)享,所以將其貼出...  閱讀全文
    posted @ 2006-12-13 19:32 Vista 閱讀(3460) | 評(píng)論 (0)編輯 收藏

    dom4j(Version 1.6.1)快速入門(mén)

    Parsing XML

    或許你想要做的第一件事情就是解析一個(gè)某種類(lèi)型的XML文檔,用dom4j很容易做到。請(qǐng)看下面的示范代碼:

    import java.net.URL;

    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.io.SAXReader;

    public class Foo {

    public Document parse(URL url) throws DocumentException {
    SAXReader reader = new SAXReader();
    Document document = reader.read(url);
    return document;
    }
    }

    使用迭代器(Iterators)

    我們可以通過(guò)多種方法來(lái)操作XML文檔,這些方法返回java里標(biāo)準(zhǔn)的迭代器(Iterators)。例如:

    public void bar(Document document) throws DocumentException {
    Element root = document.getRootElement();
    //迭代根元素下面的所有子元素
    for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
    Element element = (Element) i.next();
    //處理代碼
    }

    //迭代根元素下面名稱(chēng)為"foo"的子元素
    for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {
    Element foo = (Element) i.next();
    //處理代碼
    }

    // 迭代根元素的屬性attributes)元素
    for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
    Attribute attribute = (Attribute) i.next();
    // do something
    }
    }

    強(qiáng)大的XPath導(dǎo)航

    在dom4j中XPath可以表示出在XML樹(shù)狀結(jié)構(gòu)中的Document或者任意的節(jié)點(diǎn)(Node)(例如:Attribute,Element 或者 ProcessingInstruction等)。它可以使在文檔中復(fù)雜的操作僅通過(guò)一行代碼就可以完成。例如:

    public void bar(Document document) {
    List list = document.selectNodes( "http://foo/bar" );

    Node node = document.selectSingleNode( "http://foo/bar/author" );

    String name = node.valueOf( "@name" );
    }

    如果你想得到一個(gè)XHTML文檔中的所有超文本鏈接(hypertext links)你可以使用下面的代碼:

    public void findLinks(Document document) throws DocumentException {

    List list = document.selectNodes( "http://a/@href" );

    for (Iterator iter = list.iterator(); iter.hasNext(); ) {
    Attribute attribute = (Attribute) iter.next();
    String url = attribute.getValue();
    }
    }

    如果你需要關(guān)于XPath語(yǔ)言的任何幫助,我們強(qiáng)烈推薦這個(gè)站點(diǎn)Zvon tutorial他會(huì)通過(guò)一個(gè)一個(gè)的例子引導(dǎo)你學(xué)習(xí)。

    快速遍歷(Fast Looping)


    如果你不得不遍歷一個(gè)非常大的XML文檔,然后才去執(zhí)行,我們建議你使用快速遍歷方法(fast looping method),它可以避免為每一個(gè)循環(huán)的節(jié)點(diǎn)創(chuàng)建一個(gè)迭代器對(duì)象,如下所示:

    public void treeWalk(Document document) {
    treeWalk( document.getRootElement() );
    }

    public void treeWalk(Element element) {
    for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
    Node node = element.node(i);
    if ( node instanceof Element ) {
    treeWalk( (Element) node );
    }
    else {
    // do something....
    }
    }
    }

    生成一個(gè)新的XML文檔對(duì)象

    在dom4j中你可能常常希望用程序生成一個(gè)XML文檔對(duì)象,下面的程序?yàn)槟氵M(jìn)行了示范:

    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;

    public class Foo {

    public Document createDocument() {
    Document document = DocumentHelper.createDocument();
    Element root = document.addElement( "root" );

    Element author1 = root.addElement( "author" )
    .addAttribute( "name", "James" )
    .addAttribute( "location", "UK" )
    .addText( "James Strachan" );

    Element author2 = root.addElement( "author" )
    .addAttribute( "name", "Bob" )
    .addAttribute( "location", "US" )
    .addText( "Bob McWhirter" );

    return document;
    }
    }

    將一個(gè)文檔對(duì)象寫(xiě)入文件中

    將一個(gè)文檔對(duì)象寫(xiě)入Writer對(duì)象的一個(gè)簡(jiǎn)單快速的途徑是通過(guò)write()方法。

    FileWriter out = new FileWriter( "foo.xml" );
    document.write( out );

    如果你想改變輸出文件的排版格式,比如你想要一個(gè)漂亮的格式或者是一個(gè)緊湊的格式,或者你想用Writer 對(duì)象或者OutputStream 對(duì)象來(lái)操作,那么你可以使用XMLWriter 類(lèi)。

    import org.dom4j.Document;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.XMLWriter;

    public class Foo {

    public void write(Document document) throws IOException {

    // 寫(xiě)入文件
    XMLWriter writer = new XMLWriter(
    new FileWriter( "output.xml" )
    );
    writer.write( document );
    writer.close();


    // 以一種優(yōu)雅的格式寫(xiě)入System.out對(duì)象
    OutputFormat format = OutputFormat.createPrettyPrint();
    writer = new XMLWriter( System.out, format );
    writer.write( document );

    // 以一種緊湊的格式寫(xiě)入System.out對(duì)象
    format = OutputFormat.createCompactFormat();
    writer = new XMLWriter( System.out, format );
    writer.write( document );
    }
    }

    轉(zhuǎn)化為字符串,或者從字符串轉(zhuǎn)化

    如果你有一個(gè)文檔(Document)對(duì)象或者任何一個(gè)節(jié)點(diǎn)(Node)對(duì)象的引用(reference),象屬性(Attribute)或者元素(Element),你可以通過(guò)asXML()方法把它轉(zhuǎn)化為一個(gè)默認(rèn)的XML字符串:

    Document document = ...;
    String text = document.asXML();

    如果你有一些XML內(nèi)容的字符串表示,你可以通過(guò)DocumentHelper.parseText()方法將它重新轉(zhuǎn)化為文檔(Document)對(duì)象:

    String text = "James";
    Document document = DocumentHelper.parseText(text);

    通過(guò)XSLT樣式化文檔(Document)


    使用Sun公司提供的JAXP API將XSLT 應(yīng)用到文檔(Document)上是很簡(jiǎn)單的。它允許你使用任何的XSLT引擎(例如:Xalan或SAXON等)來(lái)開(kāi)發(fā)。下面是一個(gè)使用JAXP創(chuàng)建一個(gè)轉(zhuǎn)化器(transformer),然后將它應(yīng)用到文檔(Document)上的例子:

    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;

    import org.dom4j.Document;
    import org.dom4j.io.DocumentResult;
    import org.dom4j.io.DocumentSource;

    public class Foo {

    public Document styleDocument(
    Document document,
    String stylesheet
    ) throws Exception {

    // 使用 JAXP 加載轉(zhuǎn)化器
    TransformerFactory factory = TransformerFactory.newInstance();
    Transformer transformer = factory.newTransformer(
    new StreamSource( stylesheet )
    );

    // 現(xiàn)在來(lái)樣式化一個(gè)文檔(Document)
    DocumentSource source = new DocumentSource( document );
    DocumentResult result = new DocumentResult();
    transformer.transform( source, result );

    // 返回經(jīng)過(guò)樣式化的文檔(Document)
    Document transformedDoc = result.getDocument();
    return transformedDoc;
    }
    }

    原文地址
    dom4j下載地址

    posted @ 2006-12-09 22:41 Vista 閱讀(407) | 評(píng)論 (0)編輯 收藏

         摘要: 主  題: ? OR...  閱讀全文
    posted @ 2006-12-06 19:10 Vista 閱讀(421) | 評(píng)論 (0)編輯 收藏

    ?
    Huihoo - Enterprise Open Source

    ?Last Modified: 2006.02.23

    JBoss 4.0.2集群指南


    (來(lái)源:http://www.javaresearch.org )


    bromon原創(chuàng)?請(qǐng)尊重版權(quán)

    ????本文主要講解JBoss?cluster的基本知識(shí)以及簡(jiǎn)單的配置方法,其間涉及了一些jboss的補(bǔ)充知識(shí)。

    一、材料準(zhǔn)備:

    1、????JBoss?4.0.2????

    JBoss各個(gè)版本之間差異比較大,即使同為jboss?4.x的版本,內(nèi)部組件的版本也不一致,所以請(qǐng)盡量使用同一版本的server。目前已經(jīng)證明可以配置cluster的版本多為jboss?3.2.6和jboss?4.0.2。

    2、????Apache?2.0.54

    3、????Apache?mod_jk-1-2-13-apache-2-0-54

    二、安裝:

    1、????jboss4.0.2與apache?2.0.54的安裝請(qǐng)自行搞定。假設(shè)jboss的安裝目錄為%jboss%,apache安裝目錄為%apache%。

    2、????mod_jk的安裝。

    從apache.org獲得文件mod_jk-1-2-13-apache-2-0-54.so,將該文件拷貝到%apache%\?modules。

    三、jboss?cluster入門(mén)

    ????Jboss?支持如下類(lèi)型的cluster:EJB、web、JNDI、JMS,我們主要了解web?cluster。
    Web?cluster實(shí)際上可以劃分為兩個(gè)話題:負(fù)載均衡?(load?balance)?和狀態(tài)同步。它們是互相獨(dú)立的,單獨(dú)配置。

    負(fù)載均衡的概念比較簡(jiǎn)單,重要的是負(fù)載均衡的粒度。可以選擇針對(duì)每個(gè)request的均衡,或者是針對(duì)每個(gè)用戶(hù)的均衡。選擇不同的粒度,需要不同的狀態(tài)同步方式。

    1、基于request的負(fù)載均衡

    ????該種方式下,負(fù)載均衡器?(load?balancer)會(huì)根據(jù)各個(gè)node的狀況,把每個(gè)http?request進(jìn)行分發(fā)。使用這樣的均衡策略,就必須在多個(gè)node之間復(fù)制用戶(hù)的session,實(shí)時(shí)保持整個(gè)cluster的用戶(hù)狀態(tài)同步,這種操作被稱(chēng)為session復(fù)制(session?replication)。Jboss的實(shí)現(xiàn)原理是使用攔截器(interceptor),根據(jù)用戶(hù)的同步策略攔截request,做同步處理后再交給server產(chǎn)生響應(yīng)。

    ????該方法的優(yōu)點(diǎn)是客戶(hù)不會(huì)被綁定都具體的node,只要還有一個(gè)node存活,用戶(hù)狀態(tài)都不會(huì)丟失,cluster都能夠繼續(xù)工作。缺點(diǎn)是node之間通信頻繁,響應(yīng)速度有影響,多并發(fā)、高頻操作的情況下性能下降比較厲害。

    2、????基于用戶(hù)的負(fù)載均衡

    該種方式下,當(dāng)用戶(hù)發(fā)出第一個(gè)request后,負(fù)載均衡器動(dòng)態(tài)的把該用戶(hù)分配到某個(gè)節(jié)點(diǎn),并記錄該節(jié)點(diǎn)的jvm路由,以后該用戶(hù)的所有request都會(huì)被綁定這個(gè)jvm路由,用戶(hù)只會(huì)與該server發(fā)生交互,這種策略被稱(chēng)為粘性session(session?sticky)。

    該方法的優(yōu)點(diǎn)是響應(yīng)速度快,多個(gè)節(jié)點(diǎn)之間無(wú)須通信。缺點(diǎn)也很明顯,某個(gè)node死掉以后,它負(fù)責(zé)的所有用戶(hù)都會(huì)丟失session。

    四、實(shí)戰(zhàn)

    1、負(fù)載均衡

    ????Jboss的負(fù)載均衡目前有兩種方案,一是使用apache的mod_jk,二是使用jboss自帶的負(fù)載均衡模塊。下面分別講解這兩種配置。

    mod_jk的配置

    1、????請(qǐng)確認(rèn)%apache%\modules下已經(jīng)有mod_jk-1-2-13-apache-2-0-54.so文件。
    2、????修改%apache%\conf\httpd.conf????在文件末尾添加:????Include?conf/mod_jk2.conf
    3、????在%apache%\conf下新建文件????mod_jk2.conf????????文件內(nèi)容如下:

    #?Load?mod_jk?module.?Specify?the?filename
    #?of?the?mod_jk?lib?you’ve?downloaded?and
    #?installed?in?the?previous?section
    LoadModule?jk_module?modules/mod_jk-1-2-13-apache-2-0-54.so
    #?Where?to?find?workers.properties
    JkWorkersFile?conf/workers2.properties
    #?Where?to?put?jk?logs
    JkLogFile?logs/mod_jk.log
    #?Set?the?jk?log?level?[debug/error/info]
    JkLogLevel?info
    #?Select?the?log?format
    JkLogStampFormat?"[%a?%b?%d?%H:%M:%S?%Y]?"
    #?JkOptions?indicate?to?send?SSL?KEY?SIZE,
    JkOptions?+ForwardKeySize?+ForwardURICompat?-ForwardDirectories
    #?JkRequestLogFormat?set?the?request?format
    JkRequestLogFormat?"%w?%V?%T"
    JkMount?/*?loadbalancer

    其中JkMount?/*?loadbalancer的意思是,把所有的請(qǐng)求都發(fā)給loadbalancer處理。可以通過(guò)修改url來(lái)控制發(fā)送某些request。
    4、在%apache%\conf下新建文件????workers2.properties????????其內(nèi)容為:

    worker.list=loadbalancer,server1,server2

    #?Define?the?first?node...
    worker.server1.port=8009
    worker.server1.host=172.16.0.116
    worker.server1.type=ajp13
    worker.server1.lbfactor=1
    worker.server1.local_worker=1
    worker.server1.cachesize=10

    #?Define?the?first?node...
    worker.server2.port=8009
    worker.server2.host=172.16.32.88
    worker.server2.type=ajp13
    worker.server2.lbfactor=1
    worker.server2.local_worker=1
    worker.server2.cachesize=10

    #?Now?we?define?the?load-balancing?behaviour
    worker.loadbalancer.type=lb
    worker.loadbalancer.balanced_workers=server1,server2
    worker.loadbalancer.sticky_session=1

    其中對(duì)于node的命名規(guī)則是worker.節(jié)點(diǎn)名.xxxx。所以上述文件定義了兩個(gè)節(jié)點(diǎn):server1和server2。8009端口是jboss默認(rèn)的ajp端口,另外需要注意的是worker.server2.lbfactor參數(shù),它是節(jié)點(diǎn)的負(fù)載加權(quán),它的值越大,獲得負(fù)載的機(jī)會(huì)就越大。可以根據(jù)node的硬件性能進(jìn)行調(diào)整。worker.loadbalancer.sticky_session參數(shù)是指定是否使用粘性session。

    所有需要負(fù)載均衡的節(jié)點(diǎn),都必須在worker.loadbalancer.balanced_workers參數(shù)中列舉出來(lái)。

    請(qǐng)記住所有node的名稱(chēng)和它對(duì)應(yīng)著哪臺(tái)機(jī)器,后面的配置中會(huì)使用。

    嘗試啟動(dòng)apache:%apache\bin\apache.exe,正常情況下沒(méi)有任何提示。如果你使用的jk是2.0的,那么配置文件的寫(xiě)法完全不同,由于mod_jk2已經(jīng)停止開(kāi)發(fā),所以apache并沒(méi)有提供任何講解,對(duì)于配置文件的編寫(xiě)也沒(méi)有任何指導(dǎo)。

    Jboss自帶均衡器的配置

    ????將文件夾%jboss%\docs\examples\varia\loadbalancer\loadbalancer.sar拷貝到%jboss%\server\all\deploy下,并且修改loadbalancer.sar\loadbalancer.sar\META-INF\jboss-service.xml,在<host>標(biāo)簽中類(lèi)出所有節(jié)點(diǎn),在<sticky-session>標(biāo)簽中指定是否使用粘性session。配置完成。

    ????該均衡器的缺點(diǎn)是負(fù)載能力相對(duì)不高,配置參數(shù)太少,比如無(wú)法指定不同節(jié)點(diǎn)的負(fù)載加權(quán),所以后面都以mod_jk為例,不再講解jboss自帶的負(fù)載均衡器的內(nèi)容。
    ?

    ????負(fù)載均衡的配置基本完成,啟動(dòng)jboss,其中過(guò)程中會(huì)列出DefaultPatition中所有的節(jié)點(diǎn):
    run.bat?-c?all

    ?

    任何節(jié)點(diǎn)的關(guān)閉與啟動(dòng)都會(huì)在cluster中廣播,比如加如一個(gè)新節(jié)點(diǎn)后,其他節(jié)點(diǎn)會(huì)得到以下提示:
    ?


    2、session?sticky配置

    ????apache應(yīng)該會(huì)以粘性session的方式分發(fā)請(qǐng)求。部署一個(gè)應(yīng)用測(cè)試一下,你會(huì)發(fā)現(xiàn)粘性session沒(méi)有起作用。因?yàn)槲覀冞€沒(méi)有給jboss配置jvm路由(?jvmRoute),apache就無(wú)法知道究竟哪些session是屬于哪個(gè)節(jié)點(diǎn)的。我們繼續(xù)往下:

    ????修改server1機(jī)器上的jboss的配置文件:%jboss%\server\all\deploy\jbossweb-tomcat55.sar\?META-INF\?jboss-service.xml

    ????在110行有:<attribute?name="UseJK">false</attribute>,將它改為true。值得注意的是在這行標(biāo)簽上面有一段注釋?zhuān)竽阍趕erver.xml中必須有:
    Engine?name="jboss.web"?jmvRoute="Node1"?defaultHost="localhost"

    ????請(qǐng)注意這里有一個(gè)氣死人不償命的小bug,jboss的官方文檔把?jvmRoute寫(xiě)成了jmvRoute,就是v和m兩個(gè)字母的顛倒讓我郁悶了三天,翻遍了jboss.com和theserverside.com。都是直接拷貝的錯(cuò),吐血吐到脫水啊。

    ????下面需要修改server1上的%jboss%\server\all\deploy\jbossweb-tomcat55.sar\?server.xml,在32行左右有:

    <Engine?name="jboss.web"?defaultHost="localhost">

    給它增加一個(gè)jvmRoute屬性:

    <Engine?jvmRoute="server1"?name="jboss.web"?defaultHost="localhost">

    請(qǐng)注意,jvmRoute的值必須和mod_jk中的節(jié)點(diǎn)名字正確對(duì)應(yīng),否則無(wú)法正確路由。Cluster中的所有節(jié)點(diǎn)都應(yīng)該做相應(yīng)的配置。

    Jboss的配置完成了,下面需要在你的web應(yīng)用中修改配置文件,讓它支持集群。

    在WEB-INF\web.xml中加入屬性:????<distributable/>

    Ok,基于用戶(hù)的cluster完成了,每個(gè)用戶(hù)會(huì)綁定都某個(gè)節(jié)點(diǎn)上進(jìn)行交互。這種綁定是如何完成的呢?原來(lái)apache把客戶(hù)分發(fā)到節(jié)點(diǎn)后,該節(jié)點(diǎn)會(huì)在用戶(hù)的session?id后面加上此節(jié)點(diǎn)的路由名稱(chēng),變成這個(gè)樣子:

    Efdfxxd98daja87daj76da2dka**,server1

    ????有了這個(gè)標(biāo)志,就能分辨該session屬于哪個(gè)節(jié)點(diǎn)。

    3、session?replication配置

    ????下面要做的是基于request的cluster,也就讓各個(gè)節(jié)點(diǎn)之間互相復(fù)制session狀態(tài)。有兩種復(fù)制模式,同步與異步。使用同步的方式,jboss會(huì)把session復(fù)制的操作和對(duì)request的響應(yīng)放到一個(gè)應(yīng)用事務(wù)(application?transaction),session復(fù)制完成后才去處理request。異步復(fù)制則發(fā)送session復(fù)制的消息后馬上處理request,session復(fù)制則會(huì)稍有延遲。但是在多框架的web頁(yè)面中,這樣的集群方式會(huì)有問(wèn)題。由于frame在同一時(shí)間發(fā)出多個(gè)request,會(huì)造成一些混亂,這也是采用基于用戶(hù)的集群方式的原因之一。

    ????JBoss?4.0.2中采用了Jboss?cache來(lái)實(shí)現(xiàn)session復(fù)制,實(shí)際上就是一個(gè)分布式緩存,由于session?id中包含了jvm?route,所以能夠分辨session屬于哪個(gè)節(jié)點(diǎn)。Session的更新類(lèi)似于hibernate中的樂(lè)觀鎖,有了更新之后就讓session的版本號(hào)增加,其他節(jié)點(diǎn)通過(guò)對(duì)比版本號(hào)來(lái)決定是否同步session狀態(tài)。

    ????配置session?replication首先需要編輯
    %jboss%?server\all\deploy\jbossweb-tomcat55.sar\META-INF\?jboss-service.xml,88行左右有:
    <attribute?name="SnapshotMode">instant</attribute>
    這就是剛才提到的復(fù)制模式,instant為立即復(fù)制,如果設(shè)為interval?那么系統(tǒng)會(huì)在延遲一段時(shí)間再進(jìn)行復(fù)制,時(shí)間長(zhǎng)度在<attribute?name="SnapshotInterval">2000</attribute>中指定,單位是毫秒。

    單獨(dú)配置這一個(gè)地方還不夠,在%jboss%?server\all\deploy\?tc5-cluster-service.xml中有:

    <attribute?name="CacheMode">REPL_ASYNC</attribute>

    這里才真正決定復(fù)制是同步的還是異步的,可以指定為REPL_ASYNC(異步)或者REPL_SYNC(同步)。

    在這個(gè)文件下面一點(diǎn),還有一個(gè)config標(biāo)簽,里面指定了各個(gè)節(jié)點(diǎn)在進(jìn)行session復(fù)制的時(shí)候如何通信,有udp和tcp兩種可選,如果使用udp方式,那么應(yīng)該將udp的lookback屬性指定為true,因?yàn)閣indows上有一個(gè)叫做media?sense的東西會(huì)影響udp?multicast。注意如果你不了解multi?address的ip規(guī)則,請(qǐng)不要隨便修改mcast_addr的值。如果采用tcp方式的話,應(yīng)該指定bind_addr的值為本機(jī)ip,并且在TCPPING標(biāo)簽的initial_hosts屬性中列出所有節(jié)點(diǎn),格式是”機(jī)器名[端口號(hào)]”,比如在我們的例子中,就應(yīng)該這樣配置tcp(以其中一個(gè)節(jié)點(diǎn)為例):

    <config>
    <TCP?bind_addr="172.16.0.116"?start_port="7810"?loopback="true"/>
    <TCPPING?initial_hosts="172.16.0.116[7810],172.16.32.88[7810]"?port_range="3"?timeout="3500"
    num_initial_members="3"?up_thread="true"?down_thread="true"/>
    <MERGE2?min_interval="5000"?max_interval="10000"/>
    <FD?shun="true"?timeout="2500"?max_tries="5"?up_thread="true"?down_thread="true"?/>
    <VERIFY_SUSPECT?timeout="1500"?down_thread="false"?up_thread="false"?/>
    ????<pbcast.NAKACK?down_thread="true"?up_thread="true"?gc_lag="100"
    ?????????retransmit_timeout="3000"/>
    ????<pbcast.STABLE?desired_avg_gossip="20000"?down_thread="false"?up_thread="false"?/>
    ????<pbcast.GMS?join_timeout="5000"?join_retry_timeout="2000"?shun="false"
    print_local_addr="true"?down_thread="true"?up_thread="true"/>
    <pbcast.STATE_TRANSFER?up_thread="true"?down_thread="true"/>
    </config>

    ????JBoss的clustering版主建議盡量使用udp。不過(guò)在Sobey內(nèi)部,建議使用tcp方式,經(jīng)測(cè)試可能有不明物體在影響udp通信,導(dǎo)致Timeout異常。

    ????在%jboss%\?server\all\deploy\?cluster-service.xml中也有關(guān)于udp和tcp的配置信息,在4.0以前版本的jboss中,會(huì)以這個(gè)文件為主配置,4.0以后都以tc5-cluster-service.xml為主配置。

    ????Jboss的配置完成了,最后需要在web應(yīng)用中增加配置信息,控制session復(fù)制的粒度。在WEB-INF\????jboss-web.xml中增加以下內(nèi)容:

    <replication-config>
    ????<replication-trigger>SET_AND_NON_PRIMITIVE_GET</replication-trigger>
    ????<replication-granularity>SESSION</replication-granularity>
    ??</replication-config>

    其中replication-trigger是指定哪些操作引發(fā)session的版本更新,它的取值有:

    SET_AND_GET????????
    SET_AND_NON_PRIMITIVE_GET
    SET

    replication-granularity是復(fù)制粒度,可以取session或attribute。如果取為attribute有可能導(dǎo)致復(fù)制失敗,這是目前版本的jboss?cache的一個(gè)bug,等待修正。

    部署項(xiàng)目,測(cè)試,如果配置沒(méi)有問(wèn)題,可以在%jboss%\0server\all\log\server.log中發(fā)現(xiàn)類(lèi)似于這樣的信息:

    DEBUG?[org.jboss.web.tomcat.tc5.session.JBossCacheManager]?check?to?see?if?needs?to?store?and?replicate?session?with?id?Im9-qpuaXppMS+xXwE3M+Q**.server1?

    DEBUG?[org.jboss.web.tomcat.tc5.session.ClusteredSession]?processSessionRepl():?session?is?dirty.?Will?increment?version?from:?20?and?replicate.

    ????Session?replication配置的成功率比較低,情況也很復(fù)雜,請(qǐng)仔細(xì)操作。

    五、分布式熱部署(distributable?hot?deploy)

    ????在一個(gè)節(jié)點(diǎn)很多的cluster中,如果部署應(yīng)用的時(shí)候必須把程序文件拷貝到每個(gè)機(jī)器上的話,那實(shí)在太愚蠢了,幸好通過(guò)all啟動(dòng)的jboss自動(dòng)支持分布式熱部署。把支持cluster的應(yīng)用(通常需要打包成war文件),放到%jboss%\server\all\farm下,那么處于同一cluster中的其他節(jié)點(diǎn)會(huì)自動(dòng)下載并且部署,jboss把這個(gè)稱(chēng)為Farm?deploy。如下圖:



    End?2005-7-11?Released?by?bromon

    ? 2006 Huihoo
    posted @ 2006-12-05 09:30 Vista 閱讀(1037) | 評(píng)論 (0)編輯 收藏

         摘要: JS正則表達(dá)式詳解[收藏] ...  閱讀全文
    posted @ 2006-11-10 09:58 Vista 閱讀(248) | 評(píng)論 (0)編輯 收藏

    這個(gè)知識(shí)點(diǎn)不多,但屬于java的高級(jí)技術(shù),相信熟悉SPRING的朋友對(duì)它一定不會(huì)陌生,今天花了點(diǎn)時(shí)間對(duì)java的動(dòng)態(tài)代理進(jìn)行了學(xué)習(xí),感覺(jué)還可以,因?yàn)槭墙Y(jié)合spring來(lái)看的,所以練習(xí)的是面向接口的代理模式,但應(yīng)該也是最常用的動(dòng)態(tài)代理..,廢話不多說(shuō),看例子:
    package?org.diego;

    public?interface?Ip?{
    ????
    public?void?say();
    }


    實(shí)現(xiàn)類(lèi):
    package?org.diego;

    public?class?P?implements?Ip{
    ????
    public?void?say(){
    ????????System.out.println(
    "hello");
    ????}

    }


    代理類(lèi):

    package?org.diego;

    import?java.lang.reflect.InvocationHandler;
    import?java.lang.reflect.Method;

    class?TraceHandler?implements?InvocationHandler?{
    ????
    private?Object?target;

    ????
    public?TraceHandler(Object?t)?{
    ????????target?
    =?t;
    ????}


    ????
    public?Object?invoke(Object?proxy,?Method?method,?Object[]?args)?throws?Throwable?{
    ????????
    //?TODO?Auto-generated?method?stub
    ????????if?(method.getName().startsWith("say"))?{
    ????????????System.out.println(
    "hello,before?method");
    ????????????Object?result?
    =?method.invoke(target,?args);
    ????????????System.out.println(
    "World,after?method");
    ????????????
    return?result;
    ????????}

    ????????
    return?null;
    ????????
    ????}

    }


    測(cè)試類(lèi):
    /*
    ?*?@author?diego.liu
    ?*?@contact?vista.lbw@gmail.com
    ?*?@date?2006-11-7
    ?
    */

    package?org.diego;

    import?java.lang.reflect.InvocationHandler;
    import?java.lang.reflect.Proxy;

    public?class?ProxyTest?{

    ????
    public?static?void?main(String[]?args)?{
    ????????P?test?
    =?new?P();
    ????????InvocationHandler?handler?
    =?new?TraceHandler(test);
    ????????Ip?proxy?
    =?(Ip)?Proxy.newProxyInstance(test.getClass().getClassLoader(),?test.getClass().getInterfaces(),
    ????????????????handler);
    ????????proxy.say();
    ????}


    }


    已經(jīng)測(cè)試可以運(yùn)行,歡迎拍磚。。。
    posted @ 2006-11-07 18:14 Vista 閱讀(1663) | 評(píng)論 (0)編輯 收藏

         摘要: 雖然考慮到讀取文件會(huì)影響性能,最終沒(méi)有采用這種方式,而是取數(shù)據(jù)庫(kù),但總結(jié)出來(lái)以后說(shuō)不定用的著,呵呵.1,下載dom4j2,寫(xiě)xml的代碼public?class?AddPictureAction?extends?BaseAction?{????public?ActionForward?execute(ActionMapping?mapping,?ActionForm?form,?HttpServl...  閱讀全文
    posted @ 2006-10-31 17:10 Vista 閱讀(1446) | 評(píng)論 (0)編輯 收藏

         摘要: 這是一個(gè)小東東,有的時(shí)候用的著,呵呵。<script?language="javascript"?>????function?leftToRight(aa,bb,cc){????????var?selected;????????var?b?=?false;????????var?bLength?=?bb.length;????????for(var?i=0;?i?<?aa.len...  閱讀全文
    posted @ 2006-10-13 20:39 Vista 閱讀(1841) | 評(píng)論 (10)編輯 收藏

    僅列出標(biāo)題
    共2頁(yè): 1 2 下一頁(yè) 
    主站蜘蛛池模板: 男人的好免费观看在线视频| 1024免费福利永久观看网站| 国产成人精品一区二区三区免费 | 亚洲一线产区二线产区精华| 久久综合久久综合亚洲| 在线91精品亚洲网站精品成人| h视频免费高清在线观看| 成人性生交大片免费看好| xxxx日本免费| 国产免费人成视频在线观看| 久久亚洲国产成人精品无码区| 亚洲国产一区国产亚洲| 一本天堂ⅴ无码亚洲道久久| 免费在线观看一区| 免费国产黄网站在线观看| 最近中文字幕免费mv视频8| 国产成人精品曰本亚洲79ren| 亚洲国产综合精品中文第一区| 亚洲人成色99999在线观看| 国产精品免费看久久久香蕉| 2015日韩永久免费视频播放| 在线免费观看韩国a视频| 亚洲中文字幕无码一区| 2017亚洲男人天堂一| 一区二区免费在线观看| 日本免费中文字幕| 全免费一级午夜毛片| 国产亚洲精品自在久久| 亚洲乱码日产精品BD在线观看| 日韩色视频一区二区三区亚洲 | 成人免费一区二区三区 | 一级特黄aa毛片免费观看| 日韩精品视频免费在线观看| 精品亚洲综合在线第一区| 亚洲熟女精品中文字幕| 久久免费视频一区| 成人免费午间影院在线观看| 亚洲第一极品精品无码久久| 亚洲av成人中文无码专区| 无码日韩精品一区二区免费暖暖| 国产网站在线免费观看|