`
robbin
  • 浏览: 4799000 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
377a9ecd-1ea1-34ac-9530-9daa53bb2a7b
robbin谈管理
浏览量:135732
社区版块
存档分类
最新评论

绝对不虚此行的活动 - 记Gavin King上海交流研讨会

阅读更多
本次活动举办的两天前,我突然接到Red Hat通知,Gavin King由于身体不适,在北京演讲状态不佳,将取消上海的演讲,只回答听众的提问。随后将Gavin King自己写的请求取消演讲的Email转发给我看了。我心里这一沉,又是周四下午的活动,Gavin King又取消演讲,这次完蛋了,所以随后的会务筹备工作,我基本上也没有怎么去做,预计能来50个人就不错了。

事实上今天下午最终来的人也不多,以我目测来看,可能也就100人上下。然而令我意外的是,下午1.30 Gavin King到达现场的时候,身体状态显得非常不错,而且要求主动进行演讲,这令我和晓钢赶紧商议更改预定的流程。

以前在TSS的视频里面看过Gavin的演讲,紧张,语速快,表达能力差。但今天现场演讲大家都看到了,演讲能力非常棒!现场反应也够灵敏,估计这哥们也是这两年到处演讲给练出来了,确实让人刮目相看。

Gavin的演讲当中也不忘抨击了两句springframework,当然问题也说到了点子上,spring不使用OpenSessionInView的时候,确实处理lazy集合初始化在session关闭以后的问题很棘手。Gavin说EJB3没有这个问题,这引起我想试试EJB3的兴趣。

随后的提问环节,JavaEye的Allen Young小朋友抛出来一个尖锐的问题,直接问Gavin怎么看RoR的AR的CoC?Gavin同学的反应意料之中也意料之外。说意料之中是Gavin同学强烈的表达对RoR的鄙视,说意料之外是Gavin立刻演示了一下annotation在默认配置情况下简短写法,以证明Hibernate已经CoC了。虽然这个问题值得商榷,但现场Gavin的回答和表现绝对一流,让我这个会议组织者非常满意。

也许是因为Gavin的高水平表现让我原来预期砸锅的会议相当的精彩,导致我在自己的演讲环节有点心不在焉,大失水准。头一次在演讲当中拖了后腿。

晓钢演讲过程中,我抽空让Gavin把书全部签了名。晓钢演讲之后,Gavin的现场抽奖环节也非常棒,看的出来,很多中奖者相当兴奋,得到Gavin亲笔签名的书,还现场在讲台和Gavin搂搂抱抱的合影。最后会议结束后,很多人依然冲上去和Gavin同学搂搂抱抱,亲密无间的合影。

不得不说,不是每个来到中国的外国专家都这么平易近人的,至少多次来中国的Martin Folwer是一个相当严肃的英国人,想和他合影是很困难的,至于搂搂抱抱根本没有可能。我想,也许是因为Gavin本来就很年轻,和我们很多人同龄的缘故吧。当然,以Gavin在社区闻名的火爆脾气,现场如此平易近人,笑容可鞠,令我很感到非常意外。

因为我晚上还要到外地出差,会议结束后就立刻离开了。现在在宾馆写这篇报道。今天拍照的曹晓钢,刘江大概还在陪Gavin吃饭呢吧,你们等他们明天把照片贴出来吧。
分享到:
评论
35 楼 lgx522 2007-04-20  
JSF在大部分规范化的页面中还是比较好用的,太灵活的页面自然就力不从心了,这一点包括ASP.NET也不例外。那种太灵活的页面用请求驱动的框架会好一点,最简单就是直接写JSP。
JSF在IDE不到位的情况下是不能View的。本人经验,先用纯HTML将页面效果做好,再加入tag比较容易。本人编辑JSF向来是用EditPlus那样的文本编辑器,tag写熟了也就习惯了。
34 楼 Readonly 2007-04-20  
downpour 写道
不过也有的时候,这种做法很难施展拳脚。比如说,有很多典型的业务系统,它不允许有物理删除这个概念,必须打上disabled标志表示删除。那么这个时候,这个双向的关联就显得很苍白无力,我在这种情况下,除了使用robbin的这个思路,还没有想到有什么很好的解决方法。


这个简单,保持Parent remove方法签名不变:
remove(Child child){
  child.setDisabled(true);
  children.remove(child);
}


mapping文件上加上where
<bag name="children" lazy="true" inverse="true" cascade="all-delete-orphan" where="disabled = false">
    <key column="parent_id"/>
    <one-to-many class="Parent"/>
</bag>


另外,前面Arthas.Hui讲的方法也是很好的,只是光一个disabled属性还不值得偶们这样做,常见的业务系统里面往往还需要记录2者关系的开始时间,结束时间,状态等等,这个时候多一个RelationShip entity才有点意义。
33 楼 yueguangyuan 2007-04-20  
昨天参加活动的确不虚此行,GavinKing的发言还是需要具备一定的听力水平才能听懂,我只能听懂一部分:(,而且感觉是绝大部分是他在做广告:P,比如他一直在讲Hibernate是多么的标准,Hibernate里面的子项目以及JBOSS Seam的好处,顺便说说Spring和ROR的坏话。总得来讲GavinKing所构想的未来就是在指定标准,而所有使用他推崇这一套东西的理由就是标准,甚至包括JBOSS Seam他都打算整成标准,还举例Hibernate在EJB2的时候也不是标准……会不会在几年以后JEE的标准会变成JSF+EJBX+JBOSS Seam?感觉是一个超重量级的东西,至于这套构想能否重现Hibernate的成功就要看GavinKing的造化了。<br/>
本来我昨天是坚持录了一段视频的,结果录了30多分钟的时候突然手机没电了,全部都白录 <img src='/javascripts/fckeditor/editor/images/smiley/msn/cry_smile.gif' alt=''/> 要不还可以拿出来分享一下给没有听到的人……  不过GavinKing的狂多的兔子手势和那诡异的表情还是和搞笑的。<br/>
<br/>
而讲座中最有价值的部分就属Robbin的性能优化了,的确是有指点迷津的作用,就是讲的太快了点……最后Robbin关机的时候发现他的电脑关机的提示是Hibernate...而不是系统正在关机,足见他和Hibernate的感情 <img src='/javascripts/fckeditor/editor/images/smiley/msn/teeth_smile.gif' alt=''/><br/>
<br/>
最后曹晓钢的JBoss Seam的介绍没有上次活动他的那个开源报表吸引人,毕竟Seam在国内还不火热,但是感觉曹晓刚比年前帅多了。
32 楼 mingisme 2007-04-20  
不知道为啥Gavin King会热衷于JSF这种基于事件驱动的Web层框架,实在是不能理解。

最近在用JSF+Spring webflow做项目,那叫一个痛苦。不仅说它的编程模型特别诡异,让我们这种熟悉了传统MVC概念的程序员无法接受,最要命的是它特别喜欢用Tag,做出来的页面是不能View的,这是最最无法交流的地方了。按照robbin的说法,直接对这个东西判了死刑。[/]
对JSFtag支持最好的工具是 BEA Workshop,与你类似,我们用JSF+Spring+Hibernate做了2个项目,JSF简直太猥琐了,遇到的问题还是都解决了,但是不漂亮。这个事件驱动模型,缺少纯URL的action,感觉很不爽。所以,后续项目我已经和其他同事达成共识,要么用Struts1.2,要么用Struts2.
31 楼 zhaonjtu 2007-04-20  
我也是这么做的。
Readonly 写道
Robbin 写道

双向关联,inverse=“true”的情况下应避免使用集合缓存

这个是因为你的这个实践建议造成的:
Robbin 写道

在分层结构中通过DAO接口用session直接持久化对象,避免通过关联关系进行可达性持久化

这样就会带来内存模型和数据库模型不一致的情况

偶的实践建议是相反的:通过关联关系进行可达性持久化

在Parent上有这种方法:
add(Child child) {
  child.setParent(this);
  children.add(child);
}

remove(Child child) {
    child.setParent(null);
    children.remove(child);
}


设置inverse = true 和 cascade = all-delete-orphan
删除某个child的操作就变成一句话搞定:
parent.remove(child)


这样内存和数据库保持完美一致,而且代码写起来也简单,不需要ChildDAO上有啥create/delete/update/ Child的方法

双向关联的2级缓存也是非常好用的
30 楼 wujunrat 2007-04-20  
大师很幽默啊,想不到friends中Ross的经典“兔子手势”,Gavin用的如此地道。向Robbin说声不好意思,你和Gavin合影时忘记走开了,^_^~
29 楼 Arthas.Hui 2007-04-20  
downpour 写道


不过也有的时候,这种做法很难施展拳脚。比如说,有很多典型的业务系统,它不允许有物理删除这个概念,必须打上disabled标志表示删除。那么这个时候,这个双向的关联就显得很苍白无力,我在这种情况下,除了使用robbin的这个思路,还没有想到有什么很好的解决方法。


我认为,这种情况,并不适合做简单的父子关系,即子表有父表ID做外键,因为就业务逻辑而言,“删除”并不是父亲杀死儿子,而是父亲暂时不认这个儿子。我倾向于做3张表,父亲们,儿子们,父亲儿子关系表。父亲表和父亲儿子关系表应该会适合Robbin的思路。
28 楼 Arthas.Hui 2007-04-20  
去听了一下,收获还是很多的。最可惜的是,没有中奖啊。。。
27 楼 newman 2007-04-20  
Gavin King昨天似乎不在状态,如果没有轻微脑震荡可能气氛更热烈,另外在场的部分人英文能力可能都不怎么样(包括我在内),互动性差是这类技术讲座的通病,尤其是老外的场次,否则Gavin老兄会有更多激情来秀出风采。
26 楼 newman 2007-04-20  
事件驱动是进步还是倒退?我认为还是进步的,起码在编程思想和模型是进步的。web开发的复杂度有request-response模型过于简单的原因在其中,为了实现丰富的业务必须从简单处构建,做了不少工作。jboss seam的着力点在于企业开发,所以在栈中加入了与jboss诸多组件的粘合元素,当然其中有商业元素,但选择权在你手中,如果商业开发采用seam方案,我认为整体优势还是非常不错。jsf行还是不行,先别忙下结论,有时候说话太多会忘记做事,行与不行不是说出来的。呵呵。
25 楼 过河卒 2007-04-20  
什么时候能够放出Gavin King演讲的音频来听听,当然Robbin的也是很欢迎的。到的只有100来人,不代表想去的就那100来人啊!照顾照顾我们这些没去的吧。
24 楼 eyejava 2007-04-20  
nihongye 写道
引用
eager-fetch 我这边根本实现不了,在many-to-one端 配不配fetch="join"

视情况而定啦。建议开新贴讨论这个问题。我理解的eager-fetch保证的是not lazy(这一定必须保证).而join是一种期望的抓取策略,并不一定能保证。

开帖了:http://www.iteye.com/topic/72783
23 楼 downpour 2007-04-20  
不知道为啥Gavin King会热衷于JSF这种基于事件驱动的Web层框架,实在是不能理解。

最近在用JSF+Spring webflow做项目,那叫一个痛苦。不仅说它的编程模型特别诡异,让我们这种熟悉了传统MVC概念的程序员无法接受,最要命的是它特别喜欢用Tag,做出来的页面是不能View的,这是最最无法交流的地方了。按照robbin的说法,直接对这个东西判了死刑。
22 楼 downpour 2007-04-20  
Readonly 写道
Robbin 写道

双向关联,inverse=“true”的情况下应避免使用集合缓存

这个是因为你的这个实践建议造成的:
Robbin 写道

在分层结构中通过DAO接口用session直接持久化对象,避免通过关联关系进行可达性持久化

这样就会带来内存模型和数据库模型不一致的情况

偶的实践建议是相反的:通过关联关系进行可达性持久化

在Parent上有这种方法:
add(Child child) {
  child.setParent(this);
  children.add(child);
}

remove(Child child) {
    child.setParent(null);
    children.remove(child);
}


设置inverse = true 和 cascade = all-delete-orphan
删除某个child的操作就变成一句话搞定:
parent.remove(child)


这样内存和数据库保持完美一致,而且代码写起来也简单,不需要ChildDAO上有啥create/delete/update/ Child的方法

双向关联的2级缓存也是非常好用的


这个问题要讨论下去是没有底的。

Readonly的做法是我采用的做法,这在多数情况下都不会存在问题。有的人会担心所谓的效率问题,老实说,除非Children这边成千上万,否则根本不会造成什么效率问题。

不过也有的时候,这种做法很难施展拳脚。比如说,有很多典型的业务系统,它不允许有物理删除这个概念,必须打上disabled标志表示删除。那么这个时候,这个双向的关联就显得很苍白无力,我在这种情况下,除了使用robbin的这个思路,还没有想到有什么很好的解决方法。
21 楼 laoer 2007-04-20  
Gavin King的演讲真的没有听得太懂,我英文太差:(,不过Gavin King对于ROR的反映之激烈,挺有意思的。
Robbin对Hibernate的总结,大部分比较认同,不过对于数据库的粒度设计,我觉得倒不是绝对的,Hibernate在处理复杂业务的数据结构上还是有些力不从心,具体情况具体对待吧,这和世界上没有万能药水。
对于晓刚的Seam介绍,比较简单,Seam到底怎么样,还需要实践来检验啊。
20 楼 mingisme 2007-04-20  
robbin讲得非常不错,解决了我以前得不少疑问。
非常幸运,拿同事的名片该了一下名,抽奖到一本书。
19 楼 shaucle 2007-04-20  
庄表伟 写道
我在和dlee聊这个Seam框架,我们都相信,这种把所有的状态都放在服务器端的框架,简直就是在开“技术倒车”。

在REST+Ajax这样明显的发展趋势的大背景下,我认为,Seam不会有什么前途。


正是这样,jboss web server才好卖嘛.
而且gavin坚信session复制的效果很好

感觉晓钢的seam讲得太少,也较浅,不过可能因为用的人太少了吧.
俺有个项目正在用seam. 1.1的bug还不少...
18 楼 Readonly 2007-04-20  
Robbin 写道

双向关联,inverse=“true”的情况下应避免使用集合缓存

这个是因为你的这个实践建议造成的:
Robbin 写道

在分层结构中通过DAO接口用session直接持久化对象,避免通过关联关系进行可达性持久化

这样就会带来内存模型和数据库模型不一致的情况

偶的实践建议是相反的:通过关联关系进行可达性持久化

在Parent上有这种方法:
add(Child child) {
  child.setParent(this);
  children.add(child);
}

remove(Child child) {
    child.setParent(null);
    children.remove(child);
}


设置inverse = true 和 cascade = all-delete-orphan
删除某个child的操作就变成一句话搞定:
parent.remove(child)


这样内存和数据库保持完美一致,而且代码写起来也简单,不需要ChildDAO上有啥create/delete/update/ Child的方法

双向关联的2级缓存也是非常好用的
17 楼 lgn21st 2007-04-20  
现场感觉真的太棒了,难以想像J2EE社区教父level的人物这么和蔼。<br/>
<br/>
不过~~ 我比较郁闷的是,居然跟另外一位同学重名了~~<img src='/javascripts/fckeditor/editor/images/smiley/msn/omg_smile.gif' alt=''/><br/>
谁让我自己没有名片,去的时候满世界找,最后拿了同学的名片就去了<br/>
跟Gavin King亲笔签名的书失之交臂啊~~<img src='/javascripts/fckeditor/editor/images/smiley/msn/cry_smile.gif' alt=''/><br/>
赶紧china-pub订购
16 楼 nihongye 2007-04-20  
庄表伟 写道
我在和dlee聊这个Seam框架,我们都相信,这种把所有的状态都放在服务器端的框架,简直就是在开“技术倒车”。

在REST+Ajax这样明显的发展趋势的大背景下,我认为,Seam不会有什么前途。

http://docs.jboss.com/seam/1.0.0.GA/reference/en/html/tutorial.html#blog

A RESTful Seam application: the Blog example

相关推荐

Global site tag (gtag.js) - Google Analytics