From d156901f4407f05cf811a2501cda2a50aa3766c1 Mon Sep 17 00:00:00 2001 From: Alan Davis Date: Wed, 12 Feb 2014 00:58:28 +0000 Subject: [PATCH] Merged HEAD-BUG-FIX (4.3/Cloud) to HEAD (4.3/Cloud) 59113: Merged V4.2-BUG-FIX (4.2.1) to HEAD-BUG-FIX (Cloud/4.3) 59084: MNT-10028: Editing online document is not displayed in "I'm Editing" (and similar) filters in Share. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@62093 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/core-services-context.xml | 3 +- config/alfresco/node-services-context.xml | 4 +-- .../public-services-security-context.xml | 17 +--------- .../alfresco/repo/lock/LockServiceImpl.java | 13 +++++-- .../repo/lock/LockServiceImplTest.java | 34 ++++++++++++++++--- 5 files changed, 46 insertions(+), 25 deletions(-) diff --git a/config/alfresco/core-services-context.xml b/config/alfresco/core-services-context.xml index c56ef498f7..a931a2fca2 100644 --- a/config/alfresco/core-services-context.xml +++ b/config/alfresco/core-services-context.xml @@ -526,7 +526,8 @@ - + + diff --git a/config/alfresco/node-services-context.xml b/config/alfresco/node-services-context.xml index 9c58460a93..c538c47165 100644 --- a/config/alfresco/node-services-context.xml +++ b/config/alfresco/node-services-context.xml @@ -59,7 +59,6 @@ nodeRefPropertyInterceptor - lockableAspectInterceptor mlPropertyInterceptor tagscopeSummaryPropertyInterceptor @@ -93,11 +92,12 @@ + lockableAspectInterceptor multiTNodeServiceInterceptor - + diff --git a/config/alfresco/public-services-security-context.xml b/config/alfresco/public-services-security-context.xml index 0d2db80f95..5c9b7597d1 100644 --- a/config/alfresco/public-services-security-context.xml +++ b/config/alfresco/public-services-security-context.xml @@ -58,22 +58,7 @@ - - - - mtAwareNodeService - - - - org.alfresco.service.cmr.repository.NodeService - - - - - lockableAspectInterceptor - - - + diff --git a/source/java/org/alfresco/repo/lock/LockServiceImpl.java b/source/java/org/alfresco/repo/lock/LockServiceImpl.java index 41f6a696fa..66094d8585 100644 --- a/source/java/org/alfresco/repo/lock/LockServiceImpl.java +++ b/source/java/org/alfresco/repo/lock/LockServiceImpl.java @@ -27,7 +27,6 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.TimeUnit; import org.alfresco.model.ContentModel; import org.alfresco.repo.copy.CopyBehaviourCallback; @@ -40,6 +39,7 @@ import org.alfresco.repo.lock.mem.LockState; import org.alfresco.repo.lock.mem.LockStore; import org.alfresco.repo.lock.mem.LockableAspectInterceptor; import org.alfresco.repo.node.NodeServicePolicies; +import org.alfresco.repo.node.index.NodeIndexer; import org.alfresco.repo.policy.BehaviourFilter; import org.alfresco.repo.policy.ClassPolicyDelegate; import org.alfresco.repo.policy.JavaBehaviour; @@ -48,7 +48,6 @@ import org.alfresco.repo.policy.PolicyScope; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.tenant.TenantService; import org.alfresco.repo.transaction.AlfrescoTransactionSupport; -import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState; import org.alfresco.repo.transaction.TransactionListener; import org.alfresco.repo.transaction.TransactionalResourceHelper; import org.alfresco.repo.version.VersionServicePolicies; @@ -102,6 +101,8 @@ public class LockServiceImpl implements LockService, /** Class policy delegate's */ private ClassPolicyDelegate beforeLock; + + private NodeIndexer nodeIndexer; public void setNodeService(NodeService nodeService) { @@ -360,6 +361,8 @@ public class LockServiceImpl implements LockService, // it to be reverted to this state on rollback. TransactionalResourceHelper.getMap(KEY_MODIFIED_NODES).put(nodeRef, currentLockInfo); AlfrescoTransactionSupport.bindListener(this); + + nodeIndexer.indexUpdateNode(nodeRef); } else { @@ -502,6 +505,7 @@ public class LockServiceImpl implements LockService, { // Remove the ephemeral lock. lockStore.set(nodeRef, LockState.createUnlocked(nodeRef)); + nodeIndexer.indexUpdateNode(nodeRef); } else { @@ -871,6 +875,11 @@ public class LockServiceImpl implements LockService, return behaviourFilter; } + public void setNodeIndexer(NodeIndexer nodeIndexer) + { + this.nodeIndexer = nodeIndexer; + } + @Override public void flush() { diff --git a/source/test-java/org/alfresco/repo/lock/LockServiceImplTest.java b/source/test-java/org/alfresco/repo/lock/LockServiceImplTest.java index e666711df5..cff32db3cc 100644 --- a/source/test-java/org/alfresco/repo/lock/LockServiceImplTest.java +++ b/source/test-java/org/alfresco/repo/lock/LockServiceImplTest.java @@ -25,14 +25,14 @@ import java.util.Map; import javax.transaction.NotSupportedException; import javax.transaction.SystemException; -import javax.transaction.UserTransaction; import org.alfresco.model.ContentModel; import org.alfresco.repo.lock.mem.Lifetime; import org.alfresco.repo.lock.mem.LockState; import org.alfresco.repo.lock.mem.LockStore; +import org.alfresco.repo.search.IndexerAndSearcher; +import org.alfresco.repo.search.SearcherComponent; import org.alfresco.repo.security.authentication.AuthenticationComponent; -import org.alfresco.repo.transaction.TransactionUtil; import org.alfresco.service.cmr.coci.CheckOutCheckInService; import org.alfresco.service.cmr.lock.LockService; import org.alfresco.service.cmr.lock.LockStatus; @@ -44,14 +44,14 @@ import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.cmr.search.ResultSet; import org.alfresco.service.cmr.security.MutableAuthenticationService; import org.alfresco.service.namespace.QName; -import org.alfresco.service.transaction.TransactionService; import org.alfresco.test_category.BaseSpringTestsCategory; import org.alfresco.test_category.OwnJVMTestsCategory; import org.alfresco.util.BaseSpringTest; import org.alfresco.util.TestWithUserUtils; -import org.hibernate.engine.TransactionHelper; +import org.junit.Test; import org.junit.experimental.categories.Category; /** @@ -341,6 +341,32 @@ public class LockServiceImplTest extends BaseSpringTest assertEquals(LockStatus.NO_LOCK, lockService.getLockStatus(noAspectNode)); } + @Test + public void testEphemeralLockIndexing() + { + TestWithUserUtils.authenticateUser(GOOD_USER_NAME, PWD, rootNodeRef, authenticationService); + + IndexerAndSearcher indexerAndSearcher = (IndexerAndSearcher) + applicationContext.getBean("indexerAndSearcherFactory"); + SearcherComponent searcher = new SearcherComponent(); + searcher.setIndexerAndSearcherFactory(indexerAndSearcher); + + // Create a lock (owned by the current user) + lockService.lock(noAspectNode, LockType.WRITE_LOCK, 86400, Lifetime.EPHEMERAL); + + // Query for the user's locks + final String query = String.format("+@cm\\:lockOwner:\"%s\" +@cm\\:lockType:\"WRITE_LOCK\"", GOOD_USER_NAME); + ResultSet rs = searcher.query(storeRef, "lucene", query); + assertTrue(rs.getNodeRefs().contains(noAspectNode)); + + // Unlock the node + lockService.unlock(noAspectNode); + + // Perform a new search, the index should reflect that it is not locked. + rs = searcher.query(storeRef, "lucene", query); + assertFalse(rs.getNodeRefs().contains(noAspectNode)); + } + public void testLockRevertedOnRollback() throws NotSupportedException, SystemException { // Preconditions of test