in tx-control-services/tx-control-service-common/src/main/java/org/apache/aries/tx/control/service/common/impl/AbstractTransactionControlImpl.java [66:89]
public <T> T required(Callable<T> work)
throws TransactionException, TransactionRolledBackException {
checkValid();
boolean endTransaction = false;
AbstractTransactionContextImpl existingTran = existingTx.get();
AbstractTransactionContextImpl currentTran;
try {
if (existingTran == null || existingTran.getTransactionStatus() == NO_TRANSACTION) {
currentTran = startTransaction(readOnly);
endTransaction = true;
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;
}
return doWork(work, currentTran, endTransaction);
} finally {
existingTx.set(existingTran);
}
}