use of com.hazelcast.transaction.HazelcastXAResource in project hazelcast by hazelcast.
the class HazelcastXATest method testRecovery.
@Test
public void testRecovery() throws Exception {
TestHazelcastInstanceFactory factory = createHazelcastInstanceFactory(4);
HazelcastInstance instance1 = factory.newHazelcastInstance();
HazelcastInstance instance2 = factory.newHazelcastInstance();
HazelcastInstance instance3 = factory.newHazelcastInstance();
HazelcastXAResource xaResource = instance1.getXAResource();
Xid myXid = new SerializableXID(42, "globalTransactionId".getBytes(), "branchQualifier".getBytes());
xaResource.start(myXid, 0);
TransactionContext context1 = xaResource.getTransactionContext();
TransactionalMap<Object, Object> map = context1.getMap("map");
map.put("key", "value");
xaResource.prepare(myXid);
instance1.shutdown();
instance1 = factory.newHazelcastInstance();
xaResource = instance1.getXAResource();
Xid[] recovered = xaResource.recover(0);
for (Xid xid : recovered) {
xaResource.commit(xid, false);
}
assertEquals("value", instance2.getMap("map").get("key"));
}
use of com.hazelcast.transaction.HazelcastXAResource in project hazelcast by hazelcast.
the class HazelcastXATest method recoverTX.
private void recoverTX(HazelcastInstance instance) throws XAException {
HazelcastXAResource xaResource = instance.getXAResource();
final Xid[] recovered = xaResource.recover(XAResource.TMNOFLAGS);
for (Xid xid : recovered) {
xaResource.commit(xid, false);
}
}
use of com.hazelcast.transaction.HazelcastXAResource in project hazelcast by hazelcast.
the class ClientXATest method testRollbackOnTimeout.
@Test
public void testRollbackOnTimeout() throws Exception {
Hazelcast.newHazelcastInstance();
HazelcastInstance client = HazelcastClient.newHazelcastClient();
String name = randomString();
IQueue<Object> queue = client.getQueue(name);
queue.offer(randomString());
HazelcastXAResource xaResource = client.getXAResource();
tm.setTransactionTimeout(3);
tm.begin();
Transaction transaction = tm.getTransaction();
transaction.enlistResource(xaResource);
TransactionContext context = xaResource.getTransactionContext();
try {
context.getQueue(name).take();
sleepAtLeastSeconds(5);
tm.commit();
fail();
} catch (RollbackException ignored) {
// Transaction already rolled-back due to timeout, no need to call tm.rollback explicitly
}
assertEquals("Queue size should be 1", 1, queue.size());
}
Aggregations