`
xjlnjut730
  • 浏览: 57194 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Hibernate v.s. CMP

阅读更多
O-R Mapping
J2EE的标准是CMP Entity Bean,而实际应用中受到诟病最多的也是它。我们化了整整半年时间研究CMP2.0的开发方法,目前总算能够将代码量减少到70%,并且有希望减少到90%。我曾经很满足现有的成绩,但是当我真正地阅读了Hibernate后,对CMP2.0的信心彻底动摇了。
Hibernate至少比CMP2.0有以下优点:
1. 兼容性。 规范一模一样,实现各有不同,这是CMP的现状。用第三方O-R Mapping工具可以解决这个问题。
2. 保护智力投资。在了解了Orion, Weblogic, JBoss的CMP实现后,我不愿意再去学习Websphere 或者Resin的实现了。
3. 性能。
a. local v.s. remote, Hibernate、JDO、Castor都是本地调用,CMP2.0虽然也有Local接口,但是Web层还是需要通过Remote接口访问EJB层的数据,序列化、网络调用、创建大量的对象,都是性能降低的原因。
b. transaction,J2EE提出了一个全新的事务模型(method-based descriptor),对程序员的开发确实是个“简化”,记得一本教程建议所有的EJB方法都用Required。但这样的结果是什么? 性能极度降低!互锁!没有办法,我们只有再去调节各个方法的Transaction属性,然后又出现 新的互锁...
新的事务模型是不成功的。它试图简化问题,却引入了更为严重的问题。各家厂商的Transaction实现也不尽相同,有的支持Optimistic Lock,有的在VM中同步Entity对象,又是兼容性的一大敌。
Hibernate没有试图创造一个更新的模式,相反,它沿用了传统数据库的Transaction编程模式,在对J2EE的Transaction伤透脑筋后看到它,真是十分亲切,感觉自己确实在编程,而不是碰运气填代码了。
4. 动态Query。
Entity Bean很难实现动态Query,这是因为它基于代码自动生成技术,即最终的执行代码是在部署编译时生成的。hibernate则有根本的改变,它基于reflection机制,运行时动态Query是很自然的事。另外,hibernate几乎支持所有的SQL语法,传统数据库可以做的它就可以做。
5. 发展速度。
I have a dream, 有一天Entity Bean会变得很好。但至少目前来看,Entity Bean是一个不完善的产品,它是大公司政治斗争和妥协的产品,而且习惯性将一些问题“无限期搁置”,典型的例子就是Query(之所以不提其他问题,是因为其他都是Entity Bean的致命伤:))
形成强烈反差的是,hibernate的核心程序员只有一人,但它改进的速度确是Entity Bean无法企及的。
6. 继承和多态。
OO语言的精华在Entity Bean这里是行不通的,我曾经自我安慰将Entity Bean看做一个“内存中的数据表”,才找到了一点平衡。
但当我看到Hibernate时,又开始不平衡了。

另外,CMP2.0也有一些缺点是可以弥补的。
1. 代码维护。
大量的接口文件和配置文件,开发和维护的工作量很大。
解决途径:采用xdoclet,可以自动产生众多的接口和配置文件,甚至facade, delegate等高级模式。

至少目前来看,hibernate的缺点有:
1. 代码维护
Hibernate提供了自动生成mapping文件“框架”的工具,但还需要手工调节。而这类开发,能想到的最佳模式就是xdoclet的(代码+注释)的模式了。幸好,hibernate的程序员已经向xdoclet项目增加了Hibernate的模块。现在需要的是等待xdoclet的下一个release。

结论:
Hibernate至少从文档上超越了Entity Bean很多,我要学习Hibernate。
分享到:
评论

相关推荐

    Hibernate简介.doc

    - **EJB (Enterprise JavaBeans) CMP**: EJB 中的容器管理持久性(CMP)提供了企业级的 ORM 解决方案,但配置复杂,不如 Hibernate 灵活。 - **IBatis**: IBatis 是另一种轻量级的 ORM 工具,侧重于 SQL 的灵活性,...

    cmp.exe cmp 命令

    cmp.exe cygwin自带的 类似于Linux 下的 cmp 命令

    CMP.rar_cmp_it

    标题"CMP.rar_cmp_it"和描述中的关键词"avi"、"cmp picture"暗示了这是一个关于视频编码和图像处理的IT主题。"cmp"通常代表比较(compare)或压缩(compress),而"avi"是常见的视频文件格式。在这个上下文中,"cmp ...

    hibernate4.3完整jar包

    Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Hibernate的...

    basketball.root_partition.cmp.cdb

    basketball.root_partition.cmp.cdb

    cmp.rar_IEC

    本文将深入探讨IEC 61883-1标准中的连接管理程序,并介绍“cmp.rar_IEC”压缩包内的关键文件——cmp.c和cmp.h,它们是实现这一标准的重要助手函数。 首先,我们需要理解IEC 61883-1标准的核心内容。该标准定义了...

    cmp.rar_asp 在线 播放器_asp 播放器_cmp.asp_在线播放_播放器 源码

    【标题】"cmp.rar_asp 在线 播放器_asp 播放器_cmp.asp_在线播放_播放器 源码" 指的是一款基于ASP技术的在线播放器源码,用于实现网页上的媒体文件播放功能。这款源码可能是由cmp.asp这个主要的脚本文件驱动,它可能...

    cmp插件...

    标题中的“cmp插件”可能指的是一个用于计算机多媒体平台或者编程环境的组件,可能是为了增强或扩展该平台的功能。在IT行业中,插件通常是为了给软件添加特定功能或优化用户体验而设计的小型程序。2013年标签暗示了...

    Uboot中start.S源码的指令级的详尽解析

    cmp r0, r1 ; 比较起始地址与结束地址 beq _clear_end ; 如果相等,则结束循环 strb r2, [r0] ; 存储字节 add r0, r0, #1 ; 下一个字节 b _clear_loop ; 继续循环 _clear_end: ``` 2.6. **异常中断处理** `...

    cmp.rar_61883_IEC

    标题 "cmp.rar_61883_IEC" 暗示了这是一个关于连接管理程序(Connection Management Procedures)的资源,特别与IEC 61883-1标准相关。这个标准是数字音频和多媒体系统之间数据传输的国际电工委员会(International ...

    CMP ASN.1-CMP标准

    **CMP ASN.1-CMP标准详解** CMP(Certification Management Protocol)是X.509数字证书管理系统中的一种协议,它定义了一套用于安全通信、证书申请、更新、撤销等操作的标准规范。ASN.1(Abstract Syntax Notation ...

    DAC.cmp.zip_CPLD DAC_fpga做cmp运算

    标题中的“DAC.cmp.zip_CPLD DAC_fpga做cmp运算”揭示了这个压缩包文件主要涉及的内容是关于数字模拟转换器(DAC)的设计,其中使用了可编程逻辑器件(CPLD)和现场可编程门阵列(FPGA)进行比较(cmp)运算。...

    hibernate4 jar包

    Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

    A_CMP.C

    C标准库源码文件"A_CMP.C"是C语言核心库的组成部分,它包含了C标准库中定义的一部分功能实现。C标准库为C语言程序提供了大量常用的函数,涵盖了输入输出、数学计算、字符串处理、内存管理等多个方面,是C程序开发不...

    CMP.Books.Designing.Embedded.Communications.Software.eBook-L.chm

    CMP.Books.Designing.Embedded.Communications.Software.eBook-L.chm

    CMP.Books.COM.Programming.by.Example.Using.MFC.ActiveX.ATL.ADO.and.COM

    CMP.Books.COM.Programming.by.Example.Using.MFC.ActiveX.ATL.ADO.and.COM

    EJB2.0_CMP.rar_cmp_ejb_ejb2 c++

    **企业级JavaBeans (EJB) 2.0 容器管理持久性 (CMP) 深度解析** 企业级JavaBeans(Enterprise JavaBeans)是Java平台上的一个核心组件,用于构建可部署在服务器端的企业级应用。EJB 2.0版本引入了容器管理的持久性...

    W_CMP.C

    C标准库源码"W_CMP.C"是一个核心文件,它为C语言开发者提供了丰富的标准函数实现。这些函数覆盖了输入输出、字符串处理、数学计算以及内存分配等多个方面。对于理解C语言的运行机制、内存管理和性能调优具有重要意义...

    hibernate4.2

    Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

    Hibernate实践例子程序

    由于Hibernate是基于 JDBC的,所以它的数据库查寻的能力相对于CMP来说也是异常强大的,Hibernate自身也提供了HQL查寻语句。 一个最简单的Hibernate project(不涉及Struts, Tomcat, XDoclet,JBoss等东东)必须的...

Global site tag (gtag.js) - Google Analytics