Search in sources :

Example 21 with TxSupport

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;
}
Also used : WebApplicationException(javax.ws.rs.WebApplicationException) TxSupport(org.jboss.jbossts.star.util.TxSupport) HttpResponseException(org.jboss.jbossts.star.provider.HttpResponseException) POST(javax.ws.rs.POST) Produces(javax.ws.rs.Produces)

Example 22 with TxSupport

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();
}
Also used : TxSupport(org.jboss.jbossts.star.util.TxSupport) Test(org.junit.Test)

Example 23 with TxSupport

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");
}
Also used : TxSupport(org.jboss.jbossts.star.util.TxSupport) Test(org.junit.Test)

Example 24 with TxSupport

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());
}
Also used : TxSupport(org.jboss.jbossts.star.util.TxSupport) Test(org.junit.Test)

Example 25 with TxSupport

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");
    }
}
Also used : TxSupport(org.jboss.jbossts.star.util.TxSupport) Test(org.junit.Test)

Aggregations

TxSupport (org.jboss.jbossts.star.util.TxSupport)26 Test (org.junit.Test)18 HttpResponseException (org.jboss.jbossts.star.provider.HttpResponseException)4 HEAD (javax.ws.rs.HEAD)2 WebApplicationException (javax.ws.rs.WebApplicationException)2 ParticipantException (org.jboss.narayana.rest.integration.api.ParticipantException)2 GET (javax.ws.rs.GET)1 POST (javax.ws.rs.POST)1 Produces (javax.ws.rs.Produces)1 Before (org.junit.Before)1