From 379b0c41c2876a676e28ab6ef8f22bb4d8872123 Mon Sep 17 00:00:00 2001 From: Dave Ward Date: Mon, 5 Nov 2012 18:44:21 +0000 Subject: [PATCH] ALF-13194: Fix failing unit test + restore ability for web scripts to work on a read-only repository - Authentication work must settle for read only transaction if system is read only - No need for RemoteAlfrescoTicketServiceTest to start its own read-only transaction! git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@43407 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../web-scripts-application-context.xml | 2 +- .../RemoteAlfrescoTicketServiceTest.java | 24 ++++++------------ .../repo/web/scripts/RepositoryContainer.java | 25 ++++++++++--------- 3 files changed, 21 insertions(+), 30 deletions(-) diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml index aa6a3810b3..b88af63776 100644 --- a/config/alfresco/web-scripts-application-context.xml +++ b/config/alfresco/web-scripts-application-context.xml @@ -211,7 +211,7 @@ - + diff --git a/source/java/org/alfresco/repo/remoteticket/RemoteAlfrescoTicketServiceTest.java b/source/java/org/alfresco/repo/remoteticket/RemoteAlfrescoTicketServiceTest.java index 7d2cfadb99..e8a7ff5ac1 100644 --- a/source/java/org/alfresco/repo/remoteticket/RemoteAlfrescoTicketServiceTest.java +++ b/source/java/org/alfresco/repo/remoteticket/RemoteAlfrescoTicketServiceTest.java @@ -24,8 +24,6 @@ import org.alfresco.repo.remoteconnector.LocalWebScriptConnectorServiceImpl; import org.alfresco.repo.remotecredentials.PasswordCredentialsInfoImpl; import org.alfresco.repo.security.authentication.AuthenticationException; import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.transaction.RetryingTransactionHelper; -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.repo.web.scripts.BaseWebScriptTest; import org.alfresco.service.cmr.remotecredentials.BaseCredentialsInfo; import org.alfresco.service.cmr.remotecredentials.RemoteCredentialsService; @@ -53,7 +51,6 @@ public class RemoteAlfrescoTicketServiceTest extends BaseWebScriptTest private static final String INVALID_REMOTE_SYSTEM_ID = "testingInvalidRemoteSystem"; private MutableAuthenticationService authenticationService; - private RetryingTransactionHelper retryingTransactionHelper; private PersonService personService; private RemoteAlfrescoTicketService remoteAlfrescoTicketService; @@ -72,7 +69,6 @@ public class RemoteAlfrescoTicketServiceTest extends BaseWebScriptTest { super.setUp(); - this.retryingTransactionHelper = (RetryingTransactionHelper)getServer().getApplicationContext().getBean("retryingTransactionHelper"); this.authenticationService = (MutableAuthenticationService)getServer().getApplicationContext().getBean("AuthenticationService"); this.personService = (PersonService)getServer().getApplicationContext().getBean("PersonService"); @@ -386,19 +382,13 @@ public class RemoteAlfrescoTicketServiceTest extends BaseWebScriptTest creds.setRemotePassword("INVALID"); remoteCredentialsService.updateCredentials(creds); - retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback() { - public Void execute() - { - try - { - remoteAlfrescoTicketService.refetchAlfrescoTicket(TEST_REMOTE_SYSTEM_ID); - fail("Shouldn't be able to refetch with wrong details"); - } - catch(AuthenticationException e) {} - return null; - } - }, true, true); - + try + { + remoteAlfrescoTicketService.refetchAlfrescoTicket(TEST_REMOTE_SYSTEM_ID); + fail("Shouldn't be able to refetch with wrong details"); + } + catch(AuthenticationException e) {} + // Check it was still marked as invalid, despite a read only transaction creds = (PasswordCredentialsInfoImpl)remoteCredentialsService.getPersonCredentials(TEST_REMOTE_SYSTEM_ID); assertEquals(false, creds.getLastAuthenticationSucceeded()); diff --git a/source/java/org/alfresco/repo/web/scripts/RepositoryContainer.java b/source/java/org/alfresco/repo/web/scripts/RepositoryContainer.java index 8ff1b00366..ccf21f8128 100644 --- a/source/java/org/alfresco/repo/web/scripts/RepositoryContainer.java +++ b/source/java/org/alfresco/repo/web/scripts/RepositoryContainer.java @@ -52,6 +52,7 @@ import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.TemplateService; import org.alfresco.service.cmr.security.AuthorityService; import org.alfresco.service.descriptor.DescriptorService; +import org.alfresco.service.transaction.TransactionService; import org.alfresco.util.TempFileProvider; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -96,7 +97,7 @@ public class RepositoryContainer extends AbstractRuntimeContainer implements Ten /** Component Dependencies */ private Repository repository; private RepositoryImageResolver imageResolver; - private RetryingTransactionHelper retryingTransactionHelper; + private TransactionService transactionService; private RetryingTransactionHelper fallbackTransactionHelper; private AuthorityService authorityService; private DescriptorService descriptorService; @@ -137,15 +138,15 @@ public class RepositoryContainer extends AbstractRuntimeContainer implements Ten { this.imageResolver = imageResolver; } - - /** - * @param retryingTransactionHelper - */ - public void setTransactionHelper(RetryingTransactionHelper retryingTransactionHelper) - { - this.retryingTransactionHelper = retryingTransactionHelper; - } + /** + * @param transactionService + */ + public void setTransactionService(TransactionService transactionService) + { + this.transactionService = transactionService; + } + /** * @param fallbackTransactionHelper an unlimited transaction helper used to generate error responses */ @@ -338,7 +339,7 @@ public class RepositoryContainer extends AbstractRuntimeContainer implements Ten } }; - if (retryingTransactionHelper.doInTransaction(authWork)) + if (transactionService.getRetryingTransactionHelper().doInTransaction(authWork, transactionService.isReadOnly())) { // Execute Web Script if authentication passed // The Web Script has its own txn management with potential runAs() user @@ -488,7 +489,7 @@ public class RepositoryContainer extends AbstractRuntimeContainer implements Ten try { - retryingTransactionHelper.doInTransaction(work, readonly, requiresNew); + transactionService.getRetryingTransactionHelper().doInTransaction(work, readonly, requiresNew); } catch (TooBusyException e) { @@ -648,7 +649,7 @@ public class RepositoryContainer extends AbstractRuntimeContainer implements Ten @Override public void reset() { - retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback() + transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback() { public Object execute() throws Exception {