`
huobengle
  • 浏览: 862185 次
文章分类
社区版块
存档分类
最新评论

JBoss发布Hibernate 4.0

 
阅读更多

新年第一篇博文

本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/news/2012/01/hibernate-4-released

近日,JBoss发布了流行的对象/关系(O/R)映射框架Hibernate 4。Hibernate 4主要的新特性如下所示:

所谓多租户架构,就是将大型的企业应用划分为虚拟的多个客户端/客户(又叫做租户)而不必将所有数据放在一个共享空间中。该原则改进了管理、监控,甚至是安全,对于大型的服务提供商来说非常有帮助。提供云基础设施的公司也会从多租户架构中获益颇丰。该原则有几种实现方式,列举如下:

  1. 每个客户端/租户使用不同的数据库与/或模式
  2. 所有客户端使用相同的数据库/模式,但所有表中都有一个附加的列(比如说tenant_id),用于过滤数据

Hibernate 4.0支持上述第1种方式,并且计划在下一个版本中支持第2种方式(也就是区分多个租户)。

Hibernate中新增的另一个重要特性就是“Services”API规范。除了标准的内建服务外,你还可以通过该API以其他几种方式扩展Hibernate。现在已经有了几种方式可以插入到Hibernate内核中,但Service API则提供了一种标准方式来实现这一点。近日,InfoQ有幸采访到了Hibernate项目领导Steve Ebersole以深入了解这些新特性:

InfoQ:你能否谈谈“Services”的概念呢?他们只能用于Hibernate扩展么,对于应用开发者来说有何价值呢?

首先,我觉得大家应该认识到有很多应用开发者在每天的应用开发中也会开发Hibernate扩展。如果你开发自定义事件监听器、自定义类型等等,那么你就在开发Hibernate扩展。这种情况很常见。

你可以将Services API看作是小型、领域特定的CDI,提供对常见行为的统一处理,需要诸如生命周期、依赖、JMX管理等。因此从这个角度来说,开发者会很频繁地开发Services。一个简单的示例就是某个事件监听器想要向JMS中写入。我可以将JMS看作是一个Service,因为其他监听器或是自定义扩展都可能会用到该JMS连接。

但Services是无限多的。难道“应用代码”会查找并直接使用Services么?不,通常不是这样。但这并不意味着每个人都会这么看。还是回到方才的JMS用例,我可以确定地说应用代码也需要与该JMS连接交互。这样,它就可以从Hibernate中查找该JMS连接。基本上,它会使用Hibernate管理整个生命周期。

InfoQ:OSGi对于你来说有多重要?Hibernate距离完整支持OSGi还有多远呢?

这个问题很有意思。根据我的经验,在我们真的开始推进时,很多人会问“OSGi支持”或“OSGi兼容”对于他们到底意味着什么,他们要么不知道,要么就是答非所问。我觉得这应该是双重的:

首先,Hibernate能否处理OSGi环境下的模块化类加载?毫无疑问,在4.0前这是很棘手的,因为之前的Hibernate使用了一个非常传统的ClassLoader设置。在4.0中,ClassLoaderService成为标准服务之一,它定义了Hibernate查找类与资源的方式,以及如何解析标准的Java ServiceLoaders。本质上,它定义了一个API,通过class-path处理Hibernate的所有交互。更为重要的是,它是通过一种可交换的方式来定义的。其意图在于非传统的类加载环境可以交换他们自己的策略来决定Hibernate该如何与ClassLoaders交互。这已经在JBoss AS中得到了充分的测试,测试中使用了自定义的ClassLoaderService来与模块化类加载进行交互。因此从这个角度来说,Hibernate已经实现了目标。

其次,就导入/导出来说,Hibernate是如何定义自己的“OSGi元数据”?目前,Hibernate并未在其任何jar中定义特定于OSGi的元数据。如果有人做了这方面的贡献,我们就会将其纳入进来。要知道的是Hibernate团队中没有人是OSGi专家。这应该由熟悉OSGi元数据的相关人士来实现。我们在4.0中所做的是将包划分开来以便向感兴趣的人们表明立场,如果我理解的没错,那么这些人应该担负起这个责任。

InfoQ:日志框架为何发生了变化?

在Hibernate 4开发伊始,我们就决定要在日志中加入对i18n的支持。在那时就我们所知,JBoss Logging是唯一一个完整支持i18n(包括参数化)的日志库。其i18n支持更加类似于GNU gettext,相对于更加Java化的ResouceBundle方式,Hibernate开发团队一致认为JBoss Logging的方式更好。JBoss Logging的异常消息也支持i18n(通过常见的方式实现),但我们并没有用到这个功能。

此外,JBoss Logging还包含了对消息键的内建支持,它将消息键作为独立的概念而非ResourceBundle中的键,以此来实现i18n。这是个不可改变的键,与导致日志消息的情况相关联。这个概念非常适合于围绕着这些键来构建FAQ和文档。没错,你可以直接通过SLF4J、Java Util Logging等做到这一点。但从工具的角度来看,我认为这些键应该成为一等公民。对于充斥了很多日志的大型项目来说,你真的要能够确保这些键是唯一且一致的。JBoss Logging也做到了这一点。

InfoQ:有些人可能会说这些新特性几乎都是内部的。这是否意味着Hibernate已经成熟了,不需要再添加用户能够直观看到的一些变化了?Hibernate是否已经进入了“维护”模式了呢?

当然不是了,虽然我们没有添加新的特性,但Hibernate并没有进入到维护模式。它需要维护么?当然了。不知道是否有人注意到,Hibernate已经10岁多了。我们已经贴了不少创可贴,我觉得在计划并开发新特性时,我们不应该在创可贴上继续贴新的创可贴了。Hibernate生长自YAGNI设计原则,随着时间的流逝,契约/API概念将会变得自然而明显。他们也将不断发展。

我觉得目前只有为数不多的Java OSS项目能够像Hibernate那样长久以来保持成功状态,这些成功的框架都会经历一个或多个大的重构期。

InfoQ:Hibernate 5有哪些值得期待的特性呢?当前的开发目标是什么?

5.0的主要目标在于重新设计Hibernate O/R元数据的模型,包括XML和注解。这些代码来自Hibernate最初的需要。来自JPA的的新需求或特性将会构建于其上。这么做的主要原因在于很多项目都使用了这些类,我们想要降低对这些项目的破坏。但说实在的,重新思考这些模型已经有些晚了。

Java artifacts已经位于Maven Central中了,可见Hibernate 4已经为进入到Java应用中做好了准备。

查看英文原文:JBoss Releases Hibernate 4.0

分享到:
评论

相关推荐

    ★Bean Validation【Hibernate Validator 4.0 GA】中文参考手册!★

    本教程翻译自Hibernate Validator 4.0 GA指南,并参考JSR 303的规范,本着尽量不用JSR规范之外的特性,文档在编写时尽量不提及底层实现Hibernate Validator,而是关注Bean Validation规范本身。如果有不对之处,请...

    JBoss中文文档(pdf版)

    第1章,将涉及JBoss 4.0.x应用服务器的下载、安装以及运行。然后,第2章大体上给出JBoss应用服务器的目录结构、主要配置文件以及服务。最后,第3章介绍了本书待使用的、J2EE Tutorial中的代码。 接下来,第4章将研究...

    jboss中文文档

    第 1 章,将涉及 JBoss 4.0.x 应用服务器的下载、安装以及运行。然后,第 2 章大体上 给出 JBoss 应用服务器的目录结构、主要配置文件以及服务。最后,第 3章介绍了本书待使 用的、J2EE Tutorial 中的代码。 接下来...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    JBoss Seam 简介......................................................................................................................................................................... 11 Chapter 1. ...

    hibernate基础jar包

    hibernate-core核心jar包 (antlr-2.7.7 dom4j-1.6.1 hibernate-commons-annotations-4.0.2.Final hibernate-core-4.2.4.Final hibernate-jpa-2.0-api-1.0.1.Final javassist-3.15.0-GA jboss-logging-3.1.0.GA ...

    基于SpringMVC+Hibernate4的考勤管理系统+.zip

    commons-collections4-4.0.jar commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-logging-1.1.3.jar dom4j-1.6.1.jar hibernate-commons-annotations-4.0.5.Final.jar hibernate-core-4.3.11.Final.jar ...

    hibernate-orm

    这些更改是在 LGPL v2.1(与Hibernate库本身相同的许可证)下发布的。 如何构建 从 4.0 版的开发开始,Hibernate 使用作为其构建工具。 这个 README 描述了 Gradle 新的开发人员和贡献者需要知道的一些基础知识,...

    jVoiD:jVoiD - 可扩展的 Java、Spring MVC、Hibernate 电子商务购物车

    虚拟ID介绍jVoiD 是一种开源的可扩展电子商务架构,适用于使用 J2EE、Spring MVC、带有 OAUTH2 的 Spring Security、Hibernate、Bootstrap/AngularUI、AngularJS,可以在 TomCat 或 JBoss 服务器中运行。入门先决...

    javaweb项目常用jar包

    DmDialect-for-hibernate4.0-jdk1.6.jar dom4j-1.6.1.jar elasticache-java-cluster-client-1.0.61.0.jar ezmorph-1.0.6.jar freemarker-2.3.8.jar ftp-1.0.0.jar ggserver-core-1.0.jar ggserver-thematic-...

    JSF2.0快速入门的基本教程.ppt

    JSF将是J2EE5.0中所包含的web开发框架,这应该是第一个成为jcp标准,并且随j2eesdk一起发布的web框架,可以看出sun对它的期望很高。JSF最大的竞争对手是tapestry,是apache的产品,但是apache又弄出了个myfaces,是...

    jakartaee9-servlet-starter-boilerplate:Servlet 5.0(Jakarta EE 9)容器的Jakarta EE入门项目样板

    该存储库是原始的轻量级变体,可让您在与Servlet 5.0兼容的容器上运行应用程序,例如Apache Tomcat,Eclipse Jetty,JBoss Undertow。 当前,添加了以下功能。 Jakarta REST 3.0(Jersey 3.0) CDI 3.0(焊接4.0...

    DataPower

    应用服务器:WebLogic9.2/WebSphere6.2/Jboss4.0/GlassFish JavaEE5/Oracle ApplicationServer10.1 开发模式:采用mvc开发模式, 页面流+标签库+控制器 持久层:hibernate3+ejb3 数据库:mysql4.12/oracle10g/...

    jbpm开发步骤

    选择 JBoss jBPM --> jBPM 4 --> Runtime Locations 点击 Add... 在 Add Location 对话框中,输入一个名字,比如 jbpm-4.0 然后点击 Search... 在 Browse For Folder 对话框中,选择你的jbpm根目录,然后点击 OK ...

    JAVA上百实例源码以及开源项目

    百度云盘分享 简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对...

    JAVA上百实例源码以及开源项目源代码

    简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!...

Global site tag (gtag.js) - Google Analytics