多層技術(shù)架構(gòu)JAVA_第1頁
多層技術(shù)架構(gòu)JAVA_第2頁
多層技術(shù)架構(gòu)JAVA_第3頁
多層技術(shù)架構(gòu)JAVA_第4頁
多層技術(shù)架構(gòu)JAVA_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、多層技術(shù)架構(gòu)本系統(tǒng)構(gòu)建于J2EE平臺(tái),采用分層提供服務(wù)支持的設(shè)計(jì)思想,將系統(tǒng)劃分為數(shù)據(jù)庫層、中間件層、EMALL基礎(chǔ)服務(wù)層、業(yè)務(wù)表現(xiàn)層和系統(tǒng)接口層。系統(tǒng)對(duì)每一層定義明確的功能接口,同時(shí)在層次內(nèi)實(shí)現(xiàn)組件化的接口實(shí)現(xiàn)。層次化、模塊組件化的實(shí)現(xiàn),使系統(tǒng)具備了最大程度的靈活度,從而能對(duì)業(yè)務(wù)需求的變化作出快速的反應(yīng),使系統(tǒng)具有很好的擴(kuò)展性。首先我們來看一個(gè)系統(tǒng)技術(shù)架構(gòu)圖:上圖可以清晰的了解到整個(gè)系統(tǒng)的層次劃分,系統(tǒng)從最底部的數(shù)據(jù)庫層開始,一層一層的向上提供接口服務(wù),最終實(shí)現(xiàn)用戶按業(yè)務(wù)要求的可見操作界面和其他系統(tǒng)接口。各層次專著于自身功能的接口實(shí)現(xiàn),整個(gè)層次保持相對(duì)的穩(wěn)定。系統(tǒng)通過不改變接口,各個(gè)層次、各

2、個(gè)組件進(jìn)行優(yōu)化的策略,能在不影響整個(gè)業(yè)務(wù)的前提下,不斷的完善和改進(jìn)。一、數(shù)據(jù)庫層對(duì)于平臺(tái)中的所有應(yīng)用,都存在著各種各樣的配置信息、業(yè)務(wù)數(shù)據(jù)、系統(tǒng)運(yùn)行狀態(tài)等信息。數(shù)據(jù)庫層對(duì)這些數(shù)據(jù)信息本身進(jìn)行歸檔,提供快速查詢的底層接口,并保證數(shù)據(jù)的完整性、可靠性。在數(shù)據(jù)庫方面,我們采用Oracle或者是MySQL。這兩種數(shù)據(jù)庫分別有不同的適用環(huán)境。1、Oracle適合大型的電子商務(wù)應(yīng)用。能使用所有的網(wǎng)客通平臺(tái)功能。如訪問量排行榜、降價(jià)排行榜、銷售排行榜、訪問量統(tǒng)計(jì)等等,就以往的經(jīng)驗(yàn)來看,這些功能每天要處理的數(shù)據(jù)都會(huì)超過一千萬。這種數(shù)據(jù)量如果使用傳統(tǒng)的統(tǒng)計(jì)方法,統(tǒng)計(jì)一次的時(shí)間就可能會(huì)以天來計(jì)算了。如果使用Ora

3、cle,再配合我們專門對(duì)Oracle進(jìn)行優(yōu)化的高效率的統(tǒng)計(jì)程序,那么只需十?dāng)?shù)秒便可完成。此外,如果只用一臺(tái)數(shù)據(jù)庫無法應(yīng)付日益增長的服務(wù)器訪問量,可以使用OracleRAC(真正應(yīng)用集群),通過增加數(shù)據(jù)庫服務(wù)器進(jìn)行集群。2、MySQL適合中小型的電子商務(wù)應(yīng)用。無法使用網(wǎng)客通平臺(tái)一些高級(jí)應(yīng)用,如排行榜、統(tǒng)計(jì)分析、MIS系統(tǒng)對(duì)接等。這是由于MySQL設(shè)計(jì)上強(qiáng)調(diào)訪問速度,犧牲了一些數(shù)據(jù)庫的高級(jí)功能,雖然用程序也可以實(shí)現(xiàn)這些功能,但是在性能上無法滿足需求。不支持?jǐn)?shù)據(jù)庫集群。二、中間件層中間件層主要是網(wǎng)客通平臺(tái)使用的J2EE中間件,包括平臺(tái)使用到的應(yīng)用服務(wù)器和中間件技術(shù)。一、應(yīng)用服務(wù)器應(yīng)用服務(wù)器為網(wǎng)客通提

4、供的整個(gè)J2EE平臺(tái)實(shí)現(xiàn),EMALL基礎(chǔ)服務(wù)層和應(yīng)用層、業(yè)務(wù)層都是建立在應(yīng)用服務(wù)器之上。網(wǎng)客通設(shè)計(jì)上遵循SUN公司提出的J2EE規(guī)范,這樣能夠盡可能的保證在不同的J2EE應(yīng)用服務(wù)器中進(jìn)行移植。經(jīng)過測試、網(wǎng)客通平臺(tái)支持Tomcat、WebLogic、JBoss這幾種J2EE應(yīng)用服務(wù)器。二、中間件技術(shù)本著重用的設(shè)計(jì)原則,網(wǎng)客通在一些功能中采用了已有的成熟技術(shù),這些都是經(jīng)過實(shí)踐考驗(yàn)的中間件。主要以java標(biāo)準(zhǔn)包和開源項(xiàng)目為主,大部分都針對(duì)系統(tǒng)作了相應(yīng)調(diào)整,以便適合系統(tǒng)的需要。Apachecommons:著名的開源組織Apache的一個(gè)java工具包,提供很多實(shí)用的功能。commons-beanuti

5、ls:提供對(duì)Java反射和自省API的包裝。在平臺(tái)中用于通用的接口設(shè)計(jì)。commons-codec:包含一些通用的編碼解碼算法。Hex,Base64,以及URLencoder。平臺(tái)中主要用來做消息摘要,實(shí)現(xiàn)數(shù)據(jù)加密等功能。commons-collections:提供一個(gè)類包來擴(kuò)展和增加標(biāo)準(zhǔn)的JavaCollection框架。提供了比j2sdk更全面的數(shù)據(jù)結(jié)構(gòu),平臺(tái)中繼承并實(shí)現(xiàn)了一些特殊的數(shù)據(jù)結(jié)構(gòu)。commons-pool:提供了通用對(duì)象池接口,一個(gè)用于創(chuàng)建模塊化對(duì)象池的工具包,以及通常的對(duì)象池。我們?cè)谠械幕A(chǔ)上進(jìn)行了優(yōu)化,在性能和使用性方面有所提高。commons-dbcp:這是一個(gè)基于ap

6、ache的對(duì)象池(apachecommonspool)實(shí)現(xiàn)的數(shù)據(jù)庫連接池。我們?cè)谠械幕A(chǔ)上進(jìn)行了優(yōu)化,對(duì)數(shù)據(jù)庫連接進(jìn)行了特別的處理,防止數(shù)據(jù)庫連接泄漏的問題,并提供了監(jiān)控的功能。commons-discovery:供工具來定位資源(包括類),通過使用各種模式來映射服務(wù)/引用名稱和資源名稱。commons-el:提供在JSP2.0規(guī)范中定義的EL表達(dá)式的解釋器。對(duì)平臺(tái)中的JSP提供EL表達(dá)式支持。commons-:強(qiáng)大和高性能的文件上傳功能。平臺(tái)中被用于上傳各種圖片、Flash、文檔等資源,我們?cè)谠械幕A(chǔ)上進(jìn)行了優(yōu)化。commons-logging:提供通用的日志操作接口。主要用于程序調(diào)試和

7、服務(wù)器日常的日志輸出。10)commons-validator:提供了一個(gè)簡單的,可擴(kuò)展的框架來在一個(gè)XML文件中定義校驗(yàn)器(校驗(yàn)方法)和校驗(yàn)規(guī)則。支持校驗(yàn)規(guī)則的和錯(cuò)誤消息的國際化。平臺(tái)中用來校驗(yàn)各種xml數(shù)據(jù)。Cewolf/JFreeChart:Cewolf是一個(gè)用于生成各種圖表的標(biāo)簽庫。它支持在JSP中嵌入圖表圖片。運(yùn)行servlet容器的任意的Web應(yīng)用程序服務(wù)器都可以使用它。因?yàn)镃ewolf是一個(gè)功能完整的標(biāo)簽庫,所以不需要使用Javascript。JFreeChart是開放源代碼站點(diǎn)SourceF上的一個(gè)JAVA項(xiàng)目,它主要用來各種各樣的圖表,這些圖表包括:餅圖、柱狀圖(普通柱狀圖以

8、及堆棧柱狀圖)、線圖、區(qū)域圖、分布圖、混合圖、甘特圖以及一些儀表盤等等。這些不同式樣的圖表基本上可以滿足目前的要求。主要用于生成統(tǒng)計(jì)圖表。這兩個(gè)技術(shù)一起提供了網(wǎng)客通平臺(tái)的統(tǒng)計(jì)分析圖表,JFreeChart主要用于輸出圖表,Cewolf對(duì)其進(jìn)行了封裝。Dom4j:Dom4j是一個(gè)易用的、開源的庫,用于XML,XPath和XSLT。它應(yīng)用于Java平臺(tái),采用了Java集合框架并完全支持DOM,SAX和JAXP。主要用來處理XML數(shù)據(jù)。XML在網(wǎng)客通有廣泛的應(yīng)用,主要是作為配置文件使用。由于XML嚴(yán)格的格式要求和層次結(jié)構(gòu),也有用來作為參數(shù)在HTML表單中傳遞。如組合商品功能,因?yàn)榻M合商品中的商品是由

9、管理員挑選的,參數(shù)數(shù)量并不確定,如果每從組合商品中添加/刪除一個(gè)商品都直接更新到數(shù)據(jù)庫話,會(huì)對(duì)系統(tǒng)造成負(fù)荷。所以,在組合商品的管理中,將操作的數(shù)據(jù)類轉(zhuǎn)換成XML傳遞,就可以一次進(jìn)行修改。Hibernate:Hibernate是一個(gè)開放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java程序員可以隨心所欲的使用對(duì)象編程思維來操縱數(shù)據(jù)庫。Hibernate可以應(yīng)用在任何使用JDBC的場合,既可以在Java的客戶端程序?qū)嵱?,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。

10、在平臺(tái)中,我們采用Hibernate進(jìn)行數(shù)據(jù)庫操作,只有在一些對(duì)數(shù)據(jù)庫性能有特別要求的模塊,才直接使用jdbc進(jìn)行連接。Ehcache:Ehcache出自Hibernate,在Hibernate中使用它作為數(shù)據(jù)緩存的解決方案。這是Hibernate必須的包。JCrontab:它是由Java語言編寫的日程處理程序,它目的是提供強(qiáng)大的定時(shí)處理功能,讓我們的應(yīng)用程序可以按照提供的時(shí)間表來執(zhí)行不同的應(yīng)用。我們主要用Jcrontab管理以下一些定時(shí)任務(wù):1)年排行榜后臺(tái)更新進(jìn)程:自動(dòng)計(jì)算年排行榜。2)月排行榜后臺(tái)更新進(jìn)程:自動(dòng)計(jì)算月排行榜。3)周排行榜后臺(tái)更新進(jìn)程:自動(dòng)計(jì)算周排行榜。4)日排行榜后臺(tái)更新

11、進(jìn)程:自動(dòng)計(jì)算日排行榜。5)更新對(duì)象緩存:實(shí)現(xiàn)對(duì)象緩存的更新,處理那些長期沒被再一次訪問的對(duì)象緩存。6)清頁面緩存:當(dāng)管理員使用的手工刷新頁面緩存的功能時(shí),系統(tǒng)會(huì)將這些需要刷新的緩存加到一個(gè)隊(duì)列中,由本進(jìn)程負(fù)責(zé)刷新。7)相關(guān)產(chǎn)品自動(dòng)實(shí)現(xiàn)間隔:相關(guān)產(chǎn)品的計(jì)算對(duì)系統(tǒng)消耗比較大,所以系統(tǒng)不會(huì)對(duì)所有幾十萬個(gè)商品進(jìn)行計(jì)算,只有在用戶查看單個(gè)商品時(shí)算出這個(gè)商品的相關(guān)產(chǎn)品并進(jìn)行緩存。那么當(dāng)用戶下一次訪問這個(gè)商品的相關(guān)產(chǎn)品時(shí)就直接從緩存中讀取出來。而這個(gè)進(jìn)程就是為了定時(shí)更新這個(gè)緩存。8)自動(dòng)推薦后臺(tái)更新進(jìn)程:進(jìn)程根據(jù)商品推薦規(guī)則進(jìn)行自動(dòng)推薦。9)新聞推薦后臺(tái)更新進(jìn)程:進(jìn)程根據(jù)新聞推薦規(guī)則進(jìn)行自動(dòng)推薦。10)關(guān)

12、鍵字后臺(tái)進(jìn)程:當(dāng)用戶在前臺(tái)搜索欄中輸入一個(gè)查詢值時(shí),系統(tǒng)并不馬上將其統(tǒng)計(jì)到關(guān)鍵字,而是放到內(nèi)存中,由此進(jìn)程定時(shí)統(tǒng)計(jì)。11)保存訪問量信息進(jìn)程:用戶每訪問一次系統(tǒng),系統(tǒng)并不馬上統(tǒng)計(jì),而是放到內(nèi)存中,由此進(jìn)程定時(shí)保存到數(shù)據(jù)庫,供統(tǒng)計(jì)進(jìn)程進(jìn)行統(tǒng)計(jì)。12)年訪問量排行計(jì)算:計(jì)算年訪問量排行榜。13)月訪問量排行計(jì)算:計(jì)算月訪問量排行榜。14)周訪問量排行計(jì)算:計(jì)算周訪問量排行榜。15)日訪問量排行計(jì)算:計(jì)算日訪問量排行榜。16)年降價(jià)排行計(jì)算:計(jì)算年降價(jià)排行榜。17)月降價(jià)排行計(jì)算:計(jì)算月降價(jià)排行榜。18)周降價(jià)排行計(jì)算:計(jì)算周降價(jià)排行榜。19)日降價(jià)排行計(jì)算:計(jì)算日降價(jià)排行榜。20)統(tǒng)計(jì)計(jì)算:每天對(duì)

13、訪問量進(jìn)行統(tǒng)計(jì)。21)生成訂閱郵件列表進(jìn)程:根據(jù)用戶的訂閱設(shè)置,生成需要發(fā)送的郵件隊(duì)列。22)發(fā)送訂閱郵件進(jìn)程:根據(jù)要發(fā)送的郵件隊(duì)列發(fā)送郵件。23)拍賣自動(dòng)出價(jià)進(jìn)程:實(shí)現(xiàn)拍賣模塊中的自動(dòng)出價(jià)功能。JCS:JCS是Jakarta的項(xiàng)目Turbine的子項(xiàng)目。它是一個(gè)復(fù)合式的緩沖工具。可以將對(duì)象緩沖到內(nèi)存、硬盤。具有緩沖對(duì)象時(shí)間過期設(shè)定。還可以通過JCS構(gòu)建具有緩沖的分布式構(gòu)架,以實(shí)現(xiàn)高性能的應(yīng)用。對(duì)于一些需要頻繁訪問而每訪問一次都非常消耗資源的對(duì)象,可以臨時(shí)存放在緩沖區(qū)中,這樣可以提高服務(wù)的性能。而JCS正是一個(gè)很好的緩沖工具。緩沖工具對(duì)于讀操作遠(yuǎn)遠(yuǎn)多于寫操作的應(yīng)用性能提高非常顯著。網(wǎng)客通平臺(tái)中

14、使用jCS提供緩存功能,主要是頁面緩存和對(duì)象緩存,通過JCS,系統(tǒng)將用戶訪問過的頁面和對(duì)象緩存到內(nèi)存中,對(duì)于訪問量巨大,內(nèi)存緩存已經(jīng)不能負(fù)荷的情況下,我們還可以將緩存設(shè)置到硬盤中保存。使用緩存的話,能將系統(tǒng)可負(fù)載和性能大幅度的提升。當(dāng)沒有使用集群環(huán)境的情況下,緩存是一種必不可少的技術(shù)。&JSF/MyFaces:JavaServerFaces(JSF)是一種用于構(gòu)建Web應(yīng)用程序的新標(biāo)準(zhǔn)Java框架。它提供了一種以組件為中心來開發(fā)JavaWeb用戶界面的方法,從而簡化了開發(fā)。JSF的主要優(yōu)勢(shì)之一就是它既是JavaWeb用戶界面標(biāo)準(zhǔn)又是嚴(yán)格遵循模型一視圖一控制器(MVC)設(shè)計(jì)模式的框架。用戶界面代

15、碼(視圖)與應(yīng)用程序數(shù)據(jù)和邏輯(模型)的清晰分離使JSF應(yīng)用程序更易于管理。為了準(zhǔn)備提供頁面對(duì)應(yīng)用程序數(shù)據(jù)訪問的JSF上下文和防止對(duì)頁面未授權(quán)或不正確的訪問,所有與應(yīng)用程序的用戶交互均由一個(gè)前端“Facesservlet(控制器)來處理。MyFaces是JavaServerFaces(JSF)Web框架(JSR127)的一個(gè)實(shí)現(xiàn)。提供了很多常用控件。我們平臺(tái)中采用一些基于JSF框架的MyFaces控件。這樣使程序結(jié)構(gòu)十分清晰。Log4j:Log4j是Apache的一個(gè)開放源代碼項(xiàng)目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺(tái)、文件、GUI組件、甚至是套接口服務(wù)器、NT的事件記

16、錄器、UNIXSyslog守護(hù)進(jìn)程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級(jí)別,我們能夠更加細(xì)致地控制日志的生成過程。最令人感興趣的就是,這些可以通過一個(gè)配置文件來靈活地進(jìn)行配置,而不需要修改應(yīng)用的代碼。這是一個(gè)可選包,如果不使用Log4j的話,commons-logging會(huì)自動(dòng)使用SUNJ2SDK的日志包,不過我們還是推薦使用Log4j,它的功能非常強(qiáng)大。Lucene:Lucene是一個(gè)開放源程序的搜尋器引擎,利用它可以輕易地為Java軟件加入全文搜尋功能。Lucene的最主要工作是替文件的每一個(gè)字作索引,索引讓搜尋的效率比傳統(tǒng)的逐字比較大大提高,Lucen提供一組

17、解讀,過濾,分析文件,編排和使用索引的API,它的強(qiáng)大之處除了高效和簡單外,是最重要的是使使用者可以隨時(shí)應(yīng)自已需要自訂其功能。我們使用Lucene建立索引,并在這基礎(chǔ)上實(shí)現(xiàn)了全文搜索功能。Ant:Ant是一個(gè)基于Java的自動(dòng)化腳本引擎,腳本格式為XML。我們除了用Ant做Java編譯相關(guān)任務(wù)外,還通過插件實(shí)現(xiàn)很多應(yīng)用的調(diào)用。包括程序編譯、打包、Hibernate配置文件自動(dòng)生成、部署、以及單元測試等操作。當(dāng)一個(gè)代碼項(xiàng)目大了以后,每次重新編譯,打包,測試等都會(huì)變得非常復(fù)雜而且重復(fù),因此c語言中有make腳本來幫助這些工作的批量完成。在Java中應(yīng)用是平臺(tái)無關(guān)性的,當(dāng)然不會(huì)用平臺(tái)相關(guān)的make腳

18、本來完成這些批處理任務(wù)了,Ant本身就是這樣一個(gè)流程腳本引擎,用于自動(dòng)化調(diào)用程序完成項(xiàng)目的編譯,打包,測試等。除了基于JAVA是平臺(tái)無關(guān)的外,腳本的格式是基于XML的,比make腳本來說還要好維護(hù)一些。Axis:Axis是一個(gè)SOAP引擎,提供創(chuàng)建服務(wù)器端、客戶端和網(wǎng)關(guān)SOAP操作的基本框架。SOAP是被廣泛作為新一代跨平臺(tái)、跨語言分布計(jì)算WebServices的重要部分。網(wǎng)客通平臺(tái)使用Axis提供WebService支持,廣泛應(yīng)用于通用數(shù)據(jù)接口,對(duì)外系統(tǒng)提供服務(wù)等功能。如:1)商品查詢服務(wù):提供接口讓外接系統(tǒng)可以查到平臺(tái)中的商品信息。2)新聞發(fā)布服務(wù):提供接口讓外接系統(tǒng)可以取到各類新聞。3)

19、訂單服務(wù):提供接口讓外接系統(tǒng)可以在平臺(tái)中生成訂單,并獲取各種訂單信息。注:上述服務(wù)都有嚴(yán)格的權(quán)限控制。JavaMa:il:JavaMail是Sun發(fā)布的用來處理email的API。它可以方便地執(zhí)行一些常用的郵件傳輸。我們使用JavaMail實(shí)現(xiàn)了平臺(tái)中郵件發(fā)送、群發(fā)等相關(guān)功能,供業(yè)務(wù)系統(tǒng)使用。XDoclet:XDoclet是一個(gè)開源項(xiàng)目,可以通過在java源代碼中的一些特殊的注釋信息,自動(dòng)生成配置文件、源代碼等等。例如web、ejb的部署描述文件等。我們用XDoclet來生成Hibernate的hbm配置文件。JSTL:JSP標(biāo)準(zhǔn)標(biāo)記庫(JSPStandardTagLibrary,JSTL)是

20、一個(gè)實(shí)現(xiàn)Web應(yīng)用程序中常見的通用功能的定制標(biāo)記庫集,這些功能包括迭代和條件判斷、數(shù)據(jù)管理格式化、XML操作以及數(shù)據(jù)庫訪問。我們使用JSTL封裝各種業(yè)務(wù)邏輯。JakartaORO:JakartaOROJava類是一套文本處理Java類,提供了與Perl5兼容的規(guī)則表達(dá)式,類AWK規(guī)則表達(dá)式,glob表達(dá)式,以及用于執(zhí)行替換、分割、過濾文件名等的工具。這個(gè)包是0ROMatcher,AwkTools,PerlTools,andTextToolslibrariesoriginallyfromORO,Inc的后續(xù)產(chǎn)品。網(wǎng)客通平臺(tái)使用ORO處理正則表達(dá)式,廣泛應(yīng)用于各種文本處理中。SwarmCache/

21、JGroups:SwarmCache是一個(gè)簡單且有效的分布式緩存,它使用IPmulticast與同一個(gè)局域網(wǎng)的其他主機(jī)進(jìn)行通訊,是特別為集群和數(shù)據(jù)驅(qū)動(dòng)web應(yīng)用程序而設(shè)計(jì)的。SwarmCache能夠讓典型的讀操作大大超過寫操作的這類應(yīng)用提供更好的性能支持。SwarmCache使用JavaGroups來管理從屬關(guān)系和分布式緩存的通訊。JGroups是一個(gè)開源的純java編寫的可靠的群組通訊工具。其工作模式基于IP多播,但可以在可靠性和群組成員管理上進(jìn)行擴(kuò)展。其結(jié)構(gòu)上設(shè)計(jì)靈活,提供了一種靈活兼容多種協(xié)議的協(xié)議棧,對(duì)于每個(gè)產(chǎn)品都有不同的可靠性需求。這種協(xié)議??梢宰層脩舳x的自己可靠性指標(biāo)和性能指標(biāo)。

22、當(dāng)使用集群環(huán)境時(shí),系統(tǒng)存在著緩存同步的問題,需要對(duì)集群中每一臺(tái)服務(wù)器的緩存進(jìn)行同步,這樣就必須要有一個(gè)緩存同步的機(jī)制,SwarmCache和JGroups就是為了解決這個(gè)問題而被加到網(wǎng)客通中。JUnit:JUnit是由ErichGamma和KentBeck編寫的一個(gè)回歸測試框架(regressiontestingframework)。Junit測試是程序員測試,即所謂白盒測試,因?yàn)槌绦騿T知道被測試的軟件如何(How)完成功能和完成什么樣(What)的功能。我們主要用JUnit來進(jìn)行單元測試。三、基礎(chǔ)服務(wù)層基礎(chǔ)服務(wù)層構(gòu)建于J2EE平臺(tái)之上,借助于中間件的接口服務(wù),提供電子商務(wù)平臺(tái)系統(tǒng)所需要的通用

23、服務(wù)接口組件。系統(tǒng)將提供以下主要的服務(wù)接口支撐不同業(yè)務(wù)需求的實(shí)現(xiàn)。欄目管理模塊:欄目是一個(gè)抽象資源對(duì)象,是一種特殊的內(nèi)容類型。欄目可以表示產(chǎn)品、新聞信息類別、資源節(jié)點(diǎn)、導(dǎo)航欄的項(xiàng)、菜單中的項(xiàng)等等。欄目是一種組織管理型的資源。系統(tǒng)設(shè)計(jì)上支持多級(jí)子欄目,采用虛擬文件系統(tǒng)(Virtual)技術(shù)以支持直觀的樹型導(dǎo)航風(fēng)格,一個(gè)欄目節(jié)點(diǎn)相當(dāng)于一個(gè)虛擬的文件目錄。對(duì)于大型電子商務(wù)系統(tǒng),欄目的節(jié)點(diǎn)是個(gè)非常大的數(shù)字,這對(duì)系統(tǒng)欄目樹展示的速度和性能有極高要求??紤]到以上原因系統(tǒng)采取了欄目對(duì)象緩存策略,同時(shí)對(duì)于頁面節(jié)點(diǎn)的呈現(xiàn)通過動(dòng)態(tài)JavaScript輸出的技術(shù),從而使系統(tǒng)能很好的支持上萬個(gè)欄目數(shù)據(jù)節(jié)點(diǎn)操作管理。能

24、平滑、高效的展示樹型風(fēng)格的欄目結(jié)構(gòu)。用戶權(quán)限管理模塊:大型電子商務(wù)應(yīng)用系統(tǒng)有用戶多,模塊多,權(quán)限多的特點(diǎn),因此必須采用分組的用戶管理系統(tǒng),并設(shè)置一個(gè)具有最高權(quán)限的管理員,負(fù)責(zé)對(duì)整個(gè)系統(tǒng)用戶設(shè)置,為每個(gè)用戶角色、用戶指定不同的權(quán)限,依照不同的權(quán)限在系統(tǒng)中可以使用不同的功能。系統(tǒng)設(shè)置了Administrator用戶組,并設(shè)置了root這個(gè)具有最高權(quán)限、不可刪除的用戶。您可以根據(jù)您的需要使用root這一個(gè)管理員用戶。管理員可以創(chuàng)建、編輯和刪除用戶組,您可以根據(jù)您的需要給每個(gè)用戶組合理的權(quán)限劃分,并給每個(gè)用戶組添加、編輯和刪除用戶。用戶登錄系統(tǒng)后,系統(tǒng)會(huì)根據(jù)該用戶的權(quán)限提供相應(yīng)的功能,并對(duì)用戶的每個(gè)操

25、作檢查用戶的使用權(quán)限。系統(tǒng)采用Window用戶權(quán)限的思想,將用戶、用戶組的權(quán)限通過各個(gè)欄目節(jié)點(diǎn)進(jìn)行綁定,在各個(gè)欄目節(jié)點(diǎn)上實(shí)現(xiàn)繼承與非繼承的設(shè)置管理,從而使管理員可以進(jìn)行靈活的配置。屬性管理模塊:在現(xiàn)實(shí)情況中,不同的事物對(duì)象存在其特殊的信息描述;比如一個(gè)手機(jī),存在“網(wǎng)絡(luò)類型一GSM”、“外觀樣式一翻蓋”等等;同時(shí)這些特殊的信息描述在同類別的數(shù)據(jù)對(duì)象下經(jīng)常存在共性;比如TCL和聯(lián)想生產(chǎn)的手機(jī),應(yīng)該都存在以上兩種屬性的描述。針對(duì)以上的情況,系統(tǒng)進(jìn)行了一個(gè)數(shù)據(jù)抽象,定義了一套屬性管理組件,可以方便、有效的描述相關(guān)的需求情況,同時(shí)對(duì)于存在共性描述的對(duì)象采用繼承模式來描述,從而很好的表現(xiàn)一個(gè)事物對(duì)象的特征

26、。繼承性管理模塊:繼承是面向?qū)ο蠼涌谔匦灾弧?紤]到抽象事物的通用性,系統(tǒng)通過一個(gè)通用的對(duì)象繼承模型接口,對(duì)所有需要實(shí)現(xiàn)繼承的功能提供基礎(chǔ)的支持。從而提高系統(tǒng)的重用性和降低系統(tǒng)的偶合度。日志服務(wù)管理模塊:日志是一個(gè)成熟的電子商務(wù)應(yīng)用系統(tǒng)所必備的功能。日志可以用于數(shù)據(jù)統(tǒng)計(jì),為系統(tǒng)其他功能提供初始數(shù)據(jù);用于查看一個(gè)對(duì)象的修改歷史記錄,用于方便追蹤對(duì)象的修改狀態(tài)和明確事務(wù)責(zé)任。通過對(duì)系統(tǒng)各種操作數(shù)據(jù)的分析,根據(jù)各操作功能,系統(tǒng)將日志進(jìn)行類別的劃分:1、系統(tǒng)日志:記錄系統(tǒng)各種操作的信息數(shù)據(jù)。(比如:用戶某個(gè)時(shí)間登陸了系統(tǒng))2、商品日志:記錄系統(tǒng)商品數(shù)據(jù)發(fā)生改變的信息。(比如:商品價(jià)格發(fā)生變化)3、信息

27、日志:記錄系統(tǒng)信息數(shù)據(jù)發(fā)生改變的信息。(比如:某管理員增加了一個(gè)新的促銷公告)4、訂單日志:記錄系統(tǒng)訂單數(shù)據(jù)發(fā)生改變的信息。(比如:某個(gè)訂單已經(jīng)進(jìn)行了送貨處理)系統(tǒng)通過抽象出一個(gè)Log日志接口,采用AbstractFactory模式,通過不同的構(gòu)造參數(shù)來獲取不同分類的Log日志實(shí)現(xiàn)。系統(tǒng)將各中類別下的日志,又區(qū)分不同的操作。日志組件將通過抽象和封裝后,給各功能模塊提供統(tǒng)一接口服務(wù),方便系統(tǒng)各模塊的日志功能的開發(fā)和維護(hù)。緩存服務(wù)管理模塊:頁面訪問的時(shí)候,生成動(dòng)態(tài)Web頁會(huì)耗用各種各樣的系統(tǒng)資源。當(dāng)Web服務(wù)器收到頁面請(qǐng)求時(shí),它通常必須從數(shù)據(jù)庫或其他存儲(chǔ)系統(tǒng)中實(shí)時(shí)的檢索所請(qǐng)求的信息。對(duì)這些資源的訪

28、問通常需要通過有限的資源池(如數(shù)據(jù)庫連接、套接字或文件描述符)進(jìn)行。因?yàn)閃eb服務(wù)器通常需要處理很多并發(fā)請(qǐng)求,所以對(duì)這些共享資源的爭奪可能會(huì)延遲頁面請(qǐng)求,直到資源變?yōu)榭捎?。在將?qǐng)求發(fā)送后,仍然必須將結(jié)果轉(zhuǎn)換為HTML代碼以便進(jìn)行顯示。使系統(tǒng)速度更快的一種顯而易見的方法是購買更多、配置更好的硬件。此方法可能很吸引人,因?yàn)橛布阋?,而且不必更改程序,但更多的硬件只能在未達(dá)到其物理限制之前才會(huì)對(duì)性能有所幫助。系統(tǒng)中實(shí)施緩存管理,是一個(gè)有效的解決方案。系統(tǒng)中存在兩中緩存對(duì)象:1、Java對(duì)象緩存:對(duì)于一些經(jīng)常被使用的Java對(duì)象保存于規(guī)定的內(nèi)存空間,通過配置的更新規(guī)則,同步更新數(shù)據(jù)庫內(nèi)容。2、前臺(tái)頁面

29、緩存:對(duì)于前臺(tái)的html頁面按不同的塊來區(qū)分,然后通過一個(gè)key對(duì)象,通過開源JCS技術(shù)存儲(chǔ)于內(nèi)存或磁盤空間。(請(qǐng)求中的頁面對(duì)象不在緩存對(duì)象中)(請(qǐng)求中的頁面對(duì)象存在于緩存對(duì)象中)從上邊兩幅圖可以很清晰的看到,對(duì)于并發(fā)訪問的頁面請(qǐng)求,通過頁面的緩存可以極大的減少對(duì)緊缺資源(數(shù)據(jù)庫連接)的調(diào)用,減少訪問響應(yīng)的時(shí)間,從而提高系統(tǒng)的訪問速度和整體性能。集群模塊:集群目標(biāo):1、支持更大的訪問量,并且可以隨著訪問量的增加可以通過增加服務(wù)器的方式很容易的增加處理能力,而不增加用戶的訪問時(shí)延。2、提高系統(tǒng)穩(wěn)定性,提供幾乎永不停機(jī)的服務(wù)質(zhì)量。即使某一臺(tái)服務(wù)器軟件或者硬件崩潰系統(tǒng)仍然能對(duì)客戶提供服務(wù)。網(wǎng)客通平臺(tái)

30、集群實(shí)現(xiàn)了以下功能:1、Session復(fù)制使用應(yīng)用服務(wù)器自帶的Session復(fù)制功能。如開源的Tomcat,Tomcat5.5帶有Session復(fù)制功能。Tomcat5.5的Session復(fù)制功能有如下的特點(diǎn):1)需要保證Session中的所有的對(duì)象都是可序列化的。只有調(diào)用session的SetAttribute、removeAttribute方法時(shí)才會(huì)觸發(fā)session的復(fù)制。例如有一個(gè)user類型的對(duì)象u保存在Session之中,如果u.setName“aaa)是不會(huì)觸發(fā)Session復(fù)制的,只有u.setAttribute“user,u)才會(huì)觸發(fā)Session的復(fù)制。2)Session的

31、復(fù)制是一個(gè)all-all的復(fù)制,也就是說Session的每次復(fù)制都復(fù)制給集群中的每一臺(tái)服務(wù)器。由于Session的復(fù)制是All-All的,因此當(dāng)服務(wù)器中的集群數(shù)量過多時(shí),有可能發(fā)生集群之間的Session復(fù)制流量過大,本身成為了性能的瓶頸。針對(duì)這個(gè)情況一方面要盡量的減少復(fù)制的數(shù)據(jù)量,這就要求將保留在session中的對(duì)象盡量變得更小,例如應(yīng)該盡可能的拆分開對(duì)象。因?yàn)橐粋€(gè)大對(duì)象只要一個(gè)小的屬性發(fā)生了變化則整個(gè)對(duì)象都要被復(fù)制,如果將對(duì)象拆分開則只要復(fù)制一個(gè)小對(duì)象就可以了,盡量將保存在session中的對(duì)象變小。另一方面,當(dāng)集群中的服務(wù)器數(shù)目真的變得很大時(shí),單靠縮小session中的對(duì)象已經(jīng)是沒用了

32、,這樣的話我們還有兩種技術(shù)方案:1)將集群分域,即將大的集群分成幾個(gè)小的集群,Session復(fù)制只在小集群內(nèi)部發(fā)生。2)主一一從session復(fù)制,即將所有session保留在中心的一臺(tái)或幾臺(tái)服務(wù)器中,并不向集群中的所有服務(wù)器復(fù)制。2.Cache復(fù)制和更新網(wǎng)客通平臺(tái)的Cache分成兩類,頁面Cache和對(duì)象Cache。頁面Cache我們現(xiàn)在采用jcs包Jcs包中帶有Cluster功能,能夠?qū)ache內(nèi)容復(fù)制到整個(gè)集群的服務(wù)器中。該功能需要滿足以下條件:1)需要保證Cache中的所有的對(duì)象都是可序列化的。2)只有調(diào)用Cache的setObject、removeObject方法時(shí)才會(huì)觸發(fā)sess

33、ion的復(fù)制。事務(wù)型的cache在實(shí)際的使用中,Cache起到了巨大的作用,但是也存在有問題。Cache是非事務(wù)化的,即如果在使用過程中,在沒有關(guān)閉Cache的情況下突然關(guān)閉服務(wù)器,或者服務(wù)器突然Down了,則緩存有可能被破壞。在集群環(huán)境下,則緩存會(huì)在服務(wù)器重起的時(shí)候從其他服務(wù)器中復(fù)制過來。在正常使用時(shí)Cache能達(dá)到上G的數(shù)量級(jí),如果集群中某臺(tái)服務(wù)器崩潰后損壞了Cache則在服務(wù)器重起的時(shí)候?qū)⒂袔譍的數(shù)據(jù)需要復(fù)制過來,這樣有可能造成網(wǎng)絡(luò)諸塞,成為整個(gè)系統(tǒng)的性能瓶頸,因此我們采用事務(wù)型的Cache,保證系統(tǒng)崩潰后,重起的時(shí)候只有少部分的數(shù)據(jù)需要從其他服務(wù)器上復(fù)制過來。對(duì)于cache的事務(wù)管理,

34、我們采用BerkeleyDB,BerkeleyDB是歷史悠久的嵌入式數(shù)據(jù)庫系統(tǒng),主要應(yīng)用在UNIX/LINUX操作系統(tǒng)上,其設(shè)計(jì)思想是簡單、小巧、可靠、高性能。當(dāng)數(shù)據(jù)類型較少(特別注意:這并不是說需要管理的數(shù)據(jù)量小),數(shù)據(jù)管理本身不復(fù)雜,且對(duì)數(shù)據(jù)操作要求高效率時(shí),使用BerkeleyDB是一個(gè)很好的選擇。BerkeleyDB是一個(gè)具有工業(yè)強(qiáng)度的嵌入式數(shù)據(jù)庫系統(tǒng),數(shù)據(jù)處理的效率很高BerkeleyDB功能的穩(wěn)定性歷經(jīng)時(shí)間的考驗(yàn),在大量應(yīng)用程序中使用便是明證??梢韵胍?,在同等代碼質(zhì)量的條件下,軟件的BUG數(shù)和代碼的長度是成正比的,相對(duì)幾十兆、幾百兆大型數(shù)據(jù)庫軟件,BerkeleyDB的只有不到50

35、0K的大小,但可以管理大至256T的數(shù)據(jù)量。從這些特性看來,cache非常適合使用BerkeleyDB進(jìn)行管理。上傳文件的共享我們采用共性文件形式的文件共享,主要使用磁盤陣列技術(shù),簡稱RAID(RedundantArraysofInexpensiveDisks)。磁盤陣列是由一個(gè)硬盤控制器來控制多個(gè)硬盤的相互連接,使多個(gè)硬盤的讀寫同步,減少錯(cuò)誤,增加效率和可靠度的技術(shù)。磁盤陣列有以下優(yōu)點(diǎn):1)傳輸速率快;2)儲(chǔ)存容量可提升;3)提升I/O每秒的數(shù)量;4)增加數(shù)據(jù)安全性及穩(wěn)定性;5)大量數(shù)據(jù)快速及簡易管理;6)增加可用運(yùn)時(shí)間,減少維護(hù);Cookie的共享采用負(fù)載均衡器使得多臺(tái)服務(wù)器對(duì)外有相同的I

36、P這樣就能使所與的服務(wù)器都能共享Cookie。同時(shí)采用這個(gè)方案還能保證系統(tǒng)的高可用性。具體可參照下一點(diǎn)。高可用性我們建議采用負(fù)載平衡器,負(fù)載均衡器可以根據(jù)實(shí)際的響應(yīng)時(shí)間制定優(yōu)先級(jí)交付決策,從而實(shí)現(xiàn)高性能、智能化流量管理,達(dá)到最佳的服務(wù)器群性能。采用第七層應(yīng)用控制還可以減少通信高峰期的錯(cuò)誤訊息,因?yàn)椴铄e(cuò)控制和流量管理技術(shù)可以偵測到一些錯(cuò)誤信息,并透明地將會(huì)話重定向到另一個(gè)服務(wù)器,使用戶順利地進(jìn)行使用。例如,服務(wù)器A不可用或者數(shù)據(jù)庫出現(xiàn)錯(cuò)誤,錯(cuò)誤信息將會(huì)返回到負(fù)載均衡器上,然后會(huì)將客戶的訪問指向服務(wù)器B或者將消息重放到其他數(shù)據(jù)庫中去,整個(gè)過程對(duì)用戶是透明的。將內(nèi)部的多個(gè)私有IP的服務(wù)器,對(duì)外映射成

37、一個(gè)相同的IP。而且當(dāng)其中某臺(tái)服務(wù)器Down掉的時(shí)候,負(fù)載均衡器將不會(huì)將這個(gè)服務(wù)器映射出去。數(shù)據(jù)庫集群如果數(shù)據(jù)庫是用Oracle的話,數(shù)據(jù)庫集群可以采用OracleRAC?;赗AC的電子商務(wù)應(yīng)用的用戶或者中間層應(yīng)用服務(wù)器客戶,可以通過虛擬數(shù)據(jù)庫服務(wù)名連接到數(shù)據(jù)庫上oOracle在集群中多個(gè)節(jié)點(diǎn)之間自動(dòng)平衡用戶負(fù)載。不同節(jié)點(diǎn)上的RealApplicationClusters數(shù)據(jù)庫實(shí)例預(yù)訂所有數(shù)據(jù)庫服務(wù)或者部分子集數(shù)據(jù)庫服務(wù)。這使得DBA高度靈活地選定,連接到特定數(shù)據(jù)庫服務(wù)的特定應(yīng)用程序客戶是否可以連接到某些或者全部的數(shù)據(jù)庫節(jié)點(diǎn)。RAC在工作期間,每個(gè)節(jié)點(diǎn)可以單獨(dú)的被使用并且被應(yīng)用程序負(fù)載均衡。

38、如果發(fā)生意外,如一個(gè)節(jié)點(diǎn)的失敗,可以實(shí)現(xiàn)節(jié)點(diǎn)的失敗切換,保證數(shù)據(jù)庫24*7的高可用性。雖然每一個(gè)節(jié)點(diǎn)有一個(gè)不同的物理IP地址時(shí),應(yīng)用客戶仍可以在一個(gè)邏輯數(shù)據(jù)庫服務(wù)名的水平上進(jìn)行連接。因此客戶端對(duì)于不相關(guān)的事情如多服務(wù)器的多個(gè)地址可以毫不關(guān)心。任務(wù)調(diào)度模塊:對(duì)于電子大型的成熟的電子商務(wù)平臺(tái)系統(tǒng),每天都有很多特定的數(shù)據(jù)需要進(jìn)行分析或處理(比如:每天都有大量的郵件需要發(fā)送)。對(duì)于大數(shù)據(jù)量、高數(shù)據(jù)運(yùn)算的處理功能,往往不希望在系統(tǒng)繁忙的時(shí)間進(jìn)行處理。針對(duì)這種狀況,系統(tǒng)采用Jcrontab提供的基礎(chǔ)服務(wù),通過Jcrontab接口的擴(kuò)展,實(shí)現(xiàn)對(duì)系統(tǒng)自動(dòng)執(zhí)行的任務(wù)靈活的、人性化的配置。管理員可以根據(jù)系統(tǒng)的實(shí)際

39、情況,配置相應(yīng)的系統(tǒng)任務(wù)來執(zhí)行。四、應(yīng)用層應(yīng)用層提供各種業(yè)務(wù)實(shí)體的操作,使用EMALL基礎(chǔ)服務(wù)進(jìn)行搭建。應(yīng)用層的基本設(shè)計(jì)都是建立在EMALL基礎(chǔ)服務(wù)層之上。就是欄目一一屬性/權(quán)限一一業(yè)務(wù)實(shí)體。所有業(yè)務(wù)都可以在欄目中統(tǒng)一管理,從而使用統(tǒng)一的權(quán)限配置,使用分層的動(dòng)態(tài)屬性這些基礎(chǔ)功能。這樣做的好處是,當(dāng)業(yè)務(wù)實(shí)體發(fā)生改變或者是有新的業(yè)務(wù)時(shí),系統(tǒng)的基礎(chǔ)架構(gòu)都不需要做出任何調(diào)整,直接就可以使用原有的功能。比如說訂單系統(tǒng),訂單系統(tǒng)可以處理的就是一個(gè)業(yè)務(wù)實(shí)體,如果平臺(tái)現(xiàn)在要加上網(wǎng)上購買服務(wù)的功能,那么只需要新加一個(gè)訂單類型,就可以好像處理一般的商品訂單那樣處理這種購買服務(wù)的訂單。一、商品管理二、拍賣管理三、網(wǎng)

40、上團(tuán)購四、廣告管理五、信息發(fā)布六、排行榜管理七、問卷調(diào)查八、訂單管理九、管理員管理十、用戶管理十一、支付方式十二、配送方式十三、熱門關(guān)鍵字十四、訂閱管理十五、BBS五、業(yè)務(wù)表現(xiàn)層和系統(tǒng)接口層業(yè)務(wù)表現(xiàn)層業(yè)務(wù)表現(xiàn)層就是網(wǎng)客通最終對(duì)客戶的接口,平臺(tái)以網(wǎng)頁的方式提供各種業(yè)務(wù)供客戶使用。相當(dāng)于View(視圖),與應(yīng)用層(Model)、Servlet(Controller)組成Model/View/Controller(MVC)結(jié)構(gòu)。主要是用JSF架構(gòu)實(shí)現(xiàn)。系統(tǒng)接口層系統(tǒng)接口層是網(wǎng)客通對(duì)外部系統(tǒng)的接口。提供各種數(shù)據(jù)導(dǎo)入導(dǎo)出,數(shù)據(jù)查詢等功能。網(wǎng)客通平臺(tái)主要使用WebService提供系統(tǒng)接口。實(shí)際上,Web

41、Service的主要目標(biāo)是跨平臺(tái)的可互操作性。為了達(dá)到這一目標(biāo),WebService完全基于XML(可擴(kuò)展標(biāo)記語言)、XSD(XMLSchema)等獨(dú)立于平臺(tái)、獨(dú)立于軟件供應(yīng)商的標(biāo)準(zhǔn),是創(chuàng)建可互操作的、分布式應(yīng)用程序的新平臺(tái)。使用WebService有以下優(yōu)點(diǎn):跨防火墻的通信出于安全性考慮,服務(wù)器通常只對(duì)公網(wǎng)開放80(HTTP)端口,WebService使用Http協(xié)議進(jìn)行傳輸,正好能自由穿越防火墻。應(yīng)用程序集成在企業(yè)中會(huì)有其他的應(yīng)用程序,比如說MIS、CRM等,這些應(yīng)用可能是建立在不同的平臺(tái)之上,比如說Net。那么網(wǎng)客通和這些平臺(tái)集成的話就會(huì)存在很大的問題,因?yàn)槲覀儾捎玫氖荍2EE。解決這應(yīng)

42、用程序集成的最佳方案就是WebService了。通過WebService,應(yīng)用程序可以用標(biāo)準(zhǔn)的方法把功能和數(shù)據(jù)“暴露出來,供其它應(yīng)用程序使用。B2B的集成同樣的,將上面的一個(gè)問題擴(kuò)充到企業(yè)和企業(yè)之間,跨公司的商務(wù)交易集成通常叫做B2B集成。不同企業(yè)所采用的平臺(tái)就更加五花八門了。WebService是B2B集成成功的關(guān)鍵。通過WebService,公司可以把關(guān)鍵的商務(wù)應(yīng)用“暴露”給指定的供應(yīng)商和客戶。用WebService來實(shí)現(xiàn)B2B集成的最大好處在于可以輕易實(shí)現(xiàn)互操作性。只要把商務(wù)邏輯“暴露出來,成為WebService,就可以讓任何指定的合作伙伴調(diào)用這些商務(wù)邏輯,而不管他們的系統(tǒng)在什么平臺(tái)上運(yùn)行,使用什么開發(fā)語言。這樣就大大減少了花在B2B集成上的時(shí)間和成本。軟件和數(shù)據(jù)重用軟件重用是一個(gè)很大的主題,重用的形式很多,重用的程度有大有小。最基本的形式是源代碼模塊或者類一級(jí)的重用,另一種形式是二進(jìn)制形式的組件重用。WebService在允許重用代

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論