论坛首页 海阔天空论坛

参加4月4日Ben Wang的JBoss讲座纪实

浏览 46392 次
该帖已经被评为精华帖
作者 正文
   发表时间:2004-04-05  
今天下午赶到复旦大学三教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领域里最主流的,最有前途的,应用最广泛的框架之一。
   发表时间: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 破费了,下次我买单。呵呵。
0 请登录后投票
   发表时间:2004-04-05  
由java视线论坛牵头,出一本关于hibernate的书,确实很有意思,也一定很畅销!据我所知,越来越多的公司都开始用hibernate来开发项目了.我原先公司的另二个同事和我,现在都离开原公司,但在新的公司里,他们俩个都说,他们的公司,下一个项目都将采用hibernate技术,而我新入的公司也是采用hibernate技术,可见hibernate技术,已经越来越被国内企业所重视,也被越来越多的JAVA程序员所重视。当然从中说明了,hibernate中文网站的意义之重大性。尤其robbin等人的勤劳!!

期待hibernate 的相关书籍的问世,当然不要光光只与jboss相关的hibernate,要与多种应用服务器相结合的,多方面的技术材料.毕尽,在不同的客户需求,对应用服务器采用也都是不相同的。
0 请登录后投票
   发表时间: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等等,感觉都不是很方便,还不如直接传统的写法。
0 请登录后投票
   发表时间:2004-04-05  
我也去听了昨天的讲座,感觉还是不错,但是觉得没有什么收获。我指的收获是:“学到很多新的东西”。

另外的收获可以说很多,印证了自己的不少想法。
1、CMP是愚蠢的。
2、AOP是面向过程思想的OO版
3、EJB是可以被替代的。

另外的感觉是:如果JBoss这样的做法继续下去,和J2EE形成竞争关系,那么SUN会怎么对付他呢?我表示担忧。
0 请登录后投票
   发表时间: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机制还不一定一样:(
0 请登录后投票
   发表时间:2004-04-05  
CMP不好用不表示EJB甚至j2EE都是失败的!分布式的系统EJB还是不可替代的!当然很小的应用使用EJB本来就是牛刀杀鸡!
Spring虽好但它不是替代EJB的,实际上它是用来简化EJB的使用的。Spring AOP好用,但它的性能(Reflect或者运行时代码生成)肯定无法与ejb编译(部署)时刻的代码生成性能相比!

事务,安全,权限,分布等等,AOP才刚刚开始,还远没有达到J2EE这样成熟统一的标准!
0 请登录后投票
   发表时间:2004-04-05  
要谢谢nuke陪我买火车票和请我们吃饭!感谢,照片已经发给小刚,应该很快会在redsaga提供下载,cn-java也会提供下载!
0 请登录后投票
   发表时间:2004-04-05  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0 请登录后投票
   发表时间: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呵呵。
0 请登录后投票
论坛首页 海阔天空版

跳转论坛:
Global site tag (gtag.js) - Google Analytics