线程(Thread)
首先,线程是很多J2EE初学者容易忽视的一个基本知识,可以说,无论你是从Java世界的哪一扇门进入J2EE的,线程是必经之道。
已经不记得在哪里看到过下面一段英文:
在过去,大概只有勇敢的程序员才勇于使用pthread和Win32线程,现代语言如Java正试图在编写一些令人恐惧的应用如并行计算等方面来挽救我们。
J2EE的Servlet和EJB确保我们不用担心线程以及同步等问题,我们只要象往常一样编程,容器自动会使用线程池等技术来支持我们的应用。
由此可见,线程是J2EE最基本的底层机制,每个Servlet/Jsp程序其实是一段线程程序,如果你不懂得线程/多线程的一些原理,如何能娴熟驾驭J2EE的Servlet/Jsp?
在线程计算方面有很多权威,Dou Lee无疑是这方面的杰出代表,他的并行计算包已经加入了最新的JDK1.5版本中,他的书籍都属于奠基性质,但是,这样书籍可能不是很适合只想对线程进行了解的J2EE初学者。
《Java线程编程》(Java Thread Programming)
是我推荐的第一本有关J2EE书籍,在这本书中,作者以简单的例子,形象易懂地从单线程讲解到多线程,线程池(Thread Pool)、并发同时访问对象和变量(Concurrent Access to Objects and Variables),这些都是我们在平时Servlet/Jsp编程中经常会发生疑惑的地方,在这本书的案例中,作者清晰明了地给我们展示这些细节而有重要的技术。同时,也让我们深刻地理解了直接编制多线程应用是一件“令人恐惧”的事情。
很有意思的是,我在一家网上书店社区里也发现了与我有同样见解的帖子,称这本书是“一本让经典成为过去的书”
设计模式
线程世界就象微生物世界一样,复杂且几乎没有边界,作为信息系统的程序员如果太执著于这样纯技术的微观层面,可能浪费太多宝贵时间和精力,在基本掌握多线程机制后,需要更加关注J2EE的设计应用了。
J2EE是Java世界中一个独特的框架或标准,所以,我们首先需要掌握基于Java的设计应用,这些设计应用技巧,是先行者经过长期实践总结出来的心得,他们称之为设计模式。在J2EE应用中,只有大量使用设计模式,才能体现出分离和解耦的最高宗旨,才能使得自己的J2EE系统脉络清晰、层次分明,这样的系统才真正具有良好的可伸缩性、稳固的健壮性以及方便的可维护性。
GoF 23种设计模式已经成为经典,2002年我在我的网站J道发表23种设计模式Java详解时,竟然在中文google里很难发现这方面的资料,这让我万分惊讶,也许国人确实是非常实在,只对算法、数据结构等这样看得见、摸得着的概念感兴趣,其实我一直反复和别人讲:设计模式不是纯抽象概念,它是实践的总结,如同UML一样,是一种交流和编码实现的语言。
我在2002年帮朋友购买了GoF 23种设计模式的中文版:《设计模式:可复用面向对象软件的基础》,它是2000年12月第2次印刷的版本,这样经典必读书籍,8000册在2年时间内都没有销售完毕,相比那些喧嚣炒作的书籍,在出版几个月内销售过万,越发显得我们这个社会的浮躁和急功近利了。
当然,这本薄薄的书虽然由四个国人鼎力协助翻译,想必他们也殚思竭虑,尽了最大努力了,可惜书中还是有很多翻译欠妥之处,影响了它的销量。
由于这本经典的GoF设计模式比较难懂,初学者更多应该是从实例应用中了解和掌握GoF设计模式,相关提供实例应用的书籍有下面几本:
Mark Grand的Patterns in Java系列;
美籍华人阎宏的《Java与模式》;
笔者的《Java实用系统开发指南》;
EJB
EJB是J2EE中一个重要组成部分,J2EE推荐将你的业务功能核心放在EJB中实现,EJB类似肯得基的“全家桶”,将实际中需要的基础功能全都打包在一起了,如果你是个挑剔或个性化的客户,我想你可能不会只满足于“全家桶”。
不管“全家桶”是否合适你,了解它里面装的是什么是一个必需的过程。掌握EJB需要从两个方面着手:基本原理和如何使用。
《精通EJB(第二版)》(后注:http://www.javafan.net/softview.jsp?ID=110)
是对EJB原理讲解得比较透彻,但是书中将EJB一些本质原理推卸给了Corba,而对Corba又没有仔细介绍,我认为初学者应该在这里适可而止,如果你非常对EJB底层实现感兴趣,我推荐阅读JBoss的源码,其实JBoss源码在你孜孜不倦的钻研之劲攻击下很快会土崩瓦解。
对象池(Object Pool)、RMI和事务机制应该是EJB原理掌握三个方向,这三种技术方向又可以推荐很多书籍供学习研究,这里就不说了。
EJB主要分EJB容器和EJB应用系统,初学者更多精力应该关注如何构建EJB应用系统,由于EJB提供功能强大且非常有特点,因此,使用他们要非常小心,遵循一定的前提和规则,由此,EJB设计模式是不能不了解的。
《EJB设计模式》(后注:http://www.javafan.net/softview.jsp?ID=69)是这方面的经典之作,在书中,作者指出了使用CMP注意特点、DAO模式的重要性、DTO模式的变种等。阅读本书的同时,如果参考SUN的PetStore源码学习,将会起到事半功倍的效果,
看完上面两本书,自己动手实践非常重要,EJB使用中关于EJB reference配置比较麻烦,其原理是这样:调用者---- > EJB Reference ---> 被调用EJB的JNDI名称 ---- >被调用EJB,这些细节使用问题只有实践时才能碰到,也可以从网上寻找一些这方面的电子教程实例。
只有调试了一两个EJB实例,这时你才可以站出来表达你的想法:喜欢或不喜欢?架构选型时也可以提供参考意见:是轻量型还是重量型?盲目排斥EJB或认为EJB是唯一解决方案等两种极端观点是要不得的,条条大路通罗马,伸缩和性能是关键。
这里推荐一本从纯设计角度看待EJB/J2EE的书籍:Rod Johnson的《J2EE设计开发编程指南》,英文是Expert One-on-One J2EE Design and Development,Rod Johnson在书中从一个完美的设计角度指出了EJB缺点,这些缺点他是用黑体标识,非常醒目,同时,他将如果不使用EJB所带来的额外工作量使用正常小字体标识了,算是轻描淡写吧。当然,Rod Johnson为了将其理想的设计落实为代码,主持了Spring框架开发,如果J2EE领域有一个既符合完美的设计要求,又能支持成熟应用,同时又是业界标准,那是一个多么令人向往的事情,Spring框架至少在这方面做了有益的探索。
集群、Web服务和资源整合
对于中大型软件系统,集群和Web服务是必需掌握的技术,目前相关书籍不多。如何将J2EE新技术和现有资源整合,也属于一个探索性的领域,期待这几个方面有好的书籍问世。