【问题标题】:HazelCast TransactionalMap, and concurrent thread accessHazelCast TransactionalMap 和并发线程访问
【发布时间】:2016-07-09 07:49:41
【问题描述】:

是否可以使用并发多线程从TransactionContext 访问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<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

【问题讨论】:

  • 您好,可以分享一个可执行的复制器吗?到目前为止我无法重现它。
  • 重复前面提到的事务映射的相同步骤,两次,从两个不同的线程并行(Put),同时,将精确锁定在“transactionalMap.get("uuid");"

标签: java multithreading hazelcast jta distributed-transactions


【解决方案1】:

Hazelcast 中的事务被设计为由单个线程工作,因此不可能在事务中对TransactionalMap 进行并发访问。 如果您解释一下您的用例,也许我们可以想出更好的方法来实现它?

【讨论】:

  • 详细请在链接中查找...gist.github.com/VivekParanthaman/…
  • 好的,谢谢。只是为了确保这不会被误解;在TransactionalMap 中对同一键(在本例中为uuid)执行并发放置操作是不可能的。
  • 即使是不同的key也是不可能的...!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 2012-11-12
相关资源
最近更新 更多