该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2004-04-05
在讲座开始前,和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领域里最主流的,最有前途的,应用最广泛的框架之一。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-04-05
是的,听王老师的讲座以及晚上和王老师面对面交流,确实收获颇丰。加深了我对于 AOP、EJB、ORM、Cluster 等知识的了解,也破除了很多人对 JBoss 和 OpenSource 的一些偏见。问题就是问题,王老师从来没有回避 EJB 存在的问题(主要是在 Entity Bean 和 CMP 方面),EJB 的设计人员也在努力解决这些问题,这和某些把 EJB 说成完美无暇的人形成了对比。如果不存在保护原有投资或者某种政治因素的原因,目前确实已经可以抛开 Entity Bean,甚至完全抛开 EJB 了。这不是什么偏激的想法,甚至可以说已经是目前业界的共识。
希望王老师有空能来这里和全球的华人朋友进行深入的交流,提携后进,这是一件功德无量的事情。也希望 JBoss 的培训能够早日在京、沪等地开展,我有充分的信心参加开源软件的培训收获必定远远大于 WebLogic、WebSphere 一类的培训。JBoss 已经有好几本书出版了,晓刚能不能想办法让国内的读者尽快看到这些书。我相信 Hibernate、JBoss 一类的书如果能在国内出版,销量会很好的。即使是出于对 JBoss 的敬意,我也会买来一本的。就象我买 Emacs 的那本书是出于对 Stallman 的敬意一样。 我们这里可以作为 JBoss 在华人世界推广的一个窗口的。Hibernate 和 JBoss 本来就有非常紧密的合作。robbin 可以和 Ben 好好谈谈。 BTW,这次让 nuke 破费了,下次我买单。呵呵。 |
|
返回顶楼 | |
发表时间:2004-04-05
由java视线论坛牵头,出一本关于hibernate的书,确实很有意思,也一定很畅销!据我所知,越来越多的公司都开始用hibernate来开发项目了.我原先公司的另二个同事和我,现在都离开原公司,但在新的公司里,他们俩个都说,他们的公司,下一个项目都将采用hibernate技术,而我新入的公司也是采用hibernate技术,可见hibernate技术,已经越来越被国内企业所重视,也被越来越多的JAVA程序员所重视。当然从中说明了,hibernate中文网站的意义之重大性。尤其robbin等人的勤劳!!
期待hibernate 的相关书籍的问世,当然不要光光只与jboss相关的hibernate,要与多种应用服务器相结合的,多方面的技术材料.毕尽,在不同的客户需求,对应用服务器采用也都是不相同的。 |
|
返回顶楼 | |
发表时间:2004-04-05
确实期待一本hibernate的书,hibernate in action在theserverside
review几个月了,我隔一段时间就上去看,可惜到现在才出3章,等死人了。 关于aop的问题,上次java聚会gigix讲了aop的各方面应用,举了一些很有说服力的例子,而且确实提到log粒度太小,而且分布在程序各处,除了操作流水性日志,实际上是不适合作aop的。后来下来和dlee讨论的时候一致认为现在外面 例子一讲aop就拿log作例子,实际上不是很合适。 其它一些与业务无关的代码,比如事务就非常适合做aop. 还有比如performanceInterceptor,在怀疑那个方法有性能问题时,直接在方法前后配上,就可以知道方法耗了多少时间. 至于通常说aop谈到的可以用权限作aspect,不过一般每个公司做的权限系统往往 和业务代码耦合,所以权限往往很难作aspect,不过ahbbxie说可以扩展jaas作 http://forum.iteye.com/viewtopic.php?t=4117,有空到要研究一下。 还有Cache的aspect,也不是很好作,一种是约定头一个参数都是id, 一种是参数实现特定接口让cache aspect找的到,不过都有特定约定, 业务逻辑不能完全在unware的情况下做到透明Cache,然后还有object修改field时的跟新cache,以及不用时候evict等等,感觉都不是很方便,还不如直接传统的写法。 |
|
返回顶楼 | |
发表时间:2004-04-05
我也去听了昨天的讲座,感觉还是不错,但是觉得没有什么收获。我指的收获是:“学到很多新的东西”。
另外的收获可以说很多,印证了自己的不少想法。 1、CMP是愚蠢的。 2、AOP是面向过程思想的OO版 3、EJB是可以被替代的。 另外的感觉是:如果JBoss这样的做法继续下去,和J2EE形成竞争关系,那么SUN会怎么对付他呢?我表示担忧。 |
|
返回顶楼 | |
发表时间:2004-04-05
EJB本来就是愚蠢的,EntityBean实在太烂,之前是因为没发现Spring,所以采用只是用一个SessionBean作Facade来做事务管理,接下来直接用Spring的AOP来作事务管理,根本不用EJB,EJB写麻烦,部署麻烦,调试麻烦,能不用就不用。现在有Spring AOP的解决方案,可以直接在外面做单元测试,做好再部署War,
(因为不需要EJB,就只是Web Application了).异常方便。 用EJB只能Complicate Your Code. 而且EJB和Web一起用, 有的时候ClassLoader的问题也很烦的,并不具有移植性。 Weblogic/Websphere是Ejb classloader是web classloader的parent, 对于每一个ear有不同的classloader 而jboss是扁平classloader,多个ear之间load的相同class会冲突。 有时候弄一些ClassCastException/NoClassDefException/DuplicateClassException什么的也挺烦的。 (而且甚至同一个AS的不同版本的ClassLoader机制还不一定一样:( |
|
返回顶楼 | |
发表时间:2004-04-05
CMP不好用不表示EJB甚至j2EE都是失败的!分布式的系统EJB还是不可替代的!当然很小的应用使用EJB本来就是牛刀杀鸡!
Spring虽好但它不是替代EJB的,实际上它是用来简化EJB的使用的。Spring AOP好用,但它的性能(Reflect或者运行时代码生成)肯定无法与ejb编译(部署)时刻的代码生成性能相比! 事务,安全,权限,分布等等,AOP才刚刚开始,还远没有达到J2EE这样成熟统一的标准! |
|
返回顶楼 | |
发表时间:2004-04-05
要谢谢nuke陪我买火车票和请我们吃饭!感谢,照片已经发给小刚,应该很快会在redsaga提供下载,cn-java也会提供下载!
|
|
返回顶楼 | |
发表时间:2004-04-05
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
返回顶楼 | |
发表时间:2004-04-05
EntityBean差劲却是不争的事实。
StatefulBean性能差也是公认的,而且 Session Replication的能力也没HttpSession好。 HttpSession是根据键值对存储的,如果改变 一个属性,只需要replicate该键所对应的值, 而SFSB却无法得知改变多少,必须全部Replicate, (当然有些AS作优化可以只Replicate改变部分另当别论)。 所以EJB只剩下StatelessSessionBean好用了, 固然SLSB没有以上缺点,可是比起Spring AOP的轻量级解决方案来说仍然具有不好开发/不好调试/对你写的类 具有侵入性等缺点。 Spring的目的可不是简化EJB,如果使用Spring了根本就可以不用EJB,除非你非要分布。不过话说回来, 一个应用真的需要分布么?大多数应用在一台机器 上跑,根本不需要分布,这时候只需要分层,而不需要分布,在设计上分成表现层/业务逻辑层/永存层等几个Layer,而不需要真正在物理上分布。 第二,就算要集群负载均衡,也可以直接HttpSession的Session Replication解决,除非说业务逻辑层 跟显示层资源利用有巨大差异, 这样单独分出来分别进行Web层的cluster和业务逻辑 层的cluster才有意义,不过大多数情况下实际上并不需要。 另外,关于Spring aop的性能,第一,Reflect实际上自1.4来性能有很大提升。 还有其它的技术,比如hibernate用cglib2来运行时代码生成性能也都不差的。至于ejb部署时候代码生成,那可真的是得看AS了。至少Jboss的源码我看过的,jboss并不生成新类,而是把 ejb的 method 放到hashmap里头保存起来,客户端调用时候 也是通过反射调的。你说JBoss性能差不差呢? 关于安全和权限,实际上J2EE的安全模型都很难 整合到自己的业务模型中的,我不知道实际中 谁用了,反正据我所知,很多公司还是自己写 权限,不用JAAS的。 所以基本上,除了分布,我实在看不出使用EJB的必要了。而且就算分布,也要问一句,当真需要分布么? 我是非常看好Spring的,所以力推Spring呵呵。 |
|
返回顶楼 | |