use of org.jboss.jbossts.star.util.TxSupport in project wildfly by wildfly.
the class WorkRestATResource method enlist.
@POST
@Produces(TxMediaType.PLAIN_MEDIA_TYPE)
public String enlist(@Context UriInfo info, @QueryParam("pId") @DefaultValue("") String pId, @QueryParam("fault") @DefaultValue("") String fault, @QueryParam("twoPhaseAware") @DefaultValue("true") String twoPhaseAware, @QueryParam("isVolatile") @DefaultValue("false") String isVolatile, String enlistUrl) throws IOException {
Work work = faults.get(pId);
TxSupport txn = new TxSupport();
String txId = enlistUrl.substring(enlistUrl.lastIndexOf('/') + 1);
boolean isTwoPhaseAware = "true".equals(twoPhaseAware);
boolean isVolatileParticipant = "true".equals(isVolatile);
// URI for registering with the volatile phase
String vRegistration = null;
// URI for handling pre and post 2PC phases
String vParticipantLink = null;
if (work == null) {
int id = ++pid;
work = makeWork(txn, info.getAbsolutePath().toString(), String.valueOf(id), txId, enlistUrl, isTwoPhaseAware, isVolatileParticipant, null, fault);
} else {
Work newWork = makeWork(txn, info.getAbsolutePath().toString(), work.id, txId, enlistUrl, isTwoPhaseAware, isVolatileParticipant, null, fault);
newWork.oldState = work.oldState;
newWork.newState = work.newState;
work = newWork;
}
if (enlistUrl.indexOf(',') != -1) {
String[] urls = enlistUrl.split(",");
if (urls.length < 2)
throw new WebApplicationException(HttpURLConnection.HTTP_BAD_REQUEST);
enlistUrl = urls[0];
vRegistration = urls[1];
String vParticipant = new StringBuilder(info.getAbsolutePath().toString()).append('/').append(work.id).append('/').append(txId).append('/').append("vp").toString();
vParticipantLink = txn.addLink2(new StringBuilder(), TxLinkNames.VOLATILE_PARTICIPANT, vParticipant, true).toString();
}
try {
// enlist TestResource in the transaction as a participant
work.recoveryUrl = txn.enlistParticipant(enlistUrl, work.pLinks);
if (vParticipantLink != null)
txn.enlistVolatileParticipant(vRegistration, vParticipantLink);
} catch (HttpResponseException e) {
throw new WebApplicationException(e.getActualResponse());
}
work.status = TxStatus.TransactionActive.name();
work.start();
faults.put(work.id, work);
return work.id;
}
use of org.jboss.jbossts.star.util.TxSupport in project wildfly by wildfly.
the class CoordinatorTestCase method testCommitInvalidTx.
@Test
public void testCommitInvalidTx() throws IOException {
TxSupport txn = new TxSupport().startTx();
String terminator = txn.getTerminatorURI();
terminator += "/_dead";
// an attempt to commit on this URI should fail:
txn.httpRequest(new int[] { HttpURLConnection.HTTP_NOT_FOUND }, terminator, "PUT", TxMediaType.TX_STATUS_MEDIA_TYPE, TxStatusMediaType.TX_COMMITTED);
// commit it properly
txn.commitTx();
}
use of org.jboss.jbossts.star.util.TxSupport in project wildfly by wildfly.
the class CoordinatorTestCase method test1PCCommit.
@Test
public void test1PCCommit() throws Exception {
TxSupport txn = new TxSupport();
String pUrl = getDeploymentUrl() + WorkRestATResource.PATH_SEGMENT;
String pid = null;
String pVal;
pid = modifyResource(txn, pUrl, pid, "p1", "v1");
pVal = getResourceProperty(txn, pUrl, pid, "p1");
Assert.assertEquals(pVal, "v1");
txn.startTx();
pid = enlistResource(txn, pUrl + "?pId=" + pid);
modifyResource(txn, pUrl, pid, "p1", "v2");
pVal = getResourceProperty(txn, pUrl, pid, "p1");
Assert.assertEquals(pVal, "v2");
txn.commitTx();
pVal = getResourceProperty(txn, pUrl, pid, "p1");
Assert.assertEquals(pVal, "v2");
}
use of org.jboss.jbossts.star.util.TxSupport in project wildfly by wildfly.
the class CoordinatorTestCase method testListTransactions.
@Test
public void testListTransactions() {
TxSupport[] txns = { new TxSupport(), new TxSupport() };
int txnCount = new TxSupport().txCount();
for (TxSupport txn : txns) {
txn.startTx();
}
// there should be txns.length more transactions
Assert.assertEquals(txnCount + txns.length, txns[0].txCount());
for (TxSupport txn : txns) {
txn.commitTx();
}
// the number of transactions should be back to the original number
Assert.assertEquals(txnCount, txns[0].txCount());
}
use of org.jboss.jbossts.star.util.TxSupport in project wildfly by wildfly.
the class CoordinatorTestCase method test2PC.
@Test
public void test2PC() throws Exception {
TxSupport txn = new TxSupport();
String pUrl = getDeploymentUrl() + WorkRestATResource.PATH_SEGMENT;
String[] pid = new String[2];
String[] pVal = new String[2];
for (int i = 0; i < pid.length; i++) {
pid[i] = modifyResource(txn, pUrl, null, "p1", "v1");
pVal[i] = getResourceProperty(txn, pUrl, pid[i], "p1");
Assert.assertEquals(pVal[i], "v1");
}
txn.startTx();
for (int i = 0; i < pid.length; i++) {
enlistResource(txn, pUrl + "?pId=" + pid[i]);
modifyResource(txn, pUrl, pid[i], "p1", "v2");
pVal[i] = getResourceProperty(txn, pUrl, pid[i], "p1");
Assert.assertEquals(pVal[i], "v2");
}
txn.rollbackTx();
for (int i = 0; i < pid.length; i++) {
pVal[i] = getResourceProperty(txn, pUrl, pid[i], "p1");
Assert.assertEquals(pVal[i], "v1");
}
}
Aggregations