本版本包含对Vert.x SQL客户端4.1.1和Hibernate ORM 5.5.3.Final的升级。我们还添加了一些检查,以帮助防止由于在错误的线程中使用会话而产生的问题。

您可以在Hibernate Reactive问题跟踪器上找到更改的完整列表。

谢谢!

如何获取它?

所有详细信息可在Hibernate Reactive网站发布页面上找到。

如果您是Hibernate Reactive的新用户,官方文档是一个良好的起点。

会话、线程和检查

Hibernate Reactive会话不是线程安全的。

在不同的线程中使用会话可能会引起难以调试的问题。此外,新创建的会话绑定到Vert.x上下文,之后需要在该上下文中使用。

通常,Hibernate Reactive在使用withTransactionwithSession时处理这一点。

新的检查应该有助于防止这类问题。特别是,升级后您可能会看到两种类型的错误

  1. HR000068: 此方法应仅从Vert.x EventLoop线程调用;…:这意味着代码不是在事件循环线程中运行。根据您的代码,修复此问题的方法之一是使用Vert.x文档中解释的Context#runOnContext

  2. HR000069: 检测到从打开响应式会话的不同线程使用响应式会话 …:在这种情况下,会话被两个不同的线程共享,您需要更改代码以防止这种情况发生。

我们不推荐这样做,但也可以通过设置系统属性 org.hibernate.reactive.common.InternalStateAssertions.ENFORCEtrue 来禁用健康检查。

VertxInstance 服务

Hibernate Reactive 如果没有可用的 Vert.x 实例,将会创建一个新的。如果你的应用程序已经有一个实例,你可以通过 VertxInstance 服务让 Hibernate Reactive 使用它。

你可以使用 JDK 的 ServiceLoader 机制 来注册你的实现。

  1. 在以下位置添加一个名为 org.hibernate.reactive.vertx.VertxInstance 的文本文件:

    /META-INF/services/
  2. 该文本文件将包含实现 VertxInstance 接口类的路径。例如:

    org.myproject.MyVertxProvider

现在,每当 Hibernate Reactive 需要一个 Vert.x 实例时,它将调用 MyVertxProvider 的一个实例。

反馈、问题、想法?

要通过以下渠道联系,请使用:


返回顶部