你可能已经听说了这个消息: 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