從根本上來說,JavaEE 是一種企業(yè)應(yīng)用的軟件架構(gòu)。在了解它之前,讓我們來先看看它的發(fā)展背景,它的發(fā)展背景中總是與分布式應(yīng)用和互聯(lián)網(wǎng)(Internate)應(yīng)用密切相關(guān) Web與JavaEE:互聯(lián)網(wǎng)從根本上改變對企業(yè)軟件的系統(tǒng)需求,軟件需要處理來自Internate的大量請求,并要及時作出響應(yīng)。對于一個成功的站點(diǎn),每天數(shù)百萬次點(diǎn)擊很是普遍,如果點(diǎn)擊平均分布,這并不令人擔(dān)憂,但實(shí)際情況并非如此,如前一段時間奧運(yùn)門票在線訂購,瞬間點(diǎn)擊量超百萬,導(dǎo)致系統(tǒng)崩潰。 Sun公司開發(fā)JavaEE(當(dāng)時叫J2EE)的時候,正是基于這一背景,試圖構(gòu)建一個新的架構(gòu)來解決互聯(lián)網(wǎng)應(yīng)用: 性能:對用戶的請求作出響應(yīng) 易用性:不同用戶應(yīng)該以不同的形式訪問訪問不同的內(nèi)容 安全性:對用戶訪問進(jìn)行驗(yàn)證,防止對數(shù)據(jù)進(jìn)行未授權(quán)訪問 可用性:提供24×7全天候的可用性,且很少停機(jī) 可擴(kuò)充性:在不需要人工干預(yù)的情況下支持負(fù)載變化 分布式應(yīng)用與JavaEE:20世紀(jì)80年代,個人計算機(jī)性價比逐漸達(dá)到了高端工作站和服務(wù)器的水準(zhǔn),使分布式計算應(yīng)用迅速普及,90年代初期,對象管理小組開發(fā)了公共對象請求代理架構(gòu)CORBA來解決這一問題,它提供了一種標(biāo)準(zhǔn)的軟件平臺,分布的對象可以在此平臺上透明的無縫交互,同時還允許查找計算機(jī)網(wǎng)絡(luò)上的對象,并請求他們提供服務(wù)。我的第一個軟件項(xiàng)目就是用Java語言通過CORBA來獲取服務(wù)器提供的市場行情。CORBA作為分布式對象技術(shù),并沒有長時間維持其壟斷地位,SUN在推出Java后,緊接著推出了遠(yuǎn)程方法調(diào)用RMI,并在90年代末期,以RMI為通信基礎(chǔ)構(gòu)建了JavaEE。在相當(dāng)長的一段時間,JavaEE就是一種分布式應(yīng)用,這讓JavaEE戰(zhàn)勝了CORBA,.COM+,但是也帶來了巨大的開銷(超出一個數(shù)量級的)畢竟不是所有的企業(yè)應(yīng)用和互聯(lián)網(wǎng)應(yīng)用都是分布式的,這讓一些人認(rèn)為JavaEE架構(gòu)有問題,然后這并不是JavaEE的錯,在市場上,JavaEE需要迎合當(dāng)時的技術(shù)潮流?,F(xiàn)在如果你不用分布式,JavaEE也同樣提供了相關(guān)技術(shù)供你使用,如Local EJB。 回到本文的主題,JavaEE 是一種企業(yè)應(yīng)用的軟件架構(gòu),了解了JavaEE的發(fā)展背景后,現(xiàn)在讓我們來分析一下JavaEE倆個核心方面,企業(yè)應(yīng)用和軟件架構(gòu)。
![]() 如果你想開發(fā)一個桌面應(yīng)用,這個應(yīng)用能具有鬧鐘功能,提醒你什么時候該開會,什么時候該閉眼休息,這是不是企業(yè)用用呢?這當(dāng)然不是,為什么呢,因?yàn)樗痪哂衅髽I(yè)應(yīng)用的特點(diǎn)。一般來說,企業(yè)應(yīng)用有如下需求; 1 并發(fā)支持:同時收到大量服務(wù)請求,并需要到得到響應(yīng),這些服務(wù)請求有可能需要操作共享數(shù)據(jù) 2 事務(wù)支持:支持事務(wù)完整性,對于多個系統(tǒng)(資源系統(tǒng),如數(shù)據(jù)庫)的,需要支持分布式事務(wù)。 3 交互支持:企業(yè)應(yīng)用通常都會涉及到多個系統(tǒng),多個系統(tǒng)通過何種技術(shù)交互。如最常見的有程序與數(shù)據(jù)庫系統(tǒng)交互,與郵件服務(wù)器交互,WebService 也是交互的一種方式 4 集群支持:為了提供系統(tǒng)可用性和可伸縮性,企業(yè)應(yīng)用應(yīng)該很容易隨業(yè)務(wù)的需求而擴(kuò)展 5 安全支持:受保護(hù)的資源獲得保護(hù) 6 Web支持:企業(yè)應(yīng)用越來越多的是基于B/S結(jié)構(gòu) ?。稯/R mapping,企業(yè)應(yīng)用有大量的業(yè)務(wù)對象,這些對象通常需要存儲到關(guān)系數(shù)據(jù)庫系統(tǒng)里,O/R mapping支持極大方便了程序的開發(fā)和修改 ?。阜植际街С郑翰檎液驼{(diào)用分布式服務(wù) 9 XML支持 一般來說,企業(yè)應(yīng)用不一定包括上面所有需求, 但JavaEE提供了對所有以上需求的支持 JTA/JTS:Java Transaction API / Java Transaction Service,提供了事務(wù)服務(wù)和分布式事務(wù)管理。事務(wù)總是由資源系統(tǒng)(Resource),如數(shù)據(jù)庫系統(tǒng),遺留XXX系統(tǒng)等提供,JTA/JTS使你很容易的使用這些資源提供的事務(wù)功能,特別是當(dāng)你使用EJB的時候 JMS/JDBC/WebSerivce/Mail/EJB:提供了交互支持,不同系統(tǒng)之間可以通過多種方式交互,如 1) 數(shù)據(jù)庫表共享(視圖共享),內(nèi)部系統(tǒng)多個模塊可以通過這種方式共享數(shù)據(jù),此方式依賴于數(shù)據(jù)的強(qiáng)大穩(wěn)定性。缺點(diǎn)是不支持同步 2) 文件系統(tǒng)共享:性能好,如短信網(wǎng)關(guān)常用此方式與短信內(nèi)容管理平臺交換短信 3) Http:依賴于Http的可靠性,此方式也廣泛用于系統(tǒng)交互,性能依賴于不同的Web服務(wù)器 4) 消息服務(wù),JavaEE提供了消息服務(wù),消息服務(wù)是一種高性能,高穩(wěn)定的服務(wù),對于異步支持的特別好,對于Java系統(tǒng)之間異步交互,JMS是一種首選方案。 5) 郵件:發(fā)送接收郵件,如各省里的報表信息可以通過郵件發(fā)到背景處理中心集中處理 6)WebService(JAX-WS):跨平臺,跨語言支持,對于同步支持的很好,是不同系統(tǒng),不同供應(yīng)商交互的首選方式 7)EJB:EJB提供了對分布式的支持,使用EJB也是交互的一種不錯選擇 8) FTP:如使用FTP傳送設(shè)備采集到的賬單明細(xì)到計費(fèi)系統(tǒng),對大數(shù)據(jù)量支持的和你好 9) RMI:Remote Mehod Invoker,Java EE分布式基礎(chǔ)。成就了Java EE的繁榮,但到如今并不流行,原因是分布式調(diào)用帶來過來的開銷。如你調(diào)用一個Remote EJB,和調(diào)用 LocalEJB 是倆個不同數(shù)量級的開銷 10)其他的還有Socket,調(diào)用COBAR等
Container:Container包含了組件,組件又通過Container提供的服務(wù)完成操作。Java EE提供了WebContainer,EJBContainer,這些Container均提供了事務(wù)服務(wù),安全服務(wù),消息服務(wù)等。組件主要是JSP/Servelt組件,以及EJB組件,容器管理組件的生命周期,實(shí)現(xiàn)了系統(tǒng)可收縮性。 JAAS:Java認(rèn)證于授權(quán)服務(wù),提供了對Java組件的安全保護(hù),如哪些Servelt,JSP能被哪些用戶訪問,哪些EJB能被調(diào)用等。需要注意的是,JAAS只提供了對JAVAEE組件的保護(hù),對于企業(yè)應(yīng)用業(yè)務(wù)的權(quán)限,它是做不到的 JPA:Java Persistence API,提供了O/R Mapping。相對于其他O/R Mapping工具來說,JPA提供了最小的特性,在我看來也好,不會導(dǎo)致濫用Mapping工具。JPA在Jboss的實(shí)現(xiàn)是用Hibernate。 EJB: 業(yè)務(wù)邏輯放在系統(tǒng)哪兒最合適?每個系統(tǒng)都有每個系統(tǒng)的方案,在Java EE中,答案就是EJB里。因?yàn)镋JB提供了很多服務(wù),如事務(wù)服務(wù),安全服務(wù),AOP功能,并且EJB具有可伸縮性,分布式等其他優(yōu)點(diǎn)供你使用,你不需要為這些服務(wù)寫任何額外代碼(你用了EJB,你就享受的是是VIP服務(wù) ^_^?。V档米⒁獾氖?,現(xiàn)在的Entity Bean在Java EE 5中已經(jīng)取消,取而代之的概念就是Entity HTTP:大部分企業(yè)應(yīng)用都會用到Servlet/JSP,這是我們程序入門Java EE的必備知識 JNDI:Java Naming and Directory Interface,提供服務(wù)查找,如查找EJB,查找DataSource JAXP/JAXB:前者提供了XML解析接口,你也可以用Xercs,Dom4j,JDom等很多工具,后者提供了XML與JavaBean的綁定,可選工具如Bea的XMLBean(好像現(xiàn)在已經(jīng)交給Apache) Java EE Application Server:提供了集群,負(fù)載平衡支持,這不是Java EE規(guī)范要求的功能,但所有的應(yīng)用服務(wù)器都支持(你再次享受了VIP服務(wù)) JavaEE還提供了不少技術(shù)服務(wù)于企業(yè)應(yīng)用,在此就不一一列舉,希望我們通過了解企業(yè)應(yīng)用來進(jìn)一步加深對JavaEE技術(shù)的了解。只有認(rèn)識的JavaEE的根本,才能更好的了解,應(yīng)用,選擇相關(guān)技術(shù)
JavaEE是基于企業(yè)應(yīng)用需求的一種軟件架構(gòu),那么,什么是軟件架構(gòu),這軟件架構(gòu)是什么樣子呢? 軟件架構(gòu)是指元素和相互關(guān)系的集合,這些集合不但滿足了系統(tǒng)功能需求,而且也要滿足一些質(zhì)量要求,我們已經(jīng)從企業(yè)應(yīng)用看到了JavaEE滿足功能需求,因此不在這兒描述,本章的重點(diǎn)是描述架構(gòu)的質(zhì)量屬性,看看JavaEE是如何滿足其質(zhì)量屬性的(參考了軟件架構(gòu)實(shí)踐-Software Architecture in Practice) 可移植性:JavaEE以最少的工作量在各種計算機(jī)平臺上實(shí)現(xiàn),這得益于Java與生俱來的特點(diǎn)以及SUN對JavaEE的開放(JavaEE的規(guī)范通過JCP組織來制定) 可構(gòu)建性:JavaEE 程序是易于創(chuàng)建和管理的,這得益于JavaEE定于了組件的生命周期和管理這些組件的角色。使得IDE負(fù)責(zé)開發(fā),打包應(yīng)用程序,應(yīng)用服務(wù)器負(fù)責(zé)部署,卸載,管理組件 平衡特性: 標(biāo)準(zhǔn)開發(fā)人員,廠商,部署人員的各自任務(wù),允許廠商進(jìn)行優(yōu)化,提供自己的選擇(當(dāng)你在做移植的時候,尤其要注意,雖然都遵循JavaEE標(biāo)準(zhǔn),但移植還是很麻煩的,甚至目標(biāo)應(yīng)用服務(wù)器可能不支持你的功能) 實(shí)現(xiàn)透明性:提供了實(shí)現(xiàn)細(xì)節(jié)完整的透明性,使客戶端程序獨(dú)立于對象的實(shí)施細(xì)節(jié)(如服務(wù)器組件位置,操作系統(tǒng),廠商) 互操作性:這總是JavaEE有趣的地方,JavaEE可以于CORBA,Microsfot組件互操作(不知道能不能與.Net互操作) 可擴(kuò)展性:JavaEE已經(jīng)有了很多變化,通過JCP和開源世界的廣泛影響,相信JavaEE架構(gòu)會跟隨潮流而改變,如分布式在現(xiàn)在就不是重點(diǎn)了,取而代之的是Web Service 可擴(kuò)充性:分布式和集群保證了性能和可靠性 易用性:JavaEE架構(gòu)還是易于開發(fā)人員使用,雖然沒有辦法和腳本語言比,但最為一個真正的語言,無論是Servlet,JSP,還是EJB,WebService 都是易于學(xué)習(xí)和使用的 安全性:JavaEE架構(gòu)內(nèi)置了安全性功能(這與業(yè)務(wù)系統(tǒng)安全不一樣的,所以不要抱怨JAAS不好用) 通過對企業(yè)應(yīng)用的描述和軟件架構(gòu)的質(zhì)量屬性描述,相信你已經(jīng)對JavaEE又有新的認(rèn)識,最后附上一個J2EE1.4的架構(gòu)圖,當(dāng)你真正理解這個圖的時候,你才理解了JavaEE
|