Archive for May, 2004

重拾EJB

Monday, May 17th, 2004

Ed Roman的《Mastering EJB》在我手上放了一年多,前两天才正式开始看,今天终于把第一篇看完了,对SessionBean, EntityBean, MessageDrivenBean做了个回顾;同时继续体会着EJB强大而严整而优美的体系。重新阅读这本书并非我情愿。我要找新工作,大部分相关的工作都要求J2EE背景。虽然我非常熟悉Servlet, JSP, 以及一系列的开发框架,但是不愿意学习EJB以至于我一直都羞于跟人提起我懂J2EE。EJB是J2EE的灵魂。虽然在我情愿使用J2EE框架中的其他组件集如JTA, JAAS, JCA,却对EJB讳莫如深。原因很简单,设计过于复杂。我大致上了解EJB的基本结构却从不考虑使用。记得今年的Sun Java TechDays上,我问Doris Chen博士,”I like J2EE, but should I use EJB in every application?”她的回答显然不令我满意:”No. If you need transaction, use EJB, otherwise you don’t have to.”。

现在重读既然迫不得已,但是决定读,就得好好读。好在我找到了一个久已安装但从未使用的Eclipse插件Lombz,并且在找它的更新的时候找到了这篇很棒的教程。这篇教程让我从无趣的编写4个接口(Home接口, LocalHome接口,Remote接口, Local接口)中逃出,这使我真正觉得编写EJB简单起来,并且暂时忘却了EJB设计的复杂。后来我发现Lombz简直就是XDoclet的ejbobject Task的封装,又觉得Lombz不过尔尔,又异想天开自己编写一个插件(想到我的前一篇Blog了,应该沉静)。

真正读完第一部分,我发现EJB并不复杂。理解了Rmi调用,理解了SessionBean与EntityBean的定义与区别,理解了Application容器调用EJB的过程,一切都很明朗了。再利用Lombz,从真正实际的Bean开始开发而不是首先一堆Remote Interface,更加符合我的开发习惯;在标准的javadoc中加入若干ejb标签,XDoclet能够自动生成其他的相关接口,甚至Bean Manage Persistence EntityBean的DAO接口。EJB的神秘感消失了,我不再讨厌它了,甚至有在下一个项目中使用它的想法。目前唯一的麻烦在于,如何在EJB中应用最佳实践,如何在Stateful SessionBean/Stateless SessionBean中作出选择,如何选择本地、远程接口等等需要在实际项目中思考的东西。

有几点我不太明白的地方:

1 CMP看起来很不错,在容器能够胜任的情况下,如何选择Hibernate(或JDO)和CMP?

2 如果在EJB中使用Hibernate或者JDO作为O/R映射持久层——毫无疑问要用到DAO模式——那么这个Bean就是BMP了,不过这个ManagedBean的具体实现由Hibernate(或JDO)代劳了。如果这个前提成立,Hibernate现在已经足够强大,那么Hibernate的出现,EntityBean将不存在BMP与CMP之分了?

沉静,沉静,沉静!

Saturday, May 15th, 2004

前天在gigix的站点上读到技术文章的八股论,大意说技术文章一点都不难写,首先定个基调,然后一二三,1.1, 1.2, 1.3,框架列好,往里面填充文字就行了。加上大段的代码,OK,一篇文章问世了。——能达到此状态已经是国内技术文章的中级阶段了,虽然经常见到一些代码拼凑或者毫无条理的文字见诸CSDN——这些文章的特点是看似条理清楚,读起来枯燥无味,除非是一定要了解技术才去阅读,没办法。

而国外专业作者的文章则显得很潇洒,笔走游龙,行文流畅,大部分文字浅显易懂而且风趣。看似散乱,但是有一股强烈的凝聚力,读完是一种享受。——当然,并非崇洋媚外了。在读一些文学作品,如鲁迅的杂文,真的感到辞藻留香是何种境界;读杰克伦敦的《旷野的呼唤》,也有置身于冰天雪地的感觉(题外话,看完这本小说,我才对狗的内心世界有了了解,开始喜欢这种动物来)。遗憾的是,看到国内技术作者(家)写出这种级别的文字不多。文字与技术的驾驭能力都要精深,并且作者有足够的修养,能够举重若轻,深入浅出。我读国内著作不多,印象最深的是候老师的《深入浅出MFC》和他写的其他文章。很深的中国古文字造诣,读起来技术于文学的双重享受;以及同样值得学习的气度与修养。

现在阅读自己以前写的一些Blog,简直在自言自语,自怨自艾,并没有多少实际意义——除了Blog作者本人,否则谁也不明白Blog作者在写这些文字的时候的心态,以及自己所要表达的具体意义。我将这些Blog定义为“口水文字”,在我看来,这些Blog在浪费阅读者的时间,并且从某种程度上表现了急于求成的心态,用流行的一句话说,是浮躁。浮躁并不仅仅表现为狗熊掰玉米,也表现为急于宣泄自己的内心情感。我们处在社会中,因而复杂,如同浑浊的水;任何没有经过沉淀的思想,情绪,方法,技术,论点,就急于将其表现,其结果是,非但对自己没有好处,对于接受的一方,可能造成更大的振荡。具体的表现就是浪费阅读者时间,然后要么陪你一起郁闷,很不爽;要么来一句faint,这也拿来写。显示中沉淀过后的水让人神清气爽,同样,经过彻底思考得出的东西才最有价值。

实际上,高产作者的Blog更新却往往很慢。好几天才一篇。因为严谨,所以不愿意将就;因为对读者负责,所以要反复确证。我猜想,可敬可爱的作家们,早先可能苛刻如“僧推(敲)月下门”的古人,字斟句酌,反复思考,附之以大量练习,因为认真,因为沉静,才会有今天的成就。所谓厚积而薄发,看来任何行业都如此了。

早先写了一些文字,很累。不知道别人怎么写的。写一篇两千字的技术文章(哪怕很简单的)需要花掉我两个晚上的时间,或者更多。我不愿意写出的东西让人看不懂,不满意将就;更不愿意挨骂。然后很久都没有写什么长一点的技术文章。因为技术积累不够,写的时候需要查很多资料才能完成,真的很累。

发觉自己的情绪正在被感化,学东学西,心浮气躁,不能沉静,这样很难真正有所长进。因此撰下此文,给自己警醒。

Howard Lewis Ship关于Macromedia的论调

Thursday, May 13th, 2004

P>http://howardlewisship.com/blog/2004_05_01_archive.html#108421886198807837

Howard是Tapestry的创造者。他的Blog不是很勤奋,往往好几天才一篇。前天他却花了很大的篇幅来表达对Flex的激动之情“I was very impressed by the Flex presentation at TheServerSide. ”

除了常人所见的表扬,Howard还大胆语言了未来3-5年,HTML将会彻底死掉,取代之以Flex等Rich Internet Application。作为开发者,我们需要做出更多的应变策略。几年后IE将不复存在,C/S将会重新归来;而另一方面,Mozilla组织的XUL规范迟迟未能Release,可以预见的是未来几年的时间里,关于开发方向的讨论将是更加激烈。俗语说乱世出英雄,我也大胆的做出推测,5年内技术界一定有令人完全耳目一新的东西,比Flex给人带来的震撼更具有煽动力。

基本上,我的观点和Howard一致。在我Flex: RIA 的先驱,无坚不摧的银弹? 文章中,表达了我对Flex的一些观点。同样,我认为,Flex存在的最大的障碍是有Macormedia公司独立提供。这在自由的Java领域简直会马上遭到诅咒。前段时间听来的传闻,MS将会收购Macromedia,这无疑更是宣判了Flex在Java界的死刑。

努力随流水,心沉比泰山

Monday, May 10th, 2004

早在4月份就预料到这个结局。

4月份拿到了一千二百万条的一个数据库,在那个时候我的技术探索已经做的差不多,开发计划已经确定,预计在8月底结束整个项目。这个巨型的数据库(2G)结束了我的美梦。按照需求,系统允许最长的操作响应时间是一分钟。我花了半夜的时间把这个庞然大物放入数据库,建立索引。系统初始化的时间都都花掉了30多分钟,中间任何一个步骤的操作都在几分钟的范围……真是……郁闷透底。

我开始尝试各种优化策略。比如Oracle的实体视图。能够优化的也不过是将时间减少一半或者更少而已。优化虽然提高了50%以上的性能,但是对于需求还差得很远。对于那些不具备Matirial View的数据库,我的系统该如何优化?难道要求客户换数据库?

最终我不得不痛苦的承认,项目的基础都是错的。将所有的运算保存到内存中而不是文件中,一开始就是错的。如果继续做下去,项目将只能是一个脆弱的、不堪一击的小东西。

我想到了重新实现存贮层。很认真的考虑之后,决定放弃了。设计一个新的多用户的、并发的、事务安全的、大容量的存贮结构就等于重新做一个数据库。我再怎么意气风发也不至于不知道一个数据库应该由多少个什么层次的人完成。

承认失败是一件很痛苦的事,我未能免俗。从去年9月到现在,8个月时间里,每天工作十几小时,很少享受周末。从对数据分析一无所知到准备开发,我学习了大量的资料、规范,做了大量的技术探索。有一段时间居然像《指环王》中的Froto,在接近魔多的路上说,我已经记不起夏尔的花香,记不起食物的味道……

现在,我站在北极点上

哪里都是南方,却没有任何方向

乱文之一

Sunday, May 9th, 2004

性格注定了,可能永不能再改变了。如《呼啸山庄》中的希克刺力夫(也有翻译为希克力的),流浪儿的经历,即使庄园主的女儿对他的爱也无法挽回最终他想毁灭一切的心机。

回西安一趟,冯告诉我,感觉自己渐渐死去。这里“渐渐死去”固然不是生老病死之意,心理上的渐渐死去无从参见,然而为此而造成的身体上的变化又何尝能够避免。在那张满脸颓废的脸上,我依稀看到了自己的影子。然而,纵使如此,难道自己就应该在这种无谓的情绪中桎梏下去?

印象很深。上学心情低落的时常想到的一句话是,“无法悲伤”。想到这几个字的时候却总有点赴刑场的悲壮与兴奋感,一如狼牙山要跳崖的英雄。现在想来,这种情绪是何等的无聊和幼稚。把自己淹没在自我的情绪的海洋中,并以此为乐。

“我怀疑,有很多东西真的跟性格有关系”,对于他的这句话,我毫不怀疑。

回西安读了米兰.曼德拉的《生命中不能承受之轻》,却有了截然不同的领悟,感情是轻松的吗?生命是沉重的吗?在我看来,凡是对正常的生活轨迹施加压力,无论是有形或是无形,被施加者都在承受“重”。至于这个“重”是不是可承受,完全取决于这个被施压者的态度。

从这个意义上说,猪的生活应该是最轻松的,因为在他能够判断他承受的是轻是重的时候,已经被送进屠宰场;人的生活是否应该以之参考,得由各人自便了。