1

이 소요HazelCast TransactionalMap, 동시 스레드 액세스

유무가 TransactionalMap를 얻기 위해, transactionalContext 사용하는 기존 트랜잭션, 동시 *transMap,put(K,V)*xaResource 입대 .. 가능 동시 다중 스레드TransactionContext에서 TransactionalMap에 액세스하는 것입니다 나를 예외로. com.hazelcast.transaction.TransactionException:트랜잭션이 키에 대한 잠금을 가져올 수 없습니다. HazelCast 버전 : 3.6.3.

입대 :

HazelcastXAResource xaResource = hazelcastInstance.getXAResource(); 
Transaction transaction = userTransactionManager.getTransaction(); 
transaction.enlistResource(xaResource); 

TransactionalMap :

TransactionalMap<String,Serializable> transactionalMap=hcTransactionalContext.getMap("UUID"); 
    Map<K,V> map = transactionalMap.get("uuid"); 
      map.put(K,V); 

예외 1

com.hazelcast.transaction.TransactionException: Transaction couldn't obtain lock for the key: uuid 

예외 2

There is no suitable serializer for class com.hazelcast.map.impl.tx.TransactionalMapProxy 
+0

안녕하십니까, 실행 가능한 재생기를 공유 할 수 있습니까? 나는 지금까지 그것을 재현 할 수 없었다. – sertug

+0

두 개의 서로 다른 스레드에서 병렬로 두 번, (Put) 병렬로 언급 된 동일한 트랜잭션 맵핑 단계를 동시에 반복하면 "transactionalMap.get ("uuid ");" – peaceUser

답변

1

Hazelcast의 트랜잭션은 단일 스레드에서 작동하도록 설계되었으므로 트랜잭션에서 TransactionalMap에 대한 동시 액세스를 수행 할 수 없습니다. 유스 케이스를 설명하면 어쩌면 더 좋은 것을 생각할 수 있을까요?

+0

링크에서 자세히 ... https://gist.github.com/VivekParanthaman/b745da11903a163d5657460abba101ae – peaceUser

+0

예, 감사합니다. 이것이 오해되지 않았는지 확인하십시오. 'TransactionalMap'에서 동일한 키 (이 경우'uuid')에 대해 동시 put 조작을 수행하는 것은 불가능합니다. – sertug

+0

다른 열쇠도 가능하지 않습니다 ...! – peaceUser