- 浏览: 332965 次
- 性别:
- 来自: 新加坡
文章分类
最新评论
-
xiuluocd:
ok,受益匪浅
[转贴]System.getProperty()参数大全 -
xiaohuafyle:
这个不能算是bug吧,weblogic用的jdk版本一直都很老 ...
项目积累:Weblogic -
macemers:
请问楼主 has_readed作为计数器,是如何防止网络阻塞的 ...
Socket、Thread的使用记录 -
xutao5641745:
higkoo 写道请教一个问题,我在编译Jmeter的时候,发 ...
[转贴]System.getProperty()参数大全 -
zhaoyu_h:
加油。。。啊。。。加油。。。 谢谢啦。。
[转贴]System.getProperty()参数大全
4月19日,如期赶到交大参加GavinKing的见面会,上次参加JavaEye的活动还只是在视频上看到Gavin,当时他语速很快,而且有些含混的地方,不知道这次面对面会是个啥样子。
JavaEye还是真厉害,给我们提供这样的机会与Hibernate之父见面,羡煞旁人哦,呵呵。
活动分4个部分:Gavin的演讲、Robbin的Hibernate性能调优、曹晓钢有关JBoss Seam的介绍、Gavin King答疑
一、Gavin演讲
本来我是用手机录的视频并想拿回来给大家分享的,但是没想到手机突然没电,而录的30分钟视频完全丢失,真是无比郁闷的!
Gavin说话比较快,而且偶尔也会说的很模糊,对于听力不怎么灵光的我来说实在是有难度。所以仅仅是听懂了大体的意思。
Gavin打开Hibernate官方网站www.hibernate.org然后逐一演示几个关键的开源软件:hibernate core,hibernate annotations,hibernate entity manager等等。感觉介绍都是比较大略的(主要是我能听懂的也不多),介绍hibernate的时候讲到Hibernate和JPA的使用,但是 JPA我没使用过,他说今后使用Hibernate的时候可以更多的使用JPA而不用使用Hibernate;讲到Hibernate Annotations的时候问大家配置Hiberante是使用schema还是annotations,看到使用Annotations用的少的时 候,说建议大家尝试使用,但是这个目前为止并没有被大家所认可,所以是否使用还有待观察哦;接下来讲的entitymanager、shard、 validator、search、tools我都没有使用过,听了他的介绍以后也只是简单了解一下,是否使用就要看以后有没有相应的需求了。有趣的是 Gavin还提到了Spring,说大家使用Spring+hibernate的时候都会遇到延迟加载的问题吧,但是大家都没怎么听懂,后来robbin 在下面现场翻译了一下,才多了几个人举手,Gavin说应该会有很多人碰到的,而EJB3不会碰到,呵呵。
其实Gavin此次来中国主要是为Radhat推广JBoss Seam,在北京说他讲了一天时间,因为那次是商业活动,而到了上海是JavaEye的社区活动,加上他刚刚出了一次小车祸,所以在上海只讲了一个小时,其中有20分钟是介绍JBossSeam的,同样令我摸不到头脑。介绍JBoss Seam,Gavin很有信心,而且好像很努力的在讨好SUN,希望能加入JEE标准中,因为他相信在EJB2时代不被看好的Hibernate已经上 位,而Seam也可能走这条路。接下来进行了介绍,还讲解官方网站上的Demo,但是由于网络延迟太严重,他还在演讲台上做了一个原地的跳动来模仿鼠标等 待的样子,相当的搞笑。接下来的回答问题环节,一位同学提到了ROR,说Hibernate是如何来应对Convention over configuration的挑战呢?结果引起Gavin的剧烈反应,Gavin显示出对ROR的不削,而且还说EJB在几年以前就有COC的理念了, ROR还嫩的很,随即还即兴写了一小段代码来掩饰EJB3中如何使用annotations来实现COC,他的回应赢得满场的掌声。整个演讲持续一个多小 时,而我还损失了30分钟的真人视频 :(。Robbin说Gavin受了两年的成名的考验以后,显然比原来更适应大场面,演讲声音很大,吐字也清晰了许多,自信心也很足,经常做一些很古怪的 表情,还时不时的做出经典的兔子手势来表达他的意思。可以说他的演讲还是很值得一听的。
但是总体想起来,Gavin貌似已经走进一个漩涡,那么就是标准。估计在整个下午(演讲1个小时和对几个人的回答)估计他说了10次“Standard”这个词,在他眼里标准已经占据了一切,有人问,使用Hibernate和JPA,你有什么看法?他会说我不在意,他们都是标准。一切尽在标准中,他无视Spring、ROR的强有力挑战,甚至想将JBoss Seam这样的东西纳入JSF、EJB阵营。他如此走下去真是难以让人对他重现Hibernate的惊世之作有更多的期待。
二、Robbin倾力奉送Hibernate性能调优
个人认为这个绝对是Robbin压箱底的作品(因为很激动能邀请到Gavin参加他主办的活动),但是Robbin还是很谦虚的首先声明:在Gavin面前谈Hibernate真是班门弄斧,所以是拿出来和大家探讨,而当晚就有针对其演讲中如何避免N+1问题的讨论(http://www.iteye.com/post/266972),足见Robbin演讲受欢迎的程度。
由于Robbin为了抢时间,所以他讲的比较快,我也是急急忙忙的记笔记,但是他所总结的东西已经让我了解到了很多东西,原来我对Hibernate的了解还是那么少:(。
Robbin总结的Hibernate性能优化要点:
1.尽量使用many-to-one,避免使用单项one-to-many
2.灵活使用单向one-to-many
3.不用一对一,使用多对一代替一对一
4.配置对象缓存,不使用集合缓存
5.一对多使用Bag 多对一使用Set
6.继承使用显示多态 HQL:from object polymorphism="exlicit" 避免查处所有对象
7.消除大表,使用二级缓存
对于上面这些,Robbin进行了详细的讲解。
one-to-many:
使用inverse=false(default),对象的关联关系是由parent对象来维护的
而inverse=true的情况下,一般用户双向多对多关联,由子对象维护关联关系,增加子对象的时候需要显示:child.setParent(child)
为了提高性能,应该尽量使用双向one-to-many inverse=true,在MVC结构中的DAO接口中应该直接用Session持久化对象,避免通过关联关系(这句话有点不理解),而在单项关系中正确使用二级缓存,则可以大幅提高以查询为主的应用。
多对一性能问题比较少,但是要避免经典N+1问题。
通过主键进行关联,相当于大表拆分小表。(这个是区分面向对象设计和面向过程设计的一个关键点)
list、bag、set的正确运用
one-to-many:
A、使用list 需要维护Index Column字段,不能被用于双向关联,而且必须使用inverse=false,需要谨慎使用在某些稀有场合(基本上是不予考虑使用)
B、bag/set在one-to-many中语义基本相同,推荐使用bag
many-to-one:
A、bag和set不同,bag允许重复插入,建议使用set
在庞大的集合分页中应该使用session.createFilter
session.createFilter(parent.getChildren(),""),setFirstResult(0),setMaxResult(10))
避免N+1 参考(http://www.iteye.com/post/266972)
在多对一的情况下,查询child对象,当在页面上显示每个子类的父类对象的时候会导致N+1次查询,需要采用下面的方法避免:many-to-one fetch="join|select"(该方法可能有问题)
inverse=true 无法维护集合缓存(还不是很理解集合缓存和对象缓存)
OLTP类型的web应用,可以群集水平扩展,不可避免的出现数据库瓶颈
框架能降低访问数据库的压力,采用缓存是衡量一个框架是否优秀的重要标准,从缓存方面看Hibernate
A、对象缓存,细颗粒度,是针对表的级别,透明化访问,因为有不改变代码的好处,所以是ORM提高性能的法宝
B、Hibernate是目前ORM框架中缓存性能最好的框架
C、查询缓存
最后Robbin还针对大家经常出现的Hibernate vs iBatis的讨论进行了一个总结:
对于OLTP应用,使用ORM框架 而OLEB应用(不确定是什么应用)最好采用JDBC或者其他方法处理
Hibernate倾向于细颗粒度设计,面向对象,将大表拆分为多个小表,消除冗余字段,通过二级缓存提升性能。
iBatis倾向于粗颗粒度设计,面向关系,尽量把表合并,通过Column冗余,消除关联关系,但是iBatis没有有效的缓存手段。
可以说Robbin的性能总结对于使用Hibernate的开发人员有着很重要的点拨作用。非常感谢他无私奉献自己的经验。
三、曹晓刚对于JBoss Seam的介绍
曹大侠又一次露面了,首先的感觉就是他比上次JavaEye的活动瘦了些,更帅了 :)。而且在演讲席间,是他一直与Gavin进行着交流,这位满江红的创办者之一,想必他的英语水平和他的技术水平一样的强。他说目前满江红正在进行JBoss Seam文档的中文翻译工作,进度为50%。而此次演讲的内容是介绍JBoss Seam,但是由于JBossSeam刚刚走向市场推广,国内也鲜有应用,其实全球来讲也没有什么大规模的成功案例,所以他的演讲也使得大家有点陌生。而且他说自己也是在学习阶段,呵呵。感觉上这次介绍不如上次JavaEye活动中他给我们带来的基于Ajax开源报表项目有吸引力,但是也具备一定的价值。
通过Gavin和曹晓刚的介绍,JBoss有啥好处我并不大了解,以及它是否具有挑战主流架构模式都有待检验,但是我得到一些简单的结论:JBoss Seam现阶段我们还不需要花时间去了解。
原因有一下几点,实际上就是曹晓刚介绍的东西:
1.JBoss Seam引入了一个全新的概念:declared state,就是在传统的HTTP存储对象的组件外又加入了Conversation这个东西。(这里记录好像有错误,因为我对JBoss Seam一无所知)
2.JBoss Seam目前只支持JSF,可能是JBoss团队以Gavin为首想讨好SUN和众多大厂商吧,居然紧密结合JSF,JSF多年来日子都没好过过,不知道Seam这样搞是为了啥。
3.JBoss Seam添加了众多组件的支持,比如Ajax支持、Captcha支持、类似于Rails的Gen支持。说50行就可以完成一个什么实现的。
4.BiInjection(双向注入依赖,一个Seam的创新,也值得质疑的东西) and contextual are the soul of Seam,这是一个Seam的开发者对Seam的总结,但是这两个东西都难有说服力,不知道什么样的场景需要大量使用到他们,特别是双向关联,可能会造成相当大的迷惑哦。
一个非常精彩的技术之旅,感谢JavaEye提供这样的好机会,也感谢Gavin精彩的演讲 :P。
发表评论
-
复杂Struts Validation汇总
2008-11-16 21:57 3143不得不承认我用了太久的Struts1,但实际上并没有太多好的回 ... -
多种问题 一种解决方案:使用ANT管理部署应用服务器
2008-07-12 01:46 3974ANT在Java界和开源世界里面的地位大家都知道,虽然 ... -
Socket、Thread的使用记录
2008-04-03 16:35 2623做了太多时候的Web项目 ... -
项目积累:Weblogic
2007-08-22 17:54 2124新项目中最大的收获就是Weblogic的使用和管理,由于客户的 ... -
项目反思:DetachedCriteria需要吗?不需要吗?
2007-07-09 23:16 2930Hibernate3中提供了DetachedCri ... -
JUnit方案 DetachedCriteria模拟求解
2007-07-04 16:36 1781新项目客户对测试的要求比较严格,要求单元测试的覆盖率为 ... -
Spring 移植到WebLogic10上出现的Log4j.properties错误
2007-06-10 23:31 6188问题是在Tomcat移植到Weblogic10上出现的问题,主 ... -
[转贴]Clustering经典范文学习
2007-05-12 10:37 1876Cluster对于没有去实现的人还是相当神秘的东西,先从基础 ... -
使用Velocity Swing制作的代码生成工具
2007-04-18 13:39 2819一个使用JEE开发的项目中将会存在大量的重复代码,这是每个开发 ... -
J2EE性能提高(Struts+Spring+Hibernate)
2007-04-17 22:33 3430新近的项目是一个BOSS级的计费系统,性能和稳定性的要求比较高 ... -
[转贴]System.getProperty()参数大全
2007-04-17 17:42 45494一直做Web应用一般不会用到这些东西,今天在搞一个代码生成器的 ... -
Spring2学习笔记
2007-04-15 22:33 1906学习和使用Rails正开心 ... -
[原创]Struts Validation框架中验证循环产生的Text框
2006-01-11 14:18 1805前几天做到一个validation验证使用<iterat ... -
[原创]JSP页面通过Form控制Beans属性
2006-01-14 16:29 1481这个问题我曾经在社区提问过,不知是当时没问清楚还是怎样,回答是 ... -
项目总结(Ajax+Struts+Spring+Hiberante+SQLServer2000) 第一部分
2006-08-06 16:09 1807总算将一个项目勉 ... -
我的乱码问题处理汇总
2006-08-06 22:32 3763乱码对于使用非英语文 ... -
项目总结(Ajax+Struts+Spring+Hiberante+SQLServer2000) 第三部分
2006-08-06 22:56 1519因为本次项目是政府项目,所以数据库服务器采用SQLServer ... -
[讨论]有关Spring+Hibernate更新数据库的操作
2006-09-20 00:05 2822最近老和同事争执一个S ... -
Hibernate事务管理读书笔记(不断添加中)
2006-09-20 12:28 6241昨天发了一个有关Hiberna ... -
[转贴]JDK5下避免DAO代码重复--原文名称:不要重复 DAO
2006-10-08 15:19 1717由于 Java™ 5 泛型的采 ...
相关推荐
javaeye Robbin 论缓存技术方面的东西
JavaEye博文JavaEye博文JavaEye博文JavaEye博文JavaEye博文
Struts+spring+hibernate学习笔记! - Struts原理与实践
javaeye被黑 大家看看
NULL 博文链接:https://javaliver.iteye.com/blog/696584
JavaEye3.0开发手记
JavaEye+技术架构,讲述java框架的应用
javaeye的信息提示框代码之css,application.js
(Hibernate网站上的用户论坛有一个中文版面,JavaEye也有Hibernate中文版面,您可以在那里交流问题与经验。) <br>商业开发、产品支持和Hibernate培训可以通过JBoss Inc.获得。(请查阅:...
(Hibernate网站上的用户论坛有一个中文版面,JavaEye也有Hibernate中文版面,您可以在那里交流问题与经验。) <br>商业开发、产品支持和Hibernate培训可以通过JBoss Inc.获得。(请查阅:...
javaeye月刊2008年4月 总第2期.pdf
1. JVM调优 1.1 JVM调优总结(一)-一些概念 1.2 JVM调优总结(二)-一些概念 1.3 JVM调优总结(三)-基本垃圾回收算法 1.4 JVM调优总结(四)-垃圾回收面临的问题 1.5 JVM调优总结(五)-分代垃圾回收详述1 1.6 JVM...
JavaEye新闻月刊_-_2009年3月_-_总第13期.
javaeye sourcecode 开源安卓客户端, JavaEYE
javaeye 论坛小测试 javaeye论坛小测试答案 javaeye论坛测试答案 这下你们就省事了。
讲述javaeye硬件架构以及软件架构的发展历史
公司的大部分项目都开始使用IBatis作为O/R Mapping了,但是在使用的过程中也发现了很多不方便和存在...想了很多办法,都没能很好的避免这个问题,无意间在javaeye上看到了《使ibatis支持hibernate式的物理分页》这篇文章,
自己打算找一个和javaeye一样的workpress代码高亮插件, 没找到, 于是把javaeye的拔了出来.