java - 如何在JBoss AS7中使用hibernate-infinispan的write Behind方法

标签 java hibernate java-ee-6 jboss7.x infinispan

我在独立的 JBoss AS7 中创建了一个 REST API,使用 hibernate 作为 JPA 提供程序,使用 Infinispan 作为二级缓存。

我在https://docs.jboss.org/author/display/ISPN/Write-Through+And+Write-Behind+Caching中看到过Infinispan 可以使用 write-behind 方法,将数据从缓存异步保存到数据库,这是我的项目所需要的。

我想启用此功能,但我找不到如何操作的地方。

如果有帮助,我可以解释为什么我需要这种行为。我有一个名为 Stat 的实体类。 在该类(class)中,我有一个 int 余额值,例如:

@Entity
public class Stat{
    private int balance;
}

其中一个 REST 方法会同时访问该余额,从中减去一并在数据库中更新它。 这在项目中造成了瓶颈,因为许多线程尝试获取锁来读取数据库余额并将其更新到数据库。

因此,我认为我可以使用 Infinispan 来更新内存中的余额,并让 Infinispan 将更改异步保存到数据库中。

任何帮助将不胜感激。

最佳答案

据我所知,没有任何属性可以传递给 JPA 配置或 Hibernate 配置来启用此功能(可以找到 hibernate 的属性列表 here )。

您需要创建自己的 infinispan xml 配置文件(可能复制 this ),使用您想要从 inifnispan configuration 获取的属性创建一个新的namedCache。您给出的,然后在 JPA 或 hibernate 配置中添加“hibernate.cache.infinispan.cfg”属性以及新配置 xml 的位置。

您还需要通过将以下属性添加到 hibernate 或 JPA 配置来更改用于 Stat 实体的缓存:

<property name="hibernate.cache.infinispan.com.package.Stat.cfg"  value="yourNewNamedCache"/>

关于java - 如何在JBoss AS7中使用hibernate-infinispan的write Behind方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13646728/

相关文章:

hibernate - InstantiationException:当使Entity字段在Kotlin中不可为空时,没有用于实体的默认构造函数

jakarta-ee - 更改服务方法中的 doGet() 和 doPost() 方法?

servlets - 在 glassfish 上的 CDI pojo 中注入(inject) Servlet 对象

java - 如何在不访问数据库的情况下获取值?

java - 如何使JFrame模态像JOptionPane?

java - 我如何通过推送 primeFaces 来刷新 dataTable

java - Eclipse 不刷新包资源管理器 View 中的项目文件

java - Websphere Application Server 中的 XAException

hibernate - 使用maven更新c3p0

spring - JavaEE 6 和 Spring