从森林到咖啡馆——书评《J2EE设计开发编程指南》

从森林到咖啡馆

——一本别样的经典

(本文首发于《程序员》2003年第11期)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

撰文/剃刀

J2EE设计开发编程指南》(Expert One-to-One J2EE Design and Development),Rod Johnson著,Wrox 2002年,电子工业出版社2003年中译本。

我的书架上有十多本书名包含“C++”的书,而且本本堪称经典——Essential C++Effective C++Exceptional C++C++ PrimerThe C++ Programming LanguageC++ STL……了解行情的读者会知道,这些经典好书大行其道,得益于来自海峡对岸的一阵和风。不过,饶有兴味的是:在这么一堆以“C++”为名的书中,竟然只有一本不那么经典的书(Virtual Machine Design and Implementation in C/C++)真正介绍了“如何用C++做一个实际的东西”。而其他的经典们似乎更关注C++语言本身的诸多限制和幽微晦暗的细节,以及如何用精细的代码技巧来绕过这些“traps and pitfalls”——啊,对了,这也是一本C++经典好书的名字。Ian Joyner曾经说:“学习C++要花那么长时间,花那么长时间还未必掌握编程或者面向对象设计技术。”看来此言不虚。

看起来,Java人似乎要幸运得多了。从诞生的第一天起,Java就被视为一种更简单的编程语言,而虚拟机的运行机制也的确使它(较之C++)大为简化。而且,在以网络为主战场的J2EE世界里,很多代码级的小技巧也已经变得无足轻重(如果不是毫无意义的话)——用StringBuffer(而不是String)做字符串连接将获得性能的提升,but who cares

可是,当Java的初学者带着满满的自信跨入J2EE的世界时,扑面而来的信息潮涌常常会把他们打一个大跟头。错综复杂的体系结构、无处不在的设计模式、形形色色的框架和类库、层出不穷的技术规范,还有那些魔咒般神秘莫测、令人莫名敬畏的三字母、四字母缩写词,再加上各个阵营永不停息的争执和对Sun的指责。这个魔法森林远不止是“JSP+Servlet+EJB”这么简单,MVC远远不足以绘出寻找宝藏的地图,Open Source的小精灵们常常热心地帮着倒忙。身陷丛林之中的探险者无助地祈求太阳为他们指明道路,换来的却总是那句不冷不热的俏皮话:There's nothing new under the SUN

所以,Java人从来不会把《J2EE编程指南》这样的大部头看作经典——那顶多是一本或许已经过时的怪物百科全书。他们更喜欢一个谦逊的“领路人”:他或许并不了解这森林的全貌,但他极清楚地知道去某个地方的路线;他甚至从不宣称自己的路线最快捷、最轻松,但探险者们可以放心地跟着他到达自己的目的地。无疑,Rod Johnson的《J2EE设计开发编程指南》就是这些领路人中的佼佼者。

Expert One-to-One”,Wrox的这套丛书总让我想起周末夜晚的咖啡馆,与一位高手朋友面对面闲坐,喝着Cappuccino,聊着各自对技术的看法。Rod Johnson,这位Servlet规范专家组的成员,就很乐意扮演这样一种“高手朋友”的角色。从一开始,他就没有“文以载道”的打算。不,他根本不想在这本书里面面俱到地介绍J2EE的细枝末节,只想让你知道他如何理解J2EE、如何用J2EE来开发企业级应用。于是,这次聊天开始不久,他就毫不避讳地告诉你:J2EE的“可移植性”在很大程度上只是一个神话,EJB不是实现中间层的唯一技术,他还用30多页的篇幅教你如何测试J2EE应用……这将是一次愉快的交流,你会这样想,因为他有一些新鲜的见解。

突然之间,烛光开始摇曳昏暗,你们之间的交谈陡然变得诡谲迷离——从第7章开始,Rod Johnson进入了他最感兴趣的话题:J2EE应用的数据存取。他毫不留情地指出:软件应用的设计应该由对象模型来驱动还是应该由数据库模型来驱动,这是一个争论已久、并且至今没有唯一答案的“哲学问题”。所以,忽视O/R映射天然存在的“阻抗不匹配”,试图用任何形式的O/R映射一劳永逸地隐藏数据库的存在,这只能是不负责任的广告词。随后,Sun公司推荐的J2EE持久化解决方案——Entity Bean——也遭到了最猛烈的抨击,Rod Johnson甚至直言“Entity Bean只应该是EJB规范的一个可选部分”,而JDO更有理由成为J2EE的持久化技术标准。……唔,我想我应该住口了,这场足以令一个J2EE人汗下如浆的讨论,还是留给读者自己去品味吧。

从这本书的内容出发,Rod Johnson开发了一个名为“Spring”的J2EE框架,这大概可以最好地表明他的立场:他是一位“关心结果胜于意识形态”的实用主义者。与大多数图书的示例代码不同,Spring是一个真正的工业级框架——Rod Johnson将它与StrutsWebWork并列。如果这本书能让你喜欢上Rod Johnson这个人,也许你可以通过Spring更多地了解他。

在这样一篇书评的最后,我应该如何评价这本《J2EE设计开发编程指南》的中文译本呢?也许可以套用一位朋友的话,“一切都尽可能地糟糕”——每读这个译本一段时间,我就不得不把《七缀集》翻出来漱漱口,因为这几位译者的文气弄得我口臭不堪。听说Wrox的书封面上的人头数与书的质量成反比,看来同样的规律也适用于它们的译本。

首页 作者序 第一部分 介绍 第1章总括 一.分布式得多层应用程序 二.J2EE容器 三.打包J2EE组件 四.开发者角色 五.本书所用的软件 第2章动手做一个EJB 一.准备工作 二.创建J2EE应用程序 三.创建企业Bean 四.创建J2EE应用程序客户端 五.创建Web客户端 六.设置企业Bean的JNDI名 七.部署J2EE应用程序 八.运行J2EE应用程序客户端 九.运行Web客户端 十.修改J2EE应用程序 十一常见问题和解决方法 第二部分 EJB技术 第3章 企业Bean 一、企业Bean概述 二、会话Bean 三、EntityBean 四、Message-Driven Bean 五、定义客户端访问接口 六、企业Bean的“内容” 七、企业Bean的命名约定 八、企业Bean的生存周期 第4章 有状态会话Bean示例 一.购物车会话Bean CartEJB 二.其他的企业Bean特性 第5章 BMP的例子 一.SavingsAccountEJB 二.用deploytool部署BMP实现的实体Bean 三.为BMP映射表间关系 四.BMP的主键 五.异常处理 第6章 CMP的例子 一、RosterApp应用概述 二、layerEJB代码分析 三、RosterApp配置说明 四、RosterApp中的方法调用 五、运行RosterApp应用程序 六、用deploytool工具部署CMP实现的实体Bean 七、CMP的主键 第7章 一个消息驱动Bean的例子 一.例子应用程序介绍 二.J2EE应用程序客户端 三.消息驱动Bean类 四.运行本例子 五.用deploytool部署消息驱动Bean 六.用deploytool配置JMS客户端 第8章 EJB查询语言 一.术语 二.简单语法 三.查询例子 四.全部语法 五.EJB QL的限制 第三部分 Web技术 第9章 网络客户端及组件 第10章 Java Servlet技术 第11章 JSP技术 第12章 JSP页面中的JavaBean组件 第13章 在JSP页面中自定义标签 第14章 事务 一.什么是事务 二.容器管理事务 三.Bean管理事务 四.企业Bean事务摘要 五.事务超时 六.隔离级别 七.更新多个数据库 八.Web 组件事务 第15章 安全 一.纵览 二.安全角色 三.Web层安全 四.EJB层安全 五.应用程序客户端层安全 六.EIS(Enterprise Information System)层安全 七.传递安全身份 八.J2EE用户、域和组 九.安装服务器证书 第16章 资源连接 一.JNDI名和资源引用 二.数据库连接 三.邮件服务连接 四.URL资源连接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值