写点什么

JBoss 发布 Hibernate 4.0

  • 2012-01-29
  • 本文字数:2538 字

    阅读完需:约 8 分钟

近日, 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

2012-01-29 02:028405
用户头像

发布了 88 篇内容, 共 268.7 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

Flutter 应用程序中使用 GridTile 小部件

坚果

28天写作 12月日更

百度翻译十周年:核心技术持续领先,日翻译量超千亿字符

科技热闻

EasyRecovery的高级设置如何使用

淋雨

数据恢复 EasyRecovery

如何写好代码?

阿里技术

技术管理 技术人生 内容合集

一种播放远程TS格式媒体文件的新方案

Changing Lin

12月日更

Flutter 高性能、多功能的全场景滚动容器原理与实践

阿里巴巴终端技术

flutter 移动开发 客户端

【浅谈黑客与学习思路】黑客的种类和行为,初学者应该怎样学习

H

黑客 网络安全 信息安全

技术人如何自我成长?

阿里技术

技术管理 技术人生 内容合集

Python爬虫实战,pymysql模块,Python实现抓取音乐评论

Java全栈架构师

Python MySQL 数据库 程序员 面试

恒源云(GPUSHARE)_文本数据扩增时,哪些单词 (不) 应该被选择?

恒源云

深度学习 语音识别 语义

在阿里做了五年技术主管,我有话想说

阿里技术

技术人生 内容合集

关于写文章的一点经验

阿里技术

技术管理 技术人生 内容合集

第七模块总结

张靖

#架构实战营

让“美”势不可挡,DataPipeline助力全球知名化妆品企业数字化营销再提速

DataPipeline数见科技

大数据 中间件 数据融合 数据迁移 数据管理

Typora + picGo实现插入图片上传gitee图床

zdd

百度API接口智能化测试探索与实践

百度开发者中心

自动化测试 API测试 智能化测试

技术三板斧:关于技术规划、管理、架构的思考

阿里技术

技术管理 技术人生 内容合集

一周信创舆情观察(12.13~12.19)

统小信uos

揭开神秘面纱,如何组织一次分布式压测

博睿数据

如何优雅的关闭 Java 线程池

淡泊明志、宁静致远

线程池

PMI 的野望

Franklin 许峰

DevOps 敏捷 Lean 规范敏捷 PMI

三年磨一剑,高德体验优化总结

阿里巴巴终端技术

ios android 性能优化 移动开发 客户端

热门招聘丨 XTransfer史上最全产品技术岗位公开招聘

XTransfer技术

产品 技术 招聘 XTransfer

CSS之变量(四)悬浮跟踪按钮

Augus

CSS 12月日更

高质量的缺陷分析:让自己少写 bug

阿里技术

技术管理 技术人生 内容合集

OPPO大数据离线任务调度系统OFLOW

安第斯智能云

后端 数据

多行内容超出...显示的终极解决方案

CRMEB

【12月日更】浅谈Golang两种线程安全的map

小梁编程汇

golang 缓存 高性能 并发 多线程安全

安装TortoiseGit教程 手把手教学

Z.

git 工具 安装 Tortoisegit

王者荣耀商城异地多活架构设计

张靖

#架构实战营

计算机网络体系结构

淡泊明志、宁静致远

TCP 网络结构

JBoss发布Hibernate 4.0_Java_Kostis Kapelonis_InfoQ精选文章