Table of Contents
Hazelcast can be used in transactional context. Basically start a transaction, work with queues, maps, sets and do other things then commit/rollback in one shot.
import java.util.Queue; import java.util.Map; import java.util.Set; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.Transaction; Queue queue = Hazelcast.getQueue("myqueue"); Map map = Hazelcast.getMap ("mymap"); Set set = Hazelcast.getSet ("myset"); Transaction txn = Hazelcast.getTransaction(); txn.begin(); try { Object obj = queue.poll(); //process obj map.put ("1", "value1"); set.add ("value"); //do other things.. txn.commit(); }catch (Throwable t) { txn.rollback(); }
Isolation is always
READ_COMMITTED
. 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 next 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. Transaction instance is attached to the current thread
and each Hazelcast operation checks if the current thread holds a transaction, if so, operation will be
transaction aware. When transaction is committed, rolled back or timed out, it will be detached from the thread
holding it.