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