JBoss发布Hibernate 4.0

标签: jboss hibernate | 发表时间:2012-01-29 16:02 | 作者:
出处:http://pipes.yahoo.com/pipes/pipe.info?_id=10560380f804c7341f042a2b8a03e117

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

译者 张龙 热衷于编程,乐于分享,对新技术有强烈的探索欲,对Java轻量级框架有一定研究。

相关 [jboss hibernate] 推荐:

JBoss发布Hibernate 4.0

- - InfoQ cn
近日, JBoss发布了流行的对象/关系(O/R)映射框架 Hibernate. Hibernate 4主要的新特性如下所示:. 引入了“Services”API. 提供了更棒的日志,支持 i18n与消息编码(通过JBoss Logging而非 slf4j). 为 OSGi支持做好了准备.

\(^_^)/ Jboss资料

- - 编程语言 - ITeye博客
官网: http://www.jboss.org/. 下载: http://www.jboss.org/jbossas/downloads/. Jboss博客: http://jbosscn.iteye.com/. 中赢网Jboss: http://www.chinawin.net/tag/jboss/.

JBoss AS 7性能调优(四)

- - CSDN博客系统运维推荐文章
 原文: http://www.mastertheboss.com/jboss-performance/jboss-as-7-performance-tuning/page-5. 记录日志是每一个应用程序的一个重要任务,默认的配置一般只适合开发,但不适用于生产环境. 您切换到生产环境时需要考虑的关键要素是:.

[译]jboss漏洞利用

- - 互联网 - ITeye博客
原文地址:http://resources.infosecinstitute.com/jboss-exploitation/. JBoss Application Server是一个基于Jave EE的web应用服务器. 如果Jboss没有正确配置,它会允许攻击者进行各种恶意攻击. 由于JMX console可以通过端口8080远程访问,攻击者和恶意用户可以通过使用Jboss console中的DeploymentScanner功能部署他们自己的WAR(web archive)文件或shell脚本.

JBoss AS 7性能调优(二)

- - CSDN博客系统运维推荐文章
建立与DBMS的JDBC连接过程可能是相当缓慢的. 如果您的应用程序需要反复打开和关闭数据库连接,这可以成为一个显著的性能问题. 在JBoss AS中数据源的连接池提供了一种有效的解决该问题的方法. 要强调的是,当客户端关闭一个数据源的连接时,该连接返回到池中,这样可用于其它的客户端,因此,连接本身并没有关闭.

JBoss AS 7性能调优 (一)

- - CSDN博客系统运维推荐文章
原文: http://www.mastertheboss.com/jboss-performance/jboss-as-7-performance-tuning. 虽然许多架构师和软件工程师都同意,约70-80%的应用程序的性能取决于应用程序本身的编码,配置不当的服务器环境可以显著影响你的用户体验,并最终影响到你的应用程序性能.

JBoss AS 7性能调优(三)

- - CSDN博客系统运维推荐文章
原文: http://www.mastertheboss.com/jboss-performance/jboss-as-7-performance-tuning/page-4. 还有很多需要调优的地方最终影响Web服务器的性能,其中一个最重要的因素是调优HTTP线程池设置,以匹配web请求的负载.

Hibernate面试题

- - ITeye博客
什么是Hibernate的并发机制. Hibernate并发机制:. a、Hibernate的Session对象是非线程安全的,对于单个请求,单个会话,单个的工作单元(即单个事务,单个线程),它通常只使用一次,. 如果一个Session 实例允许共享的话,那些支持并发运行的,例如Http request,session beans将会导致出现资源争用.

Hibernate Lazy属性

- - 博客园_首页
  Hibernate 的延迟加载(lazy load)是一个被广泛使用的技术. 这种延迟加载保证了应用只有在需要时才去数据库中抓取相应的记录. 通过延迟加载技术可以避免过多、过早地加载数据表里的数据,从而降低应用的内存开销. Hibernate 的延迟加载本质上就是代理模式的应用,当程序通过 Hibernate 装载一个实体时,默认情况下,Hibernate 并不会立即抓取它的集合属性、关联实体所以对应的记录,而是通过生成一个代理来表示这些集合属性、关联实体,这就是代理模式应用带来的优势.

Hibernate 缓存

- - ITeye博客
1数据缓存:(date caching) 是一种将数据暂时存于内存缓存去中的技术,缓存通常是影响系统性能的关键因素. 2.ORM的数据缓存策略有3中.   1.事务级缓存:  分为 数据库事务和 应用级事务,是基于Session的生命周期的实现,每个session都会在内部维持一个数据缓存, 随session的创建和消亡.