乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Servlet線程池和EJB對(duì)象池

       moonboat 2009-05-08
      Servlet 線程池 和 EJB 對(duì)象池

      目前所有的B/S系統(tǒng)應(yīng)用可以分為:有狀態(tài)(statefull)和無(wú)狀態(tài)(stateless)兩大類別。有狀態(tài)是指在整個(gè)系統(tǒng)的處理過(guò)程中要保留記住一些信息,而無(wú)狀態(tài)則相反,每次request都是獨(dú)立的連接,不需要在每個(gè)request之間共享數(shù)據(jù)等等。

      對(duì)于這兩種應(yīng)用,通常第一考慮是性能要最優(yōu),性能是我們選擇IT技術(shù)的主要依據(jù)之一。

      為達(dá)到最大化的性能,對(duì)于Java系統(tǒng),以前通常的作法是使用對(duì)象池,這樣節(jié)約對(duì)象生成時(shí)的性能開(kāi)銷,也就是說(shuō)系統(tǒng)啟動(dòng)時(shí),預(yù)先生成一定數(shù)目的對(duì)象實(shí)例在內(nèi)存中,需要使用時(shí),從對(duì)象池中取出實(shí)例,用完,歸還對(duì)象池,對(duì)于有狀態(tài)的應(yīng)用,可以使用相關(guān)持久化(persistence)策略來(lái)保存狀態(tài)。

      下一步,如何并行訪問(wèn)對(duì)象池將是非常重要,java的多線程技術(shù)為我們提供了實(shí)現(xiàn)可能,線程的創(chuàng)建銷毀也是可能非常耗時(shí)的,那么,無(wú)疑象使用對(duì)象池一樣,我們必須使用線程池來(lái)實(shí)現(xiàn)多線程并行計(jì)算的最優(yōu)化。

      使用線程池和對(duì)象池,每次客戶端請(qǐng)求發(fā)生一次就從線程池中借用一個(gè)線程,處理完這個(gè)請(qǐng)求就將線程返回線程池,同樣,使用線程快速的訪問(wèn)對(duì)象,對(duì)象也是從對(duì)象池中借用,用完就還回對(duì)象池。 整個(gè)這樣的架構(gòu)設(shè)計(jì)在性能上是最優(yōu)的。

      有了性能保證,安全機(jī)制、事務(wù)機(jī)制、集群(cluster)技術(shù)也將是選擇IT技術(shù)的主要依據(jù)。

      J2EE就是這樣一個(gè)實(shí)現(xiàn)上述多種考量的綜合標(biāo)準(zhǔn)框架系統(tǒng),在具體使用中,也許我們對(duì)所有這些考量的要求并不都一樣重視,比如:如果純粹追求性能是第一,可以忽視事務(wù)機(jī)制,那么,完整的J2EE技術(shù)也許就并不適合你。

      那么我們先看看J2EE是如何從性能上保證我們的應(yīng)用系統(tǒng)以最快速度運(yùn)行的,也就是說(shuō)J2EE中必然應(yīng)該有上述線程池和對(duì)象池的實(shí)現(xiàn)技術(shù),servlet實(shí)際是基于線程池的更好的線程容器;EJB是基于對(duì)象池的更好的對(duì)象容器。

      看看Servler的架構(gòu)圖:

      當(dāng)client1發(fā)生請(qǐng)求時(shí)servlet容器會(huì)從線程池中分配一個(gè)線程給這個(gè)request.


      再看看EJB的架構(gòu)圖:



      instance Pool作為一個(gè)對(duì)象實(shí)例池,維持著EJB實(shí)例,當(dāng)然這個(gè)對(duì)象池是用生命周期的,簡(jiǎn)單的說(shuō) EJB=對(duì)象池+遠(yuǎn)程對(duì)象池

      但是,EJB還整合了相當(dāng)?shù)钠渌鰪?qiáng)功能,如安全 事務(wù)機(jī)制等,這些對(duì)于一般應(yīng)用都是必需的,當(dāng)然你還必須根據(jù)你的需要來(lái)選擇是否使用J2EE,如果你的應(yīng)用對(duì)安全 事務(wù)機(jī)制沒(méi)有要求,直接使用線程池和對(duì)象池技術(shù)肯定獲得最好的性能。

      所以,根據(jù)Servler和EJB的原理,我們已經(jīng)可以規(guī)劃我們的應(yīng)用,什么可以放在servlet,或什么需要放在EJB中實(shí)現(xiàn):

      線程的本質(zhì)決定了servlet只適合一些輕量的應(yīng)用,如分析簡(jiǎn)單XML文檔, 通過(guò)JDBC訪問(wèn)數(shù)據(jù)源,使用JMS或JavaMail處理簡(jiǎn)單的信息Message,或使用JTS/JTA處理簡(jiǎn)單的事務(wù)機(jī)制,注意這些用詞都是"簡(jiǎn)單"的,一旦復(fù)雜了,就要使用EJB了。

      下面從客戶端和服務(wù)器端兩個(gè)方面來(lái)具體考量這兩個(gè)技術(shù)的使用,這里的客戶端不一定是指最終客戶端,因?yàn)镴2EE是多層結(jié)構(gòu),中間層可能在多個(gè)服務(wù)器上實(shí)現(xiàn),如果一個(gè)服務(wù)器上的服務(wù)是供另外一個(gè)服務(wù)器上的應(yīng)用訪問(wèn)的,那么后者我們也稱為客戶端。

      根據(jù)應(yīng)用的復(fù)雜程度和要求不同,分下列情況:

      1.在WEB層可以實(shí)現(xiàn)的一些應(yīng)用

      如果你的系統(tǒng)沒(méi)有很復(fù)雜的事務(wù)處理,或訪問(wèn)很多企業(yè)原有的資源,那么可以借助javabean這樣的一些Help性質(zhì)的類來(lái)實(shí)現(xiàn)你的應(yīng)用,但是,這樣的方案不是最干凈clean, 最有效efficient, 或最有擴(kuò)展性的scalable。

      否則,將所有核心計(jì)算放置入EJB中。

      2.所有的復(fù)雜商務(wù)計(jì)算核心都在EJB中完成

      如果你的客戶端和服務(wù)器端之間有防火墻,那么目前能夠無(wú)障礙通過(guò)防火墻的協(xié)議只有Http了(Web Service也是基于http就是這個(gè)道理),既然使用http了,而Servlet是基于Http協(xié)議的,那么就需要通過(guò)servlet來(lái)訪問(wèn) EJB,這是我們最普遍的應(yīng)用情況。

      但是,如果你的客戶端和服務(wù)器端可以放置在一個(gè)網(wǎng)絡(luò)內(nèi),之間沒(méi)有防火墻,那么就不必使用Servlet,直接使用Java調(diào)用RMI來(lái)訪問(wèn)EJB,這樣性能是最好的,這時(shí)的Servlet大概只有用于控制Jsp的頁(yè)面的輸出了(MVC模式中的控制作用)。

      如果是非java客戶端,可以通過(guò)CORBA組件來(lái)訪問(wèn)EJB。

      3.如果你的應(yīng)用對(duì)速度要求很高,要求非??欤瑢?duì)于事務(wù)處理等方面幾乎無(wú)要求

      直接使用J2SE,加上線程池和對(duì)象池技術(shù),將會(huì)使你的java系統(tǒng)性能發(fā)揮極致。Jakarta.Apache.org有這兩種技術(shù)的源碼,線程池可以從Servlet容器Tomcat的源碼中發(fā)現(xiàn)。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多