사용하고 있습니다 : 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이며 caller
은 timer 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
문제입니까, 아니면 내 앱에 문제가 있습니까? 내가 뭘 잘못 했니? 컨테이너에 의해 관리되는 모든 트랜잭션 ...
http://galder.zamarreno.com/?p=56에서 제안 된 캐시 공급자를 사용하고 있습니까? 나중에 http://galder.zamarreno.com/?p=227에서 업데이트 되었습니까? 자세한 내용은 http://community.jboss.org/wiki/NewJBossCache14xBasedHibernate32CacheProvider를 참조하십시오. 이 캐시 공급자는 잠금 문제를 방지하도록 설계되었습니다. –
https://community.jboss.org/wiki/NewJBossCache14xBasedHibernate32CacheProvider – Vadzim