Hibernate Search 是一个库,通过自动索引实体将 Hibernate ORM 与 Apache Lucene 或 Elasticsearch 集成,从而实现高级搜索功能:全文搜索、地理空间搜索、聚合等。更多信息请参阅 hibernate.org 上的 Hibernate Search。

你可能已经听说了这个消息: JBoss AS 7 已经发布啦 :) 从 Hibernate 用户的角度来看,这意味着什么呢?

在我们深入探讨之前,如果你时间紧迫,Pete 已经编写了一些 入门指南,涵盖了 JBoss AS 7 中的 JPA。你可能对此感兴趣。

回到主题:JBoss AS 7 和 Hibernate。

Hibernate 核心组件

首先,JBoss AS 7 内置了 Hibernate Core 4。这本质上意味着 AS 7 将使用 Hibernate Core 的新基础。Hibernate Core 4 包含了许多内部更改

  • 一个新的ServiceRegistry接口:Hibernate 的许多部分现在是基于服务的,并且许多协议得到了增强(如连接和二级缓存)
  • 一个MetadataSources接口:与 Configuration 类一样混合配置和映射不同,我们现在将关注点和生命周期分开Configuration类:我们现在将关注点和生命周期分开
  • 一个包重构,将类分为 api、spi 和内部:如果你的应用程序依赖于内部类,你知道你可能会在小的/微小的更新中被烧伤
  • 一个新的类加载器服务(见下文)
  • 更好的日志记录,具有一致的错误 ID(我们的目标是建立一个错误 ID 到解决方案数据库,随着时间的推移,我们将建立一个错误 ID 到解决方案数据库)
  • 迁移到 Git 和 GitHub 进行版本控制:希望这会加快社区贡献的整合

多租户

我们还引入了一些新功能,其中最有趣的可能就是 多租户(也请参阅 这里)。

新的类加载器服务

为什么?

从历史上看,Hibernate依赖于针对JSE和JEE部署环境的标准类加载范式。然而,随着OSGi和其他模块化系统(如JBoss AS 7)的增长,这些方法不再总是有效。因此,Hibernate需要一种新的方法,使其能够在所有可能的部署环境中运行。

如何实现?

在Hibernate 4中,我们利用ServiceRegistry来定义一个可插入的服务,以便与Hibernate将在其中运行的环境的类加载语义进行交互。具体来说,这个想法是允许外部实体(用户、环境开发者等)定义和插入一个自定义方案以进行类路径交互。例如,OSGi容器可以选择提供Hibernate(直接或作为其JPA提供者),并安装一个自定义服务以进行类加载器交互,以覆盖默认的。

AS 7中的Hibernate核心

JBoss AS 7与Hibernate 4.0.0.Beta1集成,提供EE容器管理的JPA功能和应用程序管理的访问。AS7 JPA子系统通过JPA规范SPI接口与Hibernate集成。在JBoss AS的早期版本中,JPA集成代码是EJB3容器的一部分(反映了从EJB实体豆的演变)。将JPA集成代码移入其子系统有助于简化代码,并使其更容易进行更改。

二级缓存小贴士

启用(Infinispan)二级缓存应该像在您的persistence.xml文件中包含以下内容一样简单

  <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
  <properties>
    <property name="hibernate.cache.infinispan.cachemanager" value="java:jboss/infinispan/hibernate"/>
    <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.infinispan.JndiInfinispanRegionFactory"/>
  </properties>

我想感谢以下人员为JBoss AS7 JPA子系统做出贡献

  • Stuart Douglas为JPA子系统做出贡献。
  • Steve Ebersole为JPA子系统做出贡献(特别是Hibernate 4.0集成)。
  • Jaikiran Pai为JPA子系统做出贡献,并在论坛上回答了大量的问题(JPA + 数百个其他主题)。
  • Emmanuel Bernard回答了我关于JPA 2.0规范的无休止的问题。
  • Carlo de Wolf回答了我关于EJB3子系统的问题(新代码基于此)。

接下来是什么

改进对使用JBoss AS 7中未打包的Hibernate不同版本的应用程序的支持。计划是让用户部署Hibernate jar以及一个hibernate-jbossas7集成jar。集成jar将针对特定的Hibernate / JBoss AS版本对(或系列)进行定制。

明确来说,Hibernate原生应用程序可以在JBoss AS 7中包含自己的Hibernate版本,只需将jar包含在其部署中即可。但我们希望JPA应用程序也能从中受益。因为这涉及到规范类,这需要更多的工作。

我们还将包括额外的调整选项来禁用一些JPA集成(即防止容器启动持久化单元)。

Hibernate Validator和Bean Validation

AS7在Bean Validation方面有什么新变化?简短的回答是——没有。它已经非常棒了;)初始版本——AS 7.0——附带Hibernate Validator 4.1.0.Final。这与AS 6中的Validator版本相同,所以没有变化。

长回答是Hibernate Validator 4.2.0.Final只是错过了AS 7.0发布列车,计划在AS 7.1中升级。这对AS用户意味着什么?除了通常的错误修复和性能改进外,最大的新功能是实现Bean Validation规范的附录C:方法级验证。

使用此API可以实现一种设计合同方法,这已经在Seam验证模块中得以体现。另一个新功能是能够使用AND和OR运算符组合约束条件。此外,还有快速失败模式,在第一个验证错误时停止验证,并有一个新的消息插值器,能够插值验证值。

如您所见,AS 7.0只是开始。未来的版本还将带来更多新功能...

Hibernate Search

我们正在开发Hibernate Search 4,它将与Hibernate Core 4兼容。事实上,我们已通过Maven SNAPSHOT发布了一个兼容版本,但预计很快会推出第一个alpha版本。

Hibernate Search 4是我们改正过去错误的机会。说实话,尽管我们在Hibernate Search中进行了大量功能上的调整,但代码库和概念仍然保持良好。无论如何,我们正在进行一些变更,包括将API/SPI/实现分割,以帮助人们发现他们使用的是可能发生变化的类。

我们还正在开发一个新的按索引管理器,以更好地利用Lucene的一些新功能和设计变更。这将为您提供在实体级别(同步/异步等)上索引数据的更多灵活性。

请记住,尝试一下这款快速、轻量、模块化、热部署和增量部署、优雅管理的领域可管理、一流的JBoss应用程序服务器7

快乐的编码/快速部署/测试周期 :)

Steve,Hardy,Scott Marlow和Emmanuel


返回顶部