今天下午赶到复旦大学三教3108去Ben Wang的JBoss讲座。由于听讲座的人比较多,教室临时从3209改到3108,2:30分,Ben在曹晓钢同学陪同下来的,曹晓钢同学最辛劳,上午去浦东机场接Ben。
在讲座开始前,和Ben进行了简单的交谈,感觉Ben是个谦谦君子,很有学者的气质,实际上他也确实是PhD,没有一点架子,很平易近人,很和蔼。
Ben讲座要介绍的内容很多,因此两个小时的演讲很紧凑,讲座结束之后,有几个朋友举手提问,其中有个朋友的问题比较尖锐,直接对准了EJB,非凡是Entity Bean,而Ben的回答也坚定了我的一些观点,这些下面再提到。
提问结束以后,论坛的几个版主,我,曹晓钢,dlee和他的gf,smallduzi,gehf,马伟,和在IBM做consultant的nuke陪同Ben来到陆家嘴小南国吃饭,实际上最后是由nuke埋单的。饭桌上大家边吃边聊,边向Ben请教问题,我也借机问了很多关于JBoss,EJB,Hibernate方面的问题。
由于Ben第一次来中国大陆,于是晚餐后我们陪Ben逛了浦东的滨江大道,远望浦西外滩,欣赏闻名的上海滩夜景,最后做鸟兽散了。
Ben此次来华的主要目的就是想了解一下中国大陆,香港地区和台湾地区对于JBoss的应用情况,以及寻找合适的合作伙伴。因此他比较关心JBoss在这些地区的应用状况,我向他介绍了一些我了解的国内的应用JBoss,应用Hibernate方面的现状,向他提了一点点个人的见解。
通过今天听Ben的讲座和Ben的交流,我觉得收获很大:
一方面是和JBoss Inc这样一个国际闻名的Java Open Source组织有了近距离的接触和了解,也许这样的机会可以促进中国的Java社区和国际Java社区更多的交流和合作,同时对Java视线网站也是一个很好的提升。
另一方面我了解了很多关于JBoss,Hibernate方面的情况。由于Ben是JBoss的core team成员之一,因此很多情况从他嘴里说出,我想应该是相当的准确了,虽然这仅仅代表Ben自己一个人的想法,不过我想也基本上可以代表整个JBoss Core Team的看法。这一点也是我想向大家稍微具体介绍的地方:
1、关于Entity Bean和Hibernate的争论
我是一个Entity Bean的果断反对者。围绕Entity Bean的话题,在国内也是众说纷纭,我去年夏天曾经就这个问题和很多人反复辩论过,由于果断反Entity Bean,坚持O/R Mapping,非凡是Hibernate的态度,最后被很多人围攻,这也直接导致了现在Java视线论坛的诞生。
对于JBoss这样一个全面支持EJB的Java Application Server来说,了解JBoss core team对EJB,非凡是对Entity Bean的态度,是我比较关心的事情。
Ben在讲座提问的时候就表明,Entity Bean是J2EE规范中最失败的东西,然而对数据库的操作又是一个软件项目最重要的部分,假如连这部分都做不好,软件还能做什么?晚餐的时候,Ben也向我介绍,他以前做项目,也往往采用Session Bean去直接操作JDBC,而不采用Entity Bean。
相对于Entity Bean的失败,Hibernate却得到了异乎平常的关注。从Ben的意思中似乎流露出JBoss Inc有意将Hibernate做为Java数据库持久层规范来推广的设想。
另外由于Gavin King是JDO委员会成员,Ben说从他那里了解的情况是,现在JDO2.0规范已经陷入了难产,各个成员代表了不同公司的利益,相持不下,JDO2.0在可以预见的将来无法发布,JDO的未来已经蒙上了阴影。
鉴于此,JBoss在目前的阶段已经放弃了把JDO技术集成进来的设想,而转为全面支持EJB3.0规范。而未来的EJB3.0规范据他说将非常不同于现在的EJB2.0,我感觉JBoss似乎有点努力让Hibernate成为EJB3.0规范中的一部分。
而我问到既然Entity Bean是鸡肋的话,而Hibernate也完全可以在CMP外面使用,又何必要另外费时费力把Hibernate集成到CMP中,做CMP的Engine呢?Ben回答是没有必要使用CMP的,但是考虑到很多采用了CMP的老系统兼容问题,考虑到为了保持和J2EE规范的兼容问题,所以才会这样做的。这不是一个技术因素,而是一个政治因素。当然假如你觉得没有必要使用CMP,你可以完全可以单独使用Hibernate。
从Ben那里了解到的情况,我觉得对于O/R Mapping未来的技术方向,稍微有点眉目:
1) 当前的Entity Bean无疑是失败的,未来的EJB3.0中的Entity Bean也许会变成了像Hibernate的样子
2) JDO的前景堪忧,未来还遥遥无期,至少JBoss已经放弃了对JDO的爱好
3) JBoss在力推Hibernate,似乎有将Hibernate做为Java持久层标准规范的设想
在Ben看来,开放源代码软件的竞争模式就是没有标准的,大家都在竞争,最后优胜者就成了标准,现在Hibernate无疑是这方面的佼佼者,有望成为事实上的标准。
2、AOP的广泛应用
上次聚会gigix的AOP讲座我没有时间听,这次Ben介绍AOP,我得以有幸了解了AOP的基本概念。从Ben介绍来看,JBossAOP能够做的事情很多,可以处理Log,处理跨类调用的事务,。。。。。。等等,“跨类调用的事务?”,呵呵,这不是原来EJB的功能吗?这也是我的一个疑问。假如AOP可以把容器治理事务,Security检查,分布式功能全部实现,那么还要EJB干什么?究竟AOP可以实现的功能是对POJO的,而且是lightweight的,无论编程,调试,部署和运行,其难度都远远小于EJB,而性能相当甚至更好。于是我带着这个疑问请教Ben。他的回答就是,假如未来的发展,AOP真的可以做到的话,EJB确实就没有使用的必要了。但是从现状来说,有很多旧系统要兼容,有Sun的J2EE规范要兼容,没有这个兼容认证,可能很多企业就不会用JBoss了。当然Ben没有否定EJB,他说JBoss是在同时支持AOP和EJB的,并且JBoss做为一个App Server,要想被企业接受,全面支持J2EE标准是必要的。
对于AOP和EJB的问题,Ben的看法是也许在将来J2EE规范将包括AOP,否则也许J2EE规范会逐渐被淘汰。而JBoss的做法就是支持J2EE规范,支持EJB3.0,同时JBoss也支持AOP。你假如想兼容J2EE开发EJB,那么OK,假如你喜欢用AOP简化编程,那么也OK。
3、关于JBoss本身的发展
由于我对JBoss不是很熟悉,因此在这方面也说不出来所以然。印象比较深刻的两点是:
1) JBoss接受Venture Capital,从JBoss Group改名为JBoss Inc,做为一个商业公司开始运作了。我觉得这是一个很好的事情,软件要成功,迟早要和商业化运作结合的。
2) JBoss要成为一个Java Open Source Project的社区,不断的吸收适合自己发展需要的Java Open Source Project,共同推进OpenSource事业的发展。
通过这次交流,我想包括我本人在内,对Hibernate的信心都无疑得到了巨大的加强。我虽然反对Entity Bean,对JDO标准也一向没有好感。但是我从来没有想过Hibernate有成为O/R Mapping标准的可能性,我只是一惯认为,Hibernate是一个很好用很实用的东西,在项目中使用可以节省巨大的人力,可以让你的OO编程变得很舒适。就是现在我也不认为Hibernate会成为O/R Mapping的事实标准,假如有一天有更好的O/R Mapping框架出现,我也会毫不犹豫的喜新厌旧。不过毫无疑问的是,Hibernate必将成为Java O/R Mapping领域里最主流的,最有前途的,应用最广泛的框架之一。