Skip to content

Commit

Permalink
TEIID-2632 ensuring that request scope transaction information is
Browse files Browse the repository at this point in the history
cleared with block scoped transactions
  • Loading branch information
shawkins committed Aug 20, 2013
1 parent 3f023cb commit 15f68ce
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -528,22 +528,33 @@ public void begin(TransactionContext context) throws XATransactionException{
}
beginDirect(context);
context.setTransactionType(TransactionContext.Scope.REQUEST);
this.transactions.addTransactionContext(context); //it may have been removed if this is a block level operation
}

/**
* Request level transaction
*/
public void commit(TransactionContext context) throws XATransactionException {
Assertion.assertTrue(context.getTransactionType() == TransactionContext.Scope.REQUEST);
commitDirect(context);
try {
commitDirect(context);
} finally {
context.setTransaction(null);
context.setTransactionType(Scope.NONE);
}
}

/**
* Request level transaction
*/
public void rollback(TransactionContext context) throws XATransactionException {
Assertion.assertTrue(context.getTransactionType() == TransactionContext.Scope.REQUEST);
rollbackDirect(context);
try {
rollbackDirect(context);
} finally {
context.setTransaction(null);
context.setTransactionType(Scope.NONE);
}
}

public void cancelTransactions(String threadId, boolean requestOnly) throws XATransactionException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,7 @@ public class TestTransactionServer {
TransactionContext tc = server.getOrCreateTransactionContext(THREAD1);
server.begin(tc);
server.commit(tc);
assertEquals(TransactionContext.Scope.NONE, tc.getTransactionType());
Mockito.verify(tm).commit();
}

Expand All @@ -377,6 +378,7 @@ public class TestTransactionServer {
server.begin(tc);

server.rollback(tc);
assertEquals(TransactionContext.Scope.NONE, tc.getTransactionType());
Mockito.verify(tm).rollback();
}

Expand Down
23 changes: 13 additions & 10 deletions runtime/src/test/java/org/teiid/runtime/TestEmbeddedServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,7 @@
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.InvalidTransactionException;
import javax.transaction.NotSupportedException;
import javax.transaction.RollbackException;
import javax.transaction.Status;
import javax.transaction.SystemException;
import javax.transaction.Transaction;
import javax.transaction.TransactionManager;
import javax.transaction.*;

import org.junit.After;
import org.junit.Before;
Expand Down Expand Up @@ -401,7 +393,8 @@ public int[] getUpdateCounts() throws DataNotAvailableException,
mmd1.setSchemaText("create view v as select 1; " +
"create virtual procedure proc () options (updatecount 2) as begin select * from v; end; " +
"create virtual procedure proc1 () as begin atomic select * from v; end; " +
"create virtual procedure proc2 (x integer) as begin atomic select 1; begin select 1/x; end exception e end;");
"create virtual procedure proc2 (x integer) as begin atomic select 1; begin select 1/x; end exception e end; " +
"create virtual procedure proc3 (x integer) as begin begin atomic select 1; end create local temporary table x (y string); begin atomic select 1; end end;");

es.deployVDB("test", mmd1);

Expand Down Expand Up @@ -454,6 +447,16 @@ public int[] getUpdateCounts() throws DataNotAvailableException,
}
txn = tm.txnHistory.remove(0);
Mockito.verify(txn, Mockito.times(0)).commit();

tm.commit();
c.setAutoCommit(true);

tm.txnHistory.clear();
//ensure that we properly reset the txn context
s.execute("call proc3(0)");
assertEquals(2, tm.txnHistory.size());
txn = tm.txnHistory.remove(0);
Mockito.verify(txn, Mockito.times(0)).registerSynchronization((Synchronization) Mockito.any());
}

@Test public void testMultiSourcePreparedDynamicUpdate() throws Exception {
Expand Down

0 comments on commit 15f68ce

Please sign in to comment.