You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2015/08/08 20:13:27 UTC

svn commit: r1694829 - in /aries/trunk/transaction/transaction-blueprint: pom.xml src/main/java/org/apache/aries/transaction/TxInterceptorImpl.java src/test/java/org/apache/aries/transaction/InterceptorTest.java

Author: cschneider
Date: Sat Aug  8 18:13:26 2015
New Revision: 1694829

URL: http://svn.apache.org/r1694829
Log:
[ARIES-1369] Make sure rollback works even if coordination failed

Modified:
    aries/trunk/transaction/transaction-blueprint/pom.xml
    aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TxInterceptorImpl.java
    aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/InterceptorTest.java

Modified: aries/trunk/transaction/transaction-blueprint/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/pom.xml?rev=1694829&r1=1694828&r2=1694829&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/pom.xml (original)
+++ aries/trunk/transaction/transaction-blueprint/pom.xml Sat Aug  8 18:13:26 2015
@@ -50,7 +50,7 @@
             org.apache.aries.transaction,
             org.apache.aries.transaction.parsing
         </aries.osgi.private.pkg>
-        <lastReleaseVersion>1.0.1</lastReleaseVersion>
+        <lastReleaseVersion>1.1.0</lastReleaseVersion>
     </properties>
 
     <dependencies>

Modified: aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TxInterceptorImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TxInterceptorImpl.java?rev=1694829&r1=1694828&r2=1694829&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TxInterceptorImpl.java (original)
+++ aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TxInterceptorImpl.java Sat Aug  8 18:13:26 2015
@@ -28,6 +28,7 @@ import org.apache.aries.transaction.anno
 import org.apache.aries.transaction.exception.TransactionRollbackException;
 import org.osgi.service.blueprint.reflect.ComponentMetadata;
 import org.osgi.service.coordinator.Coordination;
+import org.osgi.service.coordinator.CoordinationException;
 import org.osgi.service.coordinator.Coordinator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -67,7 +68,11 @@ public class TxInterceptorImpl implement
             return;
         }
         final TransactionToken token = (TransactionToken)preCallToken;
-        token.getCoordination().end();
+        try {
+            token.getCoordination().end();
+        } catch (CoordinationException e){
+            LOGGER.debug(e.getMessage(), e);
+        }
         try {
             Transaction tran = token.getActiveTransaction();
             if (tran != null && isRollBackException(ex)) {

Modified: aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/InterceptorTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/InterceptorTest.java?rev=1694829&r1=1694828&r2=1694829&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/InterceptorTest.java (original)
+++ aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/InterceptorTest.java Sat Aug  8 18:13:26 2015
@@ -18,6 +18,9 @@
  */
 package org.apache.aries.transaction;
 
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+
 import java.io.IOException;
 
 import javax.transaction.Transaction;
@@ -27,18 +30,36 @@ import org.easymock.EasyMock;
 import org.easymock.IMocksControl;
 import org.junit.Test;
 import org.osgi.service.coordinator.Coordination;
+import org.osgi.service.coordinator.CoordinationException;
 
 public class InterceptorTest {
 
     @Test
     public void testRollbackOnException() throws Throwable {
-        postCallWithTransaction(new IllegalStateException(), true);
-        postCallWithTransaction(new Error(), true);
-        postCallWithTransaction(new Exception(), false);
-        postCallWithTransaction(new IOException(), false);
+        runPostCall(false);
+        runPostCall(true);
+    }
+
+    private void runPostCall(boolean failCoordination) throws Throwable {
+        postCallWithTransaction(new IllegalStateException(), true, failCoordination);
+        postCallWithTransaction(new Error(), true, failCoordination);
+        postCallWithTransaction(new Exception(), false, failCoordination);
+        postCallWithTransaction(new IOException(), false, failCoordination);
     }
     
-    private void postCallWithTransaction(Throwable th, boolean expectRollback) throws Throwable {
+    private CoordinationException coordinationException(Throwable th) {
+        Coordination coordination = EasyMock.createMock(Coordination.class);
+        expect(coordination.getId()).andReturn(1l);
+        expect(coordination.getName()).andReturn("Test");
+        replay(coordination);
+        CoordinationException cex = new CoordinationException("Simulating exception", 
+                                                              coordination , 
+                                                              CoordinationException.FAILED,
+                                                              th);
+        return cex;
+    }
+    
+    private void postCallWithTransaction(Throwable th, boolean expectRollback, boolean failCoordination) throws Throwable {
         IMocksControl c = EasyMock.createControl();
         TxInterceptorImpl sut = new TxInterceptorImpl();
         sut.setTransactionManager(c.createMock(TransactionManager.class));
@@ -50,7 +71,11 @@ public class InterceptorTest {
         }
         Coordination coordination = c.createMock(Coordination.class);
         coordination.end();
-        EasyMock.expectLastCall();
+        if (failCoordination) {
+            EasyMock.expectLastCall().andThrow(coordinationException(th));
+        } else {
+            EasyMock.expectLastCall();
+        }
         
         c.replay();
         TransactionToken tt = new TransactionToken(tran, null, TransactionAttribute.REQUIRED);