3

スタンドアロン JBoss AS7 で REST API を作成し、hibernate を JPA プロバイダーとして使用し、Infinispan を 2 番目のレベルのキャッシュとして使用しました。

https://docs.jboss.org/author/display/ISPN/Write-Through+And+Write-Behind+Cachingで、 Infinispanが write-behind メソッドを使用して、キャッシュからデータベースであり、これは私のプロジェクトに必要なものです。

この機能を有効にしたいのですが、その方法がどこにも見つかりません。

それが役立つ場合は、なぜこの動作が必要なのかを説明できます。Stat というエンティティ クラスがあります。そのクラスには、次のような int バランス値があります。

@Entity
public class Stat{
    private int balance;
}

REST メソッドの 1 つは、そのバランスに同時にアクセスし、そこから 1 を引いて、データベースで更新します。これにより、多くのスレッドがロックを取得してデータベースの残高を読み取って更新しようとするため、プロジェクトにボトルネックが生じます。

そのため、おそらく Infinispan を使用してメモリ内のバランスを更新し、Infinispan にデータベースへの変更を非同期的に保持させることができると考えました。

どんな助けでも大歓迎です。

4

1 に答える 1

0

私が見ているところによると、この機能を有効にできる JPA 構成または Hibernate 構成に渡すことができるプロパティはありません (hibernate のプロパティのリストはここにあります)。

独自の infinispan xml 構成ファイルを作成し (おそらくこれをコピーします)、指定したinifnispan 構成から取得するプロパティを使用して新しい namedCache を作成し、JPA または休止状態の構成に "hibernate.cache. infinispan.cfg" プロパティを新しい構成 xml の場所に置き換えます。

また、休止状態または JPA 構成に次のプロパティを追加して、Stat エンティティに使用されるキャッシュを変更する必要があります。

<property name="hibernate.cache.infinispan.com.package.Stat.cfg"  value="yourNewNamedCache"/>
于 2012-12-30T08:06:56.720 に答える