本版本包含对Vert.x SQL客户端4.1.1和Hibernate ORM 5.5.3.Final的升级。我们还添加了一些检查,以帮助防止由于在错误的线程中使用会话而产生的问题。
您可以在Hibernate Reactive问题跟踪器上找到更改的完整列表。
谢谢!
如何获取它?
所有详细信息可在Hibernate Reactive网站发布页面上找到。
如果您是Hibernate Reactive的新用户,官方文档是一个良好的起点。
会话、线程和检查
Hibernate Reactive会话不是线程安全的。
在不同的线程中使用会话可能会引起难以调试的问题。此外,新创建的会话绑定到Vert.x上下文,之后需要在该上下文中使用。
通常,Hibernate Reactive在使用withTransaction
或withSession
时处理这一点。
新的检查应该有助于防止这类问题。特别是,升级后您可能会看到两种类型的错误
-
HR000068: 此方法应仅从Vert.x EventLoop线程调用;…
:这意味着代码不是在事件循环线程中运行。根据您的代码,修复此问题的方法之一是使用Vert.x文档中解释的Context#runOnContext
-
HR000069: 检测到从打开响应式会话的不同线程使用响应式会话 …
:在这种情况下,会话被两个不同的线程共享,您需要更改代码以防止这种情况发生。
我们不推荐这样做,但也可以通过设置系统属性 org.hibernate.reactive.common.InternalStateAssertions.ENFORCE
为 true
来禁用健康检查。
VertxInstance 服务
Hibernate Reactive 如果没有可用的 Vert.x 实例,将会创建一个新的。如果你的应用程序已经有一个实例,你可以通过 VertxInstance
服务让 Hibernate Reactive 使用它。
你可以使用 JDK 的 ServiceLoader 机制 来注册你的实现。
-
在以下位置添加一个名为
org.hibernate.reactive.vertx.VertxInstance
的文本文件:/META-INF/services/
-
该文本文件将包含实现
VertxInstance
接口类的路径。例如:org.myproject.MyVertxProvider
现在,每当 Hibernate Reactive 需要一个 Vert.x 实例时,它将调用 MyVertxProvider
的一个实例。
反馈、问题、想法?
要通过以下渠道联系,请使用:
-
用户论坛 或 hibernate-user 流在 Zulip 上(使用问题、一般反馈)
-
问题跟踪器(错误报告、功能请求)
-
邮件列表 或 hibernate-reactive-dev 流在 Zulip 上(与开发相关的讨论)