黑武士的領(lǐng)地
          ——黑武士是反微軟的JAVA陣營的流氓JAVA程序員
          posts - 26,comments - 4,trackbacks - 0
           隨著軟件系統(tǒng)的規(guī)模和復(fù)雜性的增加 ,軟件體系結(jié)構(gòu)的選擇成為比數(shù)據(jù)結(jié)構(gòu)和算法的選擇更為重要的因素 ,三層客戶/服務(wù)器體系結(jié)構(gòu)為企業(yè)資源規(guī)劃的整合提供了良好的框架 ,是建立企業(yè)級管理信息系統(tǒng)的最佳選擇。隨著體系結(jié)構(gòu)的發(fā)展,軟件框架結(jié)構(gòu)方面也在不斷發(fā)展,目前在多層應(yīng)用結(jié)構(gòu)方面出現(xiàn)Java技術(shù)和.net技術(shù)的實(shí)現(xiàn)的不同的解決方案,二者各有優(yōu)缺點(diǎn),分別適用于不同規(guī)模的系統(tǒng)的要求。 本文將結(jié)合電信計(jì)劃建設(shè)管理信息系統(tǒng)的實(shí)現(xiàn),說明三層模式的體系結(jié)構(gòu),介紹基于三層模式的應(yīng)用系統(tǒng)的分布式組件技術(shù) ,闡述應(yīng)用J2EE框架結(jié)構(gòu)來實(shí)現(xiàn)應(yīng)用系統(tǒng)的實(shí)現(xiàn)方法。

             一、系統(tǒng)結(jié)構(gòu)的選擇

             1、 傳統(tǒng)兩層C/S結(jié)構(gòu)的缺點(diǎn)

            傳統(tǒng)的兩層客戶/服務(wù)器模式比較適合于小規(guī)模、用戶較少、單一數(shù)據(jù)庫且在安全、快速的網(wǎng)絡(luò)環(huán)境下 (例如局域網(wǎng) )運(yùn)行 。但是,隨著應(yīng)用系統(tǒng)的規(guī)模不斷擴(kuò)大 ,復(fù)雜性越來越高在多用戶、多數(shù)據(jù)庫且非安全的網(wǎng)絡(luò)環(huán)境下(例如:Internet) ,這種兩層結(jié)構(gòu)的應(yīng)用模型將無法適應(yīng) 。而且傳統(tǒng)的兩層結(jié)構(gòu)還存在以下缺陷:

            (1)它是單一服務(wù)器且以局域網(wǎng)為中心的 ,所以難以擴(kuò)展至大型企業(yè)廣域網(wǎng)或 Intranet;

            (2)受限于供應(yīng)商,程序的升級維護(hù)必須由供應(yīng)商重新開發(fā)擴(kuò)展;

            (3)軟、硬件的組合及集成能力有限;在軟件上呈現(xiàn)出胖客戶端,用戶必須在客戶端安裝特定的客戶端應(yīng)用程序,而且企業(yè)的業(yè)務(wù)邏輯都寫在客戶端應(yīng)用程序中,程序維護(hù)困難,程序升級需要每個(gè)客戶端都要安裝新的客戶端應(yīng)用程序,同時(shí),對于程序開發(fā)商來說,程序模塊的重用性差,各個(gè)模塊相對獨(dú)立;

            (4)C/S模式很難管理大量的客戶機(jī)。

            基于以上原因,傳統(tǒng)的C/S模式已經(jīng)不能適應(yīng)發(fā)展的需要,隨著網(wǎng)絡(luò)技術(shù)的普及和用戶需求的進(jìn)一步提高,三層WEB模式應(yīng)運(yùn)而生。

            2、 三層WEB結(jié)構(gòu)的優(yōu)點(diǎn)

            三層客戶/服務(wù)器模式 (以下簡稱三層模式 )在兩層模式的基礎(chǔ)上,增加了新的一級。這種模式在邏輯上將應(yīng)用功能分為三層:客戶顯示層、業(yè)務(wù)邏輯層、數(shù)據(jù)層。客戶顯示層是為客戶提供應(yīng)用服務(wù)的圖形界面,有助于用戶理解和高效的定位應(yīng)用服務(wù)。業(yè)務(wù)邏輯層位于顯示層和數(shù)據(jù)層之間,專門為實(shí)現(xiàn)企業(yè)的業(yè)務(wù)邏輯提供了一個(gè)明確的層次,在這個(gè)層次封裝了與系統(tǒng)關(guān)聯(lián)的應(yīng)用模型,并把用戶表示層和數(shù)據(jù)庫代碼分開 。這個(gè)層次提供客戶應(yīng)用程序和數(shù)據(jù)服務(wù)之間的聯(lián)系,主要功能是執(zhí)行應(yīng)用策略和封裝應(yīng)用模式,并將封裝的模式呈現(xiàn)給客戶應(yīng)用程序。數(shù)據(jù)層是三層模式中最底層,他用來定義、維護(hù)、訪問和更新數(shù)據(jù)并管理和滿足應(yīng)用服務(wù)對數(shù)據(jù)的請求。

            三層模式的主要優(yōu)點(diǎn)為 :

            ①良好的靈活性和可擴(kuò)展性。對于環(huán)境和應(yīng)用條件經(jīng)常變動(dòng)的情況,只要對應(yīng)用層實(shí)施相應(yīng)的改變,就能夠達(dá)到目的。

            ②可共享性。單個(gè)應(yīng)用服務(wù)器可以為處于不同平臺(tái)的客戶應(yīng)用程序提供服務(wù),在很大程度上節(jié)省了開發(fā)時(shí)間和資金投入;

            ③較好的安全性。在這種結(jié)構(gòu)中,客戶應(yīng)用程序不能直接訪問數(shù)據(jù),應(yīng)用服務(wù)器不僅可控制哪些數(shù)據(jù)被改變和被訪問,而且還可控制數(shù)據(jù)的改變和訪問方式 。

            ④增強(qiáng)了企業(yè)對象的重復(fù)可用性。“企業(yè)對象”是指封裝了企業(yè)邏輯程序代碼,能夠執(zhí)行特定功能的對象。隨著組件技術(shù)的發(fā)展,這種可重用的組件模式越來越為軟件開發(fā)所接受。

            ⑤三層模式成為真正意義上的“瘦客戶端”,從而具備了很高的穩(wěn)定性、延展性和執(zhí)行校率。

            ⑥三層模式可以將服務(wù)集中在一起管理,統(tǒng)一服務(wù)于客戶端,從而具備了良好的容錯(cuò)能力和負(fù)載平衡能力。







          三層體系結(jié)構(gòu)

            電信計(jì)劃建設(shè)管理信息系統(tǒng)是由省電信公司對下屬地市電信公司進(jìn)行統(tǒng)一管理,所有業(yè)務(wù)邏輯都集中在省公司管理和制定,地市公司負(fù)責(zé)數(shù)據(jù)的錄入和查詢統(tǒng)計(jì),用戶的分布廣泛,數(shù)據(jù)集中處理,因此在設(shè)計(jì)時(shí)充分考慮各種體系結(jié)構(gòu)的優(yōu)缺點(diǎn),選擇三層WEB模式進(jìn)行開發(fā)實(shí)現(xiàn)。



            二、體系架構(gòu)的選擇

            1、 DCOM分布式技術(shù)和CORBA分布式技術(shù)

            Microsoft的分布式COM(DCOM)技術(shù)是將組建對象模型技術(shù)COM大大進(jìn)行了擴(kuò)展,是對在局域網(wǎng)、廣域網(wǎng)甚至是Internet上計(jì)算機(jī)對象之間的通信提供了完全的支持。通過使用DCOM用戶的應(yīng)用程序就可以在任何網(wǎng)絡(luò)位置上達(dá)到真正的分布性,從而滿足客戶應(yīng)用的需要。整體結(jié)構(gòu)如下圖所示:







            由OMG提出的公共對象請求代理結(jié)構(gòu)CORBA對象是目前比較流行的一種中間件規(guī)范,也是一種構(gòu)件實(shí)現(xiàn)規(guī)范,主要目標(biāo)是使對象在分布式環(huán)境中可重用、可移植和可互操作,CORBA的整體結(jié)構(gòu)如下圖所示:







            以上兩種分布式結(jié)構(gòu)可以實(shí)現(xiàn)在統(tǒng)一特定的環(huán)境下的應(yīng)用,對于局域網(wǎng)中的實(shí)現(xiàn)比較流行,但是針對不同平臺(tái)的應(yīng)用和Internet上的應(yīng)用,二者缺少靈活性。

            2、 J2EE體系結(jié)構(gòu)介紹

            J2EE體系結(jié)構(gòu)分為三個(gè)層次,分別是客戶表示層、中間邏輯層和數(shù)據(jù)管理層及應(yīng)用系統(tǒng)。本結(jié)構(gòu)具有跨平臺(tái)的特性,結(jié)構(gòu)中的三個(gè)層次可以處于不同的平臺(tái)下進(jìn)行協(xié)作應(yīng)用;因?yàn)榭蛻舯硎緦涌梢允褂貌煌目蛻舳顺绦颍虼司哂泻芎玫姆植夹裕梢赃m應(yīng)分布式管理的要求;在后臺(tái)的應(yīng)用系統(tǒng)集成中,可以把企業(yè)不同的應(yīng)用系統(tǒng)集成到該結(jié)構(gòu)中,因此可以有效的保護(hù)現(xiàn)有的資源不被破壞。基于J2EE來實(shí)現(xiàn)的WEB服務(wù)的核心框架如下圖所示:









            用基于J2EE的體系結(jié)構(gòu)開發(fā)的WEB服務(wù)還具有以下的優(yōu)點(diǎn):

            ① 可以跨越中間防火墻進(jìn)行通信。因?yàn)閃EB服務(wù)是利用HTTP最為傳輸媒介,中間層使用WEB服務(wù)的話,可以從客戶界面直接調(diào)用中間層組件,而不必建立頁面。

            ② 應(yīng)用系統(tǒng)的集成。要把企業(yè)里不同語言寫成的,運(yùn)行于不同平臺(tái)上的各種程序集成起來必然會(huì)花費(fèi)很大的開發(fā)力量。通過WEB服務(wù)可以使用標(biāo)準(zhǔn)的方法把功能和數(shù)據(jù)暴露出來,供其他程序使用。

            ③ 所有的企業(yè)邏輯和服務(wù)都集成封裝在可重用、可移植的EJB組件中,因此系統(tǒng)維護(hù)性和可重用性好。

            ④中間件代碼可以集中在處理業(yè)務(wù)邏輯上,無需考慮數(shù)據(jù)表示。

            因?yàn)楸敬坞娦庞?jì)劃建設(shè)管理信息系統(tǒng)的業(yè)務(wù)邏輯和數(shù)據(jù)處理規(guī)則都是由集團(tuán)公司和省公司統(tǒng)一管理,數(shù)據(jù)和程序集中在統(tǒng)一的服務(wù)器上,并且服務(wù)器運(yùn)行平臺(tái)與客戶端的運(yùn)行平臺(tái)不同,因此采用J2EE的框架結(jié)構(gòu)解決比較合適。


            三、系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

            通過對各種解決方案和框架結(jié)構(gòu)的比較,選擇JAVA技術(shù)作為本次系統(tǒng)設(shè)計(jì)的應(yīng)用技術(shù),我們對系統(tǒng)的設(shè)計(jì)如下:

            前臺(tái)用戶顯示層使用jsp和servlet在瀏覽器上實(shí)現(xiàn),中間使用EJB組件實(shí)現(xiàn)企業(yè)業(yè)務(wù)邏輯,后臺(tái)數(shù)據(jù)庫使用Sybase數(shù)據(jù)庫。具體的企業(yè)應(yīng)用結(jié)構(gòu)如下所示:







            其中中間件使用Bea公司的Weblogic7.0,開發(fā)工具使用JBuilder9.0,數(shù)據(jù)庫使用SYBASE數(shù)據(jù)庫。

            在用戶登錄過程中,因?yàn)樵谡麄€(gè)客戶端使用的用戶比較多,因此在連接上我們使用連接池進(jìn)行處理。具體的連接池實(shí)現(xiàn)如下:





          class DBConnectionPool
          {
           public DBConnectionPool(String name, String URL, String user, String password)
           {
            this.name = name;
            this.URL = URL;
            this.user = user;
            this.password = password;
            this.maxConn = maxConn;
           }
           private void createPools(Properties props)
           {
            private Hashtable pools = new Hashtable();
            String poolName = props.getProperty("poolname").trim();
            String url = props.getProperty(poolName+".url").trim();
            String user = props.getProperty(poolName + ".user");
            String password = props.getProperty(poolName + ".password");
            String maxconn = props.getProperty(poolName + ".maxconn", "0");
            int max;
            DBConnectionPool pool=New DBConnectionPool(poolName, url, user, password);
            Utility.log(pool.toString());
            pools.put(poolName, pool);
            Utility.log("成功創(chuàng)建連接池" + poolName);
           }
          }

            為了使用SessionBean進(jìn)行登錄確認(rèn)處理,同時(shí)利用Bean的監(jiān)聽功能對用戶的登錄時(shí)間進(jìn)行監(jiān)聽,超過一定時(shí)間,自動(dòng)切斷用戶登錄連接,讓用戶進(jìn)行重新登錄。在應(yīng)用系統(tǒng)中,用戶登錄后的權(quán)限控制是一個(gè)重點(diǎn),我們在使用J2EE框架結(jié)構(gòu)的過程中,使用SERVLET的過濾功能來實(shí)現(xiàn)權(quán)限的控制,具體的實(shí)現(xiàn)結(jié)構(gòu)如下:




            過濾器的定義標(biāo)記如下:






          <web-app>
           <filter>
            <filter-name>IE Filter</filter-name>
            <filter-class>com.ibm.devworks.filters.IEFilter</filter-class>
           </filter>
          </web-app〉



            在業(yè)務(wù)邏輯處理上,我們對各個(gè)業(yè)務(wù)進(jìn)行相應(yīng)的分解,然后針對每個(gè)業(yè)務(wù)邏輯應(yīng)用EJB組件進(jìn)行實(shí)現(xiàn)。客戶做出請求后,使用SERVLET處理后調(diào)用各個(gè)業(yè)務(wù)模塊處理邏輯,EJB組件訪問數(shù)據(jù)庫后將處理后的結(jié)果集返回給SERVLET,再匯集到客戶端進(jìn)行顯示,供用戶進(jìn)行查詢和使用。

            四、總結(jié)

            本文提出的B/S模式的系統(tǒng)結(jié)構(gòu)已應(yīng)用電信計(jì)劃建設(shè)管理信息系統(tǒng)中,由于實(shí)際需要,在請求處理層中還增加了一個(gè)設(shè)備接口線程,用于通過SNMP協(xié)議獲取網(wǎng)絡(luò)設(shè)備的信息。與傳統(tǒng)的CGI模式相比,本系統(tǒng)結(jié)構(gòu)有明顯的優(yōu)勢,具有較高系統(tǒng)效率,尤其適合于構(gòu)造功能復(fù)雜的Web應(yīng)用系統(tǒng)。另外在實(shí)現(xiàn)上還可以加強(qiáng),比如進(jìn)一步研究自動(dòng)創(chuàng)建和撤銷新的數(shù)據(jù)庫操作線程的條件。


          posted on 2005-08-04 11:16 黑武士 閱讀(202) 評論(0)  編輯  收藏 所屬分類: JAVA技術(shù)
          主站蜘蛛池模板: 浦江县| 新巴尔虎左旗| 祥云县| 巧家县| 平乐县| 梁河县| 土默特右旗| 五莲县| 平和县| 龙门县| 类乌齐县| 公主岭市| 龙南县| 如皋市| 饶河县| 景德镇市| 建宁县| 磴口县| 新绛县| 天峻县| 平昌县| 隆回县| 和顺县| 镇远县| 定安县| 临武县| 延庆县| 临猗县| 濮阳市| 邹城市| 苏尼特左旗| 广宗县| 汽车| 抚松县| 兴安县| 都匀市| 曲麻莱县| 五台县| 藁城市| 泰宁县| 徐州市|