Table of Contents
Hazelcast can be used in transactional context. Basically create a TransactionContext
which can be used to begin, commit, rollback transaction.
Obtain transaction aware instances of queues, maps, sets, lists, multimaps via TransactionContext
,
work with them and commit/rollback in one shot. Hazelcast supports LOCAL(One Phase) and TWO_PHASE transactions.
Default behaviour is TWO_PHASE.
import java.util.Queue; import java.util.Map; import java.util.Set; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.Transaction; Config cfg = new Config(); HazelcastInstance hz = Hazelcast.newHazelcastInstance(cfg); TransactionOptions options = new TransactionOptions().setTransactionType(TransactionType.LOCAL); TransactionContext context = hz.newTransactionContext() context.beginTransaction(); TransactionalQueue queue = context.getQueue("myqueue"); TransactionalMap map = context.getMap ("mymap"); TransactionalSet set = context.getSet ("myset"); try { Object obj = queue.poll(); //process obj map.put ("1", "value1"); set.add ("value"); //do other things.. context.commitTransaction(); }catch (Throwable t) { context.rollbackTransaction(); }
Isolation is always
REPEATABLE_READ
. If you are in a transaction, you can read the data in your transaction and the data that is already committed
and if not in a transaction, you can only read the committed data. Implementation is different for queue and
map/set. For queue operations (offer,poll), offered and/or polled objects are copied to the owner member in order
to safely commit/rollback. For map/set, Hazelcast first acquires the locks for the write operations (put,
remove) and holds the differences (what is added/removed/updated) locally for each transaction. When transaction
is set to commit, Hazelcast will release the locks and apply the differences. When rolling back, Hazelcast will
simply releases the locks and discard the differences.