明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

J2EE修煉之4書5經(jīng)

[摘要]J2EE其實(shí)沒有四書五經(jīng),因?yàn)镴2EE一直如洶涌澎湃的大江,推陳出新,不斷高速發(fā)展,這是一種帶領(lǐng)我們走向未來的技術(shù)。當(dāng)然,如何在這種氣勢如虹的潮流之中不至于迷失方向,需要相關(guān)指南性書籍的引導(dǎo)。本文將從線程和模式兩個方面推薦J2EE書籍,這兩個方面正好是兩種不同的方向,線程是從微觀、底層機(jī)制入手;而...
J2EE其實(shí)沒有四書五經(jīng),因?yàn)镴2EE一直如洶涌澎湃的大江,推陳出新,不斷高速發(fā)展,這是一種帶領(lǐng)我們走向未來的技術(shù)。當(dāng)然,如何在這種氣勢如虹的潮流之中不至于迷失方向,需要相關(guān)指南性書籍的引導(dǎo)。本文將從線程和模式兩個方面推薦J2EE書籍,這兩個方面正好是兩種不同的方向,線程是從微觀、底層機(jī)制入手;而模式則是從設(shè)計高度來看待J2EE。

  線程(Thread)

  首先,線程是很多J2EE初學(xué)者容易忽視的一個基本知識,可以說,無論你是從Java世界的哪一扇門進(jìn)入J2EE的,線程是必經(jīng)之道。

  已經(jīng)不記得在哪里看到過下面一段英文:

  在過去,大概只有勇敢的程序員才勇于使用pthread和Win32線程,現(xiàn)代語言如Java正試圖在編寫一些令人恐懼的應(yīng)用如并行計算等方面來挽救我們。

  J2EE的Servlet和EJB確保我們不用擔(dān)心線程以及同步等問題,我們只要象往常一樣編程,容器自動會使用線程池等技術(shù)來支持我們的應(yīng)用。

  由此可見,線程是J2EE最基本的底層機(jī)制,每個Servlet/Jsp程序其實(shí)是一段線程程序,如果你不懂得線程/多線程的一些原理,如何能嫻熟駕馭J2EE的Servlet/Jsp?

  在線程計算方面有很多權(quán)威,Dou Lee無疑是這方面的杰出代表,他的并行計算包已經(jīng)加入了最新的JDK1.5版本中,他的書籍都屬于奠基性質(zhì),但是,這樣書籍可能不是很適合只想對線程進(jìn)行了解的J2EE初學(xué)者。

  《Java線程編程》(Java Thread Programming)

  是我推薦的第一本有關(guān)J2EE書籍,在這本書中,作者以簡單的例子,形象易懂地從單線程講解到多線程,線程池(Thread Pool)、并發(fā)同時訪問對象和變量(Concurrent Access to Objects and Variables),這些都是我們在平時Servlet/Jsp編程中經(jīng)常會發(fā)生疑惑的地方,在這本書的案例中,作者清晰明了地給我們展示這些細(xì)節(jié)而有重要的技術(shù)。同時,也讓我們深刻地理解了直接編制多線程應(yīng)用是一件“令人恐懼”的事情。

  很有意思的是,我在一家網(wǎng)上書店社區(qū)里也發(fā)現(xiàn)了與我有同樣見解的帖子,稱這本書是“一本讓經(jīng)典成為過去的書”

  設(shè)計模式

  線程世界就象微生物世界一樣,復(fù)雜且?guī)缀鯖]有邊界,作為信息系統(tǒng)的程序員如果太執(zhí)著于這樣純技術(shù)的微觀層面,可能浪費(fèi)太多寶貴時間和精力,在基本掌握多線程機(jī)制后,需要更加關(guān)注J2EE的設(shè)計應(yīng)用了。

  J2EE是Java世界中一個獨(dú)特的框架或標(biāo)準(zhǔn),所以,我們首先需要掌握基于Java的設(shè)計應(yīng)用,這些設(shè)計應(yīng)用技巧,是先行者經(jīng)過長期實(shí)踐總結(jié)出來的心得,他們稱之為設(shè)計模式。在J2EE應(yīng)用中,只有大量使用設(shè)計模式,才能體現(xiàn)出分離和解耦的最高宗旨,才能使得自己的J2EE系統(tǒng)脈絡(luò)清晰、層次分明,這樣的系統(tǒng)才真正具有良好的可伸縮性、穩(wěn)固的健壯性以及方便的可維護(hù)性。

  GoF 23種設(shè)計模式已經(jīng)成為經(jīng)典,2002年我在我的網(wǎng)站J道發(fā)表23種設(shè)計模式Java詳解時,竟然在中文google里很難發(fā)現(xiàn)這方面的資料,這讓我萬分驚訝,也許國人確實(shí)是非常實(shí)在,只對算法、數(shù)據(jù)結(jié)構(gòu)等這樣看得見、摸得著的概念感興趣,其實(shí)我一直反復(fù)和別人講:設(shè)計模式不是純抽象概念,它是實(shí)踐的總結(jié),如同UML一樣,是一種交流和編碼實(shí)現(xiàn)的語言。

  我在2002年幫朋友購買了GoF 23種設(shè)計模式的中文版:《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》,它是2000年12月第2次印刷的版本,這樣經(jīng)典必讀書籍,8000冊在2年時間內(nèi)都沒有銷售完畢,相比那些喧囂炒作的書籍,在出版幾個月內(nèi)銷售過萬,越發(fā)顯得我們這個社會的浮躁和急功近利了。

  當(dāng)然,這本薄薄的書雖然由四個國人鼎力協(xié)助翻譯,想必他們也殫思竭慮,盡了最大努力了,可惜書中還是有很多翻譯欠妥之處,影響了它的銷量。

  由于這本經(jīng)典的GoF設(shè)計模式比較難懂,初學(xué)者更多應(yīng)該是從實(shí)例應(yīng)用中了解和掌握GoF設(shè)計模式,相關(guān)提供實(shí)例應(yīng)用的書籍有下面幾本:

  Mark Grand的Patterns in Java系列;

  美籍華人閻宏的《Java與模式》;

  筆者的《Java實(shí)用系統(tǒng)開發(fā)指南》;

  EJB

  EJB是J2EE中一個重要組成部分,J2EE推薦將你的業(yè)務(wù)功能核心放在EJB中實(shí)現(xiàn),EJB類似肯得基的“全家桶”,將實(shí)際中需要的基礎(chǔ)功能全都打包在一起了,如果你是個挑剔或個性化的客戶,我想你可能不會只滿足于“全家桶”。

  不管“全家桶”是否合適你,了解它里面裝的是什么是一個必需的過程。掌握EJB需要從兩個方面著手:基本原理和如何使用。

  《精通EJB(第二版)》(后注:http://www.javafan.net/softview.jsp?ID=110)

  是對EJB原理講解得比較透徹,但是書中將EJB一些本質(zhì)原理推卸給了Corba,而對Corba又沒有仔細(xì)介紹,我認(rèn)為初學(xué)者應(yīng)該在這里適可而止,如果你非常對EJB底層實(shí)現(xiàn)感興趣,我推薦閱讀JBoss的源碼,其實(shí)JBoss源碼在你孜孜不倦的鉆研之勁攻擊下很快會土崩瓦解。

  對象池(Object Pool)、RMI和事務(wù)機(jī)制應(yīng)該是EJB原理掌握三個方向,這三種技術(shù)方向又可以推薦很多書籍供學(xué)習(xí)研究,這里就不說了。

  EJB主要分EJB容器和EJB應(yīng)用系統(tǒng),初學(xué)者更多精力應(yīng)該關(guān)注如何構(gòu)建EJB應(yīng)用系統(tǒng),由于EJB提供功能強(qiáng)大且非常有特點(diǎn),因此,使用他們要非常小心,遵循一定的前提和規(guī)則,由此,EJB設(shè)計模式是不能不了解的。

  《EJB設(shè)計模式》(后注:http://www.javafan.net/softview.jsp?ID=69)是這方面的經(jīng)典之作,在書中,作者指出了使用CMP注意特點(diǎn)、DAO模式的重要性、DTO模式的變種等。閱讀本書的同時,如果參考SUN的PetStore源碼學(xué)習(xí),將會起到事半功倍的效果,

  看完上面兩本書,自己動手實(shí)踐非常重要,EJB使用中關(guān)于EJB reference配置比較麻煩,其原理是這樣:調(diào)用者---- > EJB Reference ---> 被調(diào)用EJB的JNDI名稱 ---- >被調(diào)用EJB,這些細(xì)節(jié)使用問題只有實(shí)踐時才能碰到,也可以從網(wǎng)上尋找一些這方面的電子教程實(shí)例。

  只有調(diào)試了一兩個EJB實(shí)例,這時你才可以站出來表達(dá)你的想法:喜歡或不喜歡?架構(gòu)選型時也可以提供參考意見:是輕量型還是重量型?盲目排斥EJB或認(rèn)為EJB是唯一解決方案等兩種極端觀點(diǎn)是要不得的,條條大路通羅馬,伸縮和性能是關(guān)鍵。

  這里推薦一本從純設(shè)計角度看待EJB/J2EE的書籍:Rod Johnson的《J2EE設(shè)計開發(fā)編程指南》,英文是Expert One-on-One J2EE Design and Development,Rod Johnson在書中從一個完美的設(shè)計角度指出了EJB缺點(diǎn),這些缺點(diǎn)他是用黑體標(biāo)識,非常醒目,同時,他將如果不使用EJB所帶來的額外工作量使用正常小字體標(biāo)識了,算是輕描淡寫吧。當(dāng)然,Rod Johnson為了將其理想的設(shè)計落實(shí)為代碼,主持了Spring框架開發(fā),如果J2EE領(lǐng)域有一個既符合完美的設(shè)計要求,又能支持成熟應(yīng)用,同時又是業(yè)界標(biāo)準(zhǔn),那是一個多么令人向往的事情,Spring框架至少在這方面做了有益的探索。

  集群、Web服務(wù)和資源整合

  對于中大型軟件系統(tǒng),集群和Web服務(wù)是必需掌握的技術(shù),目前相關(guān)書籍不多。如何將J2EE新技術(shù)和現(xiàn)有資源整合,也屬于一個探索性的領(lǐng)域,期待這幾個方面有好的書籍問世。