mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
Merged V2.1 to HEAD
6846: used ] instead of } in ${ldap.synchronisation.userIdAttributeName] 6856: Fixed 2 NPEs, one reported by MIT and one found by Jan (WCM-835) 6859: Truncate an existing file when uploading via FTP. WCM-836. 6869: Removed temporary files and folders from deploy-installer project 6870: Updated ignore property 6875: Fix for AWC-1605 6878: Fix for AWC-1587 6880: Fix for French language pack - locked_user message 6883: Fix for AWC-1565 6884: Relax trhe permissions required to get the parent links from a child node 6891: Fix for AR-1781 and AR-1782 (requires CHK-1451) 6892: Fixed AR-1777: Node status not updated for addition and removal of secondary associations (affects index tracking) 6893: Sample for replicating content store sample 6896: Added JVM shutdown check into inner loop to get faster breakout in the event of shutdown. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6899 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -73,7 +73,7 @@
|
||||
|
||||
-->
|
||||
<property name="userIdAttributeName">
|
||||
<value>${ldap.synchronisation.userIdAttributeName]</value>
|
||||
<value>${ldap.synchronisation.userIdAttributeName}</value>
|
||||
</property>
|
||||
|
||||
<!-- Services -->
|
||||
|
@@ -8,79 +8,33 @@
|
||||
beans contained here.
|
||||
-->
|
||||
|
||||
<bean id="backupContentStore"
|
||||
class="org.alfresco.repo.content.filestore.FileContentStore">
|
||||
<bean id="localDriveContentStore" class="org.alfresco.repo.content.filestore.FileContentStore">
|
||||
<constructor-arg>
|
||||
<value>${dir.contentstore}/../backups/alfresco</value>
|
||||
<value>/var/alfresco/content-store</value>
|
||||
</constructor-arg>
|
||||
</bean>
|
||||
|
||||
<bean id="contentStoreReplicator"
|
||||
class="org.alfresco.repo.content.replication.ContentStoreReplicator"
|
||||
depends-on="fileContentStore, backupContentStore" >
|
||||
<!-- content source -->
|
||||
<property name="sourceStore">
|
||||
<ref bean="fileContentStore" />
|
||||
</property>
|
||||
<!-- content target -->
|
||||
<property name="targetStore">
|
||||
<ref bean="backupContentStore" />
|
||||
</property>
|
||||
<bean id="networkContentStore" class="org.alfresco.repo.content.filestore.FileContentStore">
|
||||
<constructor-arg>
|
||||
<value>/share/alfresco/content-store</value>
|
||||
</constructor-arg>
|
||||
</bean>
|
||||
|
||||
<bean id="contentStoreBackupTrigger" class="org.alfresco.util.CronTriggerBean">
|
||||
<property name="jobDetail">
|
||||
<bean class="org.springframework.scheduling.quartz.JobDetailBean">
|
||||
<property name="jobClass">
|
||||
<value>org.alfresco.repo.content.replication.ContentStoreReplicator$ContentStoreReplicatorJob</value>
|
||||
</property>
|
||||
<property name="jobDataAsMap">
|
||||
<map>
|
||||
<entry key="contentStoreReplicator">
|
||||
<ref bean="contentStoreReplicator" />
|
||||
</entry>
|
||||
</map>
|
||||
</property>
|
||||
</bean>
|
||||
</property>
|
||||
<property name="scheduler">
|
||||
<ref bean="schedulerFactory" />
|
||||
</property>
|
||||
<!-- trigger at 3am each day -->
|
||||
<property name="cronExpression">
|
||||
<value>0 0 03 * * ?</value>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="replicatingContentStore"
|
||||
class="org.alfresco.repo.content.replication.ReplicatingContentStore" >
|
||||
<!-- the preferred store for reads and writes -->
|
||||
<bean id="fileContentStore" class="org.alfresco.repo.content.replication.ReplicatingContentStore" >
|
||||
<property name="primaryStore">
|
||||
<ref bean="fileContentStore" />
|
||||
<ref bean="localDriveContentStore" />
|
||||
</property>
|
||||
<!-- example of possible secondary store configuration -->
|
||||
<property name="secondaryStores">
|
||||
<list>
|
||||
<ref bean="archiveStoreA" />
|
||||
<ref bean="archiveStoreB" />
|
||||
<ref bean="networkContentStore" />
|
||||
</list>
|
||||
</property>
|
||||
<!-- enable content missing from the primary store to be pulled in from the secondary stores -->
|
||||
<property name="inbound">
|
||||
<value>false</value>
|
||||
<value>true</value>
|
||||
</property>
|
||||
<!-- enable replication from the primary to the secondary stores -->
|
||||
<property name="outbound">
|
||||
<value>false</value>
|
||||
<value>true</value>
|
||||
</property>
|
||||
<!-- this is required if outbound replication is active, otherwise not -->
|
||||
<property name="retryingTransactionHelper">
|
||||
<ref bean="retryingTransactionHelper"/>
|
||||
</property>
|
||||
<!-- set this to force outbound replication to be asynchronous -->
|
||||
<property name="outboundThreadPoolExecutor">
|
||||
<ref bean="threadPoolExecutor" />
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
</beans>
|
||||
|
@@ -349,10 +349,10 @@
|
||||
org.alfresco.service.cmr.repository.NodeService.setProperties=ACL_NODE.0.sys:base.WriteProperties
|
||||
org.alfresco.service.cmr.repository.NodeService.setProperty=ACL_NODE.0.sys:base.WriteProperties
|
||||
org.alfresco.service.cmr.repository.NodeService.removeProperty=ACL_NODE.0.sys:base.WriteProperties
|
||||
org.alfresco.service.cmr.repository.NodeService.getParentAssocs=ACL_NODE.0.sys:base.ReadProperties,AFTER_ACL_PARENT.sys:base.ReadProperties
|
||||
org.alfresco.service.cmr.repository.NodeService.getParentAssocs=ACL_NODE.0.sys:base.ReadProperties
|
||||
org.alfresco.service.cmr.repository.NodeService.getChildAssocs=ACL_NODE.0.sys:base.ReadChildren,AFTER_ACL_NODE.sys:base.ReadProperties
|
||||
org.alfresco.service.cmr.repository.NodeService.getChildByName=ACL_NODE.0.sys:base.ReadChildren,AFTER_ACL_NODE.sys:base.ReadProperties
|
||||
org.alfresco.service.cmr.repository.NodeService.getPrimaryParent=ACL_NODE.0.sys:base.ReadProperties,AFTER_ACL_PARENT.sys:base.ReadProperties
|
||||
org.alfresco.service.cmr.repository.NodeService.getPrimaryParent=ACL_NODE.0.sys:base.ReadProperties
|
||||
org.alfresco.service.cmr.repository.NodeService.createAssociation=ROLE_AUTHENTICATED
|
||||
org.alfresco.service.cmr.repository.NodeService.removeAssociation=ROLE_AUTHENTICATED
|
||||
org.alfresco.service.cmr.repository.NodeService.getTargetAssocs=ROLE_AUTHENTICATED
|
||||
|
@@ -2339,6 +2339,10 @@ public class FTPSrvSession extends SrvSession implements Runnable
|
||||
// Overwrite the existing file
|
||||
|
||||
netFile = disk.openFile(this, tree, params);
|
||||
|
||||
// Truncate the existing file
|
||||
|
||||
netFile.truncateFile( 0L);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -704,7 +704,8 @@ public class ScriptNode implements Serializable, Scopeable
|
||||
{
|
||||
if (displayPath == null)
|
||||
{
|
||||
displayPath = this.nodeService.getPath(this.nodeRef).toDisplayPath(this.nodeService);
|
||||
displayPath = this.nodeService.getPath(this.nodeRef).toDisplayPath(
|
||||
this.nodeService, this.services.getPermissionService());
|
||||
}
|
||||
|
||||
return displayPath;
|
||||
|
@@ -833,6 +833,9 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl
|
||||
// Invoke policy behaviours
|
||||
invokeOnCreateChildAssociation(assocRef, false);
|
||||
|
||||
// update the node status
|
||||
nodeDaoService.recordChangeId(childNodeRef);
|
||||
|
||||
return assoc.getChildAssocRef();
|
||||
}
|
||||
|
||||
@@ -872,6 +875,12 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl
|
||||
{
|
||||
deleteNode(primaryAssocRef.getChildRef());
|
||||
}
|
||||
else
|
||||
{
|
||||
// The cascade delete will update the node status, but just a plain assoc deletion will not
|
||||
// Update the node status
|
||||
nodeDaoService.recordChangeId(childRef);
|
||||
}
|
||||
|
||||
// done
|
||||
}
|
||||
@@ -888,6 +897,8 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl
|
||||
if (deleted)
|
||||
{
|
||||
invokeOnDeleteChildAssociation(childAssocRef);
|
||||
// Update the node status
|
||||
nodeDaoService.recordChangeId(childNode.getNodeRef());
|
||||
}
|
||||
// Done
|
||||
return deleted;
|
||||
@@ -914,6 +925,8 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl
|
||||
// Delete the secondary association
|
||||
nodeDaoService.deleteChildAssoc(assoc, false);
|
||||
invokeOnDeleteChildAssociation(childAssocRef);
|
||||
// Update the node status
|
||||
nodeDaoService.recordChangeId(childNode.getNodeRef());
|
||||
// Done
|
||||
return true;
|
||||
}
|
||||
|
@@ -1069,7 +1069,7 @@ public class HibernateNodeDaoServiceImpl extends HibernateDaoSupport implements
|
||||
if (parentAssoc == null)
|
||||
{
|
||||
// The cache is out of date, so just repopulate it
|
||||
parentAssoc = null;
|
||||
parentAssocs = null;
|
||||
break;
|
||||
}
|
||||
else
|
||||
|
@@ -100,6 +100,11 @@ public class IndexRemoteTransactionTracker extends AbstractReindexComponent
|
||||
long txnId = txn.getId();
|
||||
reindexTransaction(txnId);
|
||||
currentTxnId = txnId;
|
||||
// break out if the VM is shutting down
|
||||
if (isShuttingDown())
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -35,7 +35,6 @@ import java.util.Set;
|
||||
import org.alfresco.model.ApplicationModel;
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.alfresco.repo.security.permissions.AccessDeniedException;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
@@ -259,14 +258,8 @@ public abstract class BaseContentNode implements TemplateContent
|
||||
{
|
||||
if (displayPath == null)
|
||||
{
|
||||
try
|
||||
{
|
||||
displayPath = this.services.getNodeService().getPath(getNodeRef()).toDisplayPath(this.services.getNodeService());
|
||||
}
|
||||
catch (AccessDeniedException err)
|
||||
{
|
||||
displayPath = "";
|
||||
}
|
||||
displayPath = this.services.getNodeService().getPath(getNodeRef()).toDisplayPath(
|
||||
services.getNodeService(), services.getPermissionService());
|
||||
}
|
||||
|
||||
return displayPath;
|
||||
|
@@ -30,6 +30,8 @@ import java.util.LinkedList;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.security.permissions.AccessDeniedException;
|
||||
import org.alfresco.service.cmr.security.AccessStatus;
|
||||
import org.alfresco.service.cmr.security.PermissionService;
|
||||
import org.alfresco.service.namespace.NamespacePrefixResolver;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.util.ISO9075;
|
||||
@@ -193,7 +195,7 @@ public final class Path implements Iterable<Path.Element>, Serializable
|
||||
*
|
||||
* @return human readable form of the Path excluding the final element
|
||||
*/
|
||||
public String toDisplayPath(NodeService nodeService)
|
||||
public String toDisplayPath(NodeService nodeService, PermissionService permissionService)
|
||||
{
|
||||
StringBuilder buf = new StringBuilder(64);
|
||||
|
||||
@@ -207,22 +209,16 @@ public final class Path implements Iterable<Path.Element>, Serializable
|
||||
if (elementRef.getParentRef() != null)
|
||||
{
|
||||
Serializable nameProp = null;
|
||||
try
|
||||
if (permissionService.hasPermission(
|
||||
elementRef.getChildRef(), PermissionService.READ) == AccessStatus.ALLOWED)
|
||||
{
|
||||
nameProp = nodeService.getProperty(elementRef.getChildRef(), ContentModel.PROP_NAME);
|
||||
}
|
||||
catch (AccessDeniedException err)
|
||||
{
|
||||
// unable to access this property on the path - so we cannot display it's name
|
||||
}
|
||||
if (nameProp != null)
|
||||
{
|
||||
// use the name property if we find it
|
||||
// use the name property if we are allowed access to it
|
||||
elementString = nameProp.toString();
|
||||
}
|
||||
else
|
||||
{
|
||||
// revert to using QName if not found
|
||||
// revert to using QName if not
|
||||
elementString = elementRef.getQName().getLocalName();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user