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