You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ti...@apache.org on 2016/03/01 00:27:20 UTC
svn commit: r1732970 - in /aries/trunk/tx-control:
tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/
tx-control-provider-jdbc-local/src/main/java/org/apache/aries/tx/control/jdbc/local/impl/
tx-control-service-local/src/main/java/org/...
Author: timothyjward
Date: Mon Feb 29 23:27:20 2016
New Revision: 1732970
URL: http://svn.apache.org/viewvc?rev=1732970&view=rev
Log:
[tx-control] Do not prematurely finish inherited transactions
Modified:
aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/SimpleTransactionTest.java
aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/SpringJdbcTemplateTransactionTest.java
aries/trunk/tx-control/tx-control-provider-jdbc-local/src/main/java/org/apache/aries/tx/control/jdbc/local/impl/TxContextBindingConnection.java
aries/trunk/tx-control/tx-control-service-local/src/main/java/org/apache/aries/tx/control/service/local/impl/TransactionControlImpl.java
Modified: aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/SimpleTransactionTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/SimpleTransactionTest.java?rev=1732970&r1=1732969&r2=1732970&view=diff
==============================================================================
--- aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/SimpleTransactionTest.java (original)
+++ aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/SimpleTransactionTest.java Mon Feb 29 23:27:20 2016
@@ -163,4 +163,41 @@ public class SimpleTransactionTest exten
}));
}
+ @Test
+ public void testRequiredInheritsTx() {
+ txControl.required(() -> {
+ Object key = txControl.getCurrentContext().getTransactionKey();
+
+ connection.createStatement()
+ .execute("Insert into TEST_TABLE values ( 'Hello World!' )");
+
+ return txControl.required(() -> {
+ assertEquals(key , txControl.getCurrentContext().getTransactionKey());
+ return connection.createStatement()
+ .execute("Insert into TEST_TABLE values ( 'Hello Nested World!' )");
+ });
+ });
+
+ String[] results = txControl.notSupported(() -> {
+ Statement s = connection.createStatement();
+
+ ResultSet rs = s.executeQuery("Select count(*) from TEST_TABLE");
+ rs.next();
+ int count = rs.getInt(1);
+
+ rs = s.executeQuery("Select message from TEST_TABLE ORDER BY message");
+
+ String[] result = new String[2];
+ rs.next();
+ result[0] = "" + count + ": " + rs.getString(1);
+ rs.next();
+ result[1] = "" + count + ": " + rs.getString(1);
+ return result;
+ });
+
+ System.out.println(Arrays.toString(results));
+
+ assertEquals("2: Hello Nested World!", results[0]);
+ assertEquals("2: Hello World!", results[1]);
+ }
}
Modified: aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/SpringJdbcTemplateTransactionTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/SpringJdbcTemplateTransactionTest.java?rev=1732970&r1=1732969&r2=1732970&view=diff
==============================================================================
--- aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/SpringJdbcTemplateTransactionTest.java (original)
+++ aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/SpringJdbcTemplateTransactionTest.java Mon Feb 29 23:27:20 2016
@@ -22,8 +22,6 @@ import static org.junit.Assert.assertEqu
import static org.ops4j.pax.exam.CoreOptions.composite;
import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
-import java.sql.ResultSet;
-
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
Modified: aries/trunk/tx-control/tx-control-provider-jdbc-local/src/main/java/org/apache/aries/tx/control/jdbc/local/impl/TxContextBindingConnection.java
URL: http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-provider-jdbc-local/src/main/java/org/apache/aries/tx/control/jdbc/local/impl/TxContextBindingConnection.java?rev=1732970&r1=1732969&r2=1732970&view=diff
==============================================================================
--- aries/trunk/tx-control/tx-control-provider-jdbc-local/src/main/java/org/apache/aries/tx/control/jdbc/local/impl/TxContextBindingConnection.java (original)
+++ aries/trunk/tx-control/tx-control-provider-jdbc-local/src/main/java/org/apache/aries/tx/control/jdbc/local/impl/TxContextBindingConnection.java Mon Feb 29 23:27:20 2016
@@ -89,7 +89,7 @@ public class TxContextBindingConnection
conn.commit();
} catch (SQLException e) {
throw new TransactionException(
- "An error occurred when committing the connection");
+ "An error occurred when committing the connection", e);
}
}
@@ -99,7 +99,7 @@ public class TxContextBindingConnection
conn.rollback();
} catch (SQLException e) {
throw new TransactionException(
- "An error occurred when rolling back the connection");
+ "An error occurred when rolling back the connection", e);
}
}
Modified: aries/trunk/tx-control/tx-control-service-local/src/main/java/org/apache/aries/tx/control/service/local/impl/TransactionControlImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-local/src/main/java/org/apache/aries/tx/control/service/local/impl/TransactionControlImpl.java?rev=1732970&r1=1732969&r2=1732970&view=diff
==============================================================================
--- aries/trunk/tx-control/tx-control-service-local/src/main/java/org/apache/aries/tx/control/service/local/impl/TransactionControlImpl.java (original)
+++ aries/trunk/tx-control/tx-control-service-local/src/main/java/org/apache/aries/tx/control/service/local/impl/TransactionControlImpl.java Mon Feb 29 23:27:20 2016
@@ -40,6 +40,7 @@ public class TransactionControlImpl impl
checkExceptions();
Coordination currentCoord = coordinator.peek();
+ boolean endTransaction = false;
boolean endCoordination = false;
AbstractTransactionContextImpl currentTran = ofNullable(
@@ -56,17 +57,21 @@ public class TransactionControlImpl impl
"Resource-Local-Transaction.REQUIRED", 30000);
endCoordination = true;
currentTran = new TransactionContextImpl(currentCoord);
+ endTransaction = true;
currentCoord.getVariables().put(TransactionContextKey.class,
currentTran);
}
} catch (RuntimeException re) {
+ if(endTransaction) {
+ currentTran.finish();
+ }
if (endCoordination) {
currentCoord.end();
}
throw re;
}
- return doWork(work, currentTran, currentCoord, endCoordination);
+ return doWork(work, currentTran, currentCoord, endTransaction, endCoordination);
}
@Override
@@ -90,7 +95,7 @@ public class TransactionControlImpl impl
throw re;
}
- return doWork(work, currentTran, currentCoord, true);
+ return doWork(work, currentTran, currentCoord, true, true);
}
@Override
@@ -98,6 +103,7 @@ public class TransactionControlImpl impl
checkExceptions();
Coordination currentCoord = coordinator.peek();
+ boolean endTransaction = false;
boolean endCoordination = false;
AbstractTransactionContextImpl currentTran = ofNullable(
@@ -112,17 +118,21 @@ public class TransactionControlImpl impl
"Resource-Local-Transaction.SUPPORTS", 30000);
endCoordination = true;
currentTran = new NoTransactionContextImpl(currentCoord);
+ endTransaction = true;
currentCoord.getVariables().put(TransactionContextKey.class,
currentTran);
}
} catch (RuntimeException re) {
+ if(endTransaction) {
+ currentTran.finish();
+ }
if (endCoordination) {
currentCoord.end();
}
throw re;
}
- return doWork(work, currentTran, currentCoord, endCoordination);
+ return doWork(work, currentTran, currentCoord, endTransaction, endCoordination);
}
@Override
@@ -131,6 +141,7 @@ public class TransactionControlImpl impl
checkExceptions();
Coordination currentCoord = coordinator.peek();
+ boolean endTransaction = false;
boolean endCoordination = false;
AbstractTransactionContextImpl currentTran = ofNullable(
@@ -147,20 +158,25 @@ public class TransactionControlImpl impl
"Resource-Local-Transaction.NOT_SUPPORTED", 30000);
endCoordination = true;
currentTran = new NoTransactionContextImpl(currentCoord);
+ endTransaction = true;
currentCoord.getVariables().put(TransactionContextKey.class,
currentTran);
}
} catch (RuntimeException re) {
+ if(endTransaction) {
+ currentTran.finish();
+ }
if (endCoordination) {
currentCoord.end();
}
throw re;
}
- return doWork(work, currentTran, currentCoord, endCoordination);
+ return doWork(work, currentTran, currentCoord, endTransaction, endCoordination);
}
private <R> R doWork(Callable<R> transactionalWork,
- AbstractTransactionContextImpl currentTran, Coordination currentCoord, boolean endCoordination) {
+ AbstractTransactionContextImpl currentTran, Coordination currentCoord,
+ boolean endTransaction, boolean endCoordination) {
R result;
try {
result = transactionalWork.call();
@@ -170,10 +186,12 @@ public class TransactionControlImpl impl
if(requiresRollback(t)) {
currentCoord.fail(t);
}
- try {
- currentTran.finish();
- } catch (Exception e) {
- currentTran.recordFailure(e);
+ if(endTransaction) {
+ try {
+ currentTran.finish();
+ } catch (Exception e) {
+ currentTran.recordFailure(e);
+ }
}
if (endCoordination) {
try {
@@ -195,11 +213,13 @@ public class TransactionControlImpl impl
throw workException;
}
- try {
- currentTran.finish();
- } catch (Exception e) {
- currentTran.recordFailure(e);
- currentCoord.fail(e);
+ if(endTransaction) {
+ try {
+ currentTran.finish();
+ } catch (Exception e) {
+ currentTran.recordFailure(e);
+ currentCoord.fail(e);
+ }
}
try {
if (endCoordination) {