2016-07-09 41 views
1

是否有可能从TransactionContext并发多线程访问TransactionalMap ..HazelCast TransactionalMap和并发线程访问

已委托xaResource到现有的事务,用于transactionalContext,得到TransactionalMap,并发*transMap,put(K,V)*,需要我的例外.. 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

重复同样的步骤,事务性地图bove提到两次,(Put)并行于两个不同的线程,同时,将精确锁定在“transactionalMap.get(”uuid“);” – peaceUser

回答

1

Hazelcast中的交易被设计为通过单个线程工作,因此不可能在交易中对TransactionalMap进行并发访问。 如果你解释你的用例,也许我们可以考虑更好的实现它?

+0

请在链接中详细找到... https://gist.github.com/VivekParanthaman/b745da11903a163d5657460abba101ae – peaceUser

+0

是的,谢谢。只是为了确保这不会被误解;在“TransactionalMap”中为同一个键('uuid')并发放置操作是不可能的。 – sertug

+0

即使是不同的钥匙也是不可能的!! – peaceUser