Author: cschneider
Date: Mon Jul 27 15:55:19 2015
New Revision: 1692902

URL: http://svn.apache.org/r1692902
Log:
[ARIES-1362] Support additional coordinations for transactions

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/main/resources/OSGI-INF/blueprint/transaction.xml
    aries/trunk/transaction/transaction-itests/pom.xml
    
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/AbstractIntegrationTest.java

Modified: aries/trunk/transaction/transaction-blueprint/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/pom.xml?rev=1692902&r1=1692901&r2=1692902&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/pom.xml (original)
+++ aries/trunk/transaction/transaction-blueprint/pom.xml Mon Jul 27 15:55:19 
2015
@@ -60,6 +60,11 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.aries.blueprint</groupId>
             <artifactId>org.apache.aries.blueprint.core</artifactId>
             <version>1.0.0</version>
@@ -76,12 +81,7 @@
             <version>1.2</version>
             <scope>provided</scope>
         </dependency>
-        
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>test</scope>
-        </dependency>
+
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-simple</artifactId>

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=1692902&r1=1692901&r2=1692902&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
 Mon Jul 27 15:55:19 2015
@@ -27,6 +27,8 @@ import org.apache.aries.blueprint.Interc
 import org.apache.aries.transaction.annotations.TransactionPropagationType;
 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.Coordinator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -35,6 +37,7 @@ public class TxInterceptorImpl implement
         LoggerFactory.getLogger(TxInterceptorImpl.class);
 
     private TransactionManager tm;
+    private Coordinator coordinator;
     private TxComponentMetaDataHelper metaDataHelper;
 
     public int getRank()
@@ -56,7 +59,9 @@ public class TxInterceptorImpl implement
       if (LOGGER.isDebugEnabled()) {
           LOGGER.debug("Calling begin for method {} with tx strategy {}.", m, 
txAttribute);
       }
-      return txAttribute.begin(tm);
+      TransactionToken token = txAttribute.begin(tm);
+      coordinator.begin("txInterceptor", 0);
+      return token;
     }
     
     public void postCallWithException(ComponentMetadata cm, Method m,
@@ -64,15 +69,15 @@ public class TxInterceptorImpl implement
      {
        if (!(preCallToken instanceof TransactionToken))
        {
-           return;
+         return;
        }
+       endCoordination();
        final TransactionToken token = (TransactionToken)preCallToken;
        try { 
          Transaction tran = token.getActiveTransaction();
          if (tran != null && isRollBackException(ex)) {
              tran.setRollbackOnly();
          }
-
          token.getTransactionAttribute().finish(tm, token);
        }
        catch (Exception e)
@@ -82,10 +87,6 @@ public class TxInterceptorImpl implement
        }
     }
 
-    private boolean isRollBackException(Throwable ex) {
-        return ex instanceof RuntimeException || ex instanceof Error;
-    }
-
     public void postCallWithReturn(ComponentMetadata cm, Method m,
         Object returnType, Object preCallToken) throws Exception
     {
@@ -93,7 +94,7 @@ public class TxInterceptorImpl implement
         if (preCallToken == null) {
             return;          
         }
-        
+        endCoordination();
       if (preCallToken instanceof TransactionToken)
       {
         final TransactionToken token = (TransactionToken)preCallToken;
@@ -112,11 +113,28 @@ public class TxInterceptorImpl implement
       }
     }
 
+    private void endCoordination() {
+        try {
+             Coordination coord = coordinator.pop();
+             coord.end();
+           } catch (Exception e) {
+             LOGGER.warn("Error ending coordination ", e);
+           }
+    }
+
+    private boolean isRollBackException(Throwable ex) {
+        return ex instanceof RuntimeException || ex instanceof Error;
+    }
 
     public final void setTransactionManager(TransactionManager manager)
     {
       tm = manager;
     }
+    
+    public void setCoordinator(Coordinator coordinator)
+    {
+        this.coordinator = coordinator;
+    }
 
     public final void setTxMetaDataHelper(TxComponentMetaDataHelper 
transactionEnhancer)
     {

Modified: 
aries/trunk/transaction/transaction-blueprint/src/main/resources/OSGI-INF/blueprint/transaction.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/main/resources/OSGI-INF/blueprint/transaction.xml?rev=1692902&r1=1692901&r2=1692902&view=diff
==============================================================================
--- 
aries/trunk/transaction/transaction-blueprint/src/main/resources/OSGI-INF/blueprint/transaction.xml
 (original)
+++ 
aries/trunk/transaction/transaction-blueprint/src/main/resources/OSGI-INF/blueprint/transaction.xml
 Mon Jul 27 15:55:19 2015
@@ -47,10 +47,13 @@
   
   <bean id="txinterceptor" 
class="org.apache.aries.transaction.TxInterceptorImpl">
     <property name="transactionManager" ref="tm"/>
+    <property name="coordinator" ref="coordinator"/>
     <property ref="txenhancer" name="txMetaDataHelper"/>
   </bean>
   
   <reference id="tm" interface="javax.transaction.TransactionManager"/>
+  <reference id="coordinator" 
interface="org.osgi.service.coordinator.Coordinator"/>
+  
   
   <service interface="org.osgi.service.blueprint.container.BlueprintListener">
        <bean class="org.apache.aries.transaction.parsing.TxBlueprintListener">

Modified: aries/trunk/transaction/transaction-itests/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-itests/pom.xml?rev=1692902&r1=1692901&r2=1692902&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-itests/pom.xml (original)
+++ aries/trunk/transaction/transaction-itests/pom.xml Mon Jul 27 15:55:19 2015
@@ -63,6 +63,12 @@
             <version>1.0.3</version>
         </dependency>
         <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.coordinator</artifactId>
+            <version>1.0.0</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.aries.transaction</groupId>
             <artifactId>org.apache.aries.transaction.manager</artifactId>
             <scope>test</scope>

Modified: 
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/AbstractIntegrationTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/AbstractIntegrationTest.java?rev=1692902&r1=1692901&r2=1692902&view=diff
==============================================================================
--- 
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/AbstractIntegrationTest.java
 (original)
+++ 
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/AbstractIntegrationTest.java
 Mon Jul 27 15:55:19 2015
@@ -85,6 +85,7 @@ public abstract class AbstractIntegratio
                 mavenBundle("org.apache.geronimo.specs", 
"geronimo-jta_1.1_spec"),
                 mavenBundle("org.apache.geronimo.specs", 
"geronimo-j2ee-connector_1.6_spec"),
                 mavenBundle("org.apache.geronimo.specs", 
"geronimo-validation_1.0_spec"),
+                mavenBundle("org.apache.felix", 
"org.apache.felix.coordinator"),
                 mavenBundle("org.apache.geronimo.components", 
"geronimo-connector"),
                 mavenBundle("org.apache.derby", "derby"),
                 mavenBundle("org.apache.aries", "org.apache.aries.util"),


Reply via email to