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

绝对不虚此行的活动 - 记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吃饭呢吧,你们等他们明天把照片贴出来吧。
分享到:
评论
15 楼 nihongye 2007-04-20  
可能是指在seam 这个框架下吧。
seam定义了一个粒度比session小的会话窗口。具体的思想看下
http://docs.jboss.com/seam/1.0.0.GA/reference/en/html/tutorial.html#d0e1528

1.6.3. Understanding Seam conversations
14 楼 Feiing 2007-04-20  
daquan198163 写道
robbin 写道
Gavin的演讲当中也不忘抨击了两句springframework,当然问题也说到了点子上,spring不使用OpenSessionInView的时候,确实处理lazy集合初始化在session关闭以后的问题很棘手。Gavin说EJB3没有这个问题,这引起我想试试EJB3的兴趣。


这算spring的问题么?


lazy 的问题很早就有人抱怨说是 hibernate 的设计缺陷, 不得已才使用 OpenSessionInView, 跟 spring 应该没啥关系.   EJB3 可以做到 session 关闭后的 lazy?  莫非他能未卜先知加载 ui 上的元素,  还是根本不区分, 一股脑的加载到内存里? 
13 楼 nihongye 2007-04-19  
引用
eager-fetch 我这边根本实现不了,在many-to-one端 配不配fetch="join"

视情况而定啦。建议开新贴讨论这个问题。我理解的eager-fetch保证的是not lazy(这一定必须保证).而join是一种期望的抓取策略,并不一定能保证。
12 楼 eyejava 2007-04-19  
robbin 写道
温柔一刀 写道
呵呵,Gavin King确实非常平易近人
但是偶今天就robbin的演讲听的很明白,
Gavin King讲的英文没怎么听懂,
晓刚讲的seam以前没有接触过,看到貌似又跟jsf结合的比较紧密,兴趣失了一半


我本来想现场问Gavin一个问题,问他有没有把JBoss Seam和Struts2.0整合的计划,他如果有这个计划,那我肯定对Seam很有兴趣,但一看他对JSF狂捧,然后对RoR狂踩,这问题就自己咽回去了。

当然这问题后来晓钢问了,Gavin也回答了,就是会考虑集成Tapestry。这说明Gavin对事件驱动的web框架很推崇,对MVC框架没有兴趣,答案也很清楚了,他不会考虑Struts2.0的,当然我要的答案也有了,就是我绝对不会对Seam产生兴趣的。


Gavin提了一下struts2.0,webwork 啥的,没听懂他是说会支持还是不可能支持。

另外robbin你今天说的eager-fetch 我这边根本实现不了,在many-to-one端 配不配fetch="join" 根本没有区别,都会发起 1+N条查询,不知道为什么。
11 楼 daquan198163 2007-04-19  
robbin 写道
Gavin的演讲当中也不忘抨击了两句springframework,当然问题也说到了点子上,spring不使用OpenSessionInView的时候,确实处理lazy集合初始化在session关闭以后的问题很棘手。Gavin说EJB3没有这个问题,这引起我想试试EJB3的兴趣。


这算spring的问题么?
10 楼 dlee 2007-04-19  
robbin讲的满好的,解答了我前一段时间对Hibernate做性能优化遇到的一些问题。

一个典型的例子,是在单向的一对多关系时,如果直接插入、修改、删除多这边的PO对象,则一这边的集合的二级缓存无法更新的问题。
  <set name="places" cascade="none" inverse="true" order-by="id asc" lazy="false">
      <cache usage="read-write"/>
     
    <key column="site_id"/>
    <one-to-many class="com.agilefaith.impl.site.Place"/>
  </set>
我试过无论inverse="true"还是inverse="false"都无法更新。

另外robbin说的二级缓存是解决性能问题的法宝,这个说的很对,我们做Hibernate性能优化的经验与robbin完全相同。robbin说的确实是些经验之谈。

不过Hibernate的二级缓存也存在着一些缺陷。
首先,它是以PO的id作为缓存的key来保存PO,不适合以其他属性值来查找的情况。
其次,Hibernate的二级缓存仅在对单个PO执行CRUD(add、get/load、update、remove)时才会访问。如果执行批量加载(loadAll),仍然会执行select语句。

如果经常以非id字段查找PO对象,或者经常执行批量加载,则有必要实现特定于应用的自定义缓存。也可以使用ehcache来开发,ehcache从1.2之后也可以支持集群了。
9 楼 netfishx 2007-04-19  
庄表伟 写道
我在和dlee聊这个Seam框架,我们都相信,这种把所有的状态都放在服务器端的框架,简直就是在开“技术倒车”。

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


说得太对了!!!
8 楼 温柔一刀 2007-04-19  
PS:今天貌似没看到老庄
7 楼 温柔一刀 2007-04-19  
<p><font>关于“<font>继承关系当中的隐式多态”,我试了下</font></font></p>
<p>大概是这样子的:</p>
<font>
<div class='code_title'>xml 代码</div>
<div class='dp-highlighter'>
<div class='bar'/>
<ol class='dp-xml'>
    <li class='alt'><span><span class='tag'>&lt;</span><span class='tag-name'>hibernate-mapping</span><span> </span><span class='attribute'>package</span><span>=</span><span class='attribute-value'>"com.xxx.domain"</span><span class='tag'>&gt;</span><span>  </span></span></li>
    <li class=''><span>  </span></li>
    <li class='alt'><span>    </span><span class='tag'>&lt;</span><span class='tag-name'>class</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"User"</span><span> </span><span class='attribute'>table</span><span>=</span><span class='attribute-value'>"user"</span><span> </span><span class='attribute'>polymorphism</span><span>=</span><span class='attribute-value'>"explicit"</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class=''><span>        </span><span class='tag'>&lt;</span><span class='tag-name'>id</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"id"</span><span> </span><span class='attribute'>unsaved-value</span><span>=</span><span class='attribute-value'>"null"</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class='alt'><span>            </span><span class='tag'>&lt;</span><span class='tag-name'>generator</span><span> </span><span class='attribute'>class</span><span>=</span><span class='attribute-value'>"native"</span><span class='tag'>/&gt;</span><span>  </span></li>
    <li class=''><span>        </span><span class='tag'>&lt;/</span><span class='tag-name'>id</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class='alt'><span>        </span><span class='tag'>&lt;</span><span class='tag-name'>property</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"userName"</span><span> </span><span class='attribute'>column</span><span>=</span><span class='attribute-value'>"user_name"</span><span class='tag'>/&gt;</span><span>          </span></li>
    <li class=''><span>        </span><span class='tag'>&lt;</span><span class='tag-name'>property</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"password"</span><span> </span><span class='attribute'>column</span><span>=</span><span class='attribute-value'>"password"</span><span> </span><span class='attribute'>not-null</span><span>=</span><span class='attribute-value'>"true"</span><span class='tag'>/&gt;</span><span>          </span></li>
    <li class='alt'><span>  </span></li>
    <li class=''><span>        </span><span class='tag'>&lt;</span><span class='tag-name'>joined-subclass</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"Guide"</span><span> </span><span class='attribute'>table</span><span>=</span><span class='attribute-value'>"guide"</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class='alt'><span>            </span><span class='tag'>&lt;</span><span class='tag-name'>key</span><span> </span><span class='attribute'>column</span><span>=</span><span class='attribute-value'>"id"</span><span class='tag'>/&gt;</span><span>              </span></li>
    <li class=''><span>            </span><span class='tag'>&lt;</span><span class='tag-name'>property</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"sex"</span><span> </span><span class='attribute'>column</span><span>=</span><span class='attribute-value'>"sex"</span><span> </span><span class='attribute'>length</span><span>=</span><span class='attribute-value'>"2"</span><span class='tag'>/&gt;</span><span>  </span></li>
    <li class='alt'><span>            </span><span class='tag'>&lt;</span><span class='tag-name'>property</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"nation"</span><span> </span><span class='attribute'>column</span><span>=</span><span class='attribute-value'>"nation"</span><span> </span><span class='attribute'>length</span><span>=</span><span class='attribute-value'>"10"</span><span class='tag'>/&gt;</span><span>              </span></li>
    <li class=''><span>            </span><span class='tag'>&lt;</span><span class='tag-name'>many-to-one</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"travel"</span><span> </span><span class='attribute'>class</span><span>=</span><span class='attribute-value'>"Travel"</span><span> </span><span class='attribute'>column</span><span>=</span><span class='attribute-value'>"travel_id"</span><span class='tag'>/&gt;</span><span>  </span></li>
    <li class='alt'><span>        </span><span class='tag'>&lt;/</span><span class='tag-name'>joined-subclass</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class=''><span>        </span><span class='tag'>&lt;</span><span class='tag-name'>joined-subclass</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"Travel"</span><span> </span><span class='attribute'>table</span><span>=</span><span class='attribute-value'>"travel"</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class='alt'><span>            </span><span class='tag'>&lt;</span><span class='tag-name'>key</span><span> </span><span class='attribute'>column</span><span>=</span><span class='attribute-value'>"id"</span><span class='tag'>/&gt;</span><span>  </span></li>
    <li class=''><span>            </span><span class='tag'>&lt;</span><span class='tag-name'>property</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"postCode"</span><span> </span><span class='attribute'>column</span><span>=</span><span class='attribute-value'>"post_code"</span><span> </span><span class='attribute'>length</span><span>=</span><span class='attribute-value'>"10"</span><span class='tag'>/&gt;</span><span>  </span></li>
    <li class='alt'><span>            </span><span class='tag'>&lt;</span><span class='tag-name'>property</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"address"</span><span> </span><span class='attribute'>column</span><span>=</span><span class='attribute-value'>"address"</span><span> </span><span class='attribute'>length</span><span>=</span><span class='attribute-value'>"200"</span><span class='tag'>/&gt;</span><span>            </span></li>
    <li class=''><span>        </span><span class='tag'>&lt;/</span><span class='tag-name'>joined-subclass</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class='alt'><span>    </span><span class='tag'>&lt;/</span><span class='tag-name'>class</span><span class='tag'>&gt;</span><span>  </span></li>
    <li class=''><span>  </span></li>
    <li class='alt'><span/><span class='tag'>&lt;/</span><span class='tag-name'>hibernate-mapping</span><span class='tag'>&gt;</span><span>  </span></li>
</ol>
</div>
<p>然后我一句HQL: "FROM User"</p>
<p><font>根据,polymorphism=“explicit”,只取出当前查询对象</font></p>
<p><font>那应该只会查出 id,userName 和 password 三个属性,但是实际情况是这句HQL生成的sql语句将左连接两个子表查询出三个表中的所有属性</font></p>
<p>不知道是不是polymorphism=“explicit”不适用于这种情况?</p>
</font>
6 楼 robbin 2007-04-19  
庄表伟 写道
我在和dlee聊这个Seam框架,我们都相信,这种把所有的状态都放在服务器端的框架,简直就是在开“技术倒车”。

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


这到不是Seam的问题,是JSF的问题。JSF有两大原罪:一就是服务器端事件模型;一就是JSP View,这两大原罪导致我对JSF判了死刑。当然现在厂商狂推JSF,要说JSF死掉为时过早,但我是不会跟进JSF的。

5 楼 庄表伟 2007-04-19  
我在和dlee聊这个Seam框架,我们都相信,这种把所有的状态都放在服务器端的框架,简直就是在开“技术倒车”。

在REST+Ajax这样明显的发展趋势的大背景下,我认为,Seam不会有什么前途。
4 楼 robbin 2007-04-19  
温柔一刀 写道
呵呵,Gavin King确实非常平易近人
但是偶今天就robbin的演讲听的很明白,
Gavin King讲的英文没怎么听懂,
晓刚讲的seam以前没有接触过,看到貌似又跟jsf结合的比较紧密,兴趣失了一半


我本来想现场问Gavin一个问题,问他有没有把JBoss Seam和Struts2.0整合的计划,他如果有这个计划,那我肯定对Seam很有兴趣,但一看他对JSF狂捧,然后对RoR狂踩,这问题就自己咽回去了。

当然这问题后来晓钢问了,Gavin也回答了,就是会考虑集成Tapestry。这说明Gavin对事件驱动的web框架很推崇,对MVC框架没有兴趣,答案也很清楚了,他不会考虑Struts2.0的,当然我要的答案也有了,就是我绝对不会对Seam产生兴趣的。
3 楼 温柔一刀 2007-04-19  
呵呵,Gavin King确实非常平易近人
但是偶今天就robbin的演讲听的很明白,
Gavin King讲的英文没怎么听懂,
晓刚讲的seam以前没有接触过,看到貌似又跟jsf结合的比较紧密,兴趣失了一半
2 楼 robbin 2007-04-19  
庄表伟 写道
我也感觉你的演讲不在状态,依我猜测,大概还是因为“另结新欢”了吧。



哈哈,那到没有。其实用了RoR以后,对Hibernate比从前理解的深刻多了,有时候多接触点东西,是可以触类旁通的。我演讲的内容绝对是我对于Hibernate/ORM/AR心得之总结,只是现场表达和组织竟然没有发挥好。
1 楼 庄表伟 2007-04-19  
我也感觉你的演讲不在状态,依我猜测,大概还是因为“另结新欢”了吧。

相关推荐

    吉他谱_Shark Dad - Dance Gavin Dance.pdf

    初级入门吉他谱 guitar tab

    lambda-calculus-translation-gavin-1:GitHub Classroom创建的lambda-calculus-translation-gavin-1

    lambda微积分翻译加文1 我使用了来自类的代码作为我的基本代码。 我将原始的“ translate-arithmetic”函数修改为一个通用的“ translate-lc”,它将从lambda演算语法转换为Python。 我没有更改LC语法,而是尝试满足...

    gavin-build:简易的打包工具

    gavin-build 项目介绍 gavin-build 是一个自己实现的简易打包工具,内部的实现很简单。仅供学习和参看 主要通过acorn实现对js文件的分析,通过css-tree对css文件进行分析,都是将资源转成对应的ast,然后更编译的...

    game-in1-gavin

    加文·默坎(Gavin Mercan) 迈恩计划 依据:uitleg,spelen,afgaan EN punten FASE 1 maak index.html,style.css和script.js遇到画布 teken slang van 1区段 beweeg俚语oneindig在EEN richting。 beweging...

    gavin-framework:Gavin的轻量级MVC框架

    加文框架(Gavin Framework)是一个专为Java开发者设计的轻量级MVC(Model-View-Controller)框架。在Web应用开发中,MVC模式是一种广泛应用的设计模式,它将业务逻辑、数据处理和用户界面分离开来,使得代码结构...

    Elastic在电子银行的安全应用-Gavin Lee

    20161210Elastic{ON} Dev China 2016

    hire-gavin-asay

    Create React App入门 该项目是通过引导的。 可用脚本 在项目目录中,可以运行: npm start 在开发模式下运行应用程序。 打开在浏览器中查看它。 如果您进行编辑,则页面将重新加载。 您还将在控制台中看到任何...

    Java高手谈论Hibernate的发展之路

    由Gavin King创建并发展的Hibernate,在短短几年间从一个不起眼的开源项目成长为备受瞩目的主流框架,对整个Java持久层技术产生了深远影响。Gavin King在EJB3.0规范制定中的角色尤其关键,他的工作直接影响了Entity ...

    EESB研究生在UCSB举行的关于广义,线性,加法和混合模型的统计研讨会(2020)-Linux开发

    线性,加法和混合模型模型统计研讨会(2020年夏季)线性模型(LM)Raine Detmer,Ruby Harris-Gavin和Devin Gamble广义线性模型(GLM)Ana Miller-Ter Kuile和Tatum Katz通过AIC选择模型An Bui和AnaSofíaGuerra广义...

    Hibernate简介与快速入门

    随着Hibernate的不断发展和完善,Gavin King也成为了EJB 3.0规范的专家委员会成员之一,并成为了JBoss的核心成员之一。 - **开源与普及**: Hibernate是一个开源项目,其设计理念是低侵入式的,这意味着开发者可以...

    java8大知名人物.pdf

    相关链接Gavin King WikiHibernate 官方网站News Article: Hibernate's Gavin King: JBoss acquisition will help grow ORM frameworkGavin King 的著作:Hibernate in Action3. Spring Framework 创始人Rod Johnson...

    PPAP生产件批准程序gavin999.pptx

    PPAP过程详细规定了供应商在开始批量生产前需要完成的一系列文档和验证活动,以确保产品在实际生产环境中能够满足顾客的需求。 在PPAP过程中,供应商需要理解以下几个关键知识点: 1. **目的**: - 确保供应商...

    JAVA persistence with hibernate

    hibernate bible by Gavin king Nothing more

    Gavin-Mulderig.github.io

    标题 "Gavin-Mulderig.github.io" 暗示这是一个个人或项目在GitHub Pages上建立的静态网站。GitHub Pages是GitHub提供的一项服务,允许用户免费托管静态网页,通常用于展示个人简历、项目介绍或者博客等内容。这个...

    gavin2love#handbook#Juniper-初始化设置1

    初始化根密码set system root-authentication plain-text-password #配置 root 登录密码(如不配置,将无法执

    继续公开的秘密(Gavin F. Redelman)Resume Secrets Exposed (Gavin F. Redelman)

    《公开的秘密(Gavin F. Redelman):揭秘简历(Resume Secrets Exposed)》是Gavin F. Redelman撰写的一本关于简历写作的电子书籍。本书的主旨是指导读者如何撰写一份能够脱颖而出的简历,以及如何避免那些常犯的、...

    是时候找到新工作了(Gavin F. Redelman)Time To Find A New Job (Gavin F. Redelman)

    在标题《是时候找到新工作了(Gavin F. Redelman)Time To Find A New Job (Gavin F. Redelman)》中提到的Gavin F. Redelman是本书的作者,他可能是一名职业顾问或有丰富经验的职场专家,RedStarResume可能是一个与...

    gavin-song.github.io:我的网站,用于各种项目

    【标题】"gavin-song.github.io:我的网站,用于各种项目"揭示了这是一个个人网站,由用户Gavin Song创建,旨在展示和管理他的各种项目。这个网站可能包含了Gavin Song的编程作品、技术博客、开源项目等,反映出他在...

    信息交流平台 多多益善

    Hibernate是一个由Gavin King开发的开源框架,其始于2001年,历经多个版本的迭代,逐渐成为JDBC的轻量级对象封装,尤其在Java应用中用于数据库访问。Hibernate 2.0在2003年发布,并在同年获得了JOLT 2004大奖,随后...

    Apress - Pro Hibernate3

    - **起源与发展**:Hibernate最初由Gavin King创建,后来成为JBOSS的一部分,并最终被Red Hat收购。随着版本的发展,Hibernate已经成为Java世界中最流行的ORM框架之一。 - **特点**: - **轻量级**:不需要任何...

Global site tag (gtag.js) - Google Analytics