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
This commit is contained in:
Alan Davis
2014-02-12 00:58:28 +00:00
parent 9043dd7a30
commit d156901f44
5 changed files with 46 additions and 25 deletions

View File

@@ -526,7 +526,8 @@
<property name="lockableAspectInterceptor" ref="lockableAspectInterceptor" /> <property name="lockableAspectInterceptor" ref="lockableAspectInterceptor" />
<property name="authenticationService" ref="authenticationService" /> <property name="authenticationService" ref="authenticationService" />
<property name="searchService" ref="admSearchService" /> <property name="searchService" ref="admSearchService" />
<property name="behaviourFilter" ref="policyBehaviourFilter" /> <property name="behaviourFilter" ref="policyBehaviourFilter" />
<property name="nodeIndexer" ref="nodeIndexer"/>
</bean> </bean>
<!-- --> <!-- -->

View File

@@ -59,7 +59,6 @@
<property name="interceptorNames"> <property name="interceptorNames">
<list> <list>
<value>nodeRefPropertyInterceptor</value> <value>nodeRefPropertyInterceptor</value>
<value>lockableAspectInterceptor</value>
<value>mlPropertyInterceptor</value> <value>mlPropertyInterceptor</value>
<value>tagscopeSummaryPropertyInterceptor</value> <value>tagscopeSummaryPropertyInterceptor</value>
</list> </list>
@@ -93,11 +92,12 @@
</property> </property>
<property name="interceptorNames"> <property name="interceptorNames">
<list> <list>
<value>lockableAspectInterceptor</value>
<value>multiTNodeServiceInterceptor</value> <value>multiTNodeServiceInterceptor</value>
</list> </list>
</property> </property>
</bean> </bean>
<!-- Map stores to archive stores --> <!-- Map stores to archive stores -->
<bean id="storeArchiveMap" class="org.alfresco.repo.node.StoreArchiveMap"> <bean id="storeArchiveMap" class="org.alfresco.repo.node.StoreArchiveMap">
<property name="archiveMap"> <property name="archiveMap">

View File

@@ -58,22 +58,7 @@
<bean id="permissionServiceImpl" class="org.alfresco.repo.security.permissions.impl.PermissionServiceImpl" init-method="init"> <bean id="permissionServiceImpl" class="org.alfresco.repo.security.permissions.impl.PermissionServiceImpl" init-method="init">
<property name="nodeService"> <property name="nodeService">
<!-- ALF-19732: added lockableAspectInterceptor --> <ref bean="mtAwareNodeService"/>
<bean class="org.springframework.aop.framework.ProxyFactoryBean" >
<property name="targetName">
<value>mtAwareNodeService</value>
</property>
<property name="proxyInterfaces">
<list>
<value>org.alfresco.service.cmr.repository.NodeService</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>lockableAspectInterceptor</value>
</list>
</property>
</bean>
</property> </property>
<property name="tenantService"> <property name="tenantService">
<ref bean="tenantService"/> <ref bean="tenantService"/>

View File

@@ -27,7 +27,6 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.repo.copy.CopyBehaviourCallback; 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.LockStore;
import org.alfresco.repo.lock.mem.LockableAspectInterceptor; import org.alfresco.repo.lock.mem.LockableAspectInterceptor;
import org.alfresco.repo.node.NodeServicePolicies; import org.alfresco.repo.node.NodeServicePolicies;
import org.alfresco.repo.node.index.NodeIndexer;
import org.alfresco.repo.policy.BehaviourFilter; import org.alfresco.repo.policy.BehaviourFilter;
import org.alfresco.repo.policy.ClassPolicyDelegate; import org.alfresco.repo.policy.ClassPolicyDelegate;
import org.alfresco.repo.policy.JavaBehaviour; 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.security.authentication.AuthenticationUtil;
import org.alfresco.repo.tenant.TenantService; import org.alfresco.repo.tenant.TenantService;
import org.alfresco.repo.transaction.AlfrescoTransactionSupport; import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState;
import org.alfresco.repo.transaction.TransactionListener; import org.alfresco.repo.transaction.TransactionListener;
import org.alfresco.repo.transaction.TransactionalResourceHelper; import org.alfresco.repo.transaction.TransactionalResourceHelper;
import org.alfresco.repo.version.VersionServicePolicies; import org.alfresco.repo.version.VersionServicePolicies;
@@ -102,6 +101,8 @@ public class LockServiceImpl implements LockService,
/** Class policy delegate's */ /** Class policy delegate's */
private ClassPolicyDelegate<BeforeLock> beforeLock; private ClassPolicyDelegate<BeforeLock> beforeLock;
private NodeIndexer nodeIndexer;
public void setNodeService(NodeService nodeService) public void setNodeService(NodeService nodeService)
{ {
@@ -360,6 +361,8 @@ public class LockServiceImpl implements LockService,
// it to be reverted to this state on rollback. // it to be reverted to this state on rollback.
TransactionalResourceHelper.getMap(KEY_MODIFIED_NODES).put(nodeRef, currentLockInfo); TransactionalResourceHelper.getMap(KEY_MODIFIED_NODES).put(nodeRef, currentLockInfo);
AlfrescoTransactionSupport.bindListener(this); AlfrescoTransactionSupport.bindListener(this);
nodeIndexer.indexUpdateNode(nodeRef);
} }
else else
{ {
@@ -502,6 +505,7 @@ public class LockServiceImpl implements LockService,
{ {
// Remove the ephemeral lock. // Remove the ephemeral lock.
lockStore.set(nodeRef, LockState.createUnlocked(nodeRef)); lockStore.set(nodeRef, LockState.createUnlocked(nodeRef));
nodeIndexer.indexUpdateNode(nodeRef);
} }
else else
{ {
@@ -871,6 +875,11 @@ public class LockServiceImpl implements LockService,
return behaviourFilter; return behaviourFilter;
} }
public void setNodeIndexer(NodeIndexer nodeIndexer)
{
this.nodeIndexer = nodeIndexer;
}
@Override @Override
public void flush() public void flush()
{ {

View File

@@ -25,14 +25,14 @@ import java.util.Map;
import javax.transaction.NotSupportedException; import javax.transaction.NotSupportedException;
import javax.transaction.SystemException; import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.repo.lock.mem.Lifetime; import org.alfresco.repo.lock.mem.Lifetime;
import org.alfresco.repo.lock.mem.LockState; import org.alfresco.repo.lock.mem.LockState;
import org.alfresco.repo.lock.mem.LockStore; 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.security.authentication.AuthenticationComponent;
import org.alfresco.repo.transaction.TransactionUtil;
import org.alfresco.service.cmr.coci.CheckOutCheckInService; import org.alfresco.service.cmr.coci.CheckOutCheckInService;
import org.alfresco.service.cmr.lock.LockService; import org.alfresco.service.cmr.lock.LockService;
import org.alfresco.service.cmr.lock.LockStatus; 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.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef; 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.cmr.security.MutableAuthenticationService;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.test_category.BaseSpringTestsCategory; import org.alfresco.test_category.BaseSpringTestsCategory;
import org.alfresco.test_category.OwnJVMTestsCategory; import org.alfresco.test_category.OwnJVMTestsCategory;
import org.alfresco.util.BaseSpringTest; import org.alfresco.util.BaseSpringTest;
import org.alfresco.util.TestWithUserUtils; import org.alfresco.util.TestWithUserUtils;
import org.hibernate.engine.TransactionHelper; import org.junit.Test;
import org.junit.experimental.categories.Category; import org.junit.experimental.categories.Category;
/** /**
@@ -341,6 +341,32 @@ public class LockServiceImplTest extends BaseSpringTest
assertEquals(LockStatus.NO_LOCK, lockService.getLockStatus(noAspectNode)); 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 public void testLockRevertedOnRollback() throws NotSupportedException, SystemException
{ {
// Preconditions of test // Preconditions of test