- 浏览: 337787 次
- 性别:
- 来自: 新加坡
文章分类
最新评论
-
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 3208不得不承认我用了太久的Struts1,但实际上并没有太多好的回 ... -
多种问题 一种解决方案:使用ANT管理部署应用服务器
2008-07-12 01:46 4049ANT在Java界和开源世界里面的地位大家都知道,虽然 ... -
Socket、Thread的使用记录
2008-04-03 16:35 2741做了太多时候的Web项目 ... -
项目积累:Weblogic
2007-08-22 17:54 2200新项目中最大的收获就是Weblogic的使用和管理,由于客户的 ... -
项目反思:DetachedCriteria需要吗?不需要吗?
2007-07-09 23:16 2988Hibernate3中提供了DetachedCri ... -
JUnit方案 DetachedCriteria模拟求解
2007-07-04 16:36 1852新项目客户对测试的要求比较严格,要求单元测试的覆盖率为 ... -
Spring 移植到WebLogic10上出现的Log4j.properties错误
2007-06-10 23:31 6305问题是在Tomcat移植到Weblogic10上出现的问题,主 ... -
[转贴]Clustering经典范文学习
2007-05-12 10:37 1935Cluster对于没有去实现的人还是相当神秘的东西,先从基础 ... -
使用Velocity Swing制作的代码生成工具
2007-04-18 13:39 2871一个使用JEE开发的项目中将会存在大量的重复代码,这是每个开发 ... -
J2EE性能提高(Struts+Spring+Hibernate)
2007-04-17 22:33 3490新近的项目是一个BOSS级的计费系统,性能和稳定性的要求比较高 ... -
[转贴]System.getProperty()参数大全
2007-04-17 17:42 45602一直做Web应用一般不会用到这些东西,今天在搞一个代码生成器的 ... -
Spring2学习笔记
2007-04-15 22:33 1965学习和使用Rails正开心 ... -
[原创]Struts Validation框架中验证循环产生的Text框
2006-01-11 14:18 1918前几天做到一个validation验证使用<iterat ... -
[原创]JSP页面通过Form控制Beans属性
2006-01-14 16:29 1526这个问题我曾经在社区提问过,不知是当时没问清楚还是怎样,回答是 ... -
项目总结(Ajax+Struts+Spring+Hiberante+SQLServer2000) 第一部分
2006-08-06 16:09 1855总算将一个项目勉 ... -
我的乱码问题处理汇总
2006-08-06 22:32 3830乱码对于使用非英语文 ... -
项目总结(Ajax+Struts+Spring+Hiberante+SQLServer2000) 第三部分
2006-08-06 22:56 1580因为本次项目是政府项目,所以数据库服务器采用SQLServer ... -
[讨论]有关Spring+Hibernate更新数据库的操作
2006-09-20 00:05 2874最近老和同事争执一个S ... -
Hibernate事务管理读书笔记(不断添加中)
2006-09-20 12:28 6295昨天发了一个有关Hiberna ... -
[转贴]JDK5下避免DAO代码重复--原文名称:不要重复 DAO
2006-10-08 15:19 1777由于 Java™ 5 泛型的采 ...
相关推荐
在Javaeye Robbin的讨论中,他提到了缓存技术在多种场景下的应用和重要性。 **缓存的作用** 1. **高速缓冲存储**:缓存是一种位于主存储器和慢速I/O设备之间的高速存储器,其目的是减少对慢速设备的访问次数,提高...
7. **性能调优**:分享C3P0的性能优化技巧,如调整连接池大小、设置合适的测试查询以确保连接有效性等。 8. **实战应用**:通过实际案例,演示如何在项目中集成C3P0和Hibernate,包括Maven或Gradle的依赖管理、配置...
标题 "Ext+Spring+Hibernate(原创送给javaeye朋友)" 暗示了这是一个关于整合Java技术栈的教程或示例项目,其中涉及了三个关键组件:Ext(ExtJS)、Spring和Hibernate。这些技术在企业级Java开发中广泛使用,分别用于...
Struts、Spring 和 Hibernate 是Java开发中非常著名的三个开源框架,它们在企业级应用开发中起着关键作用。Struts 是一个 MVC(Model-View-Controller)架构的 Web 框架,Spring 提供了一个全面的后端服务管理平台,...
JavaEye热点阅读是JavaEye论坛推出的2009年2月特辑,旨在为Java学习者和开发者提供最新的知识及行业动态。这份资料包含了多个Java相关的主题,包括但不限于并发编程、开源项目、设计模式、框架应用以及软件开发实践...
javaeye被黑 大家看看
在Java的持久化框架Hibernate中,BaseDAO(Base Data Access Object)是一种常见的设计模式,用于封装数据库操作,提供一套标准的方法来实现CRUD(Create、Read、Update、Delete)操作。这种模式使得业务层可以更加...
"JavaEye博文" 本资源摘要信息来自JavaEye博文,作者cutesunshineriver,发布于2010年。该博文涵盖了软件开发、编程、项目管理等多方面的知识点。 在本博文中,我们可以看到多个与软件开发相关的知识点,包括: 1...
### Hibernate中文问题解决方案 在开发基于Java的应用程序时,Hibernate作为一个强大的对象关系映射(ORM)框架被广泛采用。然而,在处理中文字符时,开发者可能会遇到各种各样的问题,如乱码显示等。本文将详细...
JavaEye+技术架构是针对Java开发领域的一种综合技术框架,旨在提高开发效率,优化系统性能,以及提升软件的可维护性和扩展性。该框架可能包含了多个层次和组件,以满足现代企业级应用的需求。以下是对JavaEye+技术...
Hibernate 是一个流行的 Java 平台上的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。在 Hibernate 中,`hbm.xml` 文件是用于定义对象与数据库表之间映射的元数据文件。这篇文档将深入解析...
JavaEye新闻月刊2009年3月第13期内容涉及了当时软件开发领域内的一系列重要话题,包括IBM拟收购Sun Microsystems公司的新闻报道、Java社区对此的看法以及各种编程语言、开发工具和技术的新动态。 首先,新闻月刊...
javaeye的信息提示框代码之css,application.js
【JavaEye月刊2008年4月总第2期】主要涵盖了多个与Java相关的技术和行业动态。以下是对这些内容的详细解析: 1. **Spring创始人Rod Johnson再次发飙—“传统Java应用服务器正在没落”** Rod Johnson是Spring框架的...
### JavaEye3.0开发手记之开发环境搭建详解 #### 一、开发环境搭建概述 随着JavaEye3.0开发计划的启动,本篇文章将详细介绍如何为该项目搭建高效的开发环境。开发过程中不仅需要考虑软件的选择,还需要针对操作...