線(xiàn)程(Thread)
首先,線(xiàn)程是很多J2EE初學(xué)者容易忽視的一個(gè)基本知識,可以說(shuō),無(wú)論你是從Java世界的哪一扇門(mén)進(jìn)入J2EE的,線(xiàn)程是必經(jīng)之道。
已經(jīng)不記得在哪里看到過(guò)下面一段英文:
在過(guò)去,大概只有勇敢的程序員才勇于使用pthread和Win32線(xiàn)程,現代語(yǔ)言如Java正試圖在編寫(xiě)一些令人恐懼的應用如并行計算等方面來(lái)挽救我們。
J2EE的Servlet和EJB確保我們不用擔心線(xiàn)程以及同步等問(wèn)題,我們只要象往常一樣編程,容器自動(dòng)會(huì )使用線(xiàn)程池等技術(shù)來(lái)支持我們的應用。
由此可見(jiàn),線(xiàn)程是J2EE最基本的底層機制,每個(gè)Servlet/Jsp程序其實(shí)是一段線(xiàn)程程序,如果你不懂得線(xiàn)程/多線(xiàn)程的一些原理,如何能嫻熟駕馭J2EE的Servlet/Jsp?
在線(xiàn)程計算方面有很多權威,Dou Lee無(wú)疑是這方面的杰出代表,他的并行計算包已經(jīng)加入了最新的JDK1.5版本中,他的書(shū)籍都屬于奠基性質(zhì),但是,這樣書(shū)籍可能不是很適合只想對線(xiàn)程進(jìn)行了解的J2EE初學(xué)者。
《Java線(xiàn)程編程》(Java Thread Programming)
是我推薦的第一本有關(guān)J2EE書(shū)籍,在這本書(shū)中,作者以簡(jiǎn)單的例子,形象易懂地從單線(xiàn)程講解到多線(xiàn)程,線(xiàn)程池(Thread Pool)、并發(fā)同時(shí)訪(fǎng)問(wèn)對象和變量(Concurrent Access to Objects and Variables),這些都是我們在平時(shí)Servlet/Jsp編程中經(jīng)常會(huì )發(fā)生疑惑的地方,在這本書(shū)的案例中,作者清晰明了地給我們展示這些細節而有重要的技術(shù)。同時(shí),也讓我們深刻地理解了直接編制多線(xiàn)程應用是一件“令人恐懼”的事情。
很有意思的是,我在一家網(wǎng)上書(shū)店社區里也發(fā)現了與我有同樣見(jiàn)解的帖子,稱(chēng)這本書(shū)是“一本讓經(jīng)典成為過(guò)去的書(shū)”
設計模式
線(xiàn)程世界就象微生物世界一樣,復雜且幾乎沒(méi)有邊界,作為信息系統的程序員如果太執著(zhù)于這樣純技術(shù)的微觀(guān)層面,可能浪費太多寶貴時(shí)間和精力,在基本掌握多線(xiàn)程機制后,需要更加關(guān)注J2EE的設計應用了。
J2EE是Java世界中一個(gè)獨特的框架或標準,所以,我們首先需要掌握基于Java的設計應用,這些設計應用技巧,是先行者經(jīng)過(guò)長(cháng)期實(shí)踐總結出來(lái)的心得,他們稱(chēng)之為設計模式。在J2EE應用中,只有大量使用設計模式,才能體現出分離和解耦的最高宗旨,才能使得自己的J2EE系統脈絡(luò )清晰、層次分明,這樣的系統才真正具有良好的可伸縮性、穩固的健壯性以及方便的可維護性。
GoF 23種設計模式已經(jīng)成為經(jīng)典,2002年我在我的網(wǎng)站J道發(fā)表23種設計模式Java詳解時(shí),竟然在中文google里很難發(fā)現這方面的資料,這讓我萬(wàn)分驚訝,也許國人確實(shí)是非常實(shí)在,只對算法、數據結構等這樣看得見(jiàn)、摸得著(zhù)的概念感興趣,其實(shí)我一直反復和別人講:設計模式不是純抽象概念,它是實(shí)踐的總結,如同UML一樣,是一種交流和編碼實(shí)現的語(yǔ)言。
我在2002年幫朋友購買(mǎi)了GoF 23種設計模式的中文版:《設計模式:可復用面向對象軟件的基礎》,它是2000年12月第2次印刷的版本,這樣經(jīng)典必讀書(shū)籍,8000冊在2年時(shí)間內都沒(méi)有銷(xiāo)售完畢,相比那些喧囂炒作的書(shū)籍,在出版幾個(gè)月內銷(xiāo)售過(guò)萬(wàn),越發(fā)顯得我們這個(gè)社會(huì )的浮躁和急功近利了。
當然,這本薄薄的書(shū)雖然由四個(gè)國人鼎力協(xié)助翻譯,想必他們也殫思竭慮,盡了最大努力了,可惜書(shū)中還是有很多翻譯欠妥之處,影響了它的銷(xiāo)量。
由于這本經(jīng)典的GoF設計模式比較難懂,初學(xué)者更多應該是從實(shí)例應用中了解和掌握GoF設計模式,相關(guān)提供實(shí)例應用的書(shū)籍有下面幾本:
Mark Grand的Patterns in Java系列;
美籍華人閻宏的《Java與模式》;
筆者的《Java實(shí)用系統開(kāi)發(fā)指南》;
EJB
EJB是J2EE中一個(gè)重要組成部分,J2EE推薦將你的業(yè)務(wù)功能核心放在EJB中實(shí)現,EJB類(lèi)似肯得基的“全家桶”,將實(shí)際中需要的基礎功能全都打包在一起了,如果你是個(gè)挑剔或個(gè)性化的客戶(hù),我想你可能不會(huì )只滿(mǎn)足于“全家桶”。不管“全家桶”是否合適你,了解它里面裝的是什么是一個(gè)必需的過(guò)程。掌握EJB需要從兩個(gè)方面著(zhù)手:基本原理和如何使用。
《精通EJB(第二版)》
是對EJB原理講解得比較透徹,但是書(shū)中將EJB一些本質(zhì)原理推卸給了Corba,而對Corba又沒(méi)有仔細介紹,我認為初學(xué)者應該在這里適可而止,如果你非常對EJB底層實(shí)現感興趣,我推薦閱讀JBoss的源碼,其實(shí)JBoss源碼在你孜孜不倦的鉆研之勁攻擊下很快會(huì )土崩瓦解。
對象池(Object Pool)、RMI和事務(wù)機制應該是EJB原理掌握三個(gè)方向,這三種技術(shù)方向又可以推薦很多書(shū)籍供學(xué)習研究,這里就不說(shuō)了。
EJB主要分EJB容器和EJB應用系統,初學(xué)者更多精力應該關(guān)注如何構建EJB應用系統,由于EJB提供功能強大且非常有特點(diǎn),因此,使用他們要非常小心,遵循一定的前提和規則,由此,EJB設計模式是不能不了解的。
《EJB設計模式》
是這方面的經(jīng)典之作,在書(shū)中,作者指出了使用CMP注意特點(diǎn)、DAO模式的重要性、DTO模式的變種等。閱讀本書(shū)的同時(shí),如果參考SUN的PetStore源碼學(xué)習,將會(huì )起到事半功倍的效果,完上面兩本書(shū),自己動(dòng)手實(shí)踐非常重要,EJB使用中關(guān)于EJB reference配置比較麻煩,其原理是這樣:調用者---- > EJB Reference ---> 被調用EJB的JNDI名稱(chēng) ---- >被調用EJB,這些細節使用問(wèn)題只有實(shí)踐時(shí)才能碰到,也可以從網(wǎng)上尋找一些這方面的電子教程實(shí)例。
只有調試了一兩個(gè)EJB實(shí)例,這時(shí)你才可以站出來(lái)表達你的想法:喜歡或不喜歡?架構選型時(shí)也可以提供參考意見(jiàn):是輕量型還是重量型?盲目排斥EJB或認為EJB是唯一解決方案等兩種極端觀(guān)點(diǎn)是要不得的,條條大路通羅馬,伸縮和性能是關(guān)鍵。
這里推薦一本從純設計角度看待EJB/J2EE的書(shū)籍:Rod Johnson的《J2EE設計開(kāi)發(fā)編程指南》,英文是Expert One-on-One J2EE Design and Development,Rod Johnson在書(shū)中從一個(gè)完美的設計角度指出了EJB缺點(diǎn),這些缺點(diǎn)他是用黑體標識,非常醒目,同時(shí),他將如果不使用EJB所帶來(lái)的額外工作量使用正常小字體標識了,算是輕描淡寫(xiě)吧。當然,Rod Johnson為了將其理想的設計落實(shí)為代碼,主持了Spring框架開(kāi)發(fā),如果J2EE領(lǐng)域有一個(gè)既符合完美的設計要求,又能支持成熟應用,同時(shí)又是業(yè)界標準,那是一個(gè)多么令人向往的事情,Spring框架至少在這方面做了有益的探索。
集群、Web服務(wù)和資源整合
對于中大型軟件系統,集群和Web服務(wù)是必需掌握的技術(shù),目前相關(guān)書(shū)籍不多。如何將J2EE新技術(shù)和現有資源整合,也屬于一個(gè)探索性的領(lǐng)域,期待這幾個(gè)方面有好的書(shū)籍問(wèn)世。
(e129)
聯(lián)系客服