Author: timothyjward
Date: Wed Apr 20 23:09:10 2016
New Revision: 1740210

URL: http://svn.apache.org/viewvc?rev=1740210&view=rev
Log:
[tx-control] Remove the link to the Coordinator service as per the latest RFC 
update

Modified:
    
aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractTransactionTest.java
    
aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/XATransactionTest.java
    aries/trunk/tx-control/tx-control-jpa-itests/pom.xml
    
aries/trunk/tx-control/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractJPATransactionTest.java
    aries/trunk/tx-control/tx-control-service-common/pom.xml
    
aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/activator/AbstractActivator.java
    
aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/impl/AbstractTransactionContextImpl.java
    
aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/impl/AbstractTransactionControlImpl.java
    
aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/impl/NoTransactionContextImpl.java
    
aries/trunk/tx-control/tx-control-service-common/src/test/java/org/apache/aries/tx/control/service/common/impl/NoTransactionContextTest.java
    aries/trunk/tx-control/tx-control-service-local/pom.xml
    
aries/trunk/tx-control/tx-control-service-local/src/main/java/org/apache/aries/tx/control/service/local/impl/Activator.java
    
aries/trunk/tx-control/tx-control-service-local/src/main/java/org/apache/aries/tx/control/service/local/impl/TransactionContextImpl.java
    
aries/trunk/tx-control/tx-control-service-local/src/main/java/org/apache/aries/tx/control/service/local/impl/TransactionControlImpl.java
    
aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionContextTest.java
    
aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionControlRunningTest.java
    
aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionControlStatusTest.java
    
aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionLifecycleTest.java
    
aries/trunk/tx-control/tx-control-service-xa/src/main/java/org/apache/aries/tx/control/service/xa/impl/Activator.java
    
aries/trunk/tx-control/tx-control-service-xa/src/main/java/org/apache/aries/tx/control/service/xa/impl/TransactionContextImpl.java
    
aries/trunk/tx-control/tx-control-service-xa/src/main/java/org/apache/aries/tx/control/service/xa/impl/TransactionControlImpl.java
    
aries/trunk/tx-control/tx-control-service-xa/src/test/java/org/apache/aries/tx/control/service/xa/impl/TransactionContextTest.java
    
aries/trunk/tx-control/tx-control-service-xa/src/test/java/org/apache/aries/tx/control/service/xa/impl/TransactionControlRunningTest.java
    
aries/trunk/tx-control/tx-control-service-xa/src/test/java/org/apache/aries/tx/control/service/xa/impl/TransactionControlStatusTest.java
    
aries/trunk/tx-control/tx-control-service-xa/src/test/java/org/apache/aries/tx/control/service/xa/impl/TransactionLifecycleTest.java

Modified: 
aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractTransactionTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractTransactionTest.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractTransactionTest.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractTransactionTest.java
 Wed Apr 20 23:09:10 2016
@@ -382,14 +382,12 @@ public abstract class AbstractTransactio
        public Option localTxControlService() {
                return CoreOptions.composite(
                                
systemProperty(TX_CONTROL_FILTER).value("(!(osgi.xa.enabled=*))"),
-                               mavenBundle("org.apache.felix", 
"org.apache.felix.coordinator").versionAsInProject(),
                                mavenBundle("org.apache.aries.tx-control", 
"tx-control-service-local").versionAsInProject());
        }
 
        public Option xaTxControlService() {
                return CoreOptions.composite(
                                
systemProperty(TX_CONTROL_FILTER).value("(osgi.xa.enabled=true)"),
-                               mavenBundle("org.apache.felix", 
"org.apache.felix.coordinator").versionAsInProject(),
                                mavenBundle("org.apache.aries.tx-control", 
"tx-control-service-xa").versionAsInProject());
        }
 

Modified: 
aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/XATransactionTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/XATransactionTest.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/XATransactionTest.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-itests/src/test/java/org/apache/aries/tx/control/itests/XATransactionTest.java
 Wed Apr 20 23:09:10 2016
@@ -231,7 +231,6 @@ public class XATransactionTest extends A
                                when(localRepo != null)
                                
.useOptions(CoreOptions.vmOption("-Dorg.ops4j.pax.url.mvn.localRepository=" + 
localRepo)),
                                mavenBundle("org.apache.aries.testsupport", 
"org.apache.aries.testsupport.unit").versionAsInProject(),
-                               mavenBundle("org.apache.felix", 
"org.apache.felix.coordinator").versionAsInProject(),
                                mavenBundle("org.apache.aries.tx-control", 
"tx-control-service-xa").versionAsInProject(),
                                mavenBundle("com.h2database", 
"h2").versionAsInProject(),
                                mavenBundle("org.apache.aries.tx-control", 
"tx-control-provider-jdbc-xa").versionAsInProject(),

Modified: aries/trunk/tx-control/tx-control-jpa-itests/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-jpa-itests/pom.xml?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- aries/trunk/tx-control/tx-control-jpa-itests/pom.xml (original)
+++ aries/trunk/tx-control/tx-control-jpa-itests/pom.xml Wed Apr 20 23:09:10 
2016
@@ -60,12 +60,6 @@
                </dependency>
                <dependency>
                        <groupId>org.apache.felix</groupId>
-                       <artifactId>org.apache.felix.coordinator</artifactId>
-                       <scope>test</scope>
-                       <version>1.0.2</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.apache.felix</groupId>
                        <artifactId>org.apache.felix.configadmin</artifactId>
                        <scope>test</scope>
                        <version>1.8.8</version>

Modified: 
aries/trunk/tx-control/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractJPATransactionTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractJPATransactionTest.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractJPATransactionTest.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractJPATransactionTest.java
 Wed Apr 20 23:09:10 2016
@@ -215,14 +215,12 @@ public abstract class AbstractJPATransac
        public Option localTxControlService() {
                return CoreOptions.composite(
                                
systemProperty(TX_CONTROL_FILTER).value("(osgi.local.enabled=true)"),
-                               mavenBundle("org.apache.felix", 
"org.apache.felix.coordinator").versionAsInProject(),
                                mavenBundle("org.apache.aries.tx-control", 
"tx-control-service-local").versionAsInProject());
        }
 
        public Option xaTxControlService() {
                return CoreOptions.composite(
                                
systemProperty(TX_CONTROL_FILTER).value("(osgi.xa.enabled=true)"),
-                               mavenBundle("org.apache.felix", 
"org.apache.felix.coordinator").versionAsInProject(),
                                mavenBundle("org.apache.aries.tx-control", 
"tx-control-service-xa").versionAsInProject());
        }
 

Modified: aries/trunk/tx-control/tx-control-service-common/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-common/pom.xml?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- aries/trunk/tx-control/tx-control-service-common/pom.xml (original)
+++ aries/trunk/tx-control/tx-control-service-common/pom.xml Wed Apr 20 
23:09:10 2016
@@ -43,12 +43,6 @@
                </dependency>
                <dependency>
                        <groupId>org.osgi</groupId>
-                       <artifactId>org.osgi.service.coordinator</artifactId>
-                       <version>1.0.2</version>
-                       <scope>provided</scope>
-               </dependency>
-               <dependency>
-                       <groupId>org.osgi</groupId>
                        <artifactId>org.osgi.util.tracker</artifactId>
                        <version>1.5.1</version>
                        <scope>provided</scope>

Modified: 
aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/activator/AbstractActivator.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/activator/AbstractActivator.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/activator/AbstractActivator.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/activator/AbstractActivator.java
 Wed Apr 20 23:09:10 2016
@@ -1,109 +1,29 @@
 package org.apache.aries.tx.control.service.common.activator;
 
 import java.util.Dictionary;
-import java.util.Optional;
 
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.coordinator.Coordinator;
 import org.osgi.service.transaction.control.TransactionControl;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public abstract class AbstractActivator implements BundleActivator, 
ServiceTrackerCustomizer<Coordinator, Coordinator> {
+public abstract class AbstractActivator implements BundleActivator {
 
        private static final Logger logger = 
LoggerFactory.getLogger(AbstractActivator.class);
        
-       private BundleContext context;
-       
-       private ServiceTracker<Coordinator, Coordinator> tracker;
-       
-       private Coordinator inUse;
-       private ServiceRegistration<TransactionControl> reg;
-       
-       private Object lock = new Object();
-       
        @Override
        public void start(BundleContext context) throws Exception {
-               this.context = context;
-               tracker = new ServiceTracker<>(context, Coordinator.class, 
this);
-               tracker.open();
+               Dictionary<String, Object> properties = getProperties();
+               logger.info("Registering a new TransactionControl service with 
properties {}", properties);
+               context.registerService(
+                               TransactionControl.class, 
getTransactionControl(), properties);
        }
 
        @Override
-       public void stop(BundleContext context) throws Exception {
-               tracker.close();
-       }
+       public void stop(BundleContext context) throws Exception { }
 
-       @Override
-       public Coordinator addingService(ServiceReference<Coordinator> 
reference) {
-               Coordinator c = context.getService(reference);
-               checkAndRegister(c);
-               return c;
-       }
-
-       private void checkAndRegister(Coordinator c) {
-               boolean register = false;
-               synchronized (lock) {
-                       if(inUse == null) {
-                               inUse = c;
-                               register = true;
-                       }
-               }
-               
-               if(register) {
-                       logger.info("Registering a new local-only 
TransactionControl service");
-                       ServiceRegistration<TransactionControl> reg = 
context.registerService(
-                                       TransactionControl.class, 
getTransactionControl(c), getProperties());
-                       synchronized (lock) {
-                               this.reg = reg;
-                       }
-               }
-       }
-
-       protected abstract TransactionControl getTransactionControl(Coordinator 
c);
+       protected abstract TransactionControl getTransactionControl();
 
        protected abstract Dictionary<String, Object> getProperties();
-
-       @Override
-       public void modifiedService(ServiceReference<Coordinator> reference, 
Coordinator service) {
-       }
-
-       @Override
-       public void removedService(ServiceReference<Coordinator> reference, 
Coordinator service) {
-               ServiceRegistration<TransactionControl> toUnregister = null;
-               synchronized (lock) {
-                       if(inUse == service) {
-                               inUse = null;
-                               toUnregister = reg;
-                               reg = null;
-                       }
-               }
-               
-               if(toUnregister != null) {
-                       try {
-                               toUnregister.unregister();
-                       } catch (IllegalStateException ise) {
-                               logger.debug("An exception occurred when 
unregistering the Transaction Control service", ise);
-                       }
-                       
-                       Optional<?> check = 
tracker.getTracked().values().stream()
-                               .filter(c -> {
-                                       checkAndRegister(c);
-                                       synchronized (lock) {
-                                               return reg != null;
-                                       }
-                               }).findFirst();
-                       
-                       if(!check.isPresent()) {
-                               logger.info("No replacement Coordinator service 
was available. The Transaction Control service will remain unavailable until a 
new Coordinator can be found");
-                       }
-               }
-               context.ungetService(reference);
-       }
-
 }

Modified: 
aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/impl/AbstractTransactionContextImpl.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/impl/AbstractTransactionContextImpl.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/impl/AbstractTransactionContextImpl.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/impl/AbstractTransactionContextImpl.java
 Wed Apr 20 23:09:10 2016
@@ -3,66 +3,33 @@ package org.apache.aries.tx.control.serv
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Consumer;
 
-import org.osgi.service.coordinator.Coordination;
-import org.osgi.service.coordinator.Participant;
 import org.osgi.service.transaction.control.TransactionContext;
 import org.osgi.service.transaction.control.TransactionStatus;
 
 public abstract class AbstractTransactionContextImpl implements 
TransactionContext {
 
-       protected static class TransactionVariablesKey {
-       }
-
        protected final AtomicReference<Throwable> firstUnexpectedException = 
new AtomicReference<>();
 
        protected final List<Throwable> subsequentExceptions = new 
ArrayList<>();
 
-       protected final Coordination coordination;
-
        protected final List<Runnable> preCompletion = new ArrayList<>();
 
        protected final List<Consumer<TransactionStatus>> postCompletion = new 
ArrayList<>();
+       
+       protected final Map<Object, Object> scopedVariables = new HashMap<>();
 
-       public AbstractTransactionContextImpl(Coordination coordination) {
-               this.coordination = coordination;
-
-               coordination.addParticipant(new Participant() {
-
-                       @Override
-                       public void failed(Coordination coordination) throws 
Exception {
-                               Throwable failure = coordination.getFailure();
-                               recordFailure(failure);
-                               safeSetRollbackOnly();
-                       }
-
-                       @Override
-                       public void ended(Coordination coordination) throws 
Exception {
-                               if (isAlive()) {
-                                       // TODO log this
-                                       recordFailure(new IllegalStateException(
-                                                       "The surrounding 
coordination ended before the transaction completed"));
-                                       safeSetRollbackOnly();
-
-                               }
-                       }
-               });
-       }
-
-       @SuppressWarnings("unchecked")
        @Override
        public Object getScopedValue(Object key) {
-               return ((HashMap<Object, Object>) 
coordination.getVariables().getOrDefault(TransactionVariablesKey.class,
-                               new HashMap<>())).get(key);
+               return scopedVariables.get(key);
        }
 
-       @SuppressWarnings("unchecked")
        @Override
        public void putScopedValue(Object key, Object value) {
-               ((HashMap<Object, Object>) 
coordination.getVariables().computeIfAbsent(TransactionVariablesKey.class,
-                               k -> new HashMap<>())).put(key, value);
+               scopedVariables.put(key, value);
        }
 
        protected void beforeCompletion(Runnable onFirstError) {

Modified: 
aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/impl/AbstractTransactionControlImpl.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/impl/AbstractTransactionControlImpl.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/impl/AbstractTransactionControlImpl.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/impl/AbstractTransactionControlImpl.java
 Wed Apr 20 23:09:10 2016
@@ -1,6 +1,5 @@
 package org.apache.aries.tx.control.service.common.impl;
 
-import static java.util.Optional.ofNullable;
 import static java.util.stream.Collectors.toList;
 import static 
org.osgi.service.transaction.control.TransactionStatus.NO_TRANSACTION;
 import static 
org.osgi.service.transaction.control.TransactionStatus.ROLLED_BACK;
@@ -10,9 +9,6 @@ import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.Callable;
 
-import org.osgi.service.coordinator.Coordination;
-import org.osgi.service.coordinator.CoordinationException;
-import org.osgi.service.coordinator.Coordinator;
 import org.osgi.service.transaction.control.ScopedWorkException;
 import org.osgi.service.transaction.control.TransactionBuilder;
 import org.osgi.service.transaction.control.TransactionContext;
@@ -47,41 +43,25 @@ public abstract class AbstractTransactio
                                throws TransactionException, 
TransactionRolledBackException {
                        checkExceptions();
                        
-                       Coordination currentCoord = coordinator.peek();
                        boolean endTransaction = false;
-                       boolean endCoordination = false;
 
-                       AbstractTransactionContextImpl currentTran = ofNullable(
-                                       currentCoord).map(c -> 
(AbstractTransactionContextImpl) c
-                                                       
.getVariables().get(TransactionContextKey.class))
-                                                       .filter(atc -> atc
-                                                                       
.getTransactionStatus() != NO_TRANSACTION)
-                                                       .orElse(null);
+                       AbstractTransactionContextImpl existingTran = 
existingTx.get();
+                       AbstractTransactionContextImpl currentTran;
                        try {
-                               if (currentTran == null) {
-                                       // We must create a new coordination to 
scope our new
-                                       // transaction
-                                       currentCoord = coordinator.begin(
-                                                       
"Resource-Local-Transaction.REQUIRED", 30000);
-                                       endCoordination = true;
-                                       currentTran = 
startTransaction(currentCoord, readOnly);
+                               if (existingTran == null || 
existingTran.getTransactionStatus() == NO_TRANSACTION) {
+                                       currentTran = 
startTransaction(readOnly);
                                        endTransaction = true;
-                                       
currentCoord.getVariables().put(TransactionContextKey.class,
-                                                       currentTran);
-                               } else if (currentTran.isReadOnly() && 
!readOnly){
+                                       existingTx.set(currentTran);
+                               } else if (existingTran.isReadOnly() && 
!readOnly){
                                        throw new TransactionException("A read 
only transaction is currently active, and cannot be upgraded to a writeable 
transaction");
+                               } else {
+                                       currentTran = existingTran;
                                }
-                       } catch (RuntimeException re) {
-                               if(endTransaction) {
-                                       currentTran.finish();
-                               }
-                               if (endCoordination) {
-                                       currentCoord.end();
-                               }
-                               throw re;
+                               return doWork(work, currentTran, 
endTransaction);
+                       } finally {
+                               existingTx.set(existingTran);
                        }
-
-                       return doWork(work, currentTran, currentCoord, 
endTransaction, endCoordination);
+                       
                }
 
                @Override
@@ -89,59 +69,38 @@ public abstract class AbstractTransactio
                                throws TransactionException, 
TransactionRolledBackException {
                        checkExceptions();
                        
-                       Coordination currentCoord = null;
-                       AbstractTransactionContextImpl currentTran;
+                       AbstractTransactionContextImpl existingTran = 
existingTx.get();
                        try {
-                               currentCoord = coordinator.begin(
-                                               
"Resource-Local-Transaction.REQUIRES_NEW", 30000);
-
-                               currentTran = startTransaction(currentCoord, 
readOnly);
-                               
currentCoord.getVariables().put(TransactionContextKey.class,
-                                               currentTran);
-                       } catch (RuntimeException re) {
-                               if (currentCoord != null)
-                                       currentCoord.end();
-                               throw re;
+                               AbstractTransactionContextImpl currentTran = 
startTransaction(readOnly);
+                               existingTx.set(currentTran);
+                               return doWork(work, currentTran, true);
+                       } finally {
+                               existingTx.set(existingTran);
                        }
 
-                       return doWork(work, currentTran, currentCoord, true, 
true);
                }
 
                @Override
                public <T> T supports(Callable<T> work) throws 
TransactionException {
                        checkExceptions();
                        
-                       Coordination currentCoord = coordinator.peek();
                        boolean endTransaction = false;
-                       boolean endCoordination = false;
 
-                       AbstractTransactionContextImpl currentTran = ofNullable(
-                                       currentCoord).map(c -> 
(AbstractTransactionContextImpl) c
-                                                       
.getVariables().get(TransactionContextKey.class))
-                                                       .orElse(null);
+                       AbstractTransactionContextImpl existingTran = 
existingTx.get();
+                       AbstractTransactionContextImpl currentTran;
                        try {
-                               if (currentTran == null) {
-                                       // We must create a new coordination to 
scope our new
-                                       // transaction
-                                       currentCoord = coordinator.begin(
-                                                       
"Resource-Local-Transaction.SUPPORTS", 30000);
-                                       endCoordination = true;
-                                       currentTran = new 
NoTransactionContextImpl(currentCoord);
+                               if (existingTran == null) {
+                                       currentTran = new 
NoTransactionContextImpl();
                                        endTransaction = true;
-                                       
currentCoord.getVariables().put(TransactionContextKey.class,
-                                                       currentTran);
-                               }
-                       } catch (RuntimeException re) {
-                               if(endTransaction) {
-                                       currentTran.finish();
-                               }
-                               if (endCoordination) {
-                                       currentCoord.end();
-                               }
-                               throw re;
+                                       existingTx.set(currentTran);
+                               } else {
+                                       currentTran = existingTran;
+                               }
+                               return doWork(work, currentTran, 
endTransaction);
+                       } finally {
+                               existingTx.set(existingTran);
                        }
 
-                       return doWork(work, currentTran, currentCoord, 
endTransaction, endCoordination);
                }
 
                @Override
@@ -149,43 +108,30 @@ public abstract class AbstractTransactio
                                throws TransactionException {
                        checkExceptions();
                        
-                       Coordination currentCoord = coordinator.peek();
                        boolean endTransaction = false;
-                       boolean endCoordination = false;
 
-                       AbstractTransactionContextImpl currentTran = ofNullable(
-                                       currentCoord).map(c -> 
(AbstractTransactionContextImpl) c
-                                                       
.getVariables().get(TransactionContextKey.class))
-                                                       .filter(atc -> atc
-                                                                       
.getTransactionStatus() == NO_TRANSACTION)
-                                                       .orElse(null);
+                       AbstractTransactionContextImpl existingTran = 
existingTx.get();
+                       AbstractTransactionContextImpl currentTran;
+                       
                        try {
-                               if (currentTran == null) {
+                               if (existingTran == null || 
existingTran.getTransactionStatus() != NO_TRANSACTION) {
                                        // We must create a new coordination to 
scope our new
                                        // transaction
-                                       currentCoord = coordinator.begin(
-                                                       
"Resource-Local-Transaction.NOT_SUPPORTED", 30000);
-                                       endCoordination = true;
-                                       currentTran = new 
NoTransactionContextImpl(currentCoord);
+                                       currentTran = new 
NoTransactionContextImpl();
                                        endTransaction = true;
-                                       
currentCoord.getVariables().put(TransactionContextKey.class,
-                                                       currentTran);
-                               }
-                       } catch (RuntimeException re) {
-                               if(endTransaction) {
-                                       currentTran.finish();
-                               }
-                               if (endCoordination) {
-                                       currentCoord.end();
-                               }
-                               throw re;
+                                       existingTx.set(currentTran);
+                               } else {
+                                       currentTran = existingTran;
+                               }
+                               return doWork(work, currentTran, 
endTransaction);
+                       } finally {
+                               existingTx.set(existingTran);
                        }
-                       return doWork(work, currentTran, currentCoord, 
endTransaction, endCoordination);
                }
 
                private <R> R doWork(Callable<R> transactionalWork,
-                               AbstractTransactionContextImpl currentTran, 
Coordination currentCoord, 
-                               boolean endTransaction, boolean 
endCoordination) {
+                               AbstractTransactionContextImpl currentTran, 
+                               boolean endTransaction) {
                        R result;
                        try {
                                result = transactionalWork.call();
@@ -193,7 +139,7 @@ public abstract class AbstractTransactio
                        } catch (Throwable t) {
                                //TODO handle noRollbackFor
                                if(requiresRollback(t)) {
-                                       currentCoord.fail(t);
+                                       currentTran.safeSetRollbackOnly();
                                }
                                if(endTransaction) {
                                        try {
@@ -202,17 +148,8 @@ public abstract class AbstractTransactio
                                                currentTran.recordFailure(e);
                                        }
                                }
-                               if (endCoordination) {
-                                       try {
-                                               currentCoord.end();
-                                       } catch (CoordinationException ce) {
-                                               if(ce.getType() != 
CoordinationException.FAILED) {
-                                                       
currentTran.recordFailure(ce);
-                                               }
-                                       }
-                               }
                                ScopedWorkException workException = new 
ScopedWorkException("The scoped work threw an exception", t, 
-                                               endCoordination ? null : 
currentTran);
+                                               endTransaction ? null : 
currentTran);
                                Throwable throwable = 
currentTran.firstUnexpectedException.get();
                                if(throwable != null) {
                                        workException.addSuppressed(throwable);
@@ -227,16 +164,6 @@ public abstract class AbstractTransactio
                                        currentTran.finish();
                                } catch (Exception e) {
                                        currentTran.recordFailure(e);
-                                       currentCoord.fail(e);
-                               }
-                       }
-                       try {
-                               if (endCoordination) {
-                                       currentCoord.end();
-                               }
-                       } catch (CoordinationException ce) {
-                               if(ce.getType() != 
CoordinationException.FAILED) {
-                                       currentTran.recordFailure(ce);
                                }
                        }
                        
@@ -273,15 +200,9 @@ public abstract class AbstractTransactio
                }
        }
 
-       private static class TransactionContextKey {}
+       private final ThreadLocal<AbstractTransactionContextImpl> existingTx = 
new ThreadLocal<>();
 
-       private final Coordinator coordinator;
-
-       public AbstractTransactionControlImpl(Coordinator c) {
-               coordinator = c;
-       }
-
-       protected abstract AbstractTransactionContextImpl 
startTransaction(Coordination currentCoord, boolean readOnly);
+       protected abstract AbstractTransactionContextImpl 
startTransaction(boolean readOnly);
 
        @Override
        public TransactionBuilder build() {
@@ -343,14 +264,7 @@ public abstract class AbstractTransactio
 
        @Override
        public TransactionContext getCurrentContext() {
-               TransactionContext toUse = null;
-
-               Coordination peek = coordinator.peek();
-               if (peek != null) {
-                       toUse = (TransactionContext) peek.getVariables()
-                                       .get(TransactionContextKey.class);
-               }
-               return toUse;
+               return existingTx.get();
        }
 
        @Override

Modified: 
aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/impl/NoTransactionContextImpl.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/impl/NoTransactionContextImpl.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/impl/NoTransactionContextImpl.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/impl/NoTransactionContextImpl.java
 Wed Apr 20 23:09:10 2016
@@ -7,7 +7,6 @@ import java.util.function.Consumer;
 
 import javax.transaction.xa.XAResource;
 
-import org.osgi.service.coordinator.Coordination;
 import org.osgi.service.transaction.control.LocalResource;
 import org.osgi.service.transaction.control.TransactionContext;
 import org.osgi.service.transaction.control.TransactionStatus;
@@ -17,8 +16,8 @@ public class NoTransactionContextImpl ex
 
        private final AtomicBoolean finished = new AtomicBoolean(false);
 
-       public NoTransactionContextImpl(Coordination coordination) {
-               super(coordination);
+       public NoTransactionContextImpl() {
+               super();
        }
 
        @Override
@@ -43,7 +42,7 @@ public class NoTransactionContextImpl ex
 
        @Override
        public void preCompletion(Runnable job) throws IllegalStateException {
-               if (coordination.isTerminated()) {
+               if (finished.get()) {
                        throw new IllegalStateException(
                                        "The transaction context has finished");
                }
@@ -54,7 +53,7 @@ public class NoTransactionContextImpl ex
        @Override
        public void postCompletion(Consumer<TransactionStatus> job)
                        throws IllegalStateException {
-               if (coordination.isTerminated()) {
+               if (finished.get()) {
                        throw new IllegalStateException(
                                        "The transaction context has finished");
                }

Modified: 
aries/trunk/tx-control/tx-control-service-common/src/test/java/org/apache/aries/tx/control/service/common/impl/NoTransactionContextTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-common/src/test/java/org/apache/aries/tx/control/service/common/impl/NoTransactionContextTest.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-service-common/src/test/java/org/apache/aries/tx/control/service/common/impl/NoTransactionContextTest.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-service-common/src/test/java/org/apache/aries/tx/control/service/common/impl/NoTransactionContextTest.java
 Wed Apr 20 23:09:10 2016
@@ -6,44 +6,30 @@ import static org.junit.Assert.assertNul
 import static org.junit.Assert.assertSame;
 import static 
org.osgi.service.transaction.control.TransactionStatus.NO_TRANSACTION;
 
-import java.util.HashMap;
-import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.transaction.xa.XAResource;
 
-import 
org.apache.aries.tx.control.service.common.impl.AbstractTransactionContextImpl;
-import 
org.apache.aries.tx.control.service.common.impl.NoTransactionContextImpl;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.mockito.runners.MockitoJUnitRunner;
-import org.osgi.service.coordinator.Coordination;
-import org.osgi.service.coordinator.Participant;
 import org.osgi.service.transaction.control.LocalResource;
 
 @RunWith(MockitoJUnitRunner.class)
 public class NoTransactionContextTest {
 
        @Mock
-       Coordination coordination;
-       @Mock
        XAResource xaResource;
        @Mock
        LocalResource localResource;
        
-       Map<Class<?>, Object> variables;
-       
        AbstractTransactionContextImpl ctx;
        
        @Before
        public void setUp() {
-               ctx = new NoTransactionContextImpl(coordination);
-               variables = new HashMap<>();
-               Mockito.when(coordination.getVariables()).thenReturn(variables);
+               ctx = new NoTransactionContextImpl();
        }
        
        @Test(expected=IllegalStateException.class)
@@ -120,8 +106,7 @@ public class NoTransactionContextTest {
                
                assertEquals(0, value.getAndSet(1));
                
-               Participant participant = getParticipant();
-               participant.failed(coordination);
+               ctx.recordFailure(new Exception());
                
                ctx.finish();
                
@@ -157,8 +142,7 @@ public class NoTransactionContextTest {
                
                assertEquals(0, value.getAndSet(1));
                
-               Participant participant = getParticipant();
-               participant.failed(coordination);
+               ctx.recordFailure(new Exception());
                
                ctx.finish();
                
@@ -192,8 +176,7 @@ public class NoTransactionContextTest {
                        value.compareAndSet(3, 5);
                });
                
-               Participant participant = getParticipant();
-               participant.failed(coordination);
+               ctx.recordFailure(new Exception());
                
                ctx.finish();
                
@@ -219,24 +202,15 @@ public class NoTransactionContextTest {
                assertEquals(5, value.get());
        }
 
-       private Participant getParticipant() {
-               ArgumentCaptor<Participant> captor = 
ArgumentCaptor.forClass(Participant.class);
-               Mockito.verify(coordination).addParticipant(captor.capture());
-               
-               Participant participant = captor.getValue();
-               return participant;
-       }
-
        @Test(expected=IllegalStateException.class)
        public void testPreCompletionAfterEnd() throws Exception {
-               
-               Mockito.when(coordination.isTerminated()).thenReturn(true);
+               ctx.finish();
                ctx.preCompletion(() -> {});
        }
 
        @Test(expected=IllegalStateException.class)
        public void testPostCompletionAfterEnd() throws Exception {
-               Mockito.when(coordination.isTerminated()).thenReturn(true);
+               ctx.finish();
                ctx.postCompletion(x -> {});
        }
        

Modified: aries/trunk/tx-control/tx-control-service-local/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-local/pom.xml?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- aries/trunk/tx-control/tx-control-service-local/pom.xml (original)
+++ aries/trunk/tx-control/tx-control-service-local/pom.xml Wed Apr 20 23:09:10 
2016
@@ -14,7 +14,7 @@
        <version>0.0.1-SNAPSHOT</version>
 
        <description>
-        This bundle contains a Coordinator based OSGi Transaction Control 
Service implementation suitable for local resources.
+        This bundle contains an OSGi Transaction Control Service 
implementation suitable for local resources.
     </description>
 
        <scm>
@@ -66,12 +66,6 @@
         </dependency>
                <dependency>
                        <groupId>org.osgi</groupId>
-                       <artifactId>org.osgi.service.coordinator</artifactId>
-                       <version>1.0.2</version>
-                       <scope>provided</scope>
-               </dependency>
-               <dependency>
-                       <groupId>org.osgi</groupId>
                        <artifactId>org.osgi.util.tracker</artifactId>
                        <version>1.5.1</version>
                        <scope>provided</scope>

Modified: 
aries/trunk/tx-control/tx-control-service-local/src/main/java/org/apache/aries/tx/control/service/local/impl/Activator.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/Activator.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-service-local/src/main/java/org/apache/aries/tx/control/service/local/impl/Activator.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-service-local/src/main/java/org/apache/aries/tx/control/service/local/impl/Activator.java
 Wed Apr 20 23:09:10 2016
@@ -4,14 +4,13 @@ import java.util.Dictionary;
 import java.util.Hashtable;
 
 import org.apache.aries.tx.control.service.common.activator.AbstractActivator;
-import org.osgi.service.coordinator.Coordinator;
 import org.osgi.service.transaction.control.TransactionControl;
 
 public class Activator extends AbstractActivator {
 
        @Override
-       protected TransactionControl getTransactionControl(Coordinator c) {
-               return new TransactionControlImpl(c);
+       protected TransactionControl getTransactionControl() {
+               return new TransactionControlImpl();
        }
        
        @Override

Modified: 
aries/trunk/tx-control/tx-control-service-local/src/main/java/org/apache/aries/tx/control/service/local/impl/TransactionContextImpl.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/TransactionContextImpl.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-service-local/src/main/java/org/apache/aries/tx/control/service/local/impl/TransactionContextImpl.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-service-local/src/main/java/org/apache/aries/tx/control/service/local/impl/TransactionContextImpl.java
 Wed Apr 20 23:09:10 2016
@@ -15,7 +15,6 @@ import java.util.function.Consumer;
 import javax.transaction.xa.XAResource;
 
 import 
org.apache.aries.tx.control.service.common.impl.AbstractTransactionContextImpl;
-import org.osgi.service.coordinator.Coordination;
 import org.osgi.service.transaction.control.LocalResource;
 import org.osgi.service.transaction.control.TransactionContext;
 import org.osgi.service.transaction.control.TransactionStatus;
@@ -28,15 +27,16 @@ public class TransactionContextImpl exte
 
        private AtomicReference<TransactionStatus> tranStatus = new 
AtomicReference<>(ACTIVE);
 
+       private Object txId;
 
-       public TransactionContextImpl(Coordination coordination, boolean 
readOnly) {
-               super(coordination);
+       public TransactionContextImpl(Object txId, boolean readOnly) {
+               this.txId = txId;
                this.readOnly = readOnly;
        }
 
        @Override
        public Object getTransactionKey() {
-               return coordination.getId();
+               return txId;
        }
 
        @Override

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=1740210&r1=1740209&r2=1740210&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
 Wed Apr 20 23:09:10 2016
@@ -1,19 +1,54 @@
 package org.apache.aries.tx.control.service.local.impl;
 
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicLong;
+
 import 
org.apache.aries.tx.control.service.common.impl.AbstractTransactionContextImpl;
 import 
org.apache.aries.tx.control.service.common.impl.AbstractTransactionControlImpl;
-import org.osgi.service.coordinator.Coordination;
-import org.osgi.service.coordinator.Coordinator;
 
 public class TransactionControlImpl extends AbstractTransactionControlImpl {
 
-       public TransactionControlImpl(Coordinator c) {
-               super(c);
-       }
+       private static class TxId {
+               private final UUID controlId;
+               private final long txId;
+               
+               public TxId(UUID controlId, long txId) {
+                       this.controlId = controlId;
+                       this.txId = txId;
+               }
+
+               @Override
+               public int hashCode() {
+                       final int prime = 31;
+                       int result = 1;
+                       result = prime * result + controlId.hashCode();
+                       result = prime * result + (int) (txId ^ (txId >>> 32));
+                       return result;
+               }
 
+               @Override
+               public boolean equals(Object obj) {
+                       if (this == obj)
+                               return true;
+                       if (obj == null)
+                               return false;
+                       if (getClass() != obj.getClass())
+                               return false;
+                       TxId other = (TxId) obj;
+                       if (!controlId.equals(other.controlId))
+                               return false;
+                       if (txId != other.txId)
+                               return false;
+                       return true;
+               }
+       }
+       
+       private final UUID txControlId = UUID.randomUUID();
+       private final AtomicLong txCounter = new AtomicLong();
+       
        @Override
-       protected AbstractTransactionContextImpl startTransaction(Coordination 
currentCoord, boolean readOnly) {
-               return new TransactionContextImpl(currentCoord, readOnly);
+       protected AbstractTransactionContextImpl startTransaction(boolean 
readOnly) {
+               return new TransactionContextImpl(new TxId(txControlId, 
txCounter.incrementAndGet()), readOnly);
        }
        
 }

Modified: 
aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionContextTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionContextTest.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionContextTest.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionContextTest.java
 Wed Apr 20 23:09:10 2016
@@ -2,7 +2,6 @@ package org.apache.aries.tx.control.serv
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
@@ -13,8 +12,6 @@ import static org.osgi.service.transacti
 import static 
org.osgi.service.transaction.control.TransactionStatus.ROLLED_BACK;
 import static 
org.osgi.service.transaction.control.TransactionStatus.ROLLING_BACK;
 
-import java.util.HashMap;
-import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.transaction.xa.XAResource;
@@ -23,12 +20,9 @@ import org.apache.aries.tx.control.servi
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.runners.MockitoJUnitRunner;
-import org.osgi.service.coordinator.Coordination;
-import org.osgi.service.coordinator.Participant;
 import org.osgi.service.transaction.control.LocalResource;
 import org.osgi.service.transaction.control.TransactionException;
 
@@ -36,21 +30,18 @@ import org.osgi.service.transaction.cont
 public class TransactionContextTest {
 
        @Mock
-       Coordination coordination;
-       @Mock
        XAResource xaResource;
        @Mock
        LocalResource localResource;
        
-       Map<Class<?>, Object> variables;
-       
        AbstractTransactionContextImpl ctx;
        
+       private Object txId;
+       
        @Before
        public void setUp() {
-               ctx = new TransactionContextImpl(coordination, false);
-               variables = new HashMap<>();
-               Mockito.when(coordination.getVariables()).thenReturn(variables);
+               txId = new Object();
+               ctx = new TransactionContextImpl(txId, false);
        }
        
        @Test
@@ -71,15 +62,13 @@ public class TransactionContextTest {
 
        @Test
        public void testisReadOnlyTrue() {
-               ctx = new TransactionContextImpl(coordination, true);
+               ctx = new TransactionContextImpl(txId, true);
                assertTrue(ctx.isReadOnly());
        }
 
        @Test
        public void testTransactionKey() {
-               Mockito.when(coordination.getId()).thenReturn(42L);
-               
-               assertNotNull(ctx.getTransactionKey());
+               assertSame(txId, ctx.getTransactionKey());
        }
        
        @Test
@@ -147,10 +136,7 @@ public class TransactionContextTest {
                assertEquals(0, value.getAndSet(1));
                
                
-               ArgumentCaptor<Participant> captor = 
ArgumentCaptor.forClass(Participant.class);
-               Mockito.verify(coordination).addParticipant(captor.capture());
-               
-               captor.getValue().failed(coordination);
+               ctx.setRollbackOnly();
                
                ctx.finish();
 
@@ -186,10 +172,7 @@ public class TransactionContextTest {
                
                assertEquals(0, value.getAndSet(1));
                
-               ArgumentCaptor<Participant> captor = 
ArgumentCaptor.forClass(Participant.class);
-               Mockito.verify(coordination).addParticipant(captor.capture());
-               
-               captor.getValue().failed(coordination);
+               ctx.setRollbackOnly();
                
                ctx.finish();
                
@@ -234,14 +217,6 @@ public class TransactionContextTest {
                assertEquals(5, value.get());
        }
 
-       private Participant getParticipant() {
-               ArgumentCaptor<Participant> captor = 
ArgumentCaptor.forClass(Participant.class);
-               Mockito.verify(coordination).addParticipant(captor.capture());
-               
-               Participant participant = captor.getValue();
-               return participant;
-       }
-       
        @Test(expected=IllegalStateException.class)
        public void testPreCompletionAfterEnd() throws Exception {
                
@@ -251,16 +226,6 @@ public class TransactionContextTest {
        }
 
        @Test(expected=IllegalStateException.class)
-       public void testPreCompletionAfterFail() throws Exception {
-               
-               getParticipant().failed(coordination);
-               
-               ctx.finish();
-               
-               ctx.preCompletion(() -> {});
-       }
-
-       @Test(expected=IllegalStateException.class)
        public void testPostCompletionAfterEnd() throws Exception {
                
                ctx.finish();
@@ -268,16 +233,6 @@ public class TransactionContextTest {
                ctx.postCompletion(x -> {});
        }
 
-       @Test(expected=IllegalStateException.class)
-       public void testPostCompletionAfterFail() throws Exception {
-               
-               getParticipant().failed(coordination);
-               
-               ctx.finish();
-               
-               ctx.postCompletion(x -> {});
-       }
-
        @Test
        public void testLocalResource() throws Exception {
                ctx.registerLocalResource(localResource);
@@ -301,7 +256,7 @@ public class TransactionContextTest {
                        return null;
                }).when(localResource).rollback();
                
-               getParticipant().ended(coordination);
+               ctx.setRollbackOnly();
                
                ctx.finish();
                
@@ -332,7 +287,7 @@ public class TransactionContextTest {
                        return null;
                }).when(localResource).rollback();
                
-               getParticipant().failed(coordination);
+               ctx.setRollbackOnly();
                
                ctx.finish();
                

Modified: 
aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionControlRunningTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionControlRunningTest.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionControlRunningTest.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionControlRunningTest.java
 Wed Apr 20 23:09:10 2016
@@ -9,20 +9,13 @@ import static org.osgi.service.transacti
 import static 
org.osgi.service.transaction.control.TransactionStatus.ROLLED_BACK;
 
 import java.net.BindException;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.mockito.runners.MockitoJUnitRunner;
-import org.osgi.service.coordinator.Coordination;
-import org.osgi.service.coordinator.Coordinator;
-import org.osgi.service.coordinator.Participant;
 import org.osgi.service.transaction.control.LocalResource;
 import org.osgi.service.transaction.control.ResourceProvider;
 import org.osgi.service.transaction.control.ScopedWorkException;
@@ -32,89 +25,15 @@ import org.osgi.service.transaction.cont
 public class TransactionControlRunningTest {
 
        @Mock
-       Coordinator coordinator;
-       @Mock
-       Coordination coordination1;
-       @Mock
-       Coordination coordination2;
-
-       @Mock
        ResourceProvider<Object> testProvider;
        @Mock
        LocalResource testResource;
 
        TransactionControlImpl txControl;
 
-       Map<Class<?>, Object> variables1;
-       Map<Class<?>, Object> variables2;
-
        @Before
        public void setUp() {
-               variables1 = new HashMap<>();
-               variables2 = new HashMap<>();
-
-               setupCoordinations();
-
-               txControl = new TransactionControlImpl(coordinator);
-       }
-
-       /**
-        * Allow up to two Coordinations to be happening
-        */
-       private void setupCoordinations() {
-               Mockito.when(coordinator.begin(Mockito.anyString(), 
Mockito.anyLong())).then(i -> {
-                       
Mockito.when(coordinator.peek()).thenReturn(coordination1);
-                       return coordination1;
-               }).then(i -> {
-                       
Mockito.when(coordinator.peek()).thenReturn(coordination2);
-                       return coordination2;
-               }).thenThrow(new IllegalStateException("Only two coordinations 
at a time in the test"));
-
-               
Mockito.when(coordination1.getVariables()).thenReturn(variables1);
-               Mockito.when(coordination1.getId()).thenReturn(42L);
-               Mockito.doAnswer(i -> {
-                       Mockito.when(coordinator.peek()).thenReturn(null);
-                       ArgumentCaptor<Participant> captor = 
ArgumentCaptor.forClass(Participant.class);
-                       Mockito.verify(coordination1, 
Mockito.atLeast(1)).addParticipant(captor.capture());
-                       
-                       for(Participant p : captor.getAllValues()) {
-                               p.ended(coordination1);
-                       }
-                       return null;
-               }).when(coordination1).end();
-               Mockito.doAnswer(i -> {
-                       Mockito.when(coordinator.peek()).thenReturn(null);
-                       ArgumentCaptor<Participant> captor = 
ArgumentCaptor.forClass(Participant.class);
-                       Mockito.verify(coordination1, 
Mockito.atLeast(1)).addParticipant(captor.capture());
-                       
-                       for(Participant p : captor.getAllValues()) {
-                               p.failed(coordination1);
-                       }
-                       return null;
-               }).when(coordination1).fail(Mockito.any(Throwable.class));
-
-               
Mockito.when(coordination2.getVariables()).thenReturn(variables2);
-               Mockito.when(coordination2.getId()).thenReturn(43L);
-               Mockito.doAnswer(i -> {
-                       
Mockito.when(coordinator.peek()).thenReturn(coordination1);
-                       ArgumentCaptor<Participant> captor = 
ArgumentCaptor.forClass(Participant.class);
-                       Mockito.verify(coordination2, 
Mockito.atLeast(1)).addParticipant(captor.capture());
-                       
-                       for(Participant p : captor.getAllValues()) {
-                               p.ended(coordination2);
-                       }
-                       return null;
-               }).when(coordination2).end();
-               Mockito.doAnswer(i -> {
-                       
Mockito.when(coordinator.peek()).thenReturn(coordination1);
-                       ArgumentCaptor<Participant> captor = 
ArgumentCaptor.forClass(Participant.class);
-                       Mockito.verify(coordination2, 
Mockito.atLeast(1)).addParticipant(captor.capture());
-                       
-                       for(Participant p : captor.getAllValues()) {
-                               p.failed(coordination2);
-                       }
-                       return null;
-               }).when(coordination2).fail(Mockito.any(Throwable.class));
+               txControl = new TransactionControlImpl();
        }
 
        @Test

Modified: 
aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionControlStatusTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionControlStatusTest.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionControlStatusTest.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionControlStatusTest.java
 Wed Apr 20 23:09:10 2016
@@ -3,40 +3,28 @@ package org.apache.aries.tx.control.serv
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.osgi.service.transaction.control.TransactionStatus.ACTIVE;
 import static 
org.osgi.service.transaction.control.TransactionStatus.MARKED_ROLLBACK;
 import static 
org.osgi.service.transaction.control.TransactionStatus.NO_TRANSACTION;
 
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.aries.tx.control.service.local.impl.TransactionControlImpl;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.mockito.runners.MockitoJUnitRunner;
-import org.osgi.service.coordinator.Coordination;
-import org.osgi.service.coordinator.Coordinator;
-import org.osgi.service.coordinator.Participant;
 import org.osgi.service.transaction.control.LocalResource;
 import org.osgi.service.transaction.control.ResourceProvider;
+import org.osgi.service.transaction.control.TransactionContext;
 
 @RunWith(MockitoJUnitRunner.class)
 public class TransactionControlStatusTest {
 
        @Mock
-       Coordinator coordinator;
-       @Mock
-       Coordination coordination1;
-       @Mock
-       Coordination coordination2;
-
-       @Mock
        ResourceProvider<Object> testProvider;
        @Mock
        LocalResource testResource;
@@ -44,24 +32,17 @@ public class TransactionControlStatusTes
        TransactionControlImpl txControl;
 
        Object resource = new Object();
-       Map<Class<?>, Object> variables1;
-       Map<Class<?>, Object> variables2;
 
        @Before
        public void setUp() {
 
                resource = new Object();
-               variables1 = new HashMap<>();
-               variables2 = new HashMap<>();
-
-               
Mockito.when(coordination1.getVariables()).thenReturn(variables1);
-               
Mockito.when(coordination2.getVariables()).thenReturn(variables2);
                
-               txControl = new TransactionControlImpl(coordinator);
+               txControl = new TransactionControlImpl();
        }
 
        @Test
-       public void testGetRollbackOnlyUnscopedNoCoord() {
+       public void testGetRollbackOnlyUnscoped() {
                try {
                        txControl.getRollbackOnly();
                        fail("Should not be able to get rollback only");
@@ -71,7 +52,7 @@ public class TransactionControlStatusTes
        }
 
        @Test
-       public void testSetRollbackOnlyUnscopedNoCoord() {
+       public void testSetRollbackOnlyUnscoped() {
                try {
                        txControl.setRollbackOnly();
                        fail("Should not be able to set rollback only");
@@ -81,80 +62,15 @@ public class TransactionControlStatusTes
        }
 
        @Test
-       public void testTranChecksUnscopedNoCoord() {
+       public void testTranChecksUnscoped() {
                assertFalse(txControl.activeTransaction());
                assertFalse(txControl.activeScope());
                assertNull(txControl.getCurrentContext());
        }
 
-       private void setupExistingCoordination() {
-               Mockito.when(coordinator.peek()).thenReturn(coordination1);
-               
Mockito.when(coordination1.getVariables()).thenReturn(variables1);
-       }
-       
-       @Test
-       public void testGetRollbackOnlyUnscopedWithCoordination() {
-               setupExistingCoordination();
-               
-               try {
-                       txControl.getRollbackOnly();
-                       fail("Should not be able to get rollback only");
-               } catch (IllegalStateException e) {
-
-               }
-       }
-
-       @Test
-       public void testSetRollbackOnlyUnscopedWithCoordination() {
-               setupExistingCoordination();
-               
-
-               try {
-                       txControl.setRollbackOnly();
-                       fail("Should not be able to set rollback only");
-               } catch (IllegalStateException e) {
-
-               }
-       }
-       
-       @Test
-       public void testTranChecksUnscopedWithCoordination() {
-               
-               setupExistingCoordination();
-               
-               assertFalse(txControl.activeTransaction());
-               assertFalse(txControl.activeScope());
-               assertNull(txControl.getCurrentContext());
-       }
-
-       private void setupCoordinatorForSingleTransaction() {
-               setupCoordinatorForSingleTransaction(null);
-       }
-       
-       private void setupCoordinatorForSingleTransaction(Coordination 
existing) {
-               
-               Mockito.when(coordinator.peek()).thenReturn(existing);
-               
-               Mockito.when(coordinator.begin(Mockito.anyString(), 
Mockito.anyLong()))
-                       .then(i -> {
-                               
Mockito.when(coordinator.peek()).thenReturn(coordination1);
-                               return coordination1;
-                       });
-               
-               
-               Mockito.doAnswer(i -> 
Mockito.when(coordinator.peek()).thenReturn(existing))
-                       .when(coordination1).end();
-               Mockito.doAnswer(i -> 
Mockito.when(coordinator.peek()).thenReturn(existing) != null)
-                       .when(coordination1).fail(Mockito.any(Throwable.class));
-               
-               
Mockito.when(coordination1.getVariables()).thenReturn(variables1);
-       }
-       
        @Test
        public void testGetRollbackOnlyScoped() {
-               setupCoordinatorForSingleTransaction();
                txControl.notSupported(() -> {
-                       
Mockito.verify(coordination1).addParticipant(Mockito.any(Participant.class));
                        try {
                                txControl.getRollbackOnly();
                                fail("Should not be able to get or set rollback 
when there is no transaction");
@@ -166,10 +82,7 @@ public class TransactionControlStatusTes
 
        @Test
        public void testSetRollbackOnlyScoped() {
-               setupCoordinatorForSingleTransaction();
-               
                txControl.notSupported(() -> {
-                       
Mockito.verify(coordination1).addParticipant(Mockito.any(Participant.class));
                        try {
                                txControl.setRollbackOnly();
                                fail("Should not be able to get or set rollback 
when there is no transaction");
@@ -182,7 +95,6 @@ public class TransactionControlStatusTes
        @Test
        public void testTranChecksScoped() {
                
-               setupCoordinatorForSingleTransaction();
                txControl.notSupported(() -> {
                        assertFalse(txControl.activeTransaction());
                        assertTrue(txControl.activeScope());
@@ -194,53 +106,43 @@ public class TransactionControlStatusTes
        }
 
        @Test
-       public void testGetRollbackOnlyScopedExistingCoordination() {
-               setupCoordinatorForSingleTransaction(coordination2);
+       public void testInheritNotSupported() {
                txControl.notSupported(() -> {
-                       
Mockito.verify(coordination1).addParticipant(Mockito.any(Participant.class));
-                       try {
-                               txControl.getRollbackOnly();
-                               fail("Should not be able to get or set rollback 
when there is no transaction");
-                       } catch (IllegalStateException ise) {
-                       }
-                       return null;
-               });
+                               TransactionContext currentContext = 
txControl.getCurrentContext();
+                               return txControl.notSupported(() -> {
+                                               assertSame(currentContext, 
txControl.getCurrentContext());
+                                               return null;
+                                       });
+                       });
        }
-       
+
        @Test
-       public void testSetRollbackOnlyScopedExistingCoordination() {
-               setupCoordinatorForSingleTransaction(coordination2);
-               
+       public void testInheritNotSupportedSupports() {
                txControl.notSupported(() -> {
-                       
Mockito.verify(coordination1).addParticipant(Mockito.any(Participant.class));
-                       try {
-                               txControl.setRollbackOnly();
-                               fail("Should not be able to get or set rollback 
when there is no transaction");
-                       } catch (IllegalStateException ise) {
-                       }
-                       return null;
+                       TransactionContext currentContext = 
txControl.getCurrentContext();
+                       return txControl.supports(() -> {
+                               assertSame(currentContext, 
txControl.getCurrentContext());
+                               return null;
+                       });
                });
        }
-       
+
        @Test
-       public void testTranChecksScopedExistingCoordination() {
-               
-               setupCoordinatorForSingleTransaction(coordination2);
+       public void testInheritNotSupportedRequired() {
                txControl.notSupported(() -> {
-                       assertFalse(txControl.activeTransaction());
-                       assertTrue(txControl.activeScope());
-                       assertNotNull(txControl.getCurrentContext());
-                       assertEquals(NO_TRANSACTION, 
txControl.getCurrentContext().getTransactionStatus());
-                       
+                       TransactionContext currentContext = 
txControl.getCurrentContext();
+                       txControl.required(() -> {
+                               assertNotSame(currentContext, 
txControl.getCurrentContext());
+                               return null;
+                       });
+                       assertSame(currentContext, 
txControl.getCurrentContext());
                        return null;
                });
        }
 
        @Test
        public void testGetRollbackOnlyActive() {
-               setupCoordinatorForSingleTransaction();
                txControl.required(() -> {
-                       
Mockito.verify(coordination1).addParticipant(Mockito.any(Participant.class));
                        assertFalse(txControl.getRollbackOnly());
                        return null;
                });
@@ -248,14 +150,10 @@ public class TransactionControlStatusTes
        
        @Test
        public void testSetRollbackOnlyActive() {
-               setupCoordinatorForSingleTransaction();
-               
                txControl.required(() -> {
-                       
Mockito.verify(coordination1).addParticipant(Mockito.any(Participant.class));
                        assertFalse(txControl.getRollbackOnly());
                        txControl.setRollbackOnly();
                        assertTrue(txControl.getRollbackOnly());
-                       
                        return null;
                });
        }
@@ -263,7 +161,6 @@ public class TransactionControlStatusTes
        @Test
        public void testTranChecksActive() {
                
-               setupCoordinatorForSingleTransaction();
                txControl.required(() -> {
                        assertTrue(txControl.activeTransaction());
                        assertTrue(txControl.activeScope());
@@ -278,42 +175,36 @@ public class TransactionControlStatusTes
        }
        
        @Test
-       public void testGetRollbackOnlyActiveExistingCoordination() {
-               setupCoordinatorForSingleTransaction(coordination2);
+       public void testInheritSupports() {
                txControl.required(() -> {
-                       
Mockito.verify(coordination1).addParticipant(Mockito.any(Participant.class));
-                       assertFalse(txControl.getRollbackOnly());
-                       return null;
-               });
+                               TransactionContext currentContext = 
txControl.getCurrentContext();
+                               return txControl.supports(() -> {
+                                               assertSame(currentContext, 
txControl.getCurrentContext());
+                                               return null;
+                                       });
+                       });
        }
-       
+
        @Test
-       public void testSetRollbackOnlyActiveExistingCoordination() {
-               setupCoordinatorForSingleTransaction(coordination2);
-               
+       public void testInheritRequired() {
                txControl.required(() -> {
-                       
Mockito.verify(coordination1).addParticipant(Mockito.any(Participant.class));
-                       assertFalse(txControl.getRollbackOnly());
-                       txControl.setRollbackOnly();
-                       assertTrue(txControl.getRollbackOnly());
-                       
-                       return null;
+                       TransactionContext currentContext = 
txControl.getCurrentContext();
+                       return txControl.required(() -> {
+                               assertSame(currentContext, 
txControl.getCurrentContext());
+                               return null;
+                       });
                });
        }
-       
+
        @Test
-       public void testTranChecksActiveExistingCoordination() {
-               
-               setupCoordinatorForSingleTransaction(coordination2);
+       public void testInheritRequiredNotSupported() {
                txControl.required(() -> {
-                       assertTrue(txControl.activeTransaction());
-                       assertTrue(txControl.activeScope());
-                       assertNotNull(txControl.getCurrentContext());
-                       assertEquals(ACTIVE, 
txControl.getCurrentContext().getTransactionStatus());
-
-                       txControl.setRollbackOnly();
-                       assertEquals(MARKED_ROLLBACK, 
txControl.getCurrentContext().getTransactionStatus());
-                       
+                       TransactionContext currentContext = 
txControl.getCurrentContext();
+                       txControl.notSupported(() -> {
+                               assertNotSame(currentContext, 
txControl.getCurrentContext());
+                               return null;
+                       });
+                       assertSame(currentContext, 
txControl.getCurrentContext());
                        return null;
                });
        }

Modified: 
aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionLifecycleTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionLifecycleTest.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionLifecycleTest.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-service-local/src/test/java/org/apache/aries/tx/control/service/local/impl/TransactionLifecycleTest.java
 Wed Apr 20 23:09:10 2016
@@ -5,17 +5,11 @@ import static org.junit.Assert.assertFal
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.mockito.runners.MockitoJUnitRunner;
-import org.osgi.service.coordinator.Coordination;
-import org.osgi.service.coordinator.Coordinator;
 import org.osgi.service.transaction.control.LocalResource;
 import org.osgi.service.transaction.control.ResourceProvider;
 
@@ -23,65 +17,15 @@ import org.osgi.service.transaction.cont
 public class TransactionLifecycleTest {
 
        @Mock
-       Coordinator coordinator;
-       @Mock
-       Coordination coordination1;
-       @Mock
-       Coordination coordination2;
-
-       @Mock
        ResourceProvider<Object> testProvider;
        @Mock
        LocalResource testResource;
 
        TransactionControlImpl txControl;
 
-       Map<Class<?>, Object> variables1;
-       Map<Class<?>, Object> variables2;
-
        @Before
        public void setUp() {
-               variables1 = new HashMap<>();
-               variables2 = new HashMap<>();
-
-               setupCoordinations();
-
-               txControl = new TransactionControlImpl(coordinator);
-       }
-
-       /**
-        * Allow up to two Coordinations to be happening
-        */
-       private void setupCoordinations() {
-               Mockito.when(coordinator.begin(Mockito.anyString(), 
Mockito.anyLong())).then(i -> {
-                       
Mockito.when(coordinator.peek()).thenReturn(coordination1);
-                       return coordination1;
-               }).then(i -> {
-                       
Mockito.when(coordinator.peek()).thenReturn(coordination2);
-                       return coordination2;
-               }).thenThrow(new IllegalStateException("Only two coordinations 
at a time in the test"));
-
-               
Mockito.when(coordination1.getVariables()).thenReturn(variables1);
-               Mockito.when(coordination1.getId()).thenReturn(42L);
-               Mockito.doAnswer(i -> {
-                       Mockito.when(coordinator.peek()).thenReturn(null);
-                       return null;
-               }).when(coordination1).end();
-               Mockito.doAnswer(i -> {
-                       Mockito.when(coordinator.peek()).thenReturn(null);
-                       return null;
-               }).when(coordination1).fail(Mockito.any(Throwable.class));
-
-               
Mockito.when(coordination2.getVariables()).thenReturn(variables2);
-               Mockito.when(coordination2.getId()).thenReturn(43L);
-               Mockito.doAnswer(i -> {
-                       
Mockito.when(coordinator.peek()).thenReturn(coordination1);
-                       return null;
-               }).when(coordination2).end();
-               Mockito.doAnswer(i -> {
-                       
Mockito.when(coordinator.peek()).thenReturn(coordination1);
-                       return null;
-               }).when(coordination2).fail(Mockito.any(Throwable.class));
+               txControl = new TransactionControlImpl();
        }
 
        @Test

Modified: 
aries/trunk/tx-control/tx-control-service-xa/src/main/java/org/apache/aries/tx/control/service/xa/impl/Activator.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-xa/src/main/java/org/apache/aries/tx/control/service/xa/impl/Activator.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-service-xa/src/main/java/org/apache/aries/tx/control/service/xa/impl/Activator.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-service-xa/src/main/java/org/apache/aries/tx/control/service/xa/impl/Activator.java
 Wed Apr 20 23:09:10 2016
@@ -7,7 +7,6 @@ import javax.transaction.xa.XAException;
 
 import org.apache.aries.tx.control.service.common.activator.AbstractActivator;
 import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
-import org.osgi.service.coordinator.Coordinator;
 import org.osgi.service.transaction.control.TransactionControl;
 
 public class Activator extends AbstractActivator {
@@ -23,8 +22,8 @@ public class Activator extends AbstractA
        }
        
        @Override
-       protected TransactionControl getTransactionControl(Coordinator c) {
-               return new TransactionControlImpl(transactionManager, c);
+       protected TransactionControl getTransactionControl() {
+               return new TransactionControlImpl(transactionManager);
        }
        
        @Override

Modified: 
aries/trunk/tx-control/tx-control-service-xa/src/main/java/org/apache/aries/tx/control/service/xa/impl/TransactionContextImpl.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-xa/src/main/java/org/apache/aries/tx/control/service/xa/impl/TransactionContextImpl.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-service-xa/src/main/java/org/apache/aries/tx/control/service/xa/impl/TransactionContextImpl.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-service-xa/src/main/java/org/apache/aries/tx/control/service/xa/impl/TransactionContextImpl.java
 Wed Apr 20 23:09:10 2016
@@ -29,7 +29,6 @@ import javax.transaction.xa.Xid;
 
 import 
org.apache.aries.tx.control.service.common.impl.AbstractTransactionContextImpl;
 import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
-import org.osgi.service.coordinator.Coordination;
 import org.osgi.service.transaction.control.LocalResource;
 import org.osgi.service.transaction.control.TransactionContext;
 import org.osgi.service.transaction.control.TransactionException;
@@ -51,9 +50,8 @@ public class TransactionContextImpl exte
 
        private final boolean readOnly;
 
-       public TransactionContextImpl(GeronimoTransactionManager 
transactionManager, Coordination coordination, 
+       public TransactionContextImpl(GeronimoTransactionManager 
transactionManager, 
                        boolean readOnly) {
-               super(coordination);
                this.transactionManager = transactionManager;
                this.readOnly = readOnly;
                Transaction tmp = null;

Modified: 
aries/trunk/tx-control/tx-control-service-xa/src/main/java/org/apache/aries/tx/control/service/xa/impl/TransactionControlImpl.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-xa/src/main/java/org/apache/aries/tx/control/service/xa/impl/TransactionControlImpl.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-service-xa/src/main/java/org/apache/aries/tx/control/service/xa/impl/TransactionControlImpl.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-service-xa/src/main/java/org/apache/aries/tx/control/service/xa/impl/TransactionControlImpl.java
 Wed Apr 20 23:09:10 2016
@@ -3,21 +3,18 @@ package org.apache.aries.tx.control.serv
 import 
org.apache.aries.tx.control.service.common.impl.AbstractTransactionContextImpl;
 import 
org.apache.aries.tx.control.service.common.impl.AbstractTransactionControlImpl;
 import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
-import org.osgi.service.coordinator.Coordination;
-import org.osgi.service.coordinator.Coordinator;
 
 public class TransactionControlImpl extends AbstractTransactionControlImpl {
        
        GeronimoTransactionManager transactionManager;
 
-       public TransactionControlImpl(GeronimoTransactionManager tm, 
Coordinator c) {
-               super(c);
+       public TransactionControlImpl(GeronimoTransactionManager tm) {
                this.transactionManager = tm;
        }
 
        @Override
-       protected AbstractTransactionContextImpl startTransaction(Coordination 
currentCoord, boolean readOnly) {
-               return new TransactionContextImpl(transactionManager, 
currentCoord, readOnly);
+       protected AbstractTransactionContextImpl startTransaction(boolean 
readOnly) {
+               return new TransactionContextImpl(transactionManager, readOnly);
        }
        
 }

Modified: 
aries/trunk/tx-control/tx-control-service-xa/src/test/java/org/apache/aries/tx/control/service/xa/impl/TransactionContextTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-xa/src/test/java/org/apache/aries/tx/control/service/xa/impl/TransactionContextTest.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-service-xa/src/test/java/org/apache/aries/tx/control/service/xa/impl/TransactionContextTest.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-service-xa/src/test/java/org/apache/aries/tx/control/service/xa/impl/TransactionContextTest.java
 Wed Apr 20 23:09:10 2016
@@ -13,8 +13,6 @@ import static org.osgi.service.transacti
 import static 
org.osgi.service.transaction.control.TransactionStatus.ROLLED_BACK;
 import static 
org.osgi.service.transaction.control.TransactionStatus.ROLLING_BACK;
 
-import java.util.HashMap;
-import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.transaction.xa.XAException;
@@ -22,7 +20,6 @@ import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
 
 import 
org.apache.aries.tx.control.service.common.impl.AbstractTransactionContextImpl;
-import org.apache.aries.tx.control.service.xa.impl.TransactionContextImpl;
 import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
 import org.junit.Before;
 import org.junit.Test;
@@ -32,8 +29,6 @@ import org.mockito.InOrder;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.runners.MockitoJUnitRunner;
-import org.osgi.service.coordinator.Coordination;
-import org.osgi.service.coordinator.Participant;
 import org.osgi.service.transaction.control.LocalResource;
 import org.osgi.service.transaction.control.TransactionException;
 
@@ -41,21 +36,15 @@ import org.osgi.service.transaction.cont
 public class TransactionContextTest {
 
        @Mock
-       Coordination coordination;
-       @Mock
        XAResource xaResource;
        @Mock
        LocalResource localResource;
        
-       Map<Class<?>, Object> variables;
-       
        AbstractTransactionContextImpl ctx;
        
        @Before
        public void setUp() throws XAException {
-               ctx = new TransactionContextImpl(new 
GeronimoTransactionManager(), coordination, false);
-               variables = new HashMap<>();
-               Mockito.when(coordination.getVariables()).thenReturn(variables);
+               ctx = new TransactionContextImpl(new 
GeronimoTransactionManager(), false);
        }
        
        @Test
@@ -76,15 +65,13 @@ public class TransactionContextTest {
 
        @Test
        public void testisReadOnlyTrue() throws XAException {
-               ctx = new TransactionContextImpl(new 
GeronimoTransactionManager(), coordination, true);
+               ctx = new TransactionContextImpl(new 
GeronimoTransactionManager(), true);
                assertTrue(ctx.isReadOnly());
        }
 
 
        @Test
        public void testTransactionKey() {
-               Mockito.when(coordination.getId()).thenReturn(42L);
-               
                assertNotNull(ctx.getTransactionKey());
        }
        
@@ -153,10 +140,7 @@ public class TransactionContextTest {
                assertEquals(0, value.getAndSet(1));
                
                
-               ArgumentCaptor<Participant> captor = 
ArgumentCaptor.forClass(Participant.class);
-               Mockito.verify(coordination).addParticipant(captor.capture());
-               
-               captor.getValue().failed(coordination);
+               ctx.setRollbackOnly();
                
                ctx.finish();
 
@@ -192,10 +176,7 @@ public class TransactionContextTest {
                
                assertEquals(0, value.getAndSet(1));
                
-               ArgumentCaptor<Participant> captor = 
ArgumentCaptor.forClass(Participant.class);
-               Mockito.verify(coordination).addParticipant(captor.capture());
-               
-               captor.getValue().failed(coordination);
+               ctx.setRollbackOnly();
                
                ctx.finish();
                
@@ -240,14 +221,6 @@ public class TransactionContextTest {
                assertEquals(5, value.get());
        }
 
-       private Participant getParticipant() {
-               ArgumentCaptor<Participant> captor = 
ArgumentCaptor.forClass(Participant.class);
-               Mockito.verify(coordination).addParticipant(captor.capture());
-               
-               Participant participant = captor.getValue();
-               return participant;
-       }
-       
        @Test(expected=IllegalStateException.class)
        public void testPreCompletionAfterEnd() throws Exception {
                
@@ -257,16 +230,6 @@ public class TransactionContextTest {
        }
 
        @Test(expected=IllegalStateException.class)
-       public void testPreCompletionAfterFail() throws Exception {
-               
-               getParticipant().failed(coordination);
-               
-               ctx.finish();
-               
-               ctx.preCompletion(() -> {});
-       }
-
-       @Test(expected=IllegalStateException.class)
        public void testPostCompletionAfterEnd() throws Exception {
                
                ctx.finish();
@@ -274,16 +237,6 @@ public class TransactionContextTest {
                ctx.postCompletion(x -> {});
        }
 
-       @Test(expected=IllegalStateException.class)
-       public void testPostCompletionAfterFail() throws Exception {
-               
-               getParticipant().failed(coordination);
-               
-               ctx.finish();
-               
-               ctx.postCompletion(x -> {});
-       }
-
        @Test
        public void testLocalResource() throws Exception {
                ctx.registerLocalResource(localResource);
@@ -299,22 +252,6 @@ public class TransactionContextTest {
        }
        
        @Test
-       public void testLocalResourceEarlyEnd() throws Exception {
-               ctx.registerLocalResource(localResource);
-               
-               Mockito.doAnswer(i -> {
-                       assertEquals(ROLLING_BACK, ctx.getTransactionStatus());
-                       return null;
-               }).when(localResource).rollback();
-               
-               getParticipant().ended(coordination);
-               
-               ctx.finish();
-               
-               Mockito.verify(localResource).rollback();
-       }
-
-       @Test
        public void testLocalResourceRollbackOnly() throws Exception {
                ctx.registerLocalResource(localResource);
                ctx.setRollbackOnly();
@@ -330,22 +267,6 @@ public class TransactionContextTest {
        }
 
        @Test
-       public void testLocalResourceFail() throws Exception {
-               ctx.registerLocalResource(localResource);
-               
-               Mockito.doAnswer(i -> {
-                       assertEquals(ROLLING_BACK, ctx.getTransactionStatus());
-                       return null;
-               }).when(localResource).rollback();
-               
-               getParticipant().failed(coordination);
-               
-               ctx.finish();
-               
-               Mockito.verify(localResource).rollback();
-       }
-       
-       @Test
        public void testLocalResourcePreCommitException() throws Exception {
                ctx.registerLocalResource(localResource);
                
@@ -426,31 +347,6 @@ public class TransactionContextTest {
                
                Mockito.verifyNoMoreInteractions(xaResource);
        }
-       
-       @Test
-       public void testXAResourceEarlyEnd() throws Exception {
-               ctx.registerXAResource(xaResource);
-               
-               Mockito.doAnswer(i -> {
-                       assertEquals(ROLLING_BACK, ctx.getTransactionStatus());
-                       return null;
-               }).when(xaResource).rollback(Mockito.any(Xid.class));
-               
-               getParticipant().ended(coordination);
-               
-               ctx.finish();
-               
-               ArgumentCaptor<Xid> captor = ArgumentCaptor.forClass(Xid.class);
-               
-               InOrder inOrder = Mockito.inOrder(xaResource);
-               
-               inOrder.verify(xaResource).start(captor.capture(), 
Mockito.eq(XAResource.TMNOFLAGS));
-               
inOrder.verify(xaResource).setTransactionTimeout(Mockito.anyInt());
-               inOrder.verify(xaResource).end(Mockito.eq(captor.getValue()), 
Mockito.eq(XAResource.TMFAIL));
-               
inOrder.verify(xaResource).rollback(Mockito.eq(captor.getValue()));
-               
-               Mockito.verifyNoMoreInteractions(xaResource);
-       }
 
        @Test
        public void testXAResourceRollbackOnly() throws Exception {
@@ -477,31 +373,6 @@ public class TransactionContextTest {
        }
 
        @Test
-       public void testXAResourceFail() throws Exception {
-               ctx.registerXAResource(xaResource);
-               
-               Mockito.doAnswer(i -> {
-                       assertEquals(ROLLING_BACK, ctx.getTransactionStatus());
-                       return null;
-               }).when(xaResource).rollback(Mockito.any(Xid.class));
-               
-               getParticipant().failed(coordination);
-               
-               ctx.finish();
-               
-               ArgumentCaptor<Xid> captor = ArgumentCaptor.forClass(Xid.class);
-               
-               InOrder inOrder = Mockito.inOrder(xaResource);
-               
-               inOrder.verify(xaResource).start(captor.capture(), 
Mockito.eq(XAResource.TMNOFLAGS));
-               
inOrder.verify(xaResource).setTransactionTimeout(Mockito.anyInt());
-               inOrder.verify(xaResource).end(Mockito.eq(captor.getValue()), 
Mockito.eq(XAResource.TMFAIL));
-               
inOrder.verify(xaResource).rollback(Mockito.eq(captor.getValue()));
-               
-               Mockito.verifyNoMoreInteractions(xaResource);
-       }
-       
-       @Test
        public void testXAResourcePreCommitException() throws Exception {
                ctx.registerXAResource(xaResource);
                

Modified: 
aries/trunk/tx-control/tx-control-service-xa/src/test/java/org/apache/aries/tx/control/service/xa/impl/TransactionControlRunningTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/tx-control/tx-control-service-xa/src/test/java/org/apache/aries/tx/control/service/xa/impl/TransactionControlRunningTest.java?rev=1740210&r1=1740209&r2=1740210&view=diff
==============================================================================
--- 
aries/trunk/tx-control/tx-control-service-xa/src/test/java/org/apache/aries/tx/control/service/xa/impl/TransactionControlRunningTest.java
 (original)
+++ 
aries/trunk/tx-control/tx-control-service-xa/src/test/java/org/apache/aries/tx/control/service/xa/impl/TransactionControlRunningTest.java
 Wed Apr 20 23:09:10 2016
@@ -9,24 +9,16 @@ import static org.osgi.service.transacti
 import static 
org.osgi.service.transaction.control.TransactionStatus.ROLLED_BACK;
 
 import java.net.BindException;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.concurrent.atomic.AtomicReference;
 
 import javax.transaction.xa.XAException;
 
-import org.apache.aries.tx.control.service.xa.impl.TransactionControlImpl;
 import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.mockito.runners.MockitoJUnitRunner;
-import org.osgi.service.coordinator.Coordination;
-import org.osgi.service.coordinator.Coordinator;
-import org.osgi.service.coordinator.Participant;
 import org.osgi.service.transaction.control.LocalResource;
 import org.osgi.service.transaction.control.ResourceProvider;
 import org.osgi.service.transaction.control.ScopedWorkException;
@@ -36,89 +28,15 @@ import org.osgi.service.transaction.cont
 public class TransactionControlRunningTest {
 
        @Mock
-       Coordinator coordinator;
-       @Mock
-       Coordination coordination1;
-       @Mock
-       Coordination coordination2;
-
-       @Mock
        ResourceProvider<Object> testProvider;
        @Mock
        LocalResource testResource;
 
        TransactionControlImpl txControl;
 
-       Map<Class<?>, Object> variables1;
-       Map<Class<?>, Object> variables2;
-
        @Before
        public void setUp() throws XAException {
-               variables1 = new HashMap<>();
-               variables2 = new HashMap<>();
-
-               setupCoordinations();
-
-               txControl = new TransactionControlImpl(new 
GeronimoTransactionManager(), coordinator);
-       }
-
-       /**
-        * Allow up to two Coordinations to be happening
-        */
-       private void setupCoordinations() {
-               Mockito.when(coordinator.begin(Mockito.anyString(), 
Mockito.anyLong())).then(i -> {
-                       
Mockito.when(coordinator.peek()).thenReturn(coordination1);
-                       return coordination1;
-               }).then(i -> {
-                       
Mockito.when(coordinator.peek()).thenReturn(coordination2);
-                       return coordination2;
-               }).thenThrow(new IllegalStateException("Only two coordinations 
at a time in the test"));
-
-               
Mockito.when(coordination1.getVariables()).thenReturn(variables1);
-               Mockito.when(coordination1.getId()).thenReturn(42L);
-               Mockito.doAnswer(i -> {
-                       Mockito.when(coordinator.peek()).thenReturn(null);
-                       ArgumentCaptor<Participant> captor = 
ArgumentCaptor.forClass(Participant.class);
-                       Mockito.verify(coordination1, 
Mockito.atLeast(1)).addParticipant(captor.capture());
-                       
-                       for(Participant p : captor.getAllValues()) {
-                               p.ended(coordination1);
-                       }
-                       return null;
-               }).when(coordination1).end();
-               Mockito.doAnswer(i -> {
-                       Mockito.when(coordinator.peek()).thenReturn(null);
-                       ArgumentCaptor<Participant> captor = 
ArgumentCaptor.forClass(Participant.class);
-                       Mockito.verify(coordination1, 
Mockito.atLeast(1)).addParticipant(captor.capture());
-                       
-                       for(Participant p : captor.getAllValues()) {
-                               p.failed(coordination1);
-                       }
-                       return null;
-               }).when(coordination1).fail(Mockito.any(Throwable.class));
-
-               
Mockito.when(coordination2.getVariables()).thenReturn(variables2);
-               Mockito.when(coordination2.getId()).thenReturn(43L);
-               Mockito.doAnswer(i -> {
-                       
Mockito.when(coordinator.peek()).thenReturn(coordination1);
-                       ArgumentCaptor<Participant> captor = 
ArgumentCaptor.forClass(Participant.class);
-                       Mockito.verify(coordination2, 
Mockito.atLeast(1)).addParticipant(captor.capture());
-                       
-                       for(Participant p : captor.getAllValues()) {
-                               p.ended(coordination2);
-                       }
-                       return null;
-               }).when(coordination2).end();
-               Mockito.doAnswer(i -> {
-                       
Mockito.when(coordinator.peek()).thenReturn(coordination1);
-                       ArgumentCaptor<Participant> captor = 
ArgumentCaptor.forClass(Participant.class);
-                       Mockito.verify(coordination2, 
Mockito.atLeast(1)).addParticipant(captor.capture());
-                       
-                       for(Participant p : captor.getAllValues()) {
-                               p.failed(coordination2);
-                       }
-                       return null;
-               }).when(coordination2).fail(Mockito.any(Throwable.class));
+               txControl = new TransactionControlImpl(new 
GeronimoTransactionManager());
        }
 
        @Test


Reply via email to