2017-05-19 29 views
0

は、JBoss 7を考えるとJPAアプリケーション用の二次キャッシュのサイズを大きくし、persistence.xmlで有効な第二レベルのキャッシュを使用してアプリケーション:また、一部の企業 上@Cacheable考えるのJBoss EAP 7:

<property name="hibernate.cache.use_second_level_cache" value="true" /> 
<property name="hibernate.cache.use_query_cache" value="true" /> 
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.infinispan.JndiInfinispanRegionFactory" /> 
<property name="hibernate.cache.infinispan.cachemanager" value="java:jboss/infinispan/container/hibernate" /> 
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" /> 
<property name="hibernate.cache.default_cache_concurrency_strategy" value="transactional" /> 

と@ org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)。

パフォーマンスが悪いので、私はpersistence.xmlで

<property name="hibernate.generate_statistics" value="true" /> 

オン。

JPA統計では、数秒前にアクセスしたエンティティの場合でも、多くのキャッシュミスが発生します。だから私はキャッシュのサイズが十分に大きくないと仮定します。どうすればそれを増やすことができますか?

私はpersistence.xmlで

<property name="hibernate.cache.infinispan.entity.eviction.max_entries" value="200000"/> 
<property name="hibernate.cache.infinispan.entity.expiration.lifespan" value="1800000"/> 
<property name="hibernate.cache.infinispan.entity.expiration.max_idle" value= "1200000"/> 

を試みたが、ミスしても同じ。

説明:申し訳ありませんが、JBoss AS 7(2011年以降)ではなくJBoss EAP 7(2016年以降)です。

+0

私はすべて正しいと思われます。地域工場を変更してみてください。例: '' ' '' ' –

+0

エンティティで試してみることができます。例:' '' '' ' –

答えて

2

カスタム領域(org.hibernate.annotations.Cacheまで)を使用しない限り、hibernate.cache.infinispan.entity.eviction.max_entriesを設定するのが正しい方法です。エビクションを完全に無効にするには、-1に設定します。

エンティティを変更した後にキャッシュミスが発生することがあります。キャッシュは各書き込みの後に無効化され、次回の読み出し時に再充填されることが予想される。もう1つのオプションは、何かがevictEntityRegionsを呼び出しているか、またはevictAllまたはremoveAllを呼び出す別の操作です。このような場合には、これらのメソッドをデバッグするか、Bytemanルールをインストールして原因を突き止める必要があります。

関連する問題