2016-07-09 14 views
1

同時複数スレッドTransactionContextからTransactionalMapにアクセスすることが可能です。..HazelCast TransactionalMap、および同時スレッドアクセス

てきたが、既存のトランザクションへxaResource入隊TransactionalMapを取得するには、transactionalContextを使用し、*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

2つの異なるスレッドから並列に2回(Put)並行して同じトランザクションマップのステップを繰り返し、同時に "transactionalMap.get(" uuid ");" – peaceUser

答えて

1

Hazelcastのトランザクションは、単一スレッドで動作するように設計されているため、トランザクション内のTransactionalMapへの同時アクセスはできません。 あなたのユースケースについて説明したら、それを達成するために何か良いことが考えられるでしょうか?

+0

リンク先で詳しく調べてください... https://gist.github.com/VivekParanthaman/b745da11903a163d5657460abba101ae – peaceUser

+0

はい、ありがとうございます。これが誤解されていないことを確認するだけです。 'TransactionalMap'に同じキー(この場合は' uuid')の同時put操作を行うことはできません。 – sertug

+0

違うキーでもできません...! – peaceUser

関連する問題