mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged V2.9 to HEAD
10586: Merged V2.2 to V2.9 9883: Fix for https://issues.alfresco.com/jira/browse/ETWOTWO-561 9893: Gave some more time to wait for the threads to finish (QNameDAOTest) 9955: Added trace logging of calls that possibly cause failures during session flushing 9956: Part fix ETWOTWO570: RetryingTransactionAdvice needs to use RetryingTransactionHelper 9958: Fixed ETWOTWO-570: AVM transaction interceptors fail if methods are incorrectly declared 9973: More missing transaction declarations for AttributeService 9977: Fixed unit test to rollback properly after expected txn failure 9978: Fix for ETWOTWO-440: Error : 500: Failed to execute method NodeInfoBean.sendNodeInfo 9986: LinkValidationService missing txn declaration for onBootstrap 10588: Merged V2.2 to V2.9 9898: Fixed handling of cm:name on root nodes 9900: Empty property sets are allowed 10589: Merged V2.2 to V2.9 9965: Fixed unit test to inject 'nodeService' and not 'NodeService'. 10311: getWebProjectUserRole - change log level from info to debug 10329: Fix missing and mis-spelt transaction declarations 10343: Fix for ETWOTWO-32 10346: Build Fix 10358: Fix for ETWOTWO-621 10362: Fix for ETWOTWO-518 10371: QNameDAO cache doesn't blow up if cache entry is invalid 10538: Fix for minor XSS issue identified in ETWOTWO-657 item 3 10678: Merged V2.2 to V2.9 10205: Fix for ETWOTWO-48: Cancelled import of war into a Web project and Web Project became unusable 10206: Fix for ETWOTWO-181: Deletion of checked out document git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@10710 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -37,6 +37,7 @@ import net.sf.ehcache.distribution.RemoteCacheException;
|
||||
import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.error.ExceptionStackUtil;
|
||||
import org.alfresco.repo.security.permissions.AccessDeniedException;
|
||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState;
|
||||
import org.alfresco.service.transaction.TransactionService;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
@@ -255,7 +256,6 @@ public class RetryingTransactionHelper
|
||||
for (int count = 0; maxRetries < 0 || count < maxRetries; ++count)
|
||||
{
|
||||
UserTransaction txn = null;
|
||||
boolean isNew = false;
|
||||
try
|
||||
{
|
||||
if (requiresNew)
|
||||
@@ -264,20 +264,36 @@ public class RetryingTransactionHelper
|
||||
}
|
||||
else
|
||||
{
|
||||
txn = txnService.getUserTransaction(readOnly);
|
||||
TxnReadState readState = AlfrescoTransactionSupport.getTransactionReadState();
|
||||
switch (readState)
|
||||
{
|
||||
case TXN_READ_ONLY:
|
||||
if (!readOnly)
|
||||
{
|
||||
// The current transaction is read-only, but a writable transaction is requested
|
||||
throw new AlfrescoRuntimeException("Read-Write transaction started within read-only transaction");
|
||||
}
|
||||
// We are in a read-only transaction and this is what we require so continue with it.
|
||||
break;
|
||||
case TXN_READ_WRITE:
|
||||
// We are in a read-write transaction. It cannot be downgraded so just continue with it.
|
||||
break;
|
||||
case TXN_NONE:
|
||||
// There is no current transaction so we need a new one.
|
||||
txn = txnService.getUserTransaction(readOnly);
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("Unknown transaction state: " + readState);
|
||||
}
|
||||
}
|
||||
// Only start a transaction if required. This check isn't necessary as the transactional
|
||||
// behaviour ensures that the appropriate propogation is performed. It is a useful and
|
||||
// simple optimization.
|
||||
isNew = requiresNew || txn.getStatus() == Status.STATUS_NO_TRANSACTION;
|
||||
if (isNew)
|
||||
if (txn != null)
|
||||
{
|
||||
txn.begin();
|
||||
}
|
||||
// Do the work.
|
||||
R result = cb.execute();
|
||||
// Only commit if we 'own' the transaction.
|
||||
if (isNew)
|
||||
if (txn != null)
|
||||
{
|
||||
if (txn.getStatus() == Status.STATUS_MARKED_ROLLBACK)
|
||||
{
|
||||
@@ -308,7 +324,7 @@ public class RetryingTransactionHelper
|
||||
catch (Throwable e)
|
||||
{
|
||||
// Somebody else 'owns' the transaction, so just rethrow.
|
||||
if (!isNew)
|
||||
if (txn == null)
|
||||
{
|
||||
if (e instanceof RuntimeException)
|
||||
{
|
||||
|
Reference in New Issue
Block a user