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
This commit is contained in:
Dave Ward
2012-11-05 18:44:21 +00:00
parent d918bad163
commit 379b0c41c2
3 changed files with 21 additions and 30 deletions

View File

@@ -211,7 +211,7 @@
</bean> </bean>
</property> </property>
<!-- Use the time-limited transaction helper to keep request times to an acceptable duration --> <!-- Use the time-limited transaction helper to keep request times to an acceptable duration -->
<property name="transactionHelper" ref="web.retryingTransactionHelper" /> <property name="transactionService" ref="transactionService" />
<!-- The transaction helper used to generate error responses must be unlimited --> <!-- The transaction helper used to generate error responses must be unlimited -->
<property name="fallbackTransactionHelper" ref="retryingTransactionHelper" /> <property name="fallbackTransactionHelper" ref="retryingTransactionHelper" />
<property name="authorityService" ref="AuthorityService" /> <property name="authorityService" ref="AuthorityService" />

View File

@@ -24,8 +24,6 @@ import org.alfresco.repo.remoteconnector.LocalWebScriptConnectorServiceImpl;
import org.alfresco.repo.remotecredentials.PasswordCredentialsInfoImpl; import org.alfresco.repo.remotecredentials.PasswordCredentialsInfoImpl;
import org.alfresco.repo.security.authentication.AuthenticationException; import org.alfresco.repo.security.authentication.AuthenticationException;
import org.alfresco.repo.security.authentication.AuthenticationUtil; 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.repo.web.scripts.BaseWebScriptTest;
import org.alfresco.service.cmr.remotecredentials.BaseCredentialsInfo; import org.alfresco.service.cmr.remotecredentials.BaseCredentialsInfo;
import org.alfresco.service.cmr.remotecredentials.RemoteCredentialsService; 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 static final String INVALID_REMOTE_SYSTEM_ID = "testingInvalidRemoteSystem";
private MutableAuthenticationService authenticationService; private MutableAuthenticationService authenticationService;
private RetryingTransactionHelper retryingTransactionHelper;
private PersonService personService; private PersonService personService;
private RemoteAlfrescoTicketService remoteAlfrescoTicketService; private RemoteAlfrescoTicketService remoteAlfrescoTicketService;
@@ -72,7 +69,6 @@ public class RemoteAlfrescoTicketServiceTest extends BaseWebScriptTest
{ {
super.setUp(); super.setUp();
this.retryingTransactionHelper = (RetryingTransactionHelper)getServer().getApplicationContext().getBean("retryingTransactionHelper");
this.authenticationService = (MutableAuthenticationService)getServer().getApplicationContext().getBean("AuthenticationService"); this.authenticationService = (MutableAuthenticationService)getServer().getApplicationContext().getBean("AuthenticationService");
this.personService = (PersonService)getServer().getApplicationContext().getBean("PersonService"); this.personService = (PersonService)getServer().getApplicationContext().getBean("PersonService");
@@ -386,18 +382,12 @@ public class RemoteAlfrescoTicketServiceTest extends BaseWebScriptTest
creds.setRemotePassword("INVALID"); creds.setRemotePassword("INVALID");
remoteCredentialsService.updateCredentials(creds); remoteCredentialsService.updateCredentials(creds);
retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback<Void>() {
public Void execute()
{
try try
{ {
remoteAlfrescoTicketService.refetchAlfrescoTicket(TEST_REMOTE_SYSTEM_ID); remoteAlfrescoTicketService.refetchAlfrescoTicket(TEST_REMOTE_SYSTEM_ID);
fail("Shouldn't be able to refetch with wrong details"); fail("Shouldn't be able to refetch with wrong details");
} }
catch(AuthenticationException e) {} catch(AuthenticationException e) {}
return null;
}
}, true, true);
// Check it was still marked as invalid, despite a read only transaction // Check it was still marked as invalid, despite a read only transaction
creds = (PasswordCredentialsInfoImpl)remoteCredentialsService.getPersonCredentials(TEST_REMOTE_SYSTEM_ID); creds = (PasswordCredentialsInfoImpl)remoteCredentialsService.getPersonCredentials(TEST_REMOTE_SYSTEM_ID);

View File

@@ -52,6 +52,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.TemplateService; import org.alfresco.service.cmr.repository.TemplateService;
import org.alfresco.service.cmr.security.AuthorityService; import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.descriptor.DescriptorService; import org.alfresco.service.descriptor.DescriptorService;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.util.TempFileProvider; import org.alfresco.util.TempFileProvider;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
@@ -96,7 +97,7 @@ public class RepositoryContainer extends AbstractRuntimeContainer implements Ten
/** Component Dependencies */ /** Component Dependencies */
private Repository repository; private Repository repository;
private RepositoryImageResolver imageResolver; private RepositoryImageResolver imageResolver;
private RetryingTransactionHelper retryingTransactionHelper; private TransactionService transactionService;
private RetryingTransactionHelper fallbackTransactionHelper; private RetryingTransactionHelper fallbackTransactionHelper;
private AuthorityService authorityService; private AuthorityService authorityService;
private DescriptorService descriptorService; private DescriptorService descriptorService;
@@ -139,11 +140,11 @@ public class RepositoryContainer extends AbstractRuntimeContainer implements Ten
} }
/** /**
* @param retryingTransactionHelper * @param transactionService
*/ */
public void setTransactionHelper(RetryingTransactionHelper retryingTransactionHelper) public void setTransactionService(TransactionService transactionService)
{ {
this.retryingTransactionHelper = retryingTransactionHelper; this.transactionService = transactionService;
} }
/** /**
@@ -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 // Execute Web Script if authentication passed
// The Web Script has its own txn management with potential runAs() user // The Web Script has its own txn management with potential runAs() user
@@ -488,7 +489,7 @@ public class RepositoryContainer extends AbstractRuntimeContainer implements Ten
try try
{ {
retryingTransactionHelper.doInTransaction(work, readonly, requiresNew); transactionService.getRetryingTransactionHelper().doInTransaction(work, readonly, requiresNew);
} }
catch (TooBusyException e) catch (TooBusyException e)
{ {
@@ -648,7 +649,7 @@ public class RepositoryContainer extends AbstractRuntimeContainer implements Ten
@Override @Override
public void reset() public void reset()
{ {
retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback<Object>() transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback<Object>()
{ {
public Object execute() throws Exception public Object execute() throws Exception
{ {