2016-07-09 20 views
1

Ist es möglich, die TransactionalMap von TransactionContext mit gleichzeitig mehrere Thread zuzugreifen ..Hazelcast TransactionalMap und gleichzeitige Thread Zugriff

Haben die xaResource zu bestehenden Transaktion eingetragen, Gebrauchtwagen transactionalContext, TransactionalMap, gleichzeitig *transMap,put(K,V)* zu erreichen, man braucht mich zu einer Ausnahme .. com.hazelcast.transaction.TransactionException:Transaktion konnte Sperre für den Schlüssel nicht erhalten. HazelCast Version: 3.6.3.

Enlist:

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); 

Ausnahme 1:

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

Ausnahme 2:

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

Hallo, können Sie einen ausführbaren Reproduzierer teilen? Ich konnte es bisher nicht reproduzieren. – sertug

+0

Wiederholen der gleichen, Schritt der Transaktion Karte bove erwähnt, zweimal, (Put) parallel von zwei verschiedenen Threads, zur gleichen Zeit, wird genau bei "transactionalMap.get (" uuid ");" – peaceUser

Antwort

1

Transaktionen in Hazelcast sind so konzipiert, dass sie nur mit einem einzigen Thread funktionieren. Daher ist es nicht möglich, in einer Transaktion gleichzeitig auf die TransactionalMap zuzugreifen. Wenn Sie Ihren Anwendungsfall erklären, können wir uns vielleicht etwas Besseres vorstellen, um dies zu erreichen?

+0

Finden Sie im Detail in den Link ... https://gist.github.com/VivekParanthaman/b745da11903a163d5657460abba101ae – peaceUser

+0

Ja, danke. Nur um sicherzustellen, dass dies nicht missverstanden wird; gleichzeitige Put-Operationen für den gleichen Schlüssel (in diesem Fall "uuid") in einer "TransactionalMap" ist nicht möglich. – sertug

+0

Auch für andere Schlüssel ist auch nicht möglich ...! – peaceUser