1

사용하고 있습니다 : JBoss AS 4.2.3, JBoss Cache 1.4.1 SP12, Hibernate 3.2.6;JBoss Cache로 데드 락 1.4.1

<attribute name="NodeLockingScheme">PESSIMISTIC</attribute> 
<attribute name="IsolationLevel">READ_COMMITTED</attribute> 

<property name="hibernate.cache.use_second_level_cache" value="true"/> 
<property name="hibernate.cache.use_query_cache" value="true"/> 
<property name="hibernate.cache.use_structured_entries" value="true"/> 
<property name="hibernate.cache.usage" value="transactional"/> 
<property name="hibernate.cache.provider_class" 
      value="org.hibernate.cache.TreeCacheProvider"/> 
<property name="hibernate.treecache.local_puts_only" value="true"/> 
<property name="hibernate.treecache.querycache.local_writes_only" value="true"/> 

설정 JPA 1.0.1 ;

내가 그러한 주체가 :

@Entity 
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL, region = "AccountCache") 
public class Account { 
    ...some fields and methods... 
} 

@Entity 
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL) 
public class User { 
    .... 
    @ManyToOne 
    private Account account; 
    .... 
} 

그래서, 내가 타이머 서비스를, 즉이 (그냥 얻을 Account을 변경하고 변경 정보에 대한 Account를 얻을 어떤 일을 어떤 다른 실체). 사용자가 로그인하고 페이지에서 전환 할 때 (전환 페이지, 변경하지 않음) (Account 또는 User 엔티티)이 순간 타이머 서비스가 작동을 시작하면 사용자 페이지가 차단되고 15 초 후에 오류가 발생합니다.

....many lines of stack and such errors... 
Error performing load command 
org.hibernate.cache.CacheException: org.jboss.cache.lock.TimeoutException: 
failure acquiring lock: fqn=/default/AccountCache, 
caller=Thread[http-192.0.2.58-80-6,5,jboss], lock=write 
owner=GlobalTransaction:<null>:88 ([email protected]) 
....many lines of stack and such errors... 

GlobalTransaction:<null>:88은 (는) 사용자 tx이며 callertimer service입니다.

일반적으로 사용자 스레드는 15 초 이내에 정상적으로 작동합니다. 을 Account에서 사용 중지하면 문제가 없습니다. 문제가 무엇

Caused by: org.jboss.cache.optimistic.DataVersioningException: 
Tx attempted to create /default/AccountCache/com.****.entity.account.Account#1 anew. 
It has already been created since this tx started by another (possibly remote) tx. 

그리고 질문))) :

, 같은 동시성 (일부 시간) Optimistic 잠금 방식을 사용하는 경우에는 오류가 발생합니다? TreeCache 문제입니까, 아니면 내 앱에 문제가 있습니까? 내가 뭘 잘못 했니? 컨테이너에 의해 관리되는 모든 트랜잭션 ...

+1

http://galder.zamarreno.com/?p=56에서 제안 된 캐시 공급자를 사용하고 있습니까? 나중에 http://galder.zamarreno.com/?p=227에서 업데이트 되었습니까? 자세한 내용은 http://community.jboss.org/wiki/NewJBossCache14xBasedHibernate32CacheProvider를 참조하십시오. 이 캐시 공급자는 잠금 문제를 방지하도록 설계되었습니다. –

+0

https://community.jboss.org/wiki/NewJBossCache14xBasedHibernate32CacheProvider – Vadzim

답변

0

실제 파일을 삭제하거나 프로그래밍 방식으로 캐시를 먼저 삭제하십시오. 그렇지 않은 경우 <attribute name="NodeLockingScheme">MVCC</attribute>을 사용해보십시오. 낙관적이고 비관적 인 잠금 체계는 더 이상 사용되지 않습니다.